mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +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 );
|
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.
|
// 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
|
// 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 );
|
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.
|
// 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.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.
|
// 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);
|
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) &&
|
if ((gGameExternalOptions.ubCoweringReducesSightRange == 1 || gGameExternalOptions.ubCoweringReducesSightRange == 3) &&
|
||||||
IS_MERC_BODY_TYPE(pSoldier) && (pSoldier->bTeam == ENEMY_TEAM || pSoldier->bTeam == MILITIA_TEAM || pSoldier->bTeam == gbPlayerNum) )
|
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.
|
// Make sure character is cowering.
|
||||||
if ( pSoldier->aiData.bShock >= bTolerance && gGameExternalOptions.ubMaxSuppressionShock > 0 &&
|
if ( CoweringShockLevel(pSoldier) && gGameExternalOptions.ubMaxSuppressionShock > 0 &&
|
||||||
bonus < 100 )
|
bonus < 100 )
|
||||||
{
|
{
|
||||||
// Calculates a "Flat" tunnel vision percentage
|
// 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.
|
// HEADROCK HAM 3.6: This value has moved here. It reduces tolerance if the character is massively shocked.
|
||||||
if (gGameExternalOptions.ubCowerEffectOnSuppression != 0)
|
if (gGameExternalOptions.ubCowerEffectOnSuppression != 0)
|
||||||
{
|
{
|
||||||
if (pSoldier->aiData.bShock > bTolerance)
|
if (CalcEffectiveShockLevel( pSoldier ) > bTolerance)
|
||||||
{
|
{
|
||||||
bTolerance -= gGameExternalOptions.ubCowerEffectOnSuppression;
|
bTolerance -= gGameExternalOptions.ubCowerEffectOnSuppression;
|
||||||
}
|
}
|
||||||
@@ -8472,7 +8472,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
|||||||
fCower = false;
|
fCower = false;
|
||||||
// SANDRO - STOMP traits
|
// SANDRO - STOMP traits
|
||||||
// sevenfm: moved bShockForCower calculation to CalcEffectiveShockLevel()
|
// sevenfm: moved bShockForCower calculation to CalcEffectiveShockLevel()
|
||||||
INT8 bShockForCower = CalcEffectiveShockLevel( pSoldier );
|
//INT8 bShockForCower = CalcEffectiveShockLevel( pSoldier );
|
||||||
/*
|
/*
|
||||||
INT8 bShockForCower = pSoldier->aiData.bShock;
|
INT8 bShockForCower = pSoldier->aiData.bShock;
|
||||||
if ( gGameOptions.fNewTraitSystem )
|
if ( gGameOptions.fNewTraitSystem )
|
||||||
@@ -8496,7 +8496,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker )
|
|||||||
bShockForCower = (INT8)((bShockForCower * (100 - pSoldier->GetFearResistanceBonus()) / 100 ) + 0.5);
|
bShockForCower = (INT8)((bShockForCower * (100 - pSoldier->GetFearResistanceBonus()) / 100 ) + 0.5);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if (bShockForCower >= bTolerance)
|
if ( CoweringShockLevel(pSoldier) )
|
||||||
{
|
{
|
||||||
fCower = true;
|
fCower = true;
|
||||||
|
|
||||||
@@ -11038,4 +11038,18 @@ void VIPFleesToMeduna()
|
|||||||
SectorInfo[usSector].ubNumElites += 5;
|
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, ...)
|
// sevenfm: calc shock level with modifiers (traits, backgrounds, ...)
|
||||||
INT8 CalcEffectiveShockLevel( SOLDIERTYPE * pSoldier );
|
INT8 CalcEffectiveShockLevel( SOLDIERTYPE * pSoldier );
|
||||||
|
BOOLEAN CoweringShockLevel( SOLDIERTYPE * pSoldier );
|
||||||
// Flugente: enemy officers
|
// Flugente: enemy officers
|
||||||
enum {
|
enum {
|
||||||
OFFICER_NONE = 0,
|
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) &&
|
IS_MERC_BODY_TYPE(pSoldier) && (pSoldier->bTeam == ENEMY_TEAM || pSoldier->bTeam == MILITIA_TEAM || pSoldier->bTeam == gbPlayerNum) &&
|
||||||
gGameExternalOptions.ubMaxSuppressionShock > 0 && sDistVisible > 0 )
|
gGameExternalOptions.ubMaxSuppressionShock > 0 && sDistVisible > 0 )
|
||||||
{
|
{
|
||||||
INT8 bTolerance = CalcSuppressionTolerance( pSoldier );
|
|
||||||
|
|
||||||
// Make sure character is cowering.
|
// Make sure character is cowering.
|
||||||
if ( pSoldier->aiData.bShock >= bTolerance )
|
if ( CoweringShockLevel(pSoldier) )
|
||||||
{
|
{
|
||||||
sDistVisible = __max(1,(sDistVisible * (gGameExternalOptions.ubMaxSuppressionShock - pSoldier->aiData.bShock)) / gGameExternalOptions.ubMaxSuppressionShock);
|
sDistVisible = __max(1,(sDistVisible * (gGameExternalOptions.ubMaxSuppressionShock - pSoldier->aiData.bShock)) / gGameExternalOptions.ubMaxSuppressionShock);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user