From 944dacd8a4789f4ace97c3312767df55cc4c5a84 Mon Sep 17 00:00:00 2001 From: ChrisL Date: Sat, 15 Nov 2008 00:12:34 +0000 Subject: [PATCH] Fixed a 100AP conversion issue for morale and suppression fire. Fixed a CTD caused by trying to "pickup" an item from sector inventory while simultaneously looking at that items description box. Upgraded an INT8 to INT16 in training functions to try and catch a problem with INI values being set too high. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2419 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Assignments.cpp | 8 ++++---- Strategic/Map Screen Interface Map Inventory.cpp | 4 ++++ Tactical/Overhead.cpp | 5 ++++- ja2_2005Express.vcproj | 4 ++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index f4342c8b..f0056e1d 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -3731,7 +3731,7 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE INT8 bTraineeSkill = 0; INT8 bTrainerEffSkill = 0; INT8 bTrainerNatSkill = 0; - INT8 bTrainingBonus = 0; + INT16 bTrainingBonus = 0; INT8 bOpinionFactor; // assume training impossible for max pts @@ -3916,7 +3916,7 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE INT16 GetSoldierTrainingPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, BOOLEAN fAtGunRange, UINT16 *pusMaxPts ) { INT16 sTrainingPts = 0; - INT8 bTrainingBonus = 0; + INT16 bTrainingBonus = 0; INT8 bSkill = 0; // assume training impossible for max pts @@ -3992,7 +3992,7 @@ INT16 GetSoldierTrainingPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, BOOLEAN fAt INT16 GetSoldierStudentPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, BOOLEAN fAtGunRange, UINT16 *pusMaxPts ) { INT16 sTrainingPts = 0; - INT8 bTrainingBonus = 0; + INT16 bTrainingBonus = 0; INT8 bSkill = 0; INT16 sBestTrainingPts, sTrainingPtsDueToInstructor; @@ -4228,7 +4228,7 @@ BOOLEAN TrainTownInSector( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMapY, INT1 INT16 GetTownTrainPtsForCharacter( SOLDIERTYPE *pTrainer, UINT16 *pusMaxPts ) { INT16 sTotalTrainingPts = 0; - INT8 bTrainingBonus = 0; + INT16 bTrainingBonus = 0; // UINT8 ubTownId = 0; // calculate normal training pts - what it would be if his stats were "normal" (ignoring drugs, fatigue) diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index 37478116..0c3b8bae 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -826,6 +826,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) INT16 sDistanceFromObject = 0; SOLDIERTYPE *pSoldier = NULL; CHAR16 sString[ 128 ]; + extern OBJECTTYPE *gpItemDescObject; iCounter = MSYS_GetRegionUserData( pRegion, 0 ); @@ -887,6 +888,9 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason ) // Return if empty if ( pInventoryPoolList[ ( iCurrentInventoryPoolPage * MAP_INVENTORY_POOL_SLOT_COUNT ) + iCounter ].object.exists() == false ) return; + // CHRISL: Also return if the item we've clicked on is currently displayed in the item description box + if(InItemDescriptionBox( ) && gpItemDescObject == &pInventoryPoolList[ ( iCurrentInventoryPoolPage * MAP_INVENTORY_POOL_SLOT_COUNT ) + iCounter ].object) + return; } diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index c47ce712..acb2850e 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -7118,6 +7118,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker ) UINT8 ubPointsLost, ubTotalPointsLost, ubNewStance; UINT32 uiLoop; UINT8 ubLoop2; + UINT16 uiLoop3; SOLDIERTYPE * pSoldier; for (uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) @@ -7166,7 +7167,9 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker ) // morale modifier if (ubTotalPointsLost / 2 > pSoldier->ubAPsLostToSuppression / 2) { - for ( ubLoop2 = 0; ubLoop2 < (ubTotalPointsLost / 2) - (pSoldier->ubAPsLostToSuppression / 2); ubLoop2++ ) + //CHRISL: This should dynamically adjust the number of times we run the morale loop based on AP_MAXIMUM + uiLoop3 = (((ubTotalPointsLost / 2) - (pSoldier->ubAPsLostToSuppression / 2)) * APBPConstants[AP_MAXIMUM]) / 100; + for ( ubLoop2 = 0; ubLoop2 < uiLoop3; ubLoop2++ ) { HandleMoraleEvent( pSoldier, MORALE_SUPPRESSED, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ); } diff --git a/ja2_2005Express.vcproj b/ja2_2005Express.vcproj index a6cee13d..08b23f7f 100644 --- a/ja2_2005Express.vcproj +++ b/ja2_2005Express.vcproj @@ -1,7 +1,7 @@