From e21506c5a5d501430ef7b36a62f594ac64e28fb8 Mon Sep 17 00:00:00 2001 From: ChrisL Date: Wed, 10 Dec 2008 19:46:50 +0000 Subject: [PATCH] Adjusted the system that dynamically adjusts AP/BP values so it would round negative numbers better. Fixed an INT8 redefine of AP values which was causing AP values larger then 127 to become negative numbers. Fixed an autofire glich that would allow you to empty an entire mag while using the xxx_AP_BONUS settings in the INI file. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2450 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 4 ++-- Tactical/Points.cpp | 5 +++-- Tactical/Soldier Control.cpp | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 1a607be5..93643885 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -797,9 +797,9 @@ INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEA if(iniReadValue == iniDefaultValue) { if(!reverse) - iniReadValue = (INT16)(((FLOAT)iniReadValue*(FLOAT)APBPConstants[AP_MAXIMUM]/100)+.5); + iniReadValue = (INT16)(((FLOAT)iniReadValue*(FLOAT)APBPConstants[AP_MAXIMUM]/100)+(iniReadValue<0?-.5:.5)); else - iniReadValue = (INT16)(((FLOAT)iniReadValue/(FLOAT)APBPConstants[AP_MAXIMUM]*100)+.5); + iniReadValue = (INT16)(((FLOAT)iniReadValue/(FLOAT)APBPConstants[AP_MAXIMUM]*100)+(iniReadValue<0?-.5:.5)); } return iniReadValue; diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index 2984a037..d53640da 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -1093,7 +1093,8 @@ INT16 CalcAPsToAutofire( INT16 bBaseActionPoints, OBJECTTYPE * pObj, UINT8 bDoAu aps = ( aps * ( 100 - GetPercentAutofireAPReduction(pObj) ) ) / 100; if ( aps < 0 ) aps = 0; - else if ( aps > APBPConstants[AP_MAXIMUM] ) aps = APBPConstants[AP_MAXIMUM]; + //CHRISL: This can cause problem if a player uses any of the xxx_AP_BONUS values in the INI file. + //else if ( aps > APBPConstants[AP_MAXIMUM] ) aps = APBPConstants[AP_MAXIMUM]; } DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CalcAPsToAutoFire: return aps = %d", aps)); @@ -1240,7 +1241,7 @@ INT16 CalcTotalAPsToAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubAddTur } - return( (INT8)sAPCost ); + return( sAPCost ); } INT16 MinAPsToAttack(SOLDIERTYPE *pSoldier, INT16 sGridno, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 96d0f161..f2be93f3 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -8466,7 +8466,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr // the lower our AP_MAXIMUM value is set to. // Deduct breath AND APs! //sAPCost = (sLifeDeduct / APBPConstants[AP_GET_WOUNDED_DIVISOR]); // + fallCost; - sAPCost = (sLifeDeduct / APBPConstants[AP_GET_WOUNDED_DIVISOR]) / 100 * APBPConstants[AP_MAXIMUM]; + sAPCost = (sLifeDeduct / APBPConstants[AP_GET_WOUNDED_DIVISOR]) * APBPConstants[AP_MAXIMUM] / 100; // ATE: if the robot, do not deduct if ( !AM_A_ROBOT( this ) )