Fixed human grunts refusing to attack and refusing to reload.
This also fixes male assassins and shock troopers behaving erraticaly. Probably the heavy weapons grunt becomes better, too.
This commit is contained in:
@@ -663,9 +663,7 @@ void CMHGrunt :: Shoot ( void )
|
||||
|
||||
pev->effects |= EF_MUZZLEFLASH;
|
||||
|
||||
// BUG - For some reason that still eludes me, grunts are completely unable to reload their weapons.
|
||||
// As a temporary fix, give them infinite ammo. It will look bad I know... I gotta find a solution. -Giegue
|
||||
//m_cAmmoLoaded--;// take away a bullet!
|
||||
m_cAmmoLoaded--;// take away a bullet!
|
||||
|
||||
Vector angDir = UTIL_VecToAngles( vecShootDir );
|
||||
SetBlending( 0, angDir.x );
|
||||
@@ -692,9 +690,7 @@ void CMHGrunt :: Shotgun ( void )
|
||||
|
||||
pev->effects |= EF_MUZZLEFLASH;
|
||||
|
||||
// BUG - For some reason that still eludes me, grunts are completely unable to reload their weapons.
|
||||
// As a temporary fix, give them infinite ammo. It will look bad I know... I gotta find a solution. -Giegue
|
||||
//m_cAmmoLoaded--;// take away a bullet!
|
||||
m_cAmmoLoaded--;// take away a bullet!
|
||||
|
||||
Vector angDir = UTIL_VecToAngles( vecShootDir );
|
||||
SetBlending( 0, angDir.x );
|
||||
@@ -1677,6 +1673,37 @@ Schedule_t slGruntRepelLand[] =
|
||||
},
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
// Chase enemy failure schedule
|
||||
//=========================================================
|
||||
Task_t tlGruntChaseEnemyFailed[] =
|
||||
{
|
||||
{ TASK_STOP_MOVING, (float)0 },
|
||||
{ TASK_WAIT, (float)0.2 },
|
||||
{ TASK_FIND_COVER_FROM_ENEMY, (float)0 },
|
||||
{ TASK_RUN_PATH, (float)0 },
|
||||
{ TASK_WAIT_FOR_MOVEMENT, (float)0 },
|
||||
{ TASK_REMEMBER, (float)bits_MEMORY_INCOVER },
|
||||
// { TASK_TURN_LEFT, (float)179 },
|
||||
{ TASK_FACE_ENEMY, (float)0 },
|
||||
{ TASK_WAIT, (float)1 },
|
||||
};
|
||||
|
||||
Schedule_t slGruntChaseEnemyFailed[] =
|
||||
{
|
||||
{
|
||||
tlGruntChaseEnemyFailed,
|
||||
ARRAYSIZE ( tlGruntChaseEnemyFailed ),
|
||||
bits_COND_NEW_ENEMY |
|
||||
bits_COND_CAN_RANGE_ATTACK1 |
|
||||
bits_COND_CAN_MELEE_ATTACK1 |
|
||||
bits_COND_CAN_RANGE_ATTACK2 |
|
||||
bits_COND_CAN_MELEE_ATTACK2 |
|
||||
bits_COND_HEAR_SOUND,
|
||||
0,
|
||||
"GruntChaseEnemyFailed"
|
||||
},
|
||||
};
|
||||
|
||||
DEFINE_CUSTOM_SCHEDULES( CMHGrunt )
|
||||
{
|
||||
@@ -1701,6 +1728,7 @@ DEFINE_CUSTOM_SCHEDULES( CMHGrunt )
|
||||
slGruntRepel,
|
||||
slGruntRepelAttack,
|
||||
slGruntRepelLand,
|
||||
slGruntChaseEnemyFailed,
|
||||
};
|
||||
|
||||
IMPLEMENT_CUSTOM_SCHEDULES( CMHGrunt, CMBaseMonster );
|
||||
@@ -1856,6 +1884,8 @@ Schedule_t *CMHGrunt :: GetSchedule( void )
|
||||
// new enemy
|
||||
if ( HasConditions(bits_COND_NEW_ENEMY) )
|
||||
{
|
||||
// none of this should take place as CSquadMonster functions were completely stripped. -Giegue
|
||||
/*
|
||||
{
|
||||
{
|
||||
//!!!KELLY - the leader of a squad of grunts has just seen the player or a
|
||||
@@ -1871,14 +1901,14 @@ Schedule_t *CMHGrunt :: GetSchedule( void )
|
||||
if ((m_hEnemy != NULL) && UTIL_IsPlayer(m_hEnemy))
|
||||
// player
|
||||
SENTENCEG_PlayRndSz( ENT(pev), "HG_ALERT", HGRUNT_SENTENCE_VOLUME, GRUNT_ATTN, 0, m_voicePitch);
|
||||
/*jlb
|
||||
|
||||
else if ((m_hEnemy != NULL) &&
|
||||
(m_hEnemy->Classify() != CLASS_PLAYER_ALLY) &&
|
||||
(m_hEnemy->Classify() != CLASS_HUMAN_PASSIVE) &&
|
||||
(m_hEnemy->Classify() != CLASS_MACHINE))
|
||||
// monster
|
||||
SENTENCEG_PlayRndSz( ENT(pev), "HG_MONST", HGRUNT_SENTENCE_VOLUME, GRUNT_ATTN, 0, m_voicePitch);
|
||||
jlb*/
|
||||
|
||||
JustSpoke();
|
||||
}
|
||||
|
||||
@@ -1892,6 +1922,7 @@ jlb*/
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
// no ammo
|
||||
else if ( HasConditions ( bits_COND_NO_AMMO_LOADED ) )
|
||||
@@ -1943,6 +1974,10 @@ jlb*/
|
||||
// can shoot
|
||||
else if ( HasConditions ( bits_COND_CAN_RANGE_ATTACK1 ) )
|
||||
{
|
||||
// lack of CSquadMonster functionality makes hgrunt behave erraticaly as is removes
|
||||
// core conditions to make them attack (OccupySlot). -Giegue
|
||||
|
||||
// check if a grenade can be thrown, otherwise force weapon fire.
|
||||
if ( HasConditions ( bits_COND_CAN_RANGE_ATTACK2 ) )
|
||||
{
|
||||
// throw a grenade if can and no engage slots are available
|
||||
@@ -1950,13 +1985,18 @@ jlb*/
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetScheduleOfType( SCHED_RANGE_ATTACK1 );
|
||||
|
||||
// hide!
|
||||
return GetScheduleOfType( SCHED_TAKE_COVER_FROM_ENEMY );
|
||||
//return GetScheduleOfType( SCHED_TAKE_COVER_FROM_ENEMY );
|
||||
}
|
||||
}
|
||||
// can't see enemy
|
||||
else if ( HasConditions( bits_COND_ENEMY_OCCLUDED ) )
|
||||
{
|
||||
// missing CSquadMonster functions means that the monster will stand still if its enemy is out of sight
|
||||
// and if it is impossible to throw a grenade. force it to chase the enemy if attack isn't possible
|
||||
// -Giegue
|
||||
if ( HasConditions( bits_COND_CAN_RANGE_ATTACK2 ) )
|
||||
{
|
||||
//!!!KELLY - this grunt is about to throw or fire a grenade at the player. Great place for "fire in the hole" "frag out" etc
|
||||
@@ -1968,6 +2008,11 @@ jlb*/
|
||||
return GetScheduleOfType( SCHED_RANGE_ATTACK2 );
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetScheduleOfType( SCHED_GRUNT_ESTABLISH_LINE_OF_FIRE );
|
||||
}
|
||||
/*
|
||||
else
|
||||
{
|
||||
//!!!KELLY - grunt is going to stay put for a couple seconds to see if
|
||||
// the enemy wanders back out into the open, or approaches the
|
||||
@@ -1979,6 +2024,7 @@ jlb*/
|
||||
}
|
||||
return GetScheduleOfType( SCHED_STANDOFF );
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
if ( HasConditions( bits_COND_SEE_ENEMY ) && !HasConditions ( bits_COND_CAN_RANGE_ATTACK1 ) )
|
||||
@@ -2113,6 +2159,11 @@ Schedule_t* CMHGrunt :: GetScheduleOfType ( int Type )
|
||||
{
|
||||
return &slGruntRepelLand[ 0 ];
|
||||
}
|
||||
case SCHED_CHASE_ENEMY_FAILED:
|
||||
{
|
||||
// add missing schedule from squadmonster.cpp
|
||||
return &slGruntChaseEnemyFailed[ 0 ];
|
||||
}
|
||||
default:
|
||||
{
|
||||
return CMBaseMonster :: GetScheduleOfType ( Type );
|
||||
|
||||
@@ -120,9 +120,7 @@ void CMMassn::Sniperrifle(void)
|
||||
|
||||
pev->effects |= EF_MUZZLEFLASH;
|
||||
|
||||
// BUG - For some reason that still eludes me, grunts are completely unable to reload their weapons.
|
||||
// As a temporary fix, give them infinite ammo. It will look bad I know... I gotta find a solution. -Giegue
|
||||
//m_cAmmoLoaded--;// take away a bullet!
|
||||
m_cAmmoLoaded--;// take away a bullet!
|
||||
|
||||
Vector angDir = UTIL_VecToAngles(vecShootDir);
|
||||
SetBlending(0, angDir.x);
|
||||
|
||||
@@ -216,7 +216,7 @@ int CMStrooper::Classify()
|
||||
|
||||
BOOL CMStrooper::CheckRangeAttack1(float flDot, float flDist)
|
||||
{
|
||||
return m_cAmmoLoaded >= 1;// && CMHGrunt::CheckRangeAttack1(flDot, flDist);
|
||||
return (m_cAmmoLoaded >= 1) && CMHGrunt::CheckRangeAttack1(flDot, flDist);
|
||||
}
|
||||
|
||||
BOOL CMStrooper::CheckRangeAttack2( float flDot, float flDist )
|
||||
@@ -730,6 +730,8 @@ Schedule_t *CMStrooper::GetSchedule(void)
|
||||
// new enemy
|
||||
if (HasConditions(bits_COND_NEW_ENEMY))
|
||||
{
|
||||
// pretty much a copypaste of hgrunt and so the same issues. -Giegue
|
||||
/*
|
||||
//!!!KELLY - the leader of a squad of grunts has just seen the player or a
|
||||
// monster and has made it the squad's enemy. You
|
||||
// can check pev->flags for FL_CLIENT to determine whether this is the player
|
||||
@@ -743,14 +745,14 @@ Schedule_t *CMStrooper::GetSchedule(void)
|
||||
if ((m_hEnemy != 0) && UTIL_IsPlayer( m_hEnemy ))
|
||||
// player
|
||||
SENTENCEG_PlayRndSz(ENT(pev), "ST_ALERT", STROOPER_SENTENCE_VOLUME, STROOPER_ATTN, 0, m_voicePitch);
|
||||
/*
|
||||
|
||||
else if ((m_hEnemy != 0) &&
|
||||
(m_hEnemy->Classify() != CLASS_PLAYER_ALLY) &&
|
||||
(m_hEnemy->Classify() != CLASS_HUMAN_PASSIVE) &&
|
||||
(m_hEnemy->Classify() != CLASS_MACHINE))
|
||||
// monster
|
||||
SENTENCEG_PlayRndSz(ENT(pev), "ST_MONST", STROOPER_SENTENCE_VOLUME, STROOPER_ATTN, 0, m_voicePitch);
|
||||
*/
|
||||
|
||||
JustSpoke();
|
||||
}
|
||||
|
||||
@@ -762,6 +764,7 @@ Schedule_t *CMStrooper::GetSchedule(void)
|
||||
{
|
||||
return GetScheduleOfType(SCHED_STROOPER_ESTABLISH_LINE_OF_FIRE);
|
||||
}
|
||||
*/
|
||||
}
|
||||
// no ammo
|
||||
else if (HasConditions(bits_COND_NO_AMMO_LOADED))
|
||||
@@ -814,8 +817,10 @@ Schedule_t *CMStrooper::GetSchedule(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetScheduleOfType(SCHED_RANGE_ATTACK1);
|
||||
|
||||
// hide!
|
||||
return GetScheduleOfType(SCHED_TAKE_COVER_FROM_ENEMY);
|
||||
//return GetScheduleOfType(SCHED_TAKE_COVER_FROM_ENEMY);
|
||||
}
|
||||
}
|
||||
// can't see enemy
|
||||
@@ -832,6 +837,11 @@ Schedule_t *CMStrooper::GetSchedule(void)
|
||||
return GetScheduleOfType(SCHED_RANGE_ATTACK2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetScheduleOfType(SCHED_STROOPER_ESTABLISH_LINE_OF_FIRE);
|
||||
}
|
||||
/*
|
||||
else
|
||||
{
|
||||
//!!!KELLY - grunt is going to stay put for a couple seconds to see if
|
||||
// the enemy wanders back out into the open, or approaches the
|
||||
@@ -843,6 +853,7 @@ Schedule_t *CMStrooper::GetSchedule(void)
|
||||
}
|
||||
return GetScheduleOfType(SCHED_STANDOFF);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
if (HasConditions(bits_COND_SEE_ENEMY) && !HasConditions(bits_COND_CAN_RANGE_ATTACK1))
|
||||
|
||||
Reference in New Issue
Block a user