mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-03-12 05:22:55 +00:00
Add monster_human_grunt_ally, monster_nari_grunt and monster_zombie_grunt implementations.
This commit is contained in:
parent
8ab8b10a40
commit
9a7fb0fcda
@ -129,10 +129,13 @@ set (SVDLL_SOURCES
|
||||
zombie.cpp
|
||||
rp/blkop_apache.cpp
|
||||
rp/blkop_osprey.cpp
|
||||
rp/fgrunt.cpp
|
||||
rp/gonome.cpp
|
||||
rp/massn.cpp
|
||||
rp/ngrunt.cpp
|
||||
rp/otis.cpp
|
||||
rp/pitdrone.cpp
|
||||
rp/zgrunt.cpp
|
||||
../pm_shared/pm_debug.c
|
||||
../pm_shared/pm_math.c
|
||||
../pm_shared/pm_shared.c
|
||||
|
129
dlls/hgrunt.cpp
129
dlls/hgrunt.cpp
@ -46,80 +46,6 @@ int g_fGruntQuestion; // true if an idle grunt asked a question. Cleared when
|
||||
|
||||
extern DLL_GLOBAL int g_iSkillLevel;
|
||||
|
||||
//=========================================================
|
||||
// monster-specific DEFINE's
|
||||
//=========================================================
|
||||
#define GRUNT_CLIP_SIZE 36 // how many bullets in a clip? - NOTE: 3 round burst sound, so keep as 3 * x!
|
||||
#define GRUNT_VOL 0.35 // volume of grunt sounds
|
||||
#define GRUNT_ATTN ATTN_NORM // attenutation of grunt sentences
|
||||
#define HGRUNT_LIMP_HEALTH 20
|
||||
#define HGRUNT_DMG_HEADSHOT ( DMG_BULLET | DMG_CLUB ) // damage types that can kill a grunt with a single headshot.
|
||||
#define HGRUNT_NUM_HEADS 2 // how many grunt heads are there?
|
||||
#define HGRUNT_MINIMUM_HEADSHOT_DAMAGE 15 // must do at least this much damage in one shot to head to score a headshot kill
|
||||
#define HGRUNT_SENTENCE_VOLUME (float)0.35 // volume of grunt sentences
|
||||
|
||||
#define HGRUNT_9MMAR ( 1 << 0)
|
||||
#define HGRUNT_HANDGRENADE ( 1 << 1)
|
||||
#define HGRUNT_GRENADELAUNCHER ( 1 << 2)
|
||||
#define HGRUNT_SHOTGUN ( 1 << 3)
|
||||
|
||||
#define HEAD_GROUP 1
|
||||
#define HEAD_GRUNT 0
|
||||
#define HEAD_COMMANDER 1
|
||||
#define HEAD_SHOTGUN 2
|
||||
#define HEAD_M203 3
|
||||
#define GUN_GROUP 2
|
||||
#define GUN_MP5 0
|
||||
#define GUN_SHOTGUN 1
|
||||
#define GUN_NONE 2
|
||||
|
||||
//=========================================================
|
||||
// Monster's Anim Events Go Here
|
||||
//=========================================================
|
||||
#define HGRUNT_AE_RELOAD ( 2 )
|
||||
#define HGRUNT_AE_KICK ( 3 )
|
||||
#define HGRUNT_AE_BURST1 ( 4 )
|
||||
#define HGRUNT_AE_BURST2 ( 5 )
|
||||
#define HGRUNT_AE_BURST3 ( 6 )
|
||||
#define HGRUNT_AE_GREN_TOSS ( 7 )
|
||||
#define HGRUNT_AE_GREN_LAUNCH ( 8 )
|
||||
#define HGRUNT_AE_GREN_DROP ( 9 )
|
||||
#define HGRUNT_AE_CAUGHT_ENEMY ( 10 ) // grunt established sight with an enemy (player only) that had previously eluded the squad.
|
||||
#define HGRUNT_AE_DROP_GUN ( 11 ) // grunt (probably dead) is dropping his mp5.
|
||||
|
||||
//=========================================================
|
||||
// monster-specific schedule types
|
||||
//=========================================================
|
||||
enum
|
||||
{
|
||||
SCHED_GRUNT_SUPPRESS = LAST_COMMON_SCHEDULE + 1,
|
||||
SCHED_GRUNT_ESTABLISH_LINE_OF_FIRE,// move to a location to set up an attack against the enemy. (usually when a friendly is in the way).
|
||||
SCHED_GRUNT_COVER_AND_RELOAD,
|
||||
SCHED_GRUNT_SWEEP,
|
||||
SCHED_GRUNT_FOUND_ENEMY,
|
||||
SCHED_GRUNT_REPEL,
|
||||
SCHED_GRUNT_REPEL_ATTACK,
|
||||
SCHED_GRUNT_REPEL_LAND,
|
||||
SCHED_GRUNT_WAIT_FACE_ENEMY,
|
||||
SCHED_GRUNT_TAKECOVER_FAILED,// special schedule type that forces analysis of conditions and picks the best possible schedule to recover from this type of failure.
|
||||
SCHED_GRUNT_ELOF_FAIL
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
// monster-specific tasks
|
||||
//=========================================================
|
||||
enum
|
||||
{
|
||||
TASK_GRUNT_FACE_TOSS_DIR = LAST_COMMON_TASK + 1,
|
||||
TASK_GRUNT_SPEAK_SENTENCE,
|
||||
TASK_GRUNT_CHECK_FIRE
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
// monster-specific conditions
|
||||
//=========================================================
|
||||
#define bits_COND_GRUNT_NOFIRE ( bits_COND_SPECIAL1 )
|
||||
|
||||
LINK_ENTITY_TO_CLASS( monster_human_grunt, CHGrunt )
|
||||
|
||||
TYPEDESCRIPTION CHGrunt::m_SaveData[] =
|
||||
@ -151,18 +77,6 @@ const char *CHGrunt::pGruntSentences[] =
|
||||
"HG_TAUNT", // say rude things
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HGRUNT_SENT_NONE = -1,
|
||||
HGRUNT_SENT_GREN = 0,
|
||||
HGRUNT_SENT_ALERT,
|
||||
HGRUNT_SENT_MONSTER,
|
||||
HGRUNT_SENT_COVER,
|
||||
HGRUNT_SENT_THROW,
|
||||
HGRUNT_SENT_CHARGE,
|
||||
HGRUNT_SENT_TAUNT
|
||||
} HGRUNT_SENTENCE_TYPES;
|
||||
|
||||
//=========================================================
|
||||
// Speak Sentence - say your cued up sentence.
|
||||
//
|
||||
@ -647,7 +561,7 @@ void CHGrunt::IdleSound( void )
|
||||
SENTENCEG_PlayRndSz( ENT( pev ), "HG_CLEAR", HGRUNT_SENTENCE_VOLUME, ATTN_NORM, 0, m_voicePitch );
|
||||
break;
|
||||
case 2:
|
||||
// question
|
||||
// question
|
||||
SENTENCEG_PlayRndSz( ENT( pev ), "HG_ANSWER", HGRUNT_SENTENCE_VOLUME, ATTN_NORM, 0, m_voicePitch );
|
||||
break;
|
||||
}
|
||||
@ -859,7 +773,6 @@ void CHGrunt::HandleAnimEvent( MonsterEvent_t *pEvent )
|
||||
else
|
||||
{
|
||||
Shotgun();
|
||||
|
||||
EMIT_SOUND( ENT( pev ), CHAN_WEAPON, "weapons/sbarrel1.wav", 1, ATTN_NORM );
|
||||
}
|
||||
|
||||
@ -907,6 +820,7 @@ void CHGrunt::Spawn()
|
||||
Precache();
|
||||
|
||||
SET_MODEL( ENT( pev ), "models/hgrunt.mdl" );
|
||||
|
||||
UTIL_SetSize( pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX );
|
||||
|
||||
pev->solid = SOLID_SLIDEBOX;
|
||||
@ -975,7 +889,7 @@ void CHGrunt::Precache()
|
||||
|
||||
PRECACHE_SOUND( "hgrunt/gr_mgun1.wav" );
|
||||
PRECACHE_SOUND( "hgrunt/gr_mgun2.wav" );
|
||||
|
||||
|
||||
PRECACHE_SOUND( "hgrunt/gr_die1.wav" );
|
||||
PRECACHE_SOUND( "hgrunt/gr_die2.wav" );
|
||||
PRECACHE_SOUND( "hgrunt/gr_die3.wav" );
|
||||
@ -986,12 +900,10 @@ void CHGrunt::Precache()
|
||||
PRECACHE_SOUND( "hgrunt/gr_pain4.wav" );
|
||||
PRECACHE_SOUND( "hgrunt/gr_pain5.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/sbarrel1.wav" );
|
||||
PRECACHE_SOUND( "hgrunt/gr_reload1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/glauncher.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/sbarrel1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "zombie/claw_miss2.wav" );// because we use the basemonster SWIPE animation event
|
||||
|
||||
// get voice pitch
|
||||
@ -1097,23 +1009,22 @@ void CHGrunt::PainSound( void )
|
||||
#endif
|
||||
switch( RANDOM_LONG( 0, 6 ) )
|
||||
{
|
||||
case 0:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain3.wav", 1, ATTN_NORM );
|
||||
case 0:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain3.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
case 1:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain4.wav", 1, ATTN_NORM );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain4.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
case 2:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain5.wav", 1, ATTN_NORM );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain5.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
case 3:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain1.wav", 1, ATTN_NORM );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain1.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
case 4:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain2.wav", 1, ATTN_NORM );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_pain2.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
}
|
||||
|
||||
m_flNextPainTime = gpGlobals->time + 1;
|
||||
}
|
||||
}
|
||||
@ -1126,13 +1037,13 @@ void CHGrunt::DeathSound( void )
|
||||
switch( RANDOM_LONG( 0, 2 ) )
|
||||
{
|
||||
case 0:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_die1.wav", 1, ATTN_IDLE );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_die1.wav", 1, ATTN_IDLE );
|
||||
break;
|
||||
case 1:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_die2.wav", 1, ATTN_IDLE );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_die2.wav", 1, ATTN_IDLE );
|
||||
break;
|
||||
case 2:
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_die3.wav", 1, ATTN_IDLE );
|
||||
EMIT_SOUND( ENT( pev ), CHAN_VOICE, "hgrunt/gr_die3.wav", 1, ATTN_IDLE );
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2290,6 +2201,7 @@ void CHGruntRepel::Spawn( void )
|
||||
void CHGruntRepel::Precache( void )
|
||||
{
|
||||
UTIL_PrecacheOther( "monster_human_grunt" );
|
||||
|
||||
m_iSpriteTexture = PRECACHE_MODEL( "sprites/rope.spr" );
|
||||
}
|
||||
|
||||
@ -2349,23 +2261,14 @@ void CDeadHGrunt::KeyValue( KeyValueData *pkvd )
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS( monster_hgrunt_dead, CDeadHGrunt )
|
||||
LINK_ENTITY_TO_CLASS( monster_human_grunt_ally_dead, CDeadHGrunt )
|
||||
|
||||
//=========================================================
|
||||
// ********** DeadHGrunt SPAWN **********
|
||||
//=========================================================
|
||||
void CDeadHGrunt::Spawn( void )
|
||||
{
|
||||
if( FClassnameIs( pev, "monster_human_grunt_ally_dead" ) )
|
||||
{
|
||||
PRECACHE_MODEL( "models/hgrunt_opfor.mdl" );
|
||||
SET_MODEL( ENT( pev ), "models/hgrunt_opfor.mdl" );
|
||||
}
|
||||
else
|
||||
{
|
||||
PRECACHE_MODEL( "models/hgrunt.mdl" );
|
||||
SET_MODEL( ENT( pev ), "models/hgrunt.mdl" );
|
||||
}
|
||||
PRECACHE_MODEL( "models/hgrunt.mdl" );
|
||||
SET_MODEL( ENT( pev ), "models/hgrunt.mdl" );
|
||||
|
||||
pev->effects = 0;
|
||||
pev->yaw_speed = 8;
|
||||
|
@ -15,6 +15,80 @@
|
||||
#ifndef HGRUNT_H
|
||||
#define HGRUNT_H
|
||||
|
||||
//=========================================================
|
||||
// monster-specific DEFINE's
|
||||
//=========================================================
|
||||
#define GRUNT_CLIP_SIZE 36 // how many bullets in a clip? - NOTE: 3 round burst sound, so keep as 3 * x!
|
||||
#define GRUNT_VOL 0.35 // volume of grunt sounds
|
||||
#define GRUNT_ATTN ATTN_NORM // attenutation of grunt sentences
|
||||
#define HGRUNT_LIMP_HEALTH 20
|
||||
#define HGRUNT_DMG_HEADSHOT ( DMG_BULLET | DMG_CLUB ) // damage types that can kill a grunt with a single headshot.
|
||||
#define HGRUNT_NUM_HEADS 2 // how many grunt heads are there?
|
||||
#define HGRUNT_MINIMUM_HEADSHOT_DAMAGE 15 // must do at least this much damage in one shot to head to score a headshot kill
|
||||
#define HGRUNT_SENTENCE_VOLUME (float)0.35 // volume of grunt sentences
|
||||
|
||||
#define HGRUNT_9MMAR ( 1 << 0)
|
||||
#define HGRUNT_HANDGRENADE ( 1 << 1)
|
||||
#define HGRUNT_GRENADELAUNCHER ( 1 << 2)
|
||||
#define HGRUNT_SHOTGUN ( 1 << 3)
|
||||
|
||||
#define HEAD_GROUP 1
|
||||
#define HEAD_GRUNT 0
|
||||
#define HEAD_COMMANDER 1
|
||||
#define HEAD_SHOTGUN 2
|
||||
#define HEAD_M203 3
|
||||
#define GUN_GROUP 2
|
||||
#define GUN_MP5 0
|
||||
#define GUN_SHOTGUN 1
|
||||
#define GUN_NONE 2
|
||||
|
||||
//=========================================================
|
||||
// Monster's Anim Events Go Here
|
||||
//=========================================================
|
||||
#define HGRUNT_AE_RELOAD ( 2 )
|
||||
#define HGRUNT_AE_KICK ( 3 )
|
||||
#define HGRUNT_AE_BURST1 ( 4 )
|
||||
#define HGRUNT_AE_BURST2 ( 5 )
|
||||
#define HGRUNT_AE_BURST3 ( 6 )
|
||||
#define HGRUNT_AE_GREN_TOSS ( 7 )
|
||||
#define HGRUNT_AE_GREN_LAUNCH ( 8 )
|
||||
#define HGRUNT_AE_GREN_DROP ( 9 )
|
||||
#define HGRUNT_AE_CAUGHT_ENEMY ( 10 ) // grunt established sight with an enemy (player only) that had previously eluded the squad.
|
||||
#define HGRUNT_AE_DROP_GUN ( 11 ) // grunt (probably dead) is dropping his mp5.
|
||||
|
||||
//=========================================================
|
||||
// monster-specific schedule types
|
||||
//=========================================================
|
||||
enum
|
||||
{
|
||||
SCHED_GRUNT_SUPPRESS = LAST_COMMON_SCHEDULE + 1,
|
||||
SCHED_GRUNT_ESTABLISH_LINE_OF_FIRE,// move to a location to set up an attack against the enemy. (usually when a friendly is in the way).
|
||||
SCHED_GRUNT_COVER_AND_RELOAD,
|
||||
SCHED_GRUNT_SWEEP,
|
||||
SCHED_GRUNT_FOUND_ENEMY,
|
||||
SCHED_GRUNT_REPEL,
|
||||
SCHED_GRUNT_REPEL_ATTACK,
|
||||
SCHED_GRUNT_REPEL_LAND,
|
||||
SCHED_GRUNT_WAIT_FACE_ENEMY,
|
||||
SCHED_GRUNT_TAKECOVER_FAILED,// special schedule type that forces analysis of conditions and picks the best possible schedule to recover from this type of failure.
|
||||
SCHED_GRUNT_ELOF_FAIL
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
// monster-specific tasks
|
||||
//=========================================================
|
||||
enum
|
||||
{
|
||||
TASK_GRUNT_FACE_TOSS_DIR = LAST_COMMON_TASK + 1,
|
||||
TASK_GRUNT_SPEAK_SENTENCE,
|
||||
TASK_GRUNT_CHECK_FIRE
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
// monster-specific conditions
|
||||
//=========================================================
|
||||
#define bits_COND_GRUNT_NOFIRE ( bits_COND_SPECIAL1 )
|
||||
|
||||
//=========================================================
|
||||
// hgrunt
|
||||
//=========================================================
|
||||
@ -40,7 +114,7 @@ public:
|
||||
virtual void IdleSound(void);
|
||||
Vector GetGunPosition(void);
|
||||
void Shoot(void);
|
||||
void Shotgun(void);
|
||||
virtual void Shotgun(void);
|
||||
void PrescheduleThink(void);
|
||||
virtual void GibMonster(void);
|
||||
virtual void SpeakSentence(void);
|
||||
@ -54,7 +128,7 @@ public:
|
||||
void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||||
int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
|
||||
|
||||
int IRelationship(CBaseEntity *pTarget);
|
||||
virtual int IRelationship(CBaseEntity *pTarget);
|
||||
|
||||
virtual BOOL FOkToSpeak(void);
|
||||
void JustSpoke(void);
|
||||
@ -85,6 +159,17 @@ public:
|
||||
static const char *pGruntSentences[];
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HGRUNT_SENT_NONE = -1,
|
||||
HGRUNT_SENT_GREN = 0,
|
||||
HGRUNT_SENT_ALERT,
|
||||
HGRUNT_SENT_MONSTER,
|
||||
HGRUNT_SENT_COVER,
|
||||
HGRUNT_SENT_THROW,
|
||||
HGRUNT_SENT_CHARGE,
|
||||
HGRUNT_SENT_TAUNT
|
||||
} HGRUNT_SENTENCE_TYPES;
|
||||
|
||||
//=========================================================
|
||||
// CHGruntRepel - when triggered, spawns a monster_human_grunt
|
||||
|
1687
dlls/rp/fgrunt.cpp
Normal file
1687
dlls/rp/fgrunt.cpp
Normal file
File diff suppressed because it is too large
Load Diff
1581
dlls/rp/ngrunt.cpp
Normal file
1581
dlls/rp/ngrunt.cpp
Normal file
File diff suppressed because it is too large
Load Diff
1720
dlls/rp/zgrunt.cpp
Normal file
1720
dlls/rp/zgrunt.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -37,7 +37,6 @@
|
||||
LINK_ENTITY_TO_CLASS( monster_zombie, CZombie )
|
||||
LINK_ENTITY_TO_CLASS( monster_zombie_barney, CZombie )
|
||||
LINK_ENTITY_TO_CLASS( monster_zombie_soldier, CZombie )
|
||||
LINK_ENTITY_TO_CLASS( monster_zombie_grunt, CZombie )
|
||||
|
||||
const char *CZombie::pAttackHitSounds[] =
|
||||
{
|
||||
@ -244,8 +243,6 @@ void CZombie::Spawn()
|
||||
SET_MODEL( ENT( pev ), "models/zombie_barney.mdl" );
|
||||
else if( FClassnameIs( pev, "monster_zombie_soldier" ) )
|
||||
SET_MODEL( ENT( pev ), "models/zombie_soldier.mdl" );
|
||||
else if( FClassnameIs( pev, "monster_zombie_grunt" ) )
|
||||
SET_MODEL( ENT( pev ), "models/zgrunt.mdl" );
|
||||
else
|
||||
SET_MODEL( ENT( pev ), "models/zombie.mdl" );
|
||||
UTIL_SetSize( pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX );
|
||||
@ -273,8 +270,6 @@ void CZombie::Precache()
|
||||
PRECACHE_MODEL( "models/zombie_barney.mdl" );
|
||||
else if( FClassnameIs( pev, "monster_zombie_soldier" ) )
|
||||
PRECACHE_MODEL( "models/zombie_soldier.mdl" );
|
||||
else if( FClassnameIs( pev, "monster_zombie_grunt" ) )
|
||||
PRECACHE_MODEL( "models/zgrunt.mdl" );
|
||||
else
|
||||
PRECACHE_MODEL( "models/zombie.mdl" );
|
||||
|
||||
@ -326,9 +321,9 @@ int CZombie::IgnoreConditions( void )
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
// DEAD ZGRUNT PROP
|
||||
// DEAD ZSOLDIER PROP
|
||||
//=========================================================
|
||||
class CDeadZGrunt : public CBaseMonster
|
||||
class CDeadZSoldier : public CBaseMonster
|
||||
{
|
||||
public:
|
||||
void Spawn();
|
||||
@ -340,13 +335,13 @@ public:
|
||||
static char *m_szPoses[2];
|
||||
};
|
||||
|
||||
char *CDeadZGrunt::m_szPoses[] =
|
||||
char *CDeadZSoldier::m_szPoses[] =
|
||||
{
|
||||
"dead_on_back",
|
||||
"dead_on_stomach"
|
||||
};
|
||||
|
||||
void CDeadZGrunt::KeyValue( KeyValueData *pkvd )
|
||||
void CDeadZSoldier::KeyValue( KeyValueData *pkvd )
|
||||
{
|
||||
if( FStrEq( pkvd->szKeyName, "pose" ) )
|
||||
{
|
||||
@ -357,24 +352,15 @@ void CDeadZGrunt::KeyValue( KeyValueData *pkvd )
|
||||
CBaseMonster::KeyValue( pkvd );
|
||||
}
|
||||
|
||||
LINK_ENTITY_TO_CLASS( monster_zombie_soldier_dead, CDeadZGrunt )
|
||||
LINK_ENTITY_TO_CLASS( monster_zgrunt_dead, CDeadZGrunt )
|
||||
LINK_ENTITY_TO_CLASS( monster_zombie_soldier_dead, CDeadZSoldier )
|
||||
|
||||
//=========================================================
|
||||
// ********** DeadZGrunt SPAWN **********
|
||||
//=========================================================
|
||||
void CDeadZGrunt::Spawn()
|
||||
void CDeadZSoldier::Spawn()
|
||||
{
|
||||
if( FClassnameIs( pev, "monster_zgrunt_dead" ) )
|
||||
{
|
||||
PRECACHE_MODEL( "models/zgrunt.mdl" );
|
||||
SET_MODEL( ENT( pev ), "models/zgrunt.mdl" );
|
||||
}
|
||||
else
|
||||
{
|
||||
PRECACHE_MODEL( "models/zombie_soldier.mdl" );
|
||||
SET_MODEL( ENT( pev ), "models/zombie_soldier.mdl" );
|
||||
}
|
||||
PRECACHE_MODEL( "models/zombie_soldier.mdl" );
|
||||
SET_MODEL( ENT( pev ), "models/zombie_soldier.mdl" );
|
||||
|
||||
pev->effects = 0;
|
||||
pev->yaw_speed = 8;
|
||||
|
Loading…
x
Reference in New Issue
Block a user