Fix (by Sevenfm): Corrected mixed suppression parameters MAX_CTH_PENALTY_FOR_TARGET_SHOCK and MAX_CTH_PENALTY_FROM_SHOCK and also fixed suppression calculation.

http://www.ja-galaxy-forum.com/ubbthreads.php/topics/337412/Re:_Code_Snippets#Post337412


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7621 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
silversurfer
2014-10-31 15:36:02 +00:00
parent 08af7cca36
commit faf345ac18
5 changed files with 24 additions and 10 deletions
+2 -2
View File
@@ -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);
+2 -2
View File
@@ -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
+17 -3
View File
@@ -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;
}
+1 -1
View File
@@ -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,
+2 -2
View File
@@ -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);
}