- do two-step init of CVARs to ensure that flag and mask vars always find their master CVar.

This commit is contained in:
Christoph Oelckers 2022-10-24 19:26:30 +02:00
parent da33b0f9c3
commit 2b805e196d
2 changed files with 24 additions and 11 deletions

View file

@ -102,16 +102,6 @@ void C_InitCVars(int which)
newcvar = new FStringCVar(cvInfo->name, cvInfo->defaultval.String, cvInfo->flags, reinterpret_cast<callbacktype>(cvInfo->callbackp), cvInfo->description);
break;
}
case CVAR_Flag:
{
newcvar = new FFlagCVar(cvInfo->name, *cvInfo->defaultval.Pointer->get(), cvInfo->flags, cvInfo->description);
break;
}
case CVAR_Mask:
{
newcvar = new FMaskCVar(cvInfo->name, *cvInfo->defaultval.Pointer->get(), cvInfo->flags, cvInfo->description);
break;
}
case CVAR_Color:
{
using callbacktype = void (*)(FColorCVar &);
@ -122,6 +112,28 @@ void C_InitCVars(int which)
}
*(void**)cvInfo->refAddr = newcvar;
});
AutoSegs::CVarDecl.ForEach([](FCVarDecl* cvInfo)
{
FBaseCVar* newcvar;
switch (cvInfo->type)
{
default:
return;
case CVAR_Flag:
{
newcvar = new FFlagCVar(cvInfo->name, *cvInfo->defaultval.Pointer->get(), cvInfo->flags, cvInfo->description);
break;
}
case CVAR_Mask:
{
newcvar = new FMaskCVar(cvInfo->name, *cvInfo->defaultval.Pointer->get(), cvInfo->flags, cvInfo->description);
break;
}
}
*(void**)cvInfo->refAddr = newcvar;
});
}
void C_UninitCVars()

View file

@ -66,7 +66,8 @@ FImageSource *AnmImage_TryCreate(FileReader & file, int lumpnum)
{
file.Seek(0, FileReader::SeekSet);
char check[4];
file.Read(check, 4);
auto num = file.Read(check, 4);
if (num < 4) return nullptr;
if (memcmp(check, "LPF ", 4)) return nullptr;
file.Seek(0, FileReader::SeekSet);
auto buffer = file.ReadPadded(1);