From 62f8b7d3e85500adbcc002823efdca01b2aea4c0 Mon Sep 17 00:00:00 2001 From: Flugente Date: Sat, 3 Mar 2018 16:04:47 +0000 Subject: [PATCH] Cleaned up assignment menu code (WIP) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8534 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Assignments.cpp | 294 +++++++++++--------------------------- 1 file changed, 80 insertions(+), 214 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 94e19e96..c45c76f6 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -16398,24 +16398,21 @@ void HandleShadingOfLinesForAttributeMenus( void ) { // will do the same as updateassignments...but with training pop up box strings SOLDIERTYPE *pSoldier; - INT8 bAttrib =0; BOOLEAN fStatTrainable; - - + if ( gAssignMenuState != ASMENU_TRAIN || ( ghTrainingBox == - 1 ) ) { return; } - if( ( fShowAttributeMenu == FALSE ) || ( ghAttributeBox == - 1 ) ) + if ( !fShowAttributeMenu || ( ghAttributeBox == - 1 ) ) { return; } - pSoldier = GetSelectedAssignSoldier( FALSE ); - for( bAttrib = 0; bAttrib < ATTRIB_MENU_CANCEL; ++bAttrib ) + for( INT8 bAttrib = 0; bAttrib < ATTRIB_MENU_CANCEL; ++bAttrib ) { switch ( gbTrainingMode ) { @@ -16447,8 +16444,6 @@ void HandleShadingOfLinesForAttributeMenus( void ) ShadeStringInBox( ghAttributeBox, bAttrib ); } } - - return; } void HandleShadingOfLinesForSnitchMenu( void ) @@ -16485,21 +16480,17 @@ void HandleShadingOfLinesForSnitchMenu( void ) ShadeStringInBox( ghSnitchBox, SNITCH_MENU_TOGGLE ); ShadeStringInBox( ghSnitchBox, SNITCH_MENU_SECTOR ); } - //UnSecondaryShadeStringInBox( ghTrainingBox, TRAIN_MENU_TOWN ); - return; } void HandleShadingOfLinesForSnitchToggleMenu( void ) { - SOLDIERTYPE *pSoldier = NULL; - // check if valid if( ( fShowSnitchToggleMenu == FALSE ) || ( ghSnitchToggleBox == - 1 ) ) { return; } - pSoldier = GetSelectedAssignSoldier( FALSE ); + SOLDIERTYPE* pSoldier = GetSelectedAssignSoldier( FALSE ); if( pSoldier->usSoldierFlagMask2 & SOLDIER_SNITCHING_OFF ) { @@ -16586,43 +16577,14 @@ void HandleShadingOfLinesForSnitchSectorMenu( void ) } } -/*void ResetAssignmentsForAllSoldiersInSectorWhoAreTrainingTown( SOLDIERTYPE *pSoldier ) -{ - INT32 iNumberOnTeam = 0, iCounter = 0; - SOLDIERTYPE *pCurSoldier = NULL; - - iNumberOnTeam = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) - { - pCurSoldier = &Menptr[ iCounter ]; - - if( ( pCurSoldier->bActive ) && ( pCurSoldier->stats.bLife >= OKLIFE ) ) - { - if( pCurSoldier->bAssignment == TRAIN_TOWN ) - { - if( ( pCurSoldier->sSectorX == pSoldier->sSectorX ) && ( pCurSoldier->sSectorY == pSoldier->sSectorY ) && ( pSoldier->bSectorZ == 0 ) ) - { - AddCharacterToAnySquad( pCurSoldier ); - } - } - } - } - - return; -}*/ - - void ReportTrainersTraineesWithoutPartners( void ) { SOLDIERTYPE *pTeamSoldier = NULL; - INT32 iCounter = 0, iNumberOnTeam = 0; - - - iNumberOnTeam = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + INT32 iCounter = 0; + INT32 iNumberOnTeam = gTacticalStatus.Team[ OUR_TEAM ].bLastID; // check for each instructor - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pTeamSoldier = &Menptr[ iCounter ]; @@ -16648,11 +16610,8 @@ void ReportTrainersTraineesWithoutPartners( void ) } } } - - return; } - BOOLEAN SetMercAsleep( SOLDIERTYPE *pSoldier, BOOLEAN fGiveWarning ) { if( CanCharacterSleep( pSoldier, fGiveWarning ) ) @@ -16670,8 +16629,6 @@ BOOLEAN SetMercAsleep( SOLDIERTYPE *pSoldier, BOOLEAN fGiveWarning ) } } - - BOOLEAN PutMercInAsleepState( SOLDIERTYPE *pSoldier ) { if( pSoldier->flags.fMercAsleep == FALSE ) @@ -16699,7 +16656,6 @@ BOOLEAN PutMercInAsleepState( SOLDIERTYPE *pSoldier ) return( TRUE ); } - BOOLEAN SetMercAwake( SOLDIERTYPE *pSoldier, BOOLEAN fGiveWarning, BOOLEAN fForceHim ) { // forcing him skips all normal checks! @@ -16712,10 +16668,10 @@ BOOLEAN SetMercAwake( SOLDIERTYPE *pSoldier, BOOLEAN fGiveWarning, BOOLEAN fForc } PutMercInAwakeState( pSoldier ); + return( TRUE ); } - BOOLEAN PutMercInAwakeState( SOLDIERTYPE *pSoldier ) { if ( pSoldier->flags.fMercAsleep ) @@ -16767,7 +16723,6 @@ BOOLEAN IsThereASoldierInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSecto return( FALSE ); } - // set the time this soldier's assignment changed void SetTimeOfAssignmentChangeForMerc( SOLDIERTYPE *pSoldier ) { @@ -16785,8 +16740,6 @@ void SetTimeOfAssignmentChangeForMerc( SOLDIERTYPE *pSoldier ) // assigning new PATIENTs gives a DOCTOR something to do, etc., so set flag to recheck them all. // CAN'T DO IT RIGHT AWAY IN HERE 'CAUSE WE TYPICALLY GET CALLED *BEFORE* bAssignment GETS SET TO NEW VALUE!! gfReEvaluateEveryonesNothingToDo = TRUE; - - return; } // have we spent enough time on assignment for it to count? @@ -16800,7 +16753,6 @@ BOOLEAN EnoughTimeOnAssignment( SOLDIERTYPE *pSoldier ) return( FALSE ); } - BOOLEAN AnyMercInGroupCantContinueMoving( GROUP *pGroup ) { PLAYERGROUP *pPlayer; @@ -16850,8 +16802,6 @@ BOOLEAN AnyMercInGroupCantContinueMoving( GROUP *pGroup ) return( fGroupMustStop ); } - - BOOLEAN PlayerSoldierTooTiredToTravel( SOLDIERTYPE *pSoldier ) { Assert( pSoldier ); @@ -16879,8 +16829,6 @@ BOOLEAN PlayerSoldierTooTiredToTravel( SOLDIERTYPE *pSoldier ) return( FALSE ); } - - BOOLEAN AssignMercToAMovementGroup( SOLDIERTYPE *pSoldier ) { // if merc doesn't have a group or is in a vehicle or on a squad assign to group @@ -16925,7 +16873,6 @@ BOOLEAN AssignMercToAMovementGroup( SOLDIERTYPE *pSoldier ) return( TRUE ); } - void NotifyPlayerOfAssignmentAttemptFailure( INT8 bAssignment ) { // notify player @@ -16945,7 +16892,6 @@ void NotifyPlayerOfAssignmentAttemptFailure( INT8 bAssignment ) } } - BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarning ) { BOOLEAN fSuccess = TRUE; @@ -16953,9 +16899,8 @@ BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarn SOLDIERTYPE *pSoldier = NULL; UINT8 ubNumberOfSelectedSoldiers = 0; CHAR16 sString[ 128 ]; - - - for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) + + for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; ++iCounter ) { pSoldier = NULL; @@ -17036,11 +16981,9 @@ BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarn BOOLEAN IsAnyOneOnPlayersTeamOnThisAssignment( INT8 bAssignment ) { - INT32 iCounter = 0; SOLDIERTYPE *pSoldier = NULL; - - - for( iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ ) + + for( INT32 iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++iCounter ) { // get the current soldier pSoldier = &Menptr[ iCounter ]; @@ -17060,7 +17003,6 @@ BOOLEAN IsAnyOneOnPlayersTeamOnThisAssignment( INT8 bAssignment ) return( FALSE ); } - void RebuildAssignmentsBox( void ) { // destroy and recreate assignments box @@ -17073,8 +17015,6 @@ void RebuildAssignmentsBox( void ) CreateAssignmentsBox( ); } - - void BandageBleedingDyingPatientsBeingTreated( ) { INT32 iCounter = 0; @@ -17085,8 +17025,7 @@ void BandageBleedingDyingPatientsBeingTreated( ) UINT16 usKitPts; UINT32 uiKitPtsUsed; BOOLEAN fSomeoneStillBleedingDying = FALSE; - - + for( iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ ) { // get the soldier @@ -17154,7 +17093,6 @@ void BandageBleedingDyingPatientsBeingTreated( ) } } - // this event may be posted many times because of multiple assignment changes. Handle it only once per minute! DeleteAllStrategicEventsOfType( EVENT_BANDAGE_BLEEDING_MERCS ); @@ -17164,8 +17102,6 @@ void BandageBleedingDyingPatientsBeingTreated( ) } } - - void ReEvaluateEveryonesNothingToDo( BOOLEAN aDoExtensiveCheck ) { INT32 iCounter = 0; @@ -17337,8 +17273,6 @@ void ReEvaluateEveryonesNothingToDo( BOOLEAN aDoExtensiveCheck ) fMapPanelDirty = TRUE; } - - void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) { INT32 iCounter = 0; @@ -17365,10 +17299,9 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) } Assert( pSelectedSoldier && pSelectedSoldier->bActive ); - - + // sets assignment for the list - for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) + for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; ++iCounter ) { if( ( gCharactersList[ iCounter ].fValid ) && ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) && @@ -17763,15 +17696,11 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) SortSquadByID(bAssignment); break; }*/ - - + // check if we should start/stop flashing any mercs' assignment strings after these changes gfReEvaluateEveryonesNothingToDo = TRUE; - - return; } - BOOLEAN IsCharacterAliveAndConscious( SOLDIERTYPE *pCharacter ) { // is the character alive and conscious? @@ -17783,20 +17712,17 @@ BOOLEAN IsCharacterAliveAndConscious( SOLDIERTYPE *pCharacter ) return ( TRUE ); } - - BOOLEAN ValidTrainingPartnerInSameSectorOnAssignmentFound( SOLDIERTYPE *pTargetSoldier, INT8 bTargetAssignment, INT8 bTargetStat ) { INT32 iCounter = 0; SOLDIERTYPE *pSoldier = NULL; INT16 sTrainingPts = 0; UINT16 usMaxPts; - - + // this function only makes sense for training teammates or by others, not for self training which doesn't require partners Assert( ( bTargetAssignment == TRAIN_TEAMMATE ) || ( bTargetAssignment == TRAIN_BY_OTHER ) ); - for( iCounter = 0; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ ) + for( iCounter = 0; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++iCounter ) { pSoldier = &Menptr[ iCounter ]; @@ -17925,7 +17851,6 @@ void UnEscortEPC( SOLDIERTYPE *pSoldier ) } } - BOOLEAN CharacterIsTakingItEasy( SOLDIERTYPE *pSoldier ) { // actually asleep? @@ -17986,21 +17911,16 @@ BOOLEAN CharacterIsTakingItEasy( SOLDIERTYPE *pSoldier ) } } - // on assignment, or walking/driving & unable to sleep return( FALSE ); } - - UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier ) { - UINT8 ubNeedForSleep; UINT8 ubPercentHealth; - - + // base comes from profile - ubNeedForSleep = gMercProfiles[ pSoldier->ubProfile ].ubNeedForSleep; + UINT8 ubNeedForSleep = gMercProfiles[ pSoldier->ubProfile ].ubNeedForSleep; // Enforce a maximum of 12 hours before injury penalties. if ( ubNeedForSleep > 12 ) @@ -18013,6 +17933,7 @@ UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier ) { ubNeedForSleep = 3; } + // HEADROCK HAM 3.5: WTF! This calculation is NOT correct! //ubPercentHealth = pSoldier->stats.bLife / pSoldier->stats.bLifeMax; ubPercentHealth = (pSoldier->stats.bLife*100) / pSoldier->stats.bLifeMax; @@ -18020,7 +17941,7 @@ UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier ) // Increase need for sleep based on injuries. if ( ubPercentHealth < 75 ) { - ubNeedForSleep++; + ++ubNeedForSleep; if ( ubPercentHealth < 50 ) { @@ -18075,8 +17996,6 @@ UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier ) return( ubNeedForSleep ); } - - UINT32 GetLastSquadListedInSquadMenu( void ) { UINT32 uiMaxSquad; @@ -18095,8 +18014,6 @@ UINT32 GetLastSquadListedInSquadMenu( void ) return( uiMaxSquad ); } - - BOOLEAN CanCharacterRepairAnotherSoldiersStuff( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOtherSoldier ) { if ( pOtherSoldier == pSoldier ) @@ -18137,8 +18054,6 @@ BOOLEAN CanCharacterRepairAnotherSoldiersStuff( SOLDIERTYPE *pSoldier, SOLDIERTY return( TRUE ); } - - SOLDIERTYPE *GetSelectedAssignSoldier( BOOLEAN fNullOK ) { SOLDIERTYPE *pSoldier = NULL; @@ -18178,8 +18093,6 @@ SOLDIERTYPE *GetSelectedAssignSoldier( BOOLEAN fNullOK ) return( pSoldier ); } - - void ResumeOldAssignment( SOLDIERTYPE *pSoldier ) { AddCharacterToAnySquad( pSoldier ); @@ -18193,8 +18106,6 @@ void ResumeOldAssignment( SOLDIERTYPE *pSoldier ) fMapPanelDirty = TRUE; } - - void RepairItemsOnOthers( SOLDIERTYPE *pSoldier, UINT8 *pubRepairPtsLeft ) { UINT8 ubPassType; @@ -18223,8 +18134,7 @@ void RepairItemsOnOthers( SOLDIERTYPE *pSoldier, UINT8 *pubRepairPtsLeft ) } } } - - + while ( *pubRepairPtsLeft > 0 ) { bBestPriority = -1; @@ -18285,17 +18195,13 @@ void RepairItemsOnOthers( SOLDIERTYPE *pSoldier, UINT8 *pubRepairPtsLeft ) } } - - BOOLEAN UnjamGunsOnSoldier( SOLDIERTYPE *pOwnerSoldier, SOLDIERTYPE *pRepairSoldier, UINT8 *pubRepairPtsLeft ) { BOOLEAN fAnyGunsWereUnjammed = FALSE; - INT8 bPocket; - - + // try to unjam everything before beginning any actual repairs.. successful unjamming costs 2 points per weapon // CHRISL: Changed to dynamically determine max inventory locations. - for (bPocket = HANDPOS; bPocket < NUM_INV_SLOTS; bPocket++) + for ( INT8 bPocket = HANDPOS; bPocket < NUM_INV_SLOTS; ++bPocket) { // the object a weapon? and jammed? if ( ( Item[ pOwnerSoldier->inv[ bPocket ].usItem ].usItemClass == IC_GUN ) && ( pOwnerSoldier->inv[ bPocket ][0]->data.gun.bGunAmmoStatus < 0 ) ) @@ -18357,7 +18263,7 @@ BOOLEAN SetTrainerSleepWhenTraineesSleep( SOLDIERTYPE *pThisTrainee) iNumberOnTeam =gTacticalStatus.Team[ OUR_TEAM ].bLastID; // Check to see if all other trainees of the same stat are also asleep - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pOtherTrainee = &Menptr[ iCounter ]; if (pOtherTrainee->bAssignment == TRAIN_BY_OTHER && pOtherTrainee->bTrainStat == pThisTrainee->bTrainStat && @@ -18368,11 +18274,12 @@ BOOLEAN SetTrainerSleepWhenTraineesSleep( SOLDIERTYPE *pThisTrainee) fAllTraineesAsleep = FALSE; } } + // If they are all asleep if (fAllTraineesAsleep) { // Look for trainers of that stat, in the same sector - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pTrainer = &Menptr[ iCounter ]; if (pTrainer->bAssignment == TRAIN_TEAMMATE && pTrainer->bTrainStat == pThisTrainee->bTrainStat && @@ -18430,7 +18337,7 @@ BOOLEAN SetTraineesSleepWhenTrainerSleeps( SOLDIERTYPE *pTrainer) iNumberOnTeam =gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pTrainee = &Menptr[ iCounter ]; if (pTrainee->bAssignment == TRAIN_BY_OTHER && pTrainee->bTrainStat == pTrainer->bTrainStat && @@ -18453,18 +18360,10 @@ BOOLEAN SetTraineesSleepWhenTrainerSleeps( SOLDIERTYPE *pTrainer) } } } - - if (fTraineesSentToSleep) - { - return(TRUE); - } - else - { - return(FALSE); - } + + return fTraineesSentToSleep; } - BOOLEAN SetTrainerWakeWhenTraineesWake( SOLDIERTYPE *pThisTrainee) { UINT16 sMapX = pThisTrainee->sSectorX; @@ -18487,7 +18386,7 @@ BOOLEAN SetTrainerWakeWhenTraineesWake( SOLDIERTYPE *pThisTrainee) iNumberOnTeam =gTacticalStatus.Team[ OUR_TEAM ].bLastID; // Check to see if all other trainees of the same stat are also asleep - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pOtherTrainee = &Menptr[ iCounter ]; if (pOtherTrainee->bAssignment == TRAIN_BY_OTHER && pOtherTrainee->bTrainStat == pThisTrainee->bTrainStat && @@ -18498,11 +18397,12 @@ BOOLEAN SetTrainerWakeWhenTraineesWake( SOLDIERTYPE *pThisTrainee) fAllTraineesAwake = FALSE; } } + // If they are all awake if (fAllTraineesAwake) { // Look for trainers of that stat, in the same sector - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pTrainer = &Menptr[ iCounter ]; if (pTrainer->bAssignment == TRAIN_TEAMMATE && pTrainer->bTrainStat == pThisTrainee->bTrainStat && @@ -18525,19 +18425,11 @@ BOOLEAN SetTrainerWakeWhenTraineesWake( SOLDIERTYPE *pThisTrainee) } } } - if (fTrainersWokenUp) - { - return(TRUE); - } - else - { - return(FALSE); - } - } - else - { - return(FALSE); + + return fTrainersWokenUp; } + + return FALSE; } BOOLEAN SetTraineesWakeWhenTrainerWakes( SOLDIERTYPE *pTrainer) @@ -18559,7 +18451,7 @@ BOOLEAN SetTraineesWakeWhenTrainerWakes( SOLDIERTYPE *pTrainer) iNumberOnTeam =gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for( iCounter = 0; iCounter < iNumberOnTeam; iCounter++ ) + for( iCounter = 0; iCounter < iNumberOnTeam; ++iCounter ) { pTrainee = &Menptr[ iCounter ]; if (pTrainee->bAssignment == TRAIN_BY_OTHER && pTrainee->bTrainStat == pTrainer->bTrainStat && @@ -18583,14 +18475,7 @@ BOOLEAN SetTraineesWakeWhenTrainerWakes( SOLDIERTYPE *pTrainer) } } - if (fTraineesWokenUp) - { - return(TRUE); - } - else - { - return(FALSE); - } + return fTraineesWokenUp; } void HandleTrainingSleepSynchronize( SOLDIERTYPE *pSoldier ) @@ -18652,7 +18537,8 @@ BOOLEAN FindAnyAwakeTrainers( SOLDIERTYPE *pTrainee ) // Reset flag fAllTrainersAsleep = FALSE; } - ubCounter++; + + ++ubCounter; } return(!fAllTrainersAsleep); @@ -18687,17 +18573,18 @@ BOOLEAN FindAnyAwakeTrainees( SOLDIERTYPE *pTrainer ) // Reset flag. fAllTraineesAsleep = FALSE; } - ubCounter++; + + ++ubCounter; } return(!fAllTraineesAsleep); } + // HEADROCK HAM 3.6: A new set of functions (this & next) to determine whether a character can train Mobile Militia. // This function tests character statistics. BOOLEAN BasicCanCharacterTrainMobileMilitia( SOLDIERTYPE *pSoldier ) { - ///////////////////////////////////////////////////// // Tests whether character can do assignments at all! @@ -18810,13 +18697,8 @@ BOOLEAN BasicCanCharacterTrainMobileMilitia( SOLDIERTYPE *pSoldier ) } } } - if (!fMobileMilitiaTrainingAllowed) - { - // Mobile Militia training NOT allowed here! - return ( FALSE ); - } - return ( TRUE ); + return fMobileMilitiaTrainingAllowed; } // HEADROCK HAM 3.6: A new set of functions (this & previous) to determine whether a character can train Mobile Militia. @@ -18968,7 +18850,7 @@ BOOLEAN CanCharacterTrainMobileMilitia( SOLDIERTYPE *pSoldier ) // HEADROCK HAM 3.5: Only facilities allow militia training, and determine how many trainers can work here. // Does sector have at least one facility that allows training? UINT8 ubFacilityTrainersAllowed = 0; - for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; cnt++) + for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; ++cnt) { // Is this facility here? if (gFacilityLocations[SECTOR(pSoldier->sSectorX, pSoldier->sSectorY)][cnt].fFacilityHere) @@ -18995,14 +18877,12 @@ BOOLEAN CanCharacterTrainMobileMilitia( SOLDIERTYPE *pSoldier ) // // Also note that this takes care of Regulars as well, if Elite training is disabled. // return( FALSE ); //} - - + if ( 100 <= GetMobileMilitiaQuota( FALSE ) ) return ( FALSE ); // If we've reached this, then all is well. return( TRUE ); - } BOOLEAN CanCharacterTrainWorkers( SOLDIERTYPE *pSoldier ) @@ -19082,8 +18962,7 @@ BOOLEAN CanCharacterTrainMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) if ( 100 <= GetMobileMilitiaQuota( TRUE ) ) return ( FALSE ); - - + /////////////////////////////// // Test for required Leadership @@ -19104,7 +18983,7 @@ BOOLEAN CanCharacterTrainMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) else { // Modifier applied once for each TEACHING level. - for (UINT8 i = 0; i < NUM_SKILL_TRAITS( pSoldier, TEACHING_OT ); i++ ) + for (UINT8 i = 0; i < NUM_SKILL_TRAITS( pSoldier, TEACHING_OT ); ++i ) { // This is a percentage modifier. usEffectiveLeadership = (usEffectiveLeadership * gGameExternalOptions.usTeacherTraitEffectOnLeadership)/100; @@ -19197,7 +19076,7 @@ BOOLEAN CanCharacterTrainMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) // defaults. This renders the INI setting "MAX_MILITIA_TRAINERS.." obsolete. UINT8 ubFacilityTrainersAllowed = 0; - for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; cnt++) + for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; ++cnt) { // Is this facility here? if (gFacilityLocations[SECTOR(pSoldier->sSectorX, pSoldier->sSectorY)][cnt].fFacilityHere) @@ -19220,10 +19099,8 @@ BOOLEAN CanCharacterTrainMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) // No errors to report. Character can perform this assignment. return (TRUE); - } - BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) { // Temp string. @@ -19240,8 +19117,7 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) if ( 100 <= GetMobileMilitiaQuota( TRUE ) ) return ( FALSE ); - - + /////////////////////////////// // Test for required Leadership @@ -19268,6 +19144,7 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) usEffectiveLeadership = (usEffectiveLeadership * gGameExternalOptions.usTeacherTraitEffectOnLeadership)/100; } } + usEffectiveLeadership = __min(100,usEffectiveLeadership); } @@ -19395,7 +19272,7 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) NumNonPlayerTeamMembersInSector( sCurrentX, sCurrentY, ENEMY_TEAM ) > 0 ) { // skip the rest. This sector cannot generate militia anyway. - iCounter++; + ++iCounter; continue; } @@ -19408,7 +19285,8 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) break; } } - iCounter++; + + ++iCounter; } } @@ -19419,9 +19297,7 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) DoScreenIndependantMessageBox( sString, MSG_BOX_FLAG_OK, NULL ); return (FALSE); } - - - + ////////////////////////////////////////////// // HEADROCK HAM 3.5: Militia Training Facility // @@ -19431,7 +19307,7 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) // defaults. This renders the INI setting "MAX_MILITIA_TRAINERS.." obsolete. UINT8 ubFacilityTrainersAllowed = 0; - for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; cnt++) + for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; ++cnt) { // Is this facility here? if (gFacilityLocations[SECTOR(pSoldier->sSectorX, pSoldier->sSectorY)][cnt].fFacilityHere) @@ -19452,8 +19328,8 @@ BOOLEAN CanCharacterTrainMobileMilitiaWithErrorReport( SOLDIERTYPE *pSoldier ) // No errors to report. Character can perform this assignment. return (TRUE); - } + // HEADROCK HAM 3.6: This function determines whether a character can use facilities at all, or whether the sector has // any "useable" facilities at all. BOOLEAN BasicCanCharacterFacility( SOLDIERTYPE *pSoldier ) @@ -19526,7 +19402,7 @@ BOOLEAN BasicCanCharacterFacility( SOLDIERTYPE *pSoldier ) UINT8 ubSector = SECTOR(pSoldier->sSectorX, pSoldier->sSectorY); BOOLEAN fFoundUseableFacility = FALSE; - for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; cnt++) + for (UINT16 cnt = 0; cnt < NUM_FACILITY_TYPES; ++cnt) { if (gFacilityLocations[ubSector][cnt].fFacilityHere) { @@ -19536,13 +19412,8 @@ BOOLEAN BasicCanCharacterFacility( SOLDIERTYPE *pSoldier ) } } } - if (!fFoundUseableFacility) - { - // No useable facilities in this sector. - return FALSE; - } - return ( TRUE ); + return fFoundUseableFacility; } BOOLEAN DisplayFacilityMenu( SOLDIERTYPE *pSoldier ) @@ -19559,7 +19430,7 @@ BOOLEAN DisplayFacilityMenu( SOLDIERTYPE *pSoldier ) SetCurrentBox(ghFacilityBox); // run through list of staff/use facilities in sector and add them to pop up box - for ( iCounter = 0; iCounter < MAX_NUM_FACILITY_TYPES; iCounter++ ) + for ( iCounter = 0; iCounter < MAX_NUM_FACILITY_TYPES; ++iCounter ) { if ( gFacilityLocations[ SECTOR(pSoldier->sSectorX,pSoldier->sSectorY) ][iCounter].fFacilityHere ) { @@ -19615,14 +19486,14 @@ BOOLEAN DisplayFacilityAssignmentMenu( SOLDIERTYPE *pSoldier, UINT8 ubFacilityTy BOOLEAN fAssignmentsFound = FALSE; // Create a list of possible assignments at this facility - for ( iCounter = 0; iCounter < NUM_FACILITY_ASSIGNMENTS; iCounter++ ) + for ( iCounter = 0; iCounter < NUM_FACILITY_ASSIGNMENTS; ++iCounter ) { if ( gFacilityTypes[ ubFacilityType ].AssignmentData[iCounter].ubStaffLimit ) { if ( iCounter == FAC_REPAIR_VEHICLE ) { // Test to see whether there are any. - for ( iCounterB = 0; iCounterB < ubNumberOfVehicles; iCounterB++ ) + for ( iCounterB = 0; iCounterB < ubNumberOfVehicles; ++iCounterB ) { if ( pVehicleList[iCounterB].fValid == TRUE ) { @@ -19636,6 +19507,7 @@ BOOLEAN DisplayFacilityAssignmentMenu( SOLDIERTYPE *pSoldier, UINT8 ubFacilityTy } } } + if (fFoundVehicle == FALSE) { // Create line that says "Repair Vehicle", and will be shaded. @@ -19665,6 +19537,7 @@ BOOLEAN DisplayFacilityAssignmentMenu( SOLDIERTYPE *pSoldier, UINT8 ubFacilityTy { AddMonoString((UINT32 *)&hStringHandle, gzFacilityAssignmentStrings[ iCounter ]); } + fAssignmentsFound = TRUE; } } @@ -20520,22 +20393,20 @@ BOOLEAN CanCharacterFacilityWithErrorReport( SOLDIERTYPE *pSoldier, UINT8 ubFaci void HandleShadingOfLinesForFacilityMenu( void ) { - SOLDIERTYPE *pSoldier = NULL; - INT32 iCounter = 0; - INT32 iNumLine = 0; - if ( gAssignMenuState != ASMENU_FACILITY || ( ghFacilityBox == -1 ) ) { return; } - pSoldier = GetSelectedAssignSoldier( FALSE ); + INT32 iNumLine = 0; + + SOLDIERTYPE* pSoldier = GetSelectedAssignSoldier( FALSE ); // PLEASE NOTE: make sure any changes you do here are reflected in all 3 routines which must remain in synch: // CreateDestroyMouseRegionForMoveItemMenu(), DisplayRepairMenu(), and HandleShadingOfLinesForMoveItemMenu(). // run through list of staff/use facilities in sector and add them to pop up box - for ( iCounter = 0; iCounter < MAX_NUM_FACILITY_TYPES; ++iCounter ) + for ( INT32 iCounter = 0; iCounter < MAX_NUM_FACILITY_TYPES; ++iCounter ) { if ( gFacilityLocations[ SECTOR(pSoldier->sSectorX,pSoldier->sSectorY) ][iCounter].fFacilityHere ) { @@ -21220,32 +21091,29 @@ BOOLEAN HandleAssignmentExpansionAndHighLightForFacilityMenu( void ) void HandleShadingOfLinesForFacilityAssignmentMenu( void ) { - SOLDIERTYPE *pSoldier = NULL; - INT32 iCounter = 0; - INT32 iCounterB = 0; - INT32 iNumLine = 0; - UINT8 ubFacilityType = gubFacilityInSubmenu; - BOOLEAN fFoundVehicle = FALSE; - - if( ( fShowFacilityAssignmentMenu == FALSE ) || ( ghFacilityAssignmentBox == -1 ) ) + if ( !fShowFacilityAssignmentMenu || ( ghFacilityAssignmentBox == -1 ) ) { return; } - pSoldier = GetSelectedAssignSoldier( FALSE ); + INT32 iNumLine = 0; + UINT8 ubFacilityType = gubFacilityInSubmenu; + BOOLEAN fFoundVehicle = FALSE; + + SOLDIERTYPE* pSoldier = GetSelectedAssignSoldier( FALSE ); // PLEASE NOTE: make sure any changes you do here are reflected in all 3 routines which must remain in synch: // CreateDestroyMouseRegionForMoveItemMenu(), DisplayRepairMenu(), and HandleShadingOfLinesForMoveItemMenu(). // run through all possible assignments. Shade as necessary - for ( iCounter = 0; iCounter < NUM_FACILITY_ASSIGNMENTS; ++iCounter ) + for ( INT32 iCounter = 0; iCounter < NUM_FACILITY_ASSIGNMENTS; ++iCounter ) { if ( gFacilityTypes[ubFacilityType].AssignmentData[iCounter].ubStaffLimit ) { if ( iCounter == FAC_REPAIR_VEHICLE ) { // Test to see whether there are any. - for ( iCounterB = 0; iCounterB < ubNumberOfVehicles; ++iCounterB ) + for ( INT32 iCounterB = 0; iCounterB < ubNumberOfVehicles; ++iCounterB ) { if ( pVehicleList[iCounterB].fValid == TRUE ) { @@ -22003,7 +21871,6 @@ BOOLEAN DisplayDiseaseMenu( SOLDIERTYPE *pSoldier ) void HandleShadingOfLinesForDiseaseMenu( void ) { - INT32 iVehicleIndex = 0; INT32 iCount = 0; if ( gAssignMenuState != ASMENU_DISEASE || (ghDiseaseBox == -1) ) @@ -22017,16 +21884,15 @@ void HandleShadingOfLinesForDiseaseMenu( void ) if ( 1 ) { // unshade items line - UnShadeStringInBox( ghDiseaseBox, iCount ); + UnShadeStringInBox( ghDiseaseBox, iCount++ ); } else { // shade items line - ShadeStringInBox( ghDiseaseBox, iCount ); + ShadeStringInBox( ghDiseaseBox, iCount++ ); } } - void CreateDestroyMouseRegionForDiseaseMenu( void ) { static BOOLEAN fCreated = FALSE;