1 #ifndef SOLDIER_MACROS_H 2 #define SOLDIER_MACROS_H 3 4 // MACROS FOR EASIER SOLDIER CONTROL 5 #include "TeamTurns.h" 6 #include "Soldier_Profile.h" 7 #include "Assignments.h" 8 #include "Animation_Data.h" 9 RPC_RECRUITED(SOLDIERTYPE const * const s)10static inline bool RPC_RECRUITED(SOLDIERTYPE const* const s) 11 { 12 UINT8 const pid = s->ubProfile; 13 return pid != NO_PROFILE && GetProfile(pid).ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED; 14 } 15 AM_AN_EPC(SOLDIERTYPE const * const s)16static inline bool AM_AN_EPC(SOLDIERTYPE const* const s) 17 { 18 UINT8 const pid = s->ubProfile; 19 return pid != NO_PROFILE && GetProfile(pid).ubMiscFlags & PROFILE_MISC_FLAG_EPCACTIVE; 20 } 21 AM_A_ROBOT(SOLDIERTYPE const * const s)22static inline bool AM_A_ROBOT(SOLDIERTYPE const* const s) 23 { 24 UINT8 const pid = s->ubProfile; 25 return pid != NO_PROFILE && GetProfile(pid).ubBodyType == ROBOTNOWEAPON; 26 } 27 IsMechanical(SOLDIERTYPE const & s)28static inline bool IsMechanical(SOLDIERTYPE const& s) 29 { 30 return s.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT(&s); 31 } 32 OK_ENEMY_MERC(SOLDIERTYPE const * const s)33static inline bool OK_ENEMY_MERC(SOLDIERTYPE const* const s) 34 { 35 return !s->bNeutral && s->bSide != OUR_TEAM && s->bLife >= OKLIFE; 36 } 37 38 // Checks if our guy can be controllable .... checks bInSector, team, on duty, etc... OkControllableMerc(const SOLDIERTYPE * const s)39static inline BOOLEAN OkControllableMerc(const SOLDIERTYPE* const s) 40 { 41 Assert(s->bActive); 42 return s->bLife >= OKLIFE && 43 s->bInSector && 44 s->bTeam == OUR_TEAM && 45 s->bAssignment < ON_DUTY; 46 } 47 #define OK_CONTROLLABLE_MERC(s) ((s)->bActive && OkControllableMerc((s))) 48 49 // Check if our guy can be selected and is not in a position where our team has an interupt and he does not have one 50 #define OK_INTERRUPT_MERC(p) (!INTERRUPT_QUEUED || !(p)->bMoved) 51 52 #define CREATURE_OR_BLOODCAT(p) ((p)->uiStatusFlags & SOLDIER_MONSTER || (p)->ubBodyType == BLOODCAT) 53 54 #define TANK(p) ((p)->ubBodyType == TANK_NE || (p)->ubBodyType == TANK_NW) 55 56 #define OK_ENTERABLE_VEHICLE(p) ((p)->uiStatusFlags & SOLDIER_VEHICLE && !TANK((p)) && (p)->bLife >= OKLIFE) 57 58 #endif 59