[Maps] Make sure techsets are clean when sorting materials
This commit is contained in:
parent
345c8e5a98
commit
df2dd13b1d
@ -7,7 +7,7 @@ namespace Assets
|
|||||||
void IFxEffectDef::load(Game::XAssetHeader* header, std::string name, Components::ZoneBuilder::Zone* builder)
|
void IFxEffectDef::load(Game::XAssetHeader* header, std::string name, Components::ZoneBuilder::Zone* builder)
|
||||||
{
|
{
|
||||||
if (!header->data) this->loadEfx(header, name, builder); // Check if we have an editor fx
|
if (!header->data) this->loadEfx(header, name, builder); // Check if we have an editor fx
|
||||||
//if (!header->data) this->loadNative(header, name, builder); // Check if there is a native one
|
if (!header->data) this->loadNative(header, name, builder); // Check if there is a native one
|
||||||
if (!header->data) this->loadBinary(header, name, builder); // Check if we need to import a new one into the game
|
if (!header->data) this->loadBinary(header, name, builder); // Check if we need to import a new one into the game
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -848,29 +848,9 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Maps::DatabaseReadyDelayed()
|
int Maps::DatabaseAndTechsetsReady()
|
||||||
{
|
|
||||||
static bool ready = false;
|
|
||||||
static Utils::Time::Interval interval;
|
|
||||||
|
|
||||||
if(Game::Sys_IsDatabaseReady())
|
|
||||||
{
|
{
|
||||||
if(!ready)
|
return (Game::Sys_IsDatabaseReady() && !*reinterpret_cast<bool*>(0x69F9AFD)); // Make sure techsets are not dirty
|
||||||
{
|
|
||||||
ready = true;
|
|
||||||
interval.update();
|
|
||||||
}
|
|
||||||
else if(interval.elapsed(2s))
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ready = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Maps::Maps()
|
Maps::Maps()
|
||||||
@ -956,8 +936,8 @@ namespace Components
|
|||||||
// Disable distortion on custom maps
|
// Disable distortion on custom maps
|
||||||
Utils::Hook(0x50AA47, Maps::SetDistortionStub, HOOK_CALL).install()->quick();
|
Utils::Hook(0x50AA47, Maps::SetDistortionStub, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
// Delay material sorting
|
// Only sort materials when techsets are clean
|
||||||
Utils::Hook(0x50AAE6, Maps::DatabaseReadyDelayed, HOOK_CALL).install()->quick();
|
Utils::Hook(0x50AAE6, Maps::DatabaseAndTechsetsReady, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
// Intercept map loading for usermap initialization
|
// Intercept map loading for usermap initialization
|
||||||
Utils::Hook(0x6245E3, Maps::SpawnServerStub, HOOK_CALL).install()->quick();
|
Utils::Hook(0x6245E3, Maps::SpawnServerStub, HOOK_CALL).install()->quick();
|
||||||
|
@ -123,7 +123,7 @@ namespace Components
|
|||||||
static Game::dvar_t* GetDistortionDvar();
|
static Game::dvar_t* GetDistortionDvar();
|
||||||
static void SetDistortionStub();
|
static void SetDistortionStub();
|
||||||
|
|
||||||
static int DatabaseReadyDelayed();
|
static int DatabaseAndTechsetsReady();
|
||||||
|
|
||||||
void reallocateEntryPool();
|
void reallocateEntryPool();
|
||||||
};
|
};
|
||||||
|
@ -126,6 +126,12 @@ namespace Components
|
|||||||
return _snprintf_s(buffer, size, size, "images/%s.iwi", image);
|
return _snprintf_s(buffer, size, size, "images/%s.iwi", image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Materials::MaterialComparePrint(Game::Material* m1, Game::Material* m2)
|
||||||
|
{
|
||||||
|
//__debugbreak();
|
||||||
|
return Utils::Hook::Call<int(Game::Material*, Game::Material*)>(0x5235B0)(m1, m2);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void Materials::DumpImageCfg(int, const char*, const char* material)
|
void Materials::DumpImageCfg(int, const char*, const char* material)
|
||||||
{
|
{
|
||||||
@ -142,12 +148,6 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int Materials::MaterialComparePrint(Game::Material* m1, Game::Material* m2)
|
|
||||||
{
|
|
||||||
//__debugbreak();
|
|
||||||
return Utils::Hook::Call<int(Game::Material*, Game::Material*)>(0x5235B0)(m1, m2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Materials::Materials()
|
Materials::Materials()
|
||||||
@ -169,6 +169,9 @@ namespace Components
|
|||||||
// Resolve preview images to loadscreens
|
// Resolve preview images to loadscreens
|
||||||
Utils::Hook(0x53AC19, Materials::FormatImagePath, HOOK_CALL).install()->quick();
|
Utils::Hook(0x53AC19, Materials::FormatImagePath, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
|
// Debug material comparison
|
||||||
|
Utils::Hook::Set<void*>(0x523894, Materials::MaterialComparePrint);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (Flags::HasFlag("dump"))
|
if (Flags::HasFlag("dump"))
|
||||||
{
|
{
|
||||||
@ -182,8 +185,6 @@ namespace Components
|
|||||||
Utils::Hook::Nop(0x51F5AC, 5);
|
Utils::Hook::Nop(0x51F5AC, 5);
|
||||||
Utils::Hook::Nop(0x51F4C4, 5);
|
Utils::Hook::Nop(0x51F4C4, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::Hook::Set<void*>(0x523894, Materials::MaterialComparePrint);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Renderer::OnFrame([] ()
|
// Renderer::OnFrame([] ()
|
||||||
|
@ -30,7 +30,8 @@ namespace Components
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
static void DumpImageCfg(int, const char*, const char* material);
|
static void DumpImageCfg(int, const char*, const char* material);
|
||||||
static void DumpImageCfgPath(int, const char*, const char* material);
|
static void DumpImageCfgPath(int, const char*, const char* material);
|
||||||
static int MaterialComparePrint(Game::Material* m1, Game::Material* m2);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int MaterialComparePrint(Game::Material* m1, Game::Material* m2);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -4049,7 +4049,6 @@ namespace Game
|
|||||||
unsigned int entityOffset;
|
unsigned int entityOffset;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 3765 */
|
|
||||||
struct VariableValue
|
struct VariableValue
|
||||||
{
|
{
|
||||||
VariableUnion u;
|
VariableUnion u;
|
||||||
@ -4058,7 +4057,7 @@ namespace Game
|
|||||||
|
|
||||||
struct ScriptContainer
|
struct ScriptContainer
|
||||||
{
|
{
|
||||||
Game::VariableValue* stack;
|
VariableValue* stack;
|
||||||
char unk1;
|
char unk1;
|
||||||
char unk2;
|
char unk2;
|
||||||
char unk3;
|
char unk3;
|
||||||
|
Loading…
Reference in New Issue
Block a user