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 ) )