mirror of
https://github.com/1dot13/source.git
synced 2026-08-12 14:10:23 +02:00
New Feature: Externalized Enemy taunts (by anv)
- Taunts will be shown in the tactica log, once enabled (TAUNT_SHOW_IN_LOG = TRUE) - Enemies will randomly choose their taunt from an pool of applicable ones - All taunts can be stored in TableData/EnemyTaunts.xml - see: http://www.bears-pit.com/board/ubbthreads.php/topics/327830/Externalised_taunts.html#Post327830 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6575 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+44
-28
@@ -1709,16 +1709,18 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
|
||||
case AI_ACTION_SEEK_NOISE: // seek most important noise heard
|
||||
case AI_ACTION_RUN_AWAY: // run away from nearby opponent(s)
|
||||
// SANDRO - ENEMY TAUNTS
|
||||
if (gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == TRUE && pSoldier->bTeam == ENEMY_TEAM && SOLDIER_CLASS_ENEMY( pSoldier->ubSoldierClass ) && pSoldier->bVisible != -1 )
|
||||
if (gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == TRUE &&
|
||||
( ( pSoldier->bTeam == ENEMY_TEAM && SOLDIER_CLASS_ENEMY( pSoldier->ubSoldierClass ) && pSoldier->bVisible != -1 ) ||
|
||||
( pSoldier->bTeam == MILITIA_TEAM && SOLDIER_CLASS_MILITIA( pSoldier->ubSoldierClass ) && pSoldier->bVisible != -1 ) ) )
|
||||
{
|
||||
if ( Random( 5 ) == 0 )
|
||||
{
|
||||
if (pSoldier->aiData.bAction == AI_ACTION_SEEK_NOISE )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_SEEK_NOISE );
|
||||
else if (pSoldier->aiData.bAction == AI_ACTION_RUN_AWAY )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_RUN_AWAY );
|
||||
if (pSoldier->aiData.bAction == AI_ACTION_SEEK_NOISE )
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_SEEK_NOISE );
|
||||
else if (pSoldier->aiData.bAction == AI_ACTION_RUN_AWAY )
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_RUN_AWAY );
|
||||
#ifdef ENABLE_ZOMBIES
|
||||
else if ( pSoldier->IsZombie() ) // Madd: Zombies randomly moan...
|
||||
if ( Random( 5 ) == 0 )
|
||||
{
|
||||
if ( pSoldier->IsZombie() ) // Madd: Zombies randomly moan...
|
||||
pSoldier->DoMercBattleSound( (INT8)( BATTLE_SOUND_LAUGH1 ) );
|
||||
#endif
|
||||
}
|
||||
@@ -1923,6 +1925,21 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
|
||||
case AI_ACTION_TOSS_PROJECTILE: // throw grenade at/near opponent(s)
|
||||
LoadWeaponIfNeeded(pSoldier);
|
||||
// drop through here...
|
||||
// randomly decide whether to say civ quote
|
||||
if ( pSoldier->bVisible != -1 )
|
||||
{
|
||||
// ATE: Make sure it's a person :)
|
||||
if ( IS_MERC_BODY_TYPE( pSoldier ) && pSoldier->ubProfile == NO_PROFILE )
|
||||
{
|
||||
// SANDRO - SOLDIER TAUNTS
|
||||
if (gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == TRUE &&
|
||||
( ( pSoldier->bTeam == ENEMY_TEAM && SOLDIER_CLASS_ENEMY( pSoldier->ubSoldierClass ) ) ||
|
||||
( pSoldier->bTeam == MILITIA_TEAM && SOLDIER_CLASS_MILITIA( pSoldier->ubSoldierClass ) ) ) )
|
||||
{
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_THROW_GRENADE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case AI_ACTION_KNIFE_MOVE: // preparing to stab opponent
|
||||
if (pSoldier->aiData.bAction == AI_ACTION_KNIFE_MOVE) // if statement because toss falls through
|
||||
@@ -1934,29 +1951,28 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
|
||||
case AI_ACTION_FIRE_GUN: // shoot at nearby opponent
|
||||
case AI_ACTION_THROW_KNIFE: // throw knife at nearby opponent
|
||||
// randomly decide whether to say civ quote
|
||||
if ( pSoldier->bVisible != -1 && pSoldier->bTeam != MILITIA_TEAM )
|
||||
if ( pSoldier->bVisible != -1 )//&& pSoldier->bTeam != MILITIA_TEAM )
|
||||
{
|
||||
// ATE: Make sure it's a person :)
|
||||
if ( IS_MERC_BODY_TYPE( pSoldier ) && pSoldier->ubProfile == NO_PROFILE )
|
||||
{
|
||||
// SANDRO - SOLDIER TAUNTS
|
||||
if (gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == TRUE && pSoldier->bTeam == ENEMY_TEAM && SOLDIER_CLASS_ENEMY( pSoldier->ubSoldierClass ) )
|
||||
if (gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == TRUE &&
|
||||
( ( pSoldier->bTeam == ENEMY_TEAM && SOLDIER_CLASS_ENEMY( pSoldier->ubSoldierClass ) ) ||
|
||||
( pSoldier->bTeam == MILITIA_TEAM && SOLDIER_CLASS_MILITIA( pSoldier->ubSoldierClass ) ) ) )
|
||||
{
|
||||
if ( Random( 8 ) == 0 )
|
||||
if (Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_GUN )
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_FIRE_GUN, MercPtrs[pSoldier->ubOppNum] );
|
||||
else if (Item[pSoldier->inv[HANDPOS].usItem].grenadelauncher || Item[pSoldier->inv[HANDPOS].usItem].mortar || Item[pSoldier->inv[HANDPOS].usItem].rocketlauncher )
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_FIRE_LAUNCHER, MercPtrs[pSoldier->ubOppNum] );
|
||||
else if (pSoldier->aiData.bAction == AI_ACTION_TOSS_PROJECTILE && Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_THROWN && !Item[pSoldier->inv[HANDPOS].usItem].flare )
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_THROW, MercPtrs[pSoldier->ubOppNum] );
|
||||
else if (pSoldier->aiData.bAction == AI_ACTION_KNIFE_MOVE )
|
||||
{
|
||||
if (Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_GUN )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_FIRE_GUN );
|
||||
else if (Item[pSoldier->inv[HANDPOS].usItem].grenadelauncher || Item[pSoldier->inv[HANDPOS].usItem].mortar || Item[pSoldier->inv[HANDPOS].usItem].rocketlauncher )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_FIRE_LAUNCHER );
|
||||
else if (pSoldier->aiData.bAction == AI_ACTION_TOSS_PROJECTILE && Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_THROWN && !Item[pSoldier->inv[HANDPOS].usItem].flare )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_THROW );
|
||||
else if (pSoldier->aiData.bAction == AI_ACTION_KNIFE_MOVE )
|
||||
{
|
||||
if (Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_BLADE )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_CHARGE_KNIFE );
|
||||
//else if (Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_PUNCH )
|
||||
// StartEnemyTaunt( pSoldier, TAUNT_CHARGE_HTH );
|
||||
}
|
||||
if (Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_BLADE )
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_CHARGE_KNIFE );
|
||||
else if (Item[pSoldier->inv[HANDPOS].usItem].usItemClass == IC_PUNCH )
|
||||
StartEnemyTaunt( pSoldier, TAUNT_CHARGE_FISTS );
|
||||
}
|
||||
}
|
||||
// CC, ATE here - I put in some TEMP randomness...
|
||||
@@ -2052,10 +2068,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
|
||||
// SANDRO - ENEMY TAUNTS
|
||||
if (gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == TRUE && pSoldier->bTeam == ENEMY_TEAM && SOLDIER_CLASS_ENEMY( pSoldier->ubSoldierClass ) && pSoldier->bVisible != -1 )
|
||||
{
|
||||
if ( Random( 4 ) == 0 )
|
||||
{
|
||||
StartEnemyTaunt( pSoldier, TAUNT_ALERT );
|
||||
}
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_ALERT );
|
||||
}
|
||||
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_BETAVERSION, L"Debug: AI radios your position!" );
|
||||
// DROP THROUGH HERE!
|
||||
@@ -2258,7 +2271,10 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
|
||||
pSoldier->usUIMovementMode = DetermineMovementMode( pSoldier, AI_ACTION_KNIFE_MOVE );
|
||||
usSoldierIndex = WhoIsThere2( pSoldier->aiData.usActionData, pSoldier->bTargetLevel);
|
||||
if ( usSoldierIndex != NOBODY )
|
||||
{
|
||||
MercStealFromMerc( pSoldier, MercPtrs[usSoldierIndex] );
|
||||
PossiblyStartEnemyTaunt( pSoldier, TAUNT_STEAL, MercPtrs[usSoldierIndex] );
|
||||
}
|
||||
|
||||
break;
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user