From 7b57f834f697d9ae2f31c1681bfbe1ad03dabf4b Mon Sep 17 00:00:00 2001 From: rftr Date: Sun, 24 Apr 2022 21:16:13 +0000 Subject: [PATCH] unactivated turncoats ignore suspicious activity. unactivated turncoats intentionally try to miss when shooting at mercs/militia. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9370 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Soldier Control.cpp | 4 ++++ Tactical/Weapons.cpp | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index acad2141..598e1080 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -16169,6 +16169,10 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID ) if ( !pSoldier ) return TRUE; + // rftr: turncoats ignore suspicious people/behaviour + if (gSkillTraitValues.fCOTurncoats && (pSoldier->usSoldierFlagMask2 & SOLDIER_TURNCOAT)) + return TRUE; + // if we don't have the Flag: not covert // important: no messages up to this point. the function will get called a lot, up to this point there is nothing unusual if ( !(this->usSoldierFlagMask & (SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER)) ) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index cf4a45fb..685c1783 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -1842,6 +1842,12 @@ void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, FLOAT dTargetZ += CONVERT_PIXELS_TO_HEIGHTUNITS( gpWorldLevelData[sTargetGridNo].sHeight ); } + // rftr: unactivated turncoats intentionally try to miss - aim high + if (gSkillTraitValues.fCOTurncoats && pSoldier && (pSoldier->usSoldierFlagMask2 & SOLDIER_TURNCOAT)) + { + dTargetZ += 100.f; + } + *pdXPos = dTargetX; *pdYPos = dTargetY; *pdZPos = dTargetZ; @@ -9121,6 +9127,10 @@ void ShotMiss( UINT8 ubAttackerID, INT32 iBullet ) UINT32 CalcChanceHTH( SOLDIERTYPE * pAttacker,SOLDIERTYPE *pDefender, INT16 ubAimTime, UINT8 ubMode ) { + // rftr: unactivated turncoats intentionally try to miss + if (gSkillTraitValues.fCOTurncoats && pAttacker && (pAttacker->usSoldierFlagMask2 & SOLDIER_TURNCOAT)) + return gGameExternalOptions.ubMinimumCTH; + UINT16 usInHand; UINT8 ubBandaged; INT32 iAttRating, iDefRating; @@ -10176,6 +10186,10 @@ INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed, O UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ) { + // rftr: unactivated turncoats intentionally try to miss + if (gSkillTraitValues.fCOTurncoats && pSoldier && (pSoldier->usSoldierFlagMask2 & SOLDIER_TURNCOAT)) + return gGameExternalOptions.ubMinimumCTH; + INT32 iChance, iMaxRange, iRange; UINT16 usHandItem; INT8 bPenalty, bBandaged;