1 #ifndef SHIP_FLAGS_H
2 #define SHIP_FLAGS_H
3 
4 #include "globalincs/flagset.h"
5 
6 namespace Ship {
7 
FLAG_LIST(Weapon_Flags)8 	FLAG_LIST(Weapon_Flags){
9 		Beam_Free = 0,	// if this is a beam weapon, its free to fire
10 		Turret_Lock,	// is this turret is free to fire or locked
11 		Tagged_Only,	// only fire if target is tagged
12 		Trigger_Lock,	// // indicates that the trigger is held down
13 
14 		NUM_VALUES
15 	};
16 
FLAG_LIST(Subsystem_Flags)17 	FLAG_LIST(Subsystem_Flags) {
18 		Cargo_revealed = 0,
19 		Untargetable,
20 		No_SS_targeting,
21 		Has_fired,					// used by scripting to flag a turret as having been fired
22 		FOV_Required,
23 		FOV_edge_check,
24 		No_replace,					// prevents 'destroyed' submodel from being rendered if subsys is destroyed.
25 		No_live_debris,				// prevents subsystem from generating live debris
26 		Vanished,					// allows subsystem to be made to disappear without a trace (for swapping it for a true model for example.
27 		Missiles_ignore_if_dead,	// forces homing missiles to target hull if subsystem is dead before missile hits it.
28 		Rotates,
29 		Damage_as_hull,				// Applies armor damage instead of subsystem damge. - FUBAR
30 		No_aggregate,				// exclude this subsystem from the aggregate subsystem-info tracking - Goober5000
31 		Play_sound_for_player,		// If this subsystem is a turret on a player ship, play firing sounds - The E
32 		No_disappear,				// prevents submodel from disappearing when subsys destroyed
33         Autorepair_if_disabled,     // Allows the subsystem to repair itself even when disabled - MageKing17
34         No_autorepair_if_disabled,  // Inversion of the above; allow a specific subsystem not to repair itself after being disabled if the ship has the "repair disabled subsystems" flag - MageKing17
35 		Forced_target,				// The turrets current target is being forced by SEXP, and won't let it go until it dies or is cleared by SEXP
36 		Forced_subsys_target,		// The turrets current subsystem target is being forced by SEXP, implies Forced_target
37 
38 		NUM_VALUES
39 	};
40 
FLAG_LIST(System_Flags)41 	FLAG_LIST(System_Flags) {
42 		Alive = 0,				// subsystem has active alive sound
43 		Dead,					// subsystem has active dead sound
44 		Rotate,					// subsystem has active rotation sound
45 		Turret_rotation,		// rotation sound to be scaled like turrets do
46 
47 		NUM_VALUES
48 	};
49 
FLAG_LIST(Ship_Flags)50 	FLAG_LIST(Ship_Flags) {
51 		Ignore_count = 0,			// ignore this ship when counting ship types for goals
52 		Reinforcement,				// this ship is a reinforcement ship
53 		Escort,						// this ship is an escort ship
54 		No_arrival_music,			// don't play arrival music when ship arrives
55 		No_arrival_warp,			// no arrival warp in effect
56 		No_departure_warp,			// no departure warp in effect
57 		Kill_before_mission,
58 		Dying,
59 		Disabled,
60 		Depart_warp,				// ship is departing via warp-out
61 		Depart_dockbay,				// ship is departing via docking bay
62 		Arriving_stage_1,			// ship is arriving. In other words, doing warp in effect, stage 1
63 		Arriving_stage_1_dock_follower,		// "Arriving but Not the Dock Leader"; these guys need some warp stuff done but not all
64 		Arriving_stage_2,			// ship is arriving. In other words, doing warp in effect, stage 2
65 		Arriving_stage_2_dock_follower,		// "Arriving but Not the Dock Leader"; these guys need some warp stuff done but not all
66 		Engines_on,					// engines sound should play if set
67 		Dock_leader,				// Goober5000 - this guy is in charge of everybody he's docked to
68 		Cargo_revealed,				// ship's cargo is revealed to all friendly ships
69 		From_player_wing,			// set for ships that are members of any player starting wing
70 		Primary_linked,				// ships primary weapons are linked together
71 		Secondary_dual_fire,		// ship is firing two missiles from the current secondary bank
72 		Warp_broken,				// set when warp drive is not working, but is repairable
73 		Warp_never,					// set when ship can never warp
74 		Trigger_down,				// ship has its "trigger" held down
75 		Ammo_count_recorded,		// we've recorded the initial secondary weapon count (which is used to limit support ship rearming)
76 		Hidden_from_sensors,		// ship doesn't show up on sensors, blinks in/out on radar
77 		Scannable,					// ship is "scannable".  Play scan effect and report as "Scanned" or "not scanned".
78 		Warped_support,				// set when this is a support ship which was warped in automatically
79 		Exploded,					// ship has exploded (needed for kill messages)
80 		Ship_has_screamed,			// ship has let out a death scream
81 		Red_alert_store_status,		// ship status should be stored/restored if red alert mission
82 		Vaporize,					// ship is vaporized by beam - alternative death sequence
83 		Departure_ordered,			// departure of this ship was ordered by player - Goober5000, similar to WF_DEPARTURE_ORDERED
84 		Primitive_sensors,			// Goober5000 - primitive sensor display
85 		Friendly_stealth_invis,		// Goober5000 - when stealth, don't appear on radar even if friendly
86 		Stealth,					// Goober5000 - is this particular ship stealth
87 		Dont_collide_invis,			// Goober5000 - is this particular ship don't-collide-invisible
88 		No_subspace_drive,			// Goober5000 - this ship has no subspace drive
89 		Navpoint_carry,				// Kazan      - This ship autopilots with the player
90 		Affected_by_gravity,		// Goober5000 - ship affected by gravity points
91 		Toggle_subsystem_scanning,	// Goober5000 - switch whether subsystems are scanned
92 		No_builtin_messages,		// Karajorma - ship should not send built-in messages
93 		Primaries_locked,			// Karajorma - This ship can't fire primary weapons
94 		Secondaries_locked,			// Karajorma - This ship can't fire secondary weapons
95 		Glowmaps_disabled,			// taylor - to disable glow maps
96 		No_death_scream,			// Goober5000 - for WCS
97 		Always_death_scream,		// Goober5000 - for WCS
98 		Navpoint_needslink,			// Kazan	- This ship requires "linking" for autopilot (when player ship gets within specified distance NAVPOINT_NEEDSLINK is replaced by NAVPOINT_CARRY)
99 		Hide_ship_name,				// Karajorma - Hides the ships name (like the -wcsaga command line used to but for any selected ship)
100 		Afterburner_locked,			// KeldorKatarn - This ship can't use its afterburners
101 		Set_class_dynamically,		// Karajorma - This ship should have its class assigned rather than simply read from the mission file
102 		Lock_all_turrets_initially,	// Karajorma - Lock all turrets on this ship at mission start or on arrival
103 		Force_shields_on,
104 		No_ets,						// The E - This ship does not have an ETS
105 		Cloaked,					// The E - This ship will not be rendered
106 		No_thrusters,				// The E - Thrusters on this ship are not rendered.
107 		Ship_locked,				// Karajorma - Prevents the player from changing the ship class on loadout screen
108 		Weapons_locked,				// Karajorma - Prevents the player from changing the weapons on the ship on the loadout screen
109 		Ship_selective_linking,		// RSAXVC - Allow pilot to pick firing configuration
110 		Scramble_messages,			// Goober5000 - all messages sent from this ship appear scrambled
111         No_secondary_lockon,        // zookeeper - secondary lock-on disabled
112         No_disabled_self_destruct,  // Goober5000 - ship will not self-destruct after 90 seconds if engines or weapons destroyed (c.f. ai_maybe_self_destruct)
113 		Rotators_locked,			// The_E -- Rotating subobjects are locked in place
114 		Draw_as_wireframe,			// The_E -- Ship will be rendered in wireframe mode
115 		Render_without_diffuse,		// The_E -- Ship will be rendered without diffuse map (needed for the lab)
116 		Render_without_glowmap,
117 		Render_without_specmap,
118 		Render_without_normalmap,
119 		Render_without_heightmap,
120 		Render_without_ambientmap,
121 		Render_without_miscmap,
122 		Render_without_reflectmap,
123 		Render_full_detail,
124 		Render_without_light,
125 		Render_without_weapons,		// The_E -- Skip weapon model rendering
126 		Has_display_name,			// Goober5000
127 		Attempting_to_afterburn,    // set and unset by afterburner_start and stop, used by afterburner_min_fuel_to_consume
128 
129 		NUM_VALUES
130 
131 	};
132 
FLAG_LIST(Exit_Flags)133 	FLAG_LIST(Exit_Flags) {
134 		Destroyed = 0,
135 		Departed,
136 		Cargo_known,
137 		Player_deleted,
138 		Been_tagged,
139 		Red_alert_carry,
140 
141 		NUM_VALUES
142 	};
143 
FLAG_LIST(Info_Flags)144 	FLAG_LIST(Info_Flags) {
145 		No_collide = 0,
146 		Player_ship,
147 		Default_player_ship,
148 		Path_fixup,						// when set, path verts have been set for this ship's model
149 		Support,						// this ship can perform repair/rearm functions
150 		Afterburner,					// this ship has afterburners
151 		Ballistic_primaries,			// this ship can equip ballistic primaries - Goober5000
152 		Cargo,							// is this ship a cargo type ship -- used for docking purposes
153 		Fighter,						// this ship is a fighter
154 		Bomber,							// this ship is a bomber
155 		Cruiser,						// this ship is a cruiser
156 		Freighter,						// this ship is a freighter
157 		Capital,						// this ship is a capital/installation ship
158 		Transport,						// this ship is a transport
159 		Navbuoy,						// AL 11-24-97: this is a navbuoy
160 		Sentrygun,						// AL 11-24-97: this is a navbuoy with turrets
161 		Escapepod,						// AL 12-09-97: escape pods that fire from big ships
162 		No_ship_type,					// made distinct to help trap errors
163 		Ship_copy,						// this ship is a copy of another ship in the table -- meaningful for scoring and possible other things
164 		In_tech_database,				// is ship type to be listed in the tech database?
165 		In_tech_database_m,				// is ship type to be listed in the tech database for multiplayer?
166 		Stealth,						// the ship has stealth capabilities
167 		Supercap,						// the ship is a supercap
168 		Drydock,						// the ship is a drydock
169 		Ship_class_dont_collide_invis,	// Don't collide with this ship's invisible polygons
170 		Big_damage,						// this ship is classified as a big damage ship
171 		Has_awacs,						// ship has an awacs subsystem
172 		Corvette,						// corvette class (currently this only means anything for briefing icons)
173 		Gas_miner,						// also just for briefing icons
174 		Awacs,							// ditto
175 		Knossos_device,					// this is the knossos device
176 		No_fred,						// not available in fred
177 		Default_in_tech_database,		// default in tech database - Goober5000
178 		Default_in_tech_database_m,		// ditto - Goober5000
179 		Flash,							// makes a flash when it explodes
180 		Show_ship_model,				// Show ship model even in first person view
181 		Surface_shields,				// _argv[-1], 16 Jan 2005: Enable surface shields for this ship.
182 		Generate_hud_icon,				// Enable generation of a HUD shield icon
183 		Disable_weapon_damage_scaling,	// WMC - Disable weapon scaling based on flags
184 		Gun_convergence,				// WMC - Gun convergence based on model weapon norms.
185 		No_thruster_geo_noise,			// Echelon9 - No thruster geometry noise.
186 		Intrinsic_no_shields,			// Chief - disables shields for this ship even without No Shields in mission.
187 		No_primary_linking,				// Chief - slated for 3.7 originally, but this looks pretty simple to implement.
188 		No_pain_flash,					// The E - disable red pain flash
189 		Allow_landings,					// SUSHI: Automatically set if any subsystems allow landings (as a shortcut)
190 		No_ets,							// The E - No ETS on this ship class
191 		No_lighting,					// Valathil - No lighting for this ship
192 		Dyn_primary_linking,			// RSAXVC - Dynamically generate weapon linking options
193 		Auto_spread_shields,			// zookeeper - auto spread shields
194 		Draw_weapon_models,				// the ship draws weapon models of any sort (used to be a boolean)
195 		Model_point_shields,			// zookeeper - uses model-defined shield points instead of quadrants
196         Subsys_repair_when_disabled,    // MageKing17 - Subsystems auto-repair themselves even when disabled.
197 		Dont_bank_when_turning,			// Goober5000
198 		Dont_clamp_max_velocity,		// Goober5000
199 		Instantaneous_acceleration,		// Goober5000
200 		Has_display_name,				// Goober5000
201 		Large_ship_deathroll,			// Asteroth - big ships dont normally deathroll, this makes them do it!
202 		No_impact_debris,				// wookieejedi - Don't spawn the small debris on impact
203 
204 		NUM_VALUES
205 	};
206 
FLAG_LIST(Aiming_Flags)207 	FLAG_LIST(Aiming_Flags) {
208 		Autoaim = 0,			// has autoaim
209 		Auto_convergence,		// has automatic convergence
210 		Std_convergence,		// has standard - ie. non-automatic - convergence
211 		Autoaim_convergence,	// has autoaim with convergence
212 		Convergence_offset,		// marks that convergence has offset value
213 
214 		NUM_VALUES
215 	};
216 
FLAG_LIST(Type_Info_Flags)217     FLAG_LIST(Type_Info_Flags) {
218         Counts_for_alone,
219         Praise_destruction,
220         Hotkey_on_list,
221         Target_as_threat,
222         Show_attack_direction,
223         No_class_display,
224         Scannable,
225         Warp_pushes,
226         Warp_pushable,
227         Turret_tgt_ship_tgt,
228         Beams_easily_hit,
229         No_huge_impact_eff,
230         AI_accept_player_orders,
231         AI_auto_attacks,
232         AI_attempt_broadside,
233         AI_guards_attack,
234         AI_turrets_attack,
235         AI_can_form_wing,
236         AI_protected_on_cripple,
237 		Targeted_by_huge_Ignored_by_small_only,
238 
239         NUM_VALUES
240     };
241 
FLAG_LIST(Thruster_Flags)242 	FLAG_LIST(Thruster_Flags) {
243 		Bank_right,
244 		Bank_left,
245 		Pitch_up,
246 		Pitch_down,
247 		Roll_right,
248 		Roll_left,
249 		Slide_right,
250 		Slide_left,
251 		Slide_up,
252 		Slide_down,
253 		Forward,
254 		Reverse,
255 
256 		NUM_VALUES
257 	};
258 
259 
260     // Not all wing flags are parseable or saveable in mission files. Right now, the only ones which can be set by mission designers are:
261     // ignore_count, reinforcement, no_arrival_music, no_arrival_message, no_arrival_warp, no_departure_warp, no_dynamic and nav_carry_status
262     // Should that change, bump this variable and make sure to make the necessary changes to parse_wing (in missionparse)
263 #define PARSEABLE_WING_FLAGS 8
264 
FLAG_LIST(Wing_Flags)265     FLAG_LIST(Wing_Flags) {
266 		Gone,					// all ships were either destroyed or departed
267 		Departing,				// wing's departure cue turned true
268 		Ignore_count,			// ignore all ships in this wing for goal counting purposes.
269 		Reinforcement,			// is this wing a reinforcement wing
270 		Reset_reinforcement,	// needed when we need to reset the wing's reinforcement flag (after calling it in)
271 		No_arrival_music,		// don't play arrival music when wing arrives
272 		Expanded,				// wing expanded in hotkey select screen
273 		No_arrival_message,		// don't play any arrival message
274 		No_arrival_warp,		// don't play warp effect for any arriving ships in this wing.
275 		No_departure_warp,		// don't play warp effect for any departing ships in this wing.
276 		No_dynamic,				// members of this wing relentlessly pursue their ai goals
277 		Departure_ordered,		// departure of this wing was ordered by player
278 		Never_existed,			// this wing never existed because something prevented it from being created (like its mother ship being destroyed)
279 		Nav_carry,				// Kazan - Wing has nav-carry-status
280 
281 		NUM_VALUES
282 	};
283 
FLAG_LIST(Subsys_Sound_Flags)284 	FLAG_LIST(Subsys_Sound_Flags) {
285 		Alive,
286 		Dead,
287 		Rotate,
288 		Turret_rotation,
289 
290 		NUM_VALUES
291 	};
292 
FLAG_LIST(Awacs_Warning_Flags)293 	FLAG_LIST(Awacs_Warning_Flags) {
294 		Warn_25,
295 		Warn_75,
296 
297 		NUM_VALUES
298 	};
299 }
300 #endif
301