Merge branch 'master' into newrenderer2

# Conflicts:
#	source/build/src/defs.cpp
This commit is contained in:
Christoph Oelckers 2021-04-09 19:57:56 +02:00
commit 333581a084
11 changed files with 142 additions and 42 deletions

View file

@ -628,7 +628,7 @@ int32_t md_definehud (int32_t modelid, int32_t tilex, vec3f_t add,
int32_t md_undefinetile(int32_t tile); int32_t md_undefinetile(int32_t tile);
int32_t md_undefinemodel(int32_t modelid); int32_t md_undefinemodel(int32_t modelid);
int32_t loaddefinitionsfile(const char *fn, bool loadadds = false); int32_t loaddefinitionsfile(const char *fn, bool loadadds = false, bool cumulative = false);
#ifdef USE_OPENGL #ifdef USE_OPENGL
# include "polymost.h" # include "polymost.h"

View file

@ -113,12 +113,6 @@ inline void scriptfile_close(scriptfile *sf)
delete sf; delete sf;
} }
inline int32_t scriptfile_addsymbolvalue(scriptfile *sf, char const *name, int32_t val)
{
sf->AddSymbol(name, val);
return 1;
}
typedef struct typedef struct
{ {
const char *text; const char *text;

View file

@ -2917,7 +2917,7 @@ static int32_t defsparser(scriptfile *script)
break; break;
FStringf name("%s.%s", resName.GetChars(), resType.GetChars()); FStringf name("%s.%s", resName.GetChars(), resType.GetChars());
fileSystem.CreatePathlessCopy(resName, resID, 0); fileSystem.CreatePathlessCopy(name, resID, 0);
} }
break; break;
@ -2930,34 +2930,44 @@ static int32_t defsparser(scriptfile *script)
return 0; return 0;
} }
int32_t loaddefinitionsfile(const char *fn, bool loadadds, bool cumulative)
int32_t loaddefinitionsfile(const char *fn, bool loadadds)
{ {
scriptfile *script; bool done = false;
auto parseit = [&](int lump)
script = scriptfile_fromfile(fn);
if (script)
{ {
Printf(PRINT_NONOTIFY, "Loading \"%s\"\n",fn); FScanner sc;
sc.OpenLumpNum(lump);
sc.SetNoOctals(true);
sc.SetNoFatalErrors(true);
defsparser(&sc);
done = true;
Printf(PRINT_NONOTIFY, "\n");
};
defsparser(script); if (!cumulative)
{
int lump = fileSystem.FindFile(fn);
if (lump >= 0)
{
Printf(PRINT_NONOTIFY, "Loading \"%s\"\n", fn);
parseit(lump);
}
}
else
{
int lump, lastlump = 0;
while ((lump = fileSystem.FindLumpFullName(fn, &lastlump)) >= 0)
{
Printf(PRINT_NONOTIFY, "Loading \"%s\"\n", fileSystem.GetFileFullPath(lump).GetChars());
parseit(lump);
}
} }
if (userConfig.AddDefs && loadadds) for (auto& m : *userConfig.AddDefs) if (userConfig.AddDefs && loadadds) for (auto& m : *userConfig.AddDefs)
{ {
Printf("Loading module \"%s\"\n",m.GetChars()); Printf("Loading module \"%s\"\n",m.GetChars());
defsparser_include(m, NULL, NULL); // Q: should we let the external script see our symbol table? defsparser_include(m, nullptr, nullptr); // Q: should we let the external script see our symbol table?
Printf(PRINT_NONOTIFY, "\n");
} }
if (script)
scriptfile_close(script);
if (!script) return -1;
Printf(PRINT_NONOTIFY, "\n");
return 0; return 0;
} }
// vim:ts=4:

View file

@ -76,14 +76,14 @@ struct FileSystem::LumpRecord
shortName.String[8] = 0; shortName.String[8] = 0;
longName = ""; longName = "";
Namespace = lump->GetNamespace(); Namespace = lump->GetNamespace();
resourceId = 0; resourceId = -1;
} }
else if ((lump->Flags & LUMPF_EMBEDDED) || !lump->getName() || !*lump->getName()) else if ((lump->Flags & LUMPF_EMBEDDED) || !lump->getName() || !*lump->getName())
{ {
shortName.qword = 0; shortName.qword = 0;
longName = ""; longName = "";
Namespace = ns_hidden; Namespace = ns_hidden;
resourceId = 0; resourceId = -1;
} }
else else
{ {

View file

@ -361,7 +361,7 @@ void UserConfig::ProcessOptions()
static const char* defs[] = { "-def", "-h", nullptr }; static const char* defs[] = { "-def", "-h", nullptr };
Args->CollectFiles("-def", defs, ".def"); Args->CollectFiles("-def", defs, ".def");
DefaultDef = Args->CheckValue("-def"); UserDef = Args->CheckValue("-def");
if (DefaultCon.IsEmpty()) if (DefaultCon.IsEmpty())
{ {
@ -1323,27 +1323,50 @@ void DrawCrosshair(int deftile, int health, double xdelta, double ydelta, double
void LoadDefinitions() void LoadDefinitions()
{ {
loaddefinitionsfile("engine/engine.def"); // Internal stuff that is required.
const char* defsfile = G_DefFile();
cycle_t deftimer; cycle_t deftimer;
deftimer.Reset(); deftimer.Reset();
deftimer.Clock(); deftimer.Clock();
if (!loaddefinitionsfile(defsfile, true)) const char* loaded = nullptr;
const char* defsfile = G_DefFile();
FString razedefsfile = defsfile;
razedefsfile.Substitute(".def", "-raze.def");
loaddefinitionsfile("engine/engine.def", false); // Internal stuff that is required.
// check what we have.
// user .defs override the default ones and are not cumulative.
// if we fine even one Raze-specific file, all of those will be loaded cumulatively.
// otherwise the default rules inherited from older ports apply.
if (userConfig.UserDef.IsNotEmpty())
{
if (!loaddefinitionsfile(userConfig.UserDef, true, false)) loaded = userConfig.UserDef;
}
else
{
if (fileSystem.FileExists(razedefsfile))
{
if (!loaddefinitionsfile(razedefsfile, true, true)) loaded = razedefsfile;
}
else
{
if (!loaddefinitionsfile(defsfile, true, false)) loaded = defsfile;
}
}
if (loaded)
{ {
deftimer.Unclock(); deftimer.Unclock();
Printf(PRINT_NONOTIFY, "Definitions file \"%s\" loaded in %.3f ms.\n", defsfile, deftimer.TimeMS()); DPrintf(DMSG_SPAMMY, "Definitions file \"%s\" loaded, %f ms.\n", loaded, deftimer.TimeMS());
} }
userConfig.AddDefs.reset(); userConfig.AddDefs.reset();
// load the widescreen replacements last so that they do not clobber the CRC for the original items so that mod-side replacement are picked up. // load the widescreen replacements last. This ensures that mods still get the correct CRCs for their own tile replacements.
if (fileSystem.FindFile("engine/widescreen.def") >= 0 && !Args->CheckParm("-nowidescreen")) if (fileSystem.FindFile("engine/widescreen.def") >= 0 && !Args->CheckParm("-nowidescreen"))
{ {
loaddefinitionsfile("engine/widescreen.def"); loaddefinitionsfile("engine/widescreen.def");
} }
fileSystem.InitHashChains(); // make sure that any resources that got added can be found again.
} }
bool M_Active() bool M_Active()

View file

@ -65,6 +65,7 @@ struct UserConfig
{ {
FString gamegrp; FString gamegrp;
FString CommandMap; FString CommandMap;
FString UserDef;
FString DefaultDef; FString DefaultDef;
FString DefaultCon; FString DefaultCon;
FString CommandDemo; FString CommandDemo;

View file

@ -51,6 +51,20 @@ void parseSkip(FScanner& sc, FScriptPosition& pos)
for (int i = 0; i < cnt; i++) if (!sc.GetNumber(true)) return; for (int i = 0; i < cnt; i++) if (!sc.GetNumber(true)) return;
} }
void parseDefine(FScanner& sc, FScriptPosition& pos)
{
FString name;
if (!sc.GetString(name)) return;
if (!sc.GetNumber()) return;
sc.AddSymbol(name, sc.Number);
}
//===========================================================================
//
//
//
//===========================================================================
void parseDefineTexture(FScanner& sc, FScriptPosition& pos) void parseDefineTexture(FScanner& sc, FScriptPosition& pos)
{ {
int tile, palette; int tile, palette;
@ -178,3 +192,54 @@ void parseAnimTileRange(FScanner& sc, FScriptPosition& pos)
processSetAnim("animtilerange", pos, set); processSetAnim("animtilerange", pos, set);
} }
//===========================================================================
//
//
//
//===========================================================================
void parseAlphahack(FScanner& sc, FScriptPosition& pos)
{
int tile;
if (!sc.GetNumber(tile, true)) return;
if (!sc.GetFloat(true)) return;
if ((unsigned)tile < MAXTILES) TileFiles.tiledata[tile].texture->alphaThreshold = (float)sc.Float;
}
//===========================================================================
//
//
//
//===========================================================================
void parseAlphahackRange(FScanner& sc, FScriptPosition& pos)
{
int tilestart, tileend;
if (!sc.GetNumber(tilestart, true)) return;
if (!sc.GetNumber(tileend, true)) return;
if (!sc.GetFloat(true)) return;
if (!ValidateTileRange("alphahackrange", tilestart, tileend, pos)) return;
for (int i = tilestart; i <= tileend; i++)
TileFiles.tiledata[i].texture->alphaThreshold = (float)sc.Number;
}
//===========================================================================
//
//
//
//===========================================================================
void parseDefineTint(FScanner& sc, FScriptPosition& pos)
{
int pal, r, g, b, f;
if (!sc.GetNumber(pal, true)) return;
if (!sc.GetNumber(r)) return;
if (!sc.GetNumber(g)) return;
if (!sc.GetNumber(b)) return;
if (!sc.GetNumber(f)) return;
lookups.setPaletteTint(pal, r, g, b, 0, 0, 0, f);
}

View file

@ -656,7 +656,7 @@ void ParseScript(int lumpnum)
if (dword_44CE0[gParseLevel] == 0) if (dword_44CE0[gParseLevel] == 0)
{ {
// In the RFS files I have seen the outermost directory is not part of what goes into the file system. // In the RFS files I have seen the outermost directory is not part of what goes into the file system.
auto inp1 = strchr(inp, '\\'); auto inp1 = strpbrk(inp, "/\\");
if (!inp1 || !fileSystem.CreatePathlessCopy(inp1 + 1, ID, nFlags)) if (!inp1 || !fileSystem.CreatePathlessCopy(inp1 + 1, ID, nFlags))
{ {
// I'll activate this when I find evidence that it is needed. Otherwise the risk of picking up unwanted data is too high. // I'll activate this when I find evidence that it is needed. Otherwise the risk of picking up unwanted data is too high.

View file

@ -1 +0,0 @@
tilefromtexture 3463 { file "tiles/options.png" }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1490,6 +1490,14 @@ OptionValue GPUSwitch
2.0, "$OPTVAL_INTEGRATED" 2.0, "$OPTVAL_INTEGRATED"
} }
OptionValue PreferBackend
{
0, "$OPTVAL_OPENGL"
1, "$OPTVAL_VULKAN"
// Enable when HAVE_SOFTPOLY will be defined
//2, "$OPTVAL_SOFTPOLY"
}
OptionMenu VideoModeMenu protected OptionMenu VideoModeMenu protected
{ {
Title "$VIDMNU_TITLE" Title "$VIDMNU_TITLE"