[HL25] Backport "_sv_override_scientist_mdl" CVAR functionality

This commit is contained in:
Joël Troch 2024-08-28 09:09:16 +02:00
parent c50041a728
commit c3b58b1bb4

View file

@ -105,6 +105,8 @@ public:
void TalkInit();
char* GetScientistModel() const;
void Killed(entvars_t* pevAttacker, int iGib) override;
bool Save(CSave& save) override;
@ -130,6 +132,17 @@ TYPEDESCRIPTION CScientist::m_SaveData[] =
IMPLEMENT_SAVERESTORE(CScientist, CTalkMonster);
char* CScientist::GetScientistModel() const
{
char* pszOverride = (char*)CVAR_GET_STRING("_sv_override_scientist_mdl");
if (pszOverride && strlen(pszOverride) > 5) // at least requires ".mdl"
{
return pszOverride;
}
return "models/scientist.mdl";
}
//=========================================================
// AI Schedules Specific to this monster
//=========================================================
@ -652,7 +665,7 @@ void CScientist::Spawn()
Precache();
SET_MODEL(ENT(pev), "models/scientist.mdl");
SET_MODEL(ENT(pev), GetScientistModel());
UTIL_SetSize(pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX);
pev->solid = SOLID_SLIDEBOX;
@ -683,7 +696,7 @@ void CScientist::Spawn()
//=========================================================
void CScientist::Precache()
{
PRECACHE_MODEL("models/scientist.mdl");
PRECACHE_MODEL(GetScientistModel());
PRECACHE_SOUND("scientist/sci_pain1.wav");
PRECACHE_SOUND("scientist/sci_pain2.wav");
PRECACHE_SOUND("scientist/sci_pain3.wav");
@ -1146,12 +1159,26 @@ public:
void Spawn() override;
int Classify() override { return CLASS_HUMAN_PASSIVE; }
// passed into Precache which is non-const
char* GetScientistModel() const;
bool KeyValue(KeyValueData* pkvd) override;
int m_iPose; // which sequence to display
static const char* m_szPoses[7];
};
const char* CDeadScientist::m_szPoses[] = {"lying_on_back", "lying_on_stomach", "dead_sitting", "dead_hang", "dead_table1", "dead_table2", "dead_table3"};
char* CDeadScientist::GetScientistModel() const
{
char* pszOverride = (char*)CVAR_GET_STRING("_sv_override_scientist_mdl");
if (pszOverride && strlen(pszOverride) > 5) // at least requires ".mdl"
{
return pszOverride;
}
return "models/scientist.mdl";
}
bool CDeadScientist::KeyValue(KeyValueData* pkvd)
{
if (FStrEq(pkvd->szKeyName, "pose"))
@ -1169,8 +1196,8 @@ LINK_ENTITY_TO_CLASS(monster_scientist_dead, CDeadScientist);
//
void CDeadScientist::Spawn()
{
PRECACHE_MODEL("models/scientist.mdl");
SET_MODEL(ENT(pev), "models/scientist.mdl");
PRECACHE_MODEL(GetScientistModel());
SET_MODEL(ENT(pev), GetScientistModel());
pev->effects = 0;
pev->sequence = 0;
@ -1251,8 +1278,8 @@ typedef enum
//
void CSittingScientist::Spawn()
{
PRECACHE_MODEL("models/scientist.mdl");
SET_MODEL(ENT(pev), "models/scientist.mdl");
PRECACHE_MODEL(GetScientistModel());
SET_MODEL(ENT(pev), GetScientistModel());
Precache();
InitBoneControllers();