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
This commit is contained in:
Flugente
2018-03-03 16:04:47 +00:00
parent cf2f219067
commit 62f8b7d3e8
+80 -214
View File
@@ -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;