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:
Wanne
2013-11-10 08:26:05 +00:00
parent 896c1e3e24
commit 899d0f15a0
22 changed files with 1485 additions and 78 deletions
+44 -28
View File
@@ -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;
/////////////////////////////////////////////////////////////