mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
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:
+2
-2
@@ -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
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user