Skip to content

Commit

Permalink
Upgrade Armored Man from base to squad monster
Browse files Browse the repository at this point in the history
  • Loading branch information
JoelTroch committed Jan 15, 2024
1 parent 4c20323 commit 2f146b9
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 12 deletions.
40 changes: 29 additions & 11 deletions dlls/armorman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

#include "monsters.h"
#include "soundent.h"
#include "squadmonster.h"
#include "weapons.h"

#include "armorman.h"
Expand Down Expand Up @@ -80,7 +81,7 @@ DEFINE_CUSTOM_SCHEDULES(CArmorMan) {
slArmorManReload,
slArmorManShield,
};
IMPLEMENT_CUSTOM_SCHEDULES(CArmorMan, CBaseMonster);
IMPLEMENT_CUSTOM_SCHEDULES(CArmorMan, CSquadMonster);

TYPEDESCRIPTION CArmorMan::m_SaveData[] =
{
Expand All @@ -89,7 +90,7 @@ TYPEDESCRIPTION CArmorMan::m_SaveData[] =

DEFINE_FIELD(CArmorMan, m_flNextShieldTime, FIELD_TIME),
};
IMPLEMENT_SAVERESTORE(CArmorMan, CBaseMonster);
IMPLEMENT_SAVERESTORE(CArmorMan, CSquadMonster);

LINK_ENTITY_TO_CLASS(monster_armorman, CArmorMan);

Expand Down Expand Up @@ -138,7 +139,7 @@ void CArmorMan::Spawn()
pev->view_ofs = Vector(0.0f, -10.0f, 110.0f);
m_flFieldOfView = VIEW_FIELD_WIDE;
m_MonsterState = MONSTERSTATE_NONE;
m_afCapability = bits_CAP_HEAR | bits_CAP_DOORS_GROUP | bits_CAP_TURN_HEAD | bits_CAP_RANGE_ATTACK1;
m_afCapability = bits_CAP_SQUAD | bits_CAP_HEAR | bits_CAP_DOORS_GROUP | bits_CAP_TURN_HEAD | bits_CAP_RANGE_ATTACK1;

m_cAmmoLoaded = 2;

Expand Down Expand Up @@ -238,7 +239,7 @@ void CArmorMan::HandleAnimEvent(MonsterEvent_t* pEvent)
ClearConditions(bits_COND_NO_AMMO_LOADED);
break;
default:
CBaseMonster::HandleAnimEvent(pEvent);
CSquadMonster::HandleAnimEvent(pEvent);
}
}

Expand All @@ -247,7 +248,7 @@ void CArmorMan::HandleAnimEvent(MonsterEvent_t* pEvent)
Schedule_t* CArmorMan::GetSchedule()
{
if (m_MonsterState != MONSTERSTATE_COMBAT)
return CBaseMonster::GetSchedule();
return CSquadMonster::GetSchedule();

if (HasConditions(bits_COND_NO_AMMO_LOADED))
return GetScheduleOfType(SCHED_RELOAD);
Expand All @@ -258,7 +259,7 @@ Schedule_t* CArmorMan::GetSchedule()
return GetScheduleOfType(SCHED_COWER);
}

return CBaseMonster::GetSchedule();
return CSquadMonster::GetSchedule();
}

Schedule_t* CArmorMan::GetScheduleOfType(int Type)
Expand All @@ -270,7 +271,7 @@ Schedule_t* CArmorMan::GetScheduleOfType(int Type)
case SCHED_COWER:
return slArmorManShield;
default:
return CBaseMonster::GetScheduleOfType(Type);
return CSquadMonster::GetScheduleOfType(Type);
}
}

Expand All @@ -282,7 +283,24 @@ void CArmorMan::RunTask(Task_t* pTask)
return;
}

CBaseMonster::RunTask(pTask);
CSquadMonster::RunTask(pTask);
}

void CArmorMan::PrescheduleThink()
{
if (!InSquad() || !m_hEnemy)
return;

if (HasConditions(bits_COND_SEE_ENEMY))
{
// update the squad's last enemy sighting time.
MySquadLeader()->m_flLastEnemySightTime = gpGlobals->time;
}
else
{
if (gpGlobals->time - MySquadLeader()->m_flLastEnemySightTime > 5.0f) // been a while since we've seen the enemy
MySquadLeader()->m_fEnemyEluded = true;
}
}


Expand All @@ -305,7 +323,7 @@ void CArmorMan::Killed(entvars_t* pevAttacker, int iGib)
DropItem("ammo_buckshot", vecGunPos, vecGunAng);
}

CBaseMonster::Killed(pevAttacker, iGib);
CSquadMonster::Killed(pevAttacker, iGib);
}

bool CArmorMan::TakeDamage(entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType)
Expand All @@ -314,7 +332,7 @@ bool CArmorMan::TakeDamage(entvars_t* pevInflictor, entvars_t* pevAttacker, floa
if (IsAlive())
PainSound();

return CBaseMonster::TakeDamage(pevInflictor, pevAttacker, flDamage, bitsDamageType);
return CSquadMonster::TakeDamage(pevInflictor, pevAttacker, flDamage, bitsDamageType);
}

void CArmorMan::TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType)
Expand All @@ -330,7 +348,7 @@ void CArmorMan::TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDi
ptr->iHitgroup = HITGROUP_LEFTARM;
}

CBaseMonster::TraceAttack(pevAttacker, flDamage, vecDir, ptr, bitsDamageType);
CSquadMonster::TraceAttack(pevAttacker, flDamage, vecDir, ptr, bitsDamageType);
}


Expand Down
3 changes: 2 additions & 1 deletion dlls/armorman.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ constexpr int ARMORMAN_AE_RELOAD = 5;

#define ARMORMAN_SHOTGUN_OFFSET Vector(0.0f, 0.0f, 55.0f)

class CArmorMan : public CBaseMonster
class CArmorMan : public CSquadMonster
{
public:
void Spawn() override;
Expand All @@ -58,6 +58,7 @@ class CArmorMan : public CBaseMonster
Schedule_t* GetSchedule() override;
Schedule_t* GetScheduleOfType(int Type) override;
void RunTask(Task_t* pTask) override;
void PrescheduleThink() override;

void Killed(entvars_t* pevAttacker, int iGib) override;
bool TakeDamage(entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType) override;
Expand Down

0 comments on commit 2f146b9

Please sign in to comment.