1 #ifndef _ASSIGNMENTS_H 2 #define _ASSIGNMENTS_H 3 4 // header for assignment manipulation/updating for characters 5 6 #include "Types.h" 7 struct GROUP; 8 struct PopUpBox; 9 struct SOLDIERTYPE; 10 11 12 // this distinguishes whether we're only looking for patients healable THIS HOUR (those that have been on their assignment 13 // long enough), or those that will be healable EVER (regardless of whether they're getting healed during this hour) 14 #define HEALABLE_EVER 0 15 #define HEALABLE_THIS_HOUR 1 16 17 18 // merc collapses from fatigue if max breath drops to this. Can't go any lower! 19 #define BREATHMAX_ABSOLUTE_MINIMUM 10 20 #define BREATHMAX_GOTTA_STOP_MOVING 30 21 #define BREATHMAX_PRETTY_TIRED 50 22 #define BREATHMAX_CANCEL_COLLAPSE 60 23 #define BREATHMAX_CANCEL_TIRED 75 24 #define BREATHMAX_FULLY_RESTED 95 25 26 27 #define VEHICLE_REPAIR_POINTS_DIVISOR 10 28 29 30 // Assignments Defines 31 enum{ 32 SQUAD_1 =0, 33 SQUAD_2, 34 SQUAD_3, 35 SQUAD_4, 36 SQUAD_5, 37 SQUAD_6, 38 SQUAD_7, 39 SQUAD_8, 40 SQUAD_9, 41 SQUAD_10, 42 SQUAD_11, 43 SQUAD_12, 44 SQUAD_13, 45 SQUAD_14, 46 SQUAD_15, 47 SQUAD_16, 48 SQUAD_17, 49 SQUAD_18, 50 SQUAD_19, 51 SQUAD_20, 52 ON_DUTY, 53 DOCTOR, 54 PATIENT, 55 VEHICLE, 56 IN_TRANSIT, 57 REPAIR, 58 TRAIN_SELF, 59 TRAIN_TOWN, 60 TRAIN_TEAMMATE, 61 TRAIN_BY_OTHER, 62 ASSIGNMENT_DEAD, 63 ASSIGNMENT_UNCONCIOUS, // unused 64 ASSIGNMENT_POW, 65 ASSIGNMENT_HOSPITAL, 66 ASSIGNMENT_EMPTY, 67 }; 68 69 #define NO_ASSIGNMENT 127 //used when no pSoldier->ubDesiredSquad 70 71 // Train stats defines (must match ATTRIB_MENU_ defines, and pAttributeMenuStrings ) 72 enum{ 73 STRENGTH = 0, 74 DEXTERITY, 75 AGILITY, 76 HEALTH, 77 MARKSMANSHIP, 78 MEDICAL, 79 MECHANICAL, 80 LEADERSHIP, 81 EXPLOSIVE_ASSIGN, 82 NUM_TRAINABLE_STATS 83 // NOTE: Wisdom isn't trainable! 84 }; 85 86 87 struct TOWN_TRAINER_TYPE 88 { 89 SOLDIERTYPE *pSoldier; 90 INT16 sTrainingPts; 91 }; 92 93 94 // can character train militia? 95 BOOLEAN CanCharacterTrainMilitia(const SOLDIERTYPE* s); 96 97 // if merc could train militia here, do they have sufficient loyalty? 98 BOOLEAN DoesSectorMercIsInHaveSufficientLoyaltyToTrainMilitia(const SOLDIERTYPE* s); 99 100 // is the character in transit? 101 bool IsCharacterInTransit(SOLDIERTYPE const&); 102 103 // handler for assignments -- called once per hour via event 104 void UpdateAssignments(void); 105 106 void MakeSoldiersTacticalAnimationReflectAssignment( SOLDIERTYPE *pSoldier ); 107 108 // build list of sectors with mercs 109 void BuildSectorsWithSoldiersList( void ); 110 111 // init sectors with soldiers list 112 void InitSectorsWithSoldiersList( void ); 113 114 // is there a soldier in this sector?..only use after BuildSectorsWithSoldiersList is called 115 BOOLEAN IsThereASoldierInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ ); 116 117 void CheckIfSoldierUnassigned( SOLDIERTYPE *pSoldier ); 118 119 // figure out the assignment menu pop up box positions 120 void DetermineBoxPositions( void ); 121 122 // set x,y position in tactical 123 void SetTacticalPopUpAssignmentBoxXY( void ); 124 125 // get number of pts that are being used this strategic turn 126 INT16 GetTownTrainPtsForCharacter(const SOLDIERTYPE* pTrainer, UINT16* pusMaxPts); 127 128 129 // find number of healing pts 130 UINT16 CalculateHealingPointsForDoctor(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts, BOOLEAN fMakeSureKitIsInHand ); 131 132 // find number of repair pts repairman has available 133 UINT8 CalculateRepairPointsForRepairman(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts, BOOLEAN fMakeSureKitIsInHand ); 134 135 136 // get bonus tarining pts due to an instructor for this student 137 INT16 GetBonusTrainingPtsDueToInstructor(const SOLDIERTYPE* pInstructor, const SOLDIERTYPE* pStudent, INT8 bTrainStat, BOOLEAN fAtGunRange, UINT16* pusMaxPts); 138 139 // get training pts for this soldier 140 INT16 GetSoldierTrainingPts(const SOLDIERTYPE* s, INT8 bTrainStat, BOOLEAN fAtGunRange, UINT16* pusMaxPts); 141 142 // pts for being a student for this soldier 143 INT16 GetSoldierStudentPts(const SOLDIERTYPE* s, INT8 bTrainStat, BOOLEAN fAtGunRange, UINT16* pusMaxPts); 144 145 // Handle assignment done 146 void AssignmentDone( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote, BOOLEAN fMeToo ); 147 148 void FatigueCharacter(SOLDIERTYPE& s); 149 150 extern PopUpBox* ghAssignmentBox; 151 extern PopUpBox* ghEpcBox; 152 extern PopUpBox* ghSquadBox; 153 extern PopUpBox* ghRepairBox; 154 extern PopUpBox* ghTrainingBox; 155 extern PopUpBox* ghAttributeBox; 156 extern PopUpBox* ghRemoveMercAssignBox; 157 extern PopUpBox* ghContractBox; 158 extern PopUpBox* ghMoveBox; 159 160 161 extern BOOLEAN fShownContractMenu; 162 extern BOOLEAN fShownAssignmentMenu; 163 extern BOOLEAN fShowRepairMenu; 164 165 extern BOOLEAN fFirstClickInAssignmentScreenMask; 166 167 extern BOOLEAN gfReEvaluateEveryonesNothingToDo; 168 169 170 void CreateDestroyMouseRegionsForContractMenu( void ); 171 void HandleShadingOfLinesForAssignmentMenus( void ); 172 void CreateDestroyScreenMaskForAssignmentAndContractMenus( void ); 173 174 175 void CreateDestroyAssignmentPopUpBoxes(); 176 void SetSoldierAssignmentHospital(SOLDIERTYPE&); 177 void SetSoldierAssignmentRepair(SOLDIERTYPE&, BOOLEAN robot, INT8 vehicle_id); 178 179 // set merc asleep and awake under the new sleep system implemented June 29, 1998 180 // if give warning is false, the function can be used as an internal function 181 BOOLEAN SetMercAwake( SOLDIERTYPE *pSoldier, BOOLEAN fGiveWarning, BOOLEAN fForceHim ); 182 bool SetMercAsleep(SOLDIERTYPE&, bool give_warning); 183 void PutMercInAsleepState(SOLDIERTYPE&); 184 BOOLEAN PutMercInAwakeState( SOLDIERTYPE *pSoldier ); 185 186 // set what time this merc undertook this assignment 187 void SetTimeOfAssignmentChangeForMerc( SOLDIERTYPE *pSoldier ); 188 189 // check if any merc in group is too tired to keep moving 190 BOOLEAN AnyMercInGroupCantContinueMoving(GROUP const&); 191 192 // handle selected group of mercs being put to sleep 193 BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarning ); 194 195 // is any one on the team on this assignment? 196 BOOLEAN IsAnyOneOnPlayersTeamOnThisAssignment( INT8 bAssignment ); 197 198 // rebuild assignments box 199 void RebuildAssignmentsBox( void ); 200 201 void BandageBleedingDyingPatientsBeingTreated(void); 202 203 void ReEvaluateEveryonesNothingToDo(void); 204 205 // set assignment for list of characters 206 void SetAssignmentForList( INT8 bAssignment, INT8 bParam ); 207 208 // function where we actually set someone's assignment so we can trap certain situations 209 void ChangeSoldiersAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment ); 210 211 void UnEscortEPC( SOLDIERTYPE *pSoldier ); 212 213 SOLDIERTYPE *AnyDoctorWhoCanHealThisPatient( SOLDIERTYPE *pPatient, BOOLEAN fThisHour ); 214 215 void DetermineWhichAssignmentMenusCanBeShown(void); 216 void ResumeOldAssignment(SOLDIERTYPE* pSoldier); 217 bool PlayerSoldierTooTiredToTravel(SOLDIERTYPE&); 218 219 void CreateContractBox(const SOLDIERTYPE* s); 220 221 // screen mask for pop up menus 222 void ClearScreenMaskForMapScreenExit(void); 223 224 void CreateMercRemoveAssignBox(void); 225 226 #endif 227