From abed2ed6c55b23480779737e1825daae33aa1fe3 Mon Sep 17 00:00:00 2001 From: MaddMugsy Date: Thu, 7 Jun 2012 18:18:59 +0000 Subject: [PATCH] Bugfix (from Flugente): fixed an issue that could cause an overflow during a merc's training git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5334 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Assignments.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 847c5e12..69a594de 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -4882,7 +4882,9 @@ INT16 GetBonusTrainingPtsDueToInstructor( SOLDIERTYPE *pInstructor, SOLDIERTYPE sTrainingPts += ( ( ( bTrainingBonus + (bFacilityModifier-100) + bOpinionFactor ) * sTrainingPts ) / 100 ); // adjust for instructor fatigue - ReducePointsForFatigue( pInstructor, (UINT32 *)&sTrainingPts ); + UINT32 uiTrainingPts = (UINT32) sTrainingPts; + ReducePointsForFatigue( pInstructor, &uiTrainingPts ); + sTrainingPts = (INT16)uiTrainingPts; return( sTrainingPts ); } @@ -4994,7 +4996,9 @@ INT16 GetSoldierTrainingPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, UINT16 *pus sTrainingPts += ( ( bTrainingBonus * sTrainingPts ) / 100 ); // adjust for fatigue - ReducePointsForFatigue( pSoldier, (UINT32 *)&sTrainingPts ); + UINT32 uiTrainingPts = (UINT32) sTrainingPts; + ReducePointsForFatigue( pSoldier, &uiTrainingPts ); + sTrainingPts = (INT16)uiTrainingPts; return( sTrainingPts ); } @@ -5110,7 +5114,9 @@ INT16 GetSoldierStudentPts( SOLDIERTYPE *pSoldier, INT8 bTrainStat, UINT16 *pusM sTrainingPts += ( ( bTrainingBonus * sTrainingPts ) / 100 ); // adjust for fatigue - ReducePointsForFatigue( pSoldier, (UINT32 *)&sTrainingPts ); + UINT32 uiTrainingPts = (UINT32) sTrainingPts; + ReducePointsForFatigue( pSoldier, &uiTrainingPts ); + sTrainingPts = (INT16)uiTrainingPts; // now add in stuff for trainer @@ -5378,7 +5384,9 @@ INT16 GetTownTrainPtsForCharacter( SOLDIERTYPE *pTrainer, UINT16 *pusMaxPts ) // adjust for fatigue of trainer - ReducePointsForFatigue( pTrainer, (UINT32 *)&sTotalTrainingPts ); + UINT32 uiTrainingPts = (UINT32) sTotalTrainingPts; + ReducePointsForFatigue( pTrainer, &uiTrainingPts ); + sTotalTrainingPts = (INT16)uiTrainingPts; /* ARM: Decided this didn't make much sense - the guys I'm training damn well BETTER be loyal - and screw the rest!