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