1 #ifndef __MAP_SCREEN_HELICOPTER_H
2 #define __MAP_SCREEN_HELICOPTER_H
3
4 #include "Assignments.h"
5 #include "Debug.h"
6 #include "JA2Types.h"
7 #include "Soldier_Control.h"
8 #include "Strategic_Movement.h"
9 #include "Vehicles.h"
10
11 // costs of flying through sectors
12 #define COST_AIRSPACE_SAFE 100
13 #define COST_AIRSPACE_UNSAFE 1000 // VERY dangerous
14 #define MIN_PROGRESS_FOR_SKYRIDER_QUOTE_DOING_WELL 25 // scale of 0-100
15 #define MIN_REGRESS_FOR_SKYRIDER_QUOTE_DOING_BADLY 10 // scale of 0-100
16
17 // skyrider quotes
18 #define OWED_MONEY_TO_SKYRIDER 11
19 #define MENTION_DRASSEN_SAM_SITE 20
20 #define SECOND_HALF_OF_MENTION_DRASSEN_SAM_SITE 21
21 #define SAM_SITE_TAKEN 22
22 #define SKYRIDER_SAYS_HI 23
23 #define SPIEL_ABOUT_OTHER_SAM_SITES 24
24 #define SECOND_HALF_OF_SPIEL_ABOUT_OTHER_SAM_SITES 25
25 #define SPIEL_ABOUT_ESTONI_AIRSPACE 26
26 #define CONFIRM_DESTINATION 27
27 //#define DESTINATION_TOO_FAR 28 // unused
28 #define ALTERNATE_FUEL_SITE 26
29 #define ARRIVED_IN_HOSTILE_SECTOR 29
30 #define BELIEVED_ENEMY_SECTOR 30 // may become unused
31 #define ARRIVED_IN_NON_HOSTILE_SECTOR 31
32 #define HOVERING_A_WHILE 32
33 #define RETURN_TO_BASE 33
34 #define ENEMIES_SPOTTED_EN_ROUTE_IN_FRIENDLY_SECTOR_A 34
35 #define ENEMIES_SPOTTED_EN_ROUTE_IN_FRIENDLY_SECTOR_B 35
36 #define MENTION_HOSPITAL_IN_CAMBRIA 45
37 #define THINGS_ARE_GOING_BADLY 46
38 #define THINGS_ARE_GOING_WELL 47
39 #define CHOPPER_NOT_ACCESSIBLE 48
40 #define DOESNT_WANT_TO_FLY 49
41 #define HELI_TOOK_MINOR_DAMAGE 52
42 #define HELI_TOOK_MAJOR_DAMAGE 53
43 #define HELI_GOING_DOWN 54
44
45 enum
46 {
47 DRASSEN_REFUELING_SITE = 0,
48 ESTONI_REFUELING_SITE,
49 NUMBER_OF_REFUEL_SITES,
50 };
51
52 // the sam site enums
53 enum{
54 SAM_SITE_ONE = 0, // near Chitzena
55 SAM_SITE_TWO, // near Drassen
56 SAM_SITE_THREE, // near Cambria
57 SAM_SITE_FOUR, // near Meduna
58 NUMBER_OF_SAM_SITES,
59 };
60
61 // helicopter vehicle id value
62 extern INT32 iHelicopterVehicleId;
63
GetHelicopter(void)64 static inline VEHICLETYPE& GetHelicopter(void)
65 {
66 Assert(pVehicleList.size() <= INT32_MAX);
67 Assert(0 <= iHelicopterVehicleId && iHelicopterVehicleId < static_cast<INT32>(pVehicleList.size()));
68 VEHICLETYPE& v = pVehicleList[iHelicopterVehicleId];
69 Assert(v.fValid);
70 return v;
71 }
72
IsHelicopter(VEHICLETYPE const & v)73 static inline bool IsHelicopter(VEHICLETYPE const& v)
74 {
75 return (INT32)VEHICLE2ID(v) == iHelicopterVehicleId;
76 }
77
InHelicopter(SOLDIERTYPE const & s)78 static inline bool InHelicopter(SOLDIERTYPE const& s)
79 {
80 return s.bAssignment == VEHICLE && s.iVehicleId == iHelicopterVehicleId;
81 }
82
83 // heli is hovering
84 extern BOOLEAN fHoveringHelicopter;
85
86 // helicopter destroyed
87 extern BOOLEAN fHelicopterDestroyed;
88
89 // is the pilot returning straight to base?
90 extern BOOLEAN fHeliReturnStraightToBase;
91
92 // is the heli in the air?
93 extern BOOLEAN fHelicopterIsAirBorne;
94
95 // time started hovering
96 extern UINT32 uiStartHoverTime;
97
98 // what state is skyrider's dialogue in in?
99 extern UINT32 guiHelicopterSkyriderTalkState;
100
101 // plot for helicopter
102 extern BOOLEAN fPlotForHelicopter;
103
104 // the flags for skyrider events
105 extern BOOLEAN fShowEstoniRefuelHighLight;
106 extern BOOLEAN fShowOtherSAMHighLight;
107 extern BOOLEAN fShowDrassenSAMHighLight;
108 extern BOOLEAN fShowCambriaHospitalHighLight;
109 extern INT32 iTotalAccumulatedCostByPlayer;
110 extern UINT32 guiTimeOfLastSkyriderMonologue;
111 extern BOOLEAN fSkyRiderSetUp;
112 extern BOOLEAN fRefuelingSiteAvailable[ NUMBER_OF_REFUEL_SITES ];
113 extern UINT8 gubHelicopterHitsTaken;
114 extern BOOLEAN gfSkyriderSaidCongratsOnTakingSAM;
115 extern UINT8 gubPlayerProgressSkyriderLastCommentedOn;
116 BOOLEAN RemoveSoldierFromHelicopter( SOLDIERTYPE *pSoldier );
117
118 // have pilot say different stuff
119 void HelicopterDialogue( UINT8 ubDialogueCondition );
120
121 // is the helicopter available for flight?
122 BOOLEAN CanHelicopterFly( void );
123
124 // is the pilot alive and on our side?
125 BOOLEAN IsHelicopterPilotAvailable( void );
126
127 // have helicopter take off
128 void TakeOffHelicopter( void );
129
130 // test whether or not a sector contains a fuel site
131 bool IsRefuelSiteInSector(INT16 const sector);
132
133 // test whether or not the sector can refuel the heli
134 bool IsRefuelAvailableInSector(INT16 const sector);
135
136 // update which refueling sites are controlled by player & therefore available
137 void UpdateRefuelSiteAvailability( void );
138
139 // setup helicopter for player
140 void SetUpHelicopterForPlayer( INT16 sX, INT16 sY );
141
142 // the intended path of the helicopter
143 INT32 DistanceOfIntendedHelicopterPath( void );
144
145 // handle a little wait for hover
146 void HandleHeliHoverLong( void );
147
148 // handle a LONG wait in hover mode
149 void HandleHeliHoverTooLong( void );
150
151 // drop off everyone in helicopter
152 void DropOffEveryOneInHelicopter( void );
153
154 // handle heli entering this sector
155 BOOLEAN HandleHeliEnteringSector( INT16 sX, INT16 sY );
156
157 // set up helic, if it doesn't have a mvt group
158 void SetUpHelicopterForMovement( void );
159
160 // skyrider talking to player
161 void SkyRiderTalk( UINT16 usQuoteNum );
162
163 // handle animation of sectors for mapscreen
164 void HandleAnimationOfSectors( void );
165
166 // check and handle skyrider monologue
167 void CheckAndHandleSkyriderMonologues( void );
168
169 void HandleHelicopterOnGround( BOOLEAN handleGraphicToo );
170
171 // is the helicopter capable of taking off for the player?
172 BOOLEAN CanHelicopterTakeOff( void );
173
174 void InitializeHelicopter( void );
175
176 bool IsSkyriderFlyingInSector(INT16 x, INT16 y);
177
178 bool IsGroupTheHelicopterGroup(GROUP const&);
179
180 INT16 GetNumSafeSectorsInPath();
181
182 INT16 GetNumUnSafeSectorsInPath( void );
183
184 bool SoldierAboardAirborneHeli(SOLDIERTYPE const&);
185
186 void MoveAllInHelicopterToFootMovementGroup(void);
187
188 void PayOffSkyriderDebtIfAny(void);
189
190 #endif
191