mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-06 03:54:14 +00:00
Another try to make shockroach dropping closer to original behavior
This commit is contained in:
parent
4a8d1c8d51
commit
37ef63e6d1
@ -76,10 +76,12 @@ void CShockRoach::Spawn()
|
||||
Precache();
|
||||
|
||||
SET_MODEL(ENT(pev), "models/w_shock_rifle.mdl");
|
||||
UTIL_SetOrigin(pev, pev->origin);
|
||||
|
||||
pev->solid = SOLID_SLIDEBOX;
|
||||
pev->movetype = MOVETYPE_STEP;
|
||||
pev->movetype = MOVETYPE_FLY;
|
||||
m_bloodColor = BLOOD_COLOR_GREEN;
|
||||
|
||||
pev->effects = 0;
|
||||
pev->health = gSkillData.sroachHealth;
|
||||
pev->view_ofs = Vector(0, 0, 20);// position of the eyes relative to monster's origin.
|
||||
@ -148,22 +150,25 @@ void CShockRoach::LeapTouch(CBaseEntity *pOther)
|
||||
//=========================================================
|
||||
// PrescheduleThink
|
||||
//=========================================================
|
||||
void CShockRoach::PrescheduleThink(void)
|
||||
void CShockRoach::MonsterThink(void)
|
||||
{
|
||||
// explode when ready
|
||||
if (!m_fRoachSolid && m_flBirthTime + 0.2 >= gpGlobals->time) {
|
||||
m_fRoachSolid = TRUE;
|
||||
UTIL_SetSize(pev, Vector(-12, -12, 0), Vector(12, 12, 24));
|
||||
float lifeTime = (gpGlobals->time - m_flBirthTime);
|
||||
if (lifeTime >= 0.2)
|
||||
{
|
||||
pev->movetype = MOVETYPE_STEP;
|
||||
}
|
||||
// explode when ready
|
||||
if (gpGlobals->time >= m_flBirthTime + gSkillData.sroachLifespan)
|
||||
if (!m_fRoachSolid && lifeTime >= 2.0 ) {
|
||||
m_fRoachSolid = TRUE;
|
||||
UTIL_SetSize(pev, Vector(-12, -12, 0), Vector(12, 12, 4));
|
||||
}
|
||||
if (lifeTime >= gSkillData.sroachLifespan)
|
||||
{
|
||||
pev->health = -1;
|
||||
Killed(pev, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
CHeadCrab::PrescheduleThink();
|
||||
CHeadCrab::MonsterThink();
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
@ -218,6 +223,8 @@ void CShockRoach::StartTask(Task_t *pTask)
|
||||
|
||||
int CShockRoach::TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType )
|
||||
{
|
||||
if ( gpGlobals->time - m_flBirthTime < 2.0 )
|
||||
flDamage = 0.0;
|
||||
// Skip headcrab's TakeDamage to avoid unwanted immunity to acid.
|
||||
return CBaseMonster::TakeDamage( pevInflictor, pevAttacker, flDamage, bitsDamageType );
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
void DeathSound(void);
|
||||
void IdleSound(void);
|
||||
void AlertSound(void);
|
||||
void PrescheduleThink(void);
|
||||
void MonsterThink(void);
|
||||
void StartTask(Task_t* pTask);
|
||||
int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType );
|
||||
|
||||
|
@ -134,7 +134,7 @@ public:
|
||||
void TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||||
virtual int SizeForGrapple() { return GRAPPLE_LARGE; }
|
||||
|
||||
void DropShockRoach();
|
||||
void DropShockRoach(bool gibbed);
|
||||
|
||||
int Save(CSave &save);
|
||||
int Restore(CRestore &restore);
|
||||
@ -212,7 +212,7 @@ void CStrooper::GibMonster(void)
|
||||
{
|
||||
if (GetBodygroup(GUN_GROUP) != GUN_NONE)
|
||||
{
|
||||
DropShockRoach();
|
||||
DropShockRoach(true);
|
||||
}
|
||||
|
||||
EMIT_SOUND( ENT( pev ), CHAN_WEAPON, "common/bodysplat.wav", 1, ATTN_NORM );
|
||||
@ -299,7 +299,7 @@ void CStrooper::HandleAnimEvent(MonsterEvent_t *pEvent)
|
||||
{
|
||||
if (GetBodygroup(GUN_GROUP) != GUN_NONE)
|
||||
{
|
||||
DropShockRoach();
|
||||
DropShockRoach(false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -586,7 +586,7 @@ void CStrooper::TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDi
|
||||
CSquadMonster::TraceAttack(pevAttacker, flDamage, vecDir, ptr, bitsDamageType);
|
||||
}
|
||||
|
||||
void CStrooper::DropShockRoach()
|
||||
void CStrooper::DropShockRoach(bool gibbed)
|
||||
{
|
||||
Vector vecGunPos;
|
||||
Vector vecGunAngles;
|
||||
@ -594,19 +594,37 @@ void CStrooper::DropShockRoach()
|
||||
GetAttachment(0, vecGunPos, vecGunAngles);
|
||||
SetBodygroup(GUN_GROUP, GUN_NONE);
|
||||
|
||||
Vector vecDropAngles = vecGunAngles;
|
||||
Vector vecDropAngles;
|
||||
|
||||
// Remove any pitch.
|
||||
vecDropAngles.x = 0;
|
||||
vecDropAngles.y = vecGunAngles.y;
|
||||
vecDropAngles.z = 0;
|
||||
|
||||
Vector vecPos = pev->origin;
|
||||
vecPos.z += 32;
|
||||
if (gibbed)
|
||||
vecPos.z += 32;
|
||||
else
|
||||
vecPos.z += 48;
|
||||
|
||||
// now spawn a shockroach.
|
||||
CBaseEntity* roach = CBaseEntity::Create( "monster_shockroach", vecPos, vecDropAngles );
|
||||
if (ShouldFadeOnDeath())
|
||||
roach->pev->spawnflags |= SF_MONSTER_FADECORPSE;
|
||||
if (roach)
|
||||
{
|
||||
if (ShouldFadeOnDeath())
|
||||
roach->pev->spawnflags |= SF_MONSTER_FADECORPSE;
|
||||
if (gibbed)
|
||||
{
|
||||
roach->pev->velocity = Vector(RANDOM_FLOAT(-100.0f, 100.0f), RANDOM_FLOAT(-100.0f, 100.0f), RANDOM_FLOAT(200.0f, 300.0f));
|
||||
roach->pev->avelocity = Vector(0, RANDOM_FLOAT(200.0f, 300.0f), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
roach->pev->velocity = Vector(RANDOM_FLOAT(-20.0f, 20.0f) , RANDOM_FLOAT(-20.0f, 20.0f), RANDOM_FLOAT(20.0f, 30.0f));
|
||||
roach->pev->avelocity = Vector(0, RANDOM_FLOAT(20.0f, 40.0f), 0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user