diff --git a/GameSettings.cpp b/GameSettings.cpp index 6de756f9..5d3c9789 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -1573,7 +1573,7 @@ void LoadGameExternalOptions() gGameExternalOptions.ubAimPenaltyPerTargetShock = iniReader.ReadInteger("Tactical Suppression Fire Settings","CTH_PENALTY_PER_TARGET_SHOCK", 5, 0, 100 ); // HEADROCK HAM B2.8: Absolute maximum CTH penalty from target's shock value. - gGameExternalOptions.usMaxShooterCoweringPenalty = iniReader.ReadInteger("Tactical Suppression Fire Settings","MAX_CTH_PENALTY_FOR_TARGET_SHOCK", 0, 0, 250 ); + gGameExternalOptions.usMaxShooterCoweringPenalty = iniReader.ReadInteger("Tactical Suppression Fire Settings","MAX_CTH_PENALTY_FROM_SHOCK", 0, 0, 250 ); // HEADROCK HAM B2.8: These are new cowering penalty divisors that help us determine how effective cowering is in different stances and when the shooter is targetting different bodyparts gGameExternalOptions.ubCoweringPenaltyDivisorProne = iniReader.ReadInteger("Tactical Suppression Fire Settings","CTH_PENALTY_DIVISOR_FOR_PRONE_SHOCKED_TARGET", 1, 1, 100 ); @@ -1584,7 +1584,7 @@ void LoadGameExternalOptions() // HEADROCK HAM B2.8: This is the maximum range at which a target gives out the full CTH penalty for cowering. At lower range, it'll give proportionally less penalty. gGameExternalOptions.usMinRangeForFullCoweringPenalty = iniReader.ReadInteger("Tactical Suppression Fire Settings","MIN_RANGE_FOR_FULL_TARGET_SHOCK_PENALTY", 300, 10, 10000 ); - gGameExternalOptions.usMaxTargetCoweringPenalty = iniReader.ReadInteger("Tactical Suppression Fire Settings","MAX_CTH_PENALTY_FROM_SHOCK", 0, 0, 250 ); + gGameExternalOptions.usMaxTargetCoweringPenalty = iniReader.ReadInteger("Tactical Suppression Fire Settings","MAX_CTH_PENALTY_FOR_TARGET_SHOCK", 0, 0, 250 ); // HEADROCK HAM 3.2: This enabled reduced sight for cowering characters. 0 = disabled. 2 = Reduced Sightrange. 3 = Tunnel-vision. 1 = Both. gGameExternalOptions.ubCoweringReducesSightRange = iniReader.ReadInteger("Tactical Suppression Fire Settings","SHOCK_REDUCES_SIGHTRANGE", 0, 0, 3); diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index e6e236fc..de914044 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -11640,10 +11640,10 @@ UINT8 GetPercentTunnelVision( SOLDIERTYPE * pSoldier ) if ((gGameExternalOptions.ubCoweringReducesSightRange == 1 || gGameExternalOptions.ubCoweringReducesSightRange == 3) && IS_MERC_BODY_TYPE(pSoldier) && (pSoldier->bTeam == ENEMY_TEAM || pSoldier->bTeam == MILITIA_TEAM || pSoldier->bTeam == gbPlayerNum) ) { - INT8 bTolerance = CalcSuppressionTolerance( pSoldier ); + // Make sure character is cowering. - if ( pSoldier->aiData.bShock >= bTolerance && gGameExternalOptions.ubMaxSuppressionShock > 0 && + if ( CoweringShockLevel(pSoldier) && gGameExternalOptions.ubMaxSuppressionShock > 0 && bonus < 100 ) { // Calculates a "Flat" tunnel vision percentage diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index f9d57bb9..cbcd546d 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -8218,7 +8218,7 @@ INT8 CalcSuppressionTolerance( SOLDIERTYPE * pSoldier ) // HEADROCK HAM 3.6: This value has moved here. It reduces tolerance if the character is massively shocked. if (gGameExternalOptions.ubCowerEffectOnSuppression != 0) { - if (pSoldier->aiData.bShock > bTolerance) + if (CalcEffectiveShockLevel( pSoldier ) > bTolerance) { bTolerance -= gGameExternalOptions.ubCowerEffectOnSuppression; } @@ -8472,7 +8472,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker ) fCower = false; // SANDRO - STOMP traits // sevenfm: moved bShockForCower calculation to CalcEffectiveShockLevel() - INT8 bShockForCower = CalcEffectiveShockLevel( pSoldier ); + //INT8 bShockForCower = CalcEffectiveShockLevel( pSoldier ); /* INT8 bShockForCower = pSoldier->aiData.bShock; if ( gGameOptions.fNewTraitSystem ) @@ -8496,7 +8496,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker ) bShockForCower = (INT8)((bShockForCower * (100 - pSoldier->GetFearResistanceBonus()) / 100 ) + 0.5); } */ - if (bShockForCower >= bTolerance) + if ( CoweringShockLevel(pSoldier) ) { fCower = true; @@ -11038,4 +11038,18 @@ void VIPFleesToMeduna() SectorInfo[usSector].ubNumElites += 5; } } +} + +BOOLEAN CoweringShockLevel( SOLDIERTYPE * pSoldier ) +{ + INT8 bTolerance = CalcSuppressionTolerance( pSoldier ); + INT8 bShock = CalcEffectiveShockLevel( pSoldier ); + + // check that character is cowering + if (bShock >= bTolerance ) + { + return TRUE; + } + + return FALSE; } \ No newline at end of file diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 0d2b180f..63f98077 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -387,7 +387,7 @@ void KillOnePrisoner( SECTORINFO *pSectorInfo ); // sevenfm: calc shock level with modifiers (traits, backgrounds, ...) INT8 CalcEffectiveShockLevel( SOLDIERTYPE * pSoldier ); - +BOOLEAN CoweringShockLevel( SOLDIERTYPE * pSoldier ); // Flugente: enemy officers enum { OFFICER_NONE = 0, diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 75601a24..9023115c 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -1351,10 +1351,10 @@ INT16 DistanceVisible( SOLDIERTYPE *pSoldier, INT8 bFacingDir, INT8 bSubjectDir, IS_MERC_BODY_TYPE(pSoldier) && (pSoldier->bTeam == ENEMY_TEAM || pSoldier->bTeam == MILITIA_TEAM || pSoldier->bTeam == gbPlayerNum) && gGameExternalOptions.ubMaxSuppressionShock > 0 && sDistVisible > 0 ) { - INT8 bTolerance = CalcSuppressionTolerance( pSoldier ); + // Make sure character is cowering. - if ( pSoldier->aiData.bShock >= bTolerance ) + if ( CoweringShockLevel(pSoldier) ) { sDistVisible = __max(1,(sDistVisible * (gGameExternalOptions.ubMaxSuppressionShock - pSoldier->aiData.bShock)) / gGameExternalOptions.ubMaxSuppressionShock); }