25 #define FS_MISSION_FILE_EXT NOX(".fs2")
30 #define NUM_NEBULAS 3 // how many background nebulas we have altogether
31 #define NUM_NEBULA_COLORS 9
33 #define DEFAULT_AMBIENT_LIGHT_LEVEL 0x00787878
37 #define SPECIAL_ARRIVAL_ANCHOR_FLAG 0x1000
38 #define SPECIAL_ARRIVAL_ANCHOR_PLAYER_FLAG 0x0100
44 #define MISSION_VERSION 0.10f
45 #define FRED_MISSION_VERSION 0.10f
47 #define WING_PLAYER_BASE 0x80000 // used by Fred to tell ship_index in a wing points to a player
50 #define MPF_ONLY_MISSION_INFO (1 << 0)
51 #define MPF_IMPORT_FSM (1 << 1)
54 #define OLD_MAX_GAME_TYPES 4 // needed for compatibility
55 #define OLD_GAME_TYPE_SINGLE_ONLY 0
56 #define OLD_GAME_TYPE_MULTI_ONLY 1
57 #define OLD_GAME_TYPE_SINGLE_MULTI 2
58 #define OLD_GAME_TYPE_TRAINING 3
60 #define MAX_MISSION_TYPES 5
61 #define MISSION_TYPE_SINGLE (1<<0)
62 #define MISSION_TYPE_MULTI (1<<1)
63 #define MISSION_TYPE_TRAINING (1<<2)
64 #define MISSION_TYPE_MULTI_COOP (1<<3)
65 #define MISSION_TYPE_MULTI_TEAMS (1<<4)
66 #define MISSION_TYPE_MULTI_DOGFIGHT (1<<5)
68 #define MISSION_FLAG_SUBSPACE (1<<0) // mission takes place in subspace
69 #define MISSION_FLAG_NO_PROMOTION (1<<1) // cannot get promoted or badges in this mission
70 #define MISSION_FLAG_FULLNEB (1<<2) // mission is a full nebula mission
71 #define MISSION_FLAG_NO_BUILTIN_MSGS (1<<3) // disables builtin msgs
72 #define MISSION_FLAG_NO_TRAITOR (1<<4) // player cannot become a traitor
73 #define MISSION_FLAG_TOGGLE_SHIP_TRAILS (1<<5) // toggles ship trails (off in nebula, on outside nebula)
74 #define MISSION_FLAG_SUPPORT_REPAIRS_HULL (1<<6) // Toggles support ship repair of ship hulls
75 #define MISSION_FLAG_BEAM_FREE_ALL_BY_DEFAULT (1<<7) // Beam-free-all by default - Goober5000
76 #define MISSION_FLAG_CURRENTLY_UNUSED_1 (1<<8)
77 #define MISSION_FLAG_CURRENTLY_UNUSED_2 (1<<9)
78 #define MISSION_FLAG_NO_BRIEFING (1<<10) // no briefing, jump right into mission - Goober5000
79 #define MISSION_FLAG_TOGGLE_DEBRIEFING (1<<11) // Turn on debriefing for dogfight. Off for everything else - Goober5000
80 #define MISSION_FLAG_CURRENTLY_UNUSED_3 (1<<12)
81 #define MISSION_FLAG_ALLOW_DOCK_TREES (1<<13) // toggle between hub and tree model for ship docking (see objectdock.cpp) - Gooober5000
82 #define MISSION_FLAG_2D_MISSION (1<<14) // Mission is meant to be played top-down style; 2D physics and movement.
83 #define MISSION_FLAG_CURRENTLY_UNUSED_4 (1<<15)
84 #define MISSION_FLAG_RED_ALERT (1<<16) // a red-alert mission - Goober5000
85 #define MISSION_FLAG_SCRAMBLE (1<<17) // a scramble mission - Goober5000
86 #define MISSION_FLAG_NO_BUILTIN_COMMAND (1<<18) // turns off Command without turning off pilots - Karajorma
87 #define MISSION_FLAG_PLAYER_START_AI (1<<19) // Player Starts mission under AI Control (NOT MULTI COMPATABLE) - Kazan
88 #define MISSION_FLAG_ALL_ATTACK (1<<20) // all teams at war - Goober5000
89 #define MISSION_FLAG_USE_AP_CINEMATICS (1<<21) // Kazan - use autopilot cinematics
90 #define MISSION_FLAG_DEACTIVATE_AP (1<<22) // KeldorKatarn - deactivate autopilot (patch approved by Kazan)
91 #define MISSION_FLAG_ALWAYS_SHOW_GOALS (1<<23) // Karajorma - Show the mission goals, even for training missions
92 #define MISSION_FLAG_END_TO_MAINHALL (1<<24) // niffiwan - Return to the mainhall after debrief
95 #define IS_MISSION_MULTI_COOP (The_mission.game_type & MISSION_TYPE_MULTI_COOP)
96 #define IS_MISSION_MULTI_TEAMS (The_mission.game_type & MISSION_TYPE_MULTI_TEAMS)
97 #define IS_MISSION_MULTI_DOGFIGHT (The_mission.game_type & MISSION_TYPE_MULTI_DOGFIGHT)
116 #define MOVIE_PRE_FICTION 0
117 #define MOVIE_PRE_CMD_BRIEF 1
118 #define MOVIE_PRE_BRIEF 2
119 #define MOVIE_PRE_GAME 3
120 #define MOVIE_PRE_DEBRIEF 4
121 #define MOVIE_END_CAMPAIGN 5
179 modified[ 0 ] =
'\0';
181 mission_desc[ 0 ] =
'\0';
186 max_respawn_delay = 0;
188 memset( &support_ships, 0,
sizeof( support_ships ) );
189 squad_filename[ 0 ] =
'\0';
190 squad_name[ 0 ] =
'\0';
192 loading_screen[ i ][ 0 ] =
'\0';
193 skybox_model[ 0 ] =
'\0';
196 envmap_name[ 0 ] =
'\0';
197 contrail_threshold = 0;
199 sound_environment.
id = -1;
201 command_sender[ 0 ] =
'\0';
202 event_music_name[ 0 ] =
'\0';
203 briefing_music_name[ 0 ] =
'\0';
204 substitute_event_music_name[ 0 ] =
'\0';
205 substitute_briefing_music_name[ 0 ] =
'\0';
220 #define CARGO_INDEX_MASK 0xBF
221 #define CARGO_NO_DEPLETE 0x40 // CARGO_NO_DEPLETE + CARGO_INDEX_MASK must == FF
226 #define CONTRAIL_THRESHOLD_DEFAULT 45
231 #define MAX_FORMATION_NAMES 3
232 #define MAX_STATUS_NAMES 3
236 #define MAX_ARRIVAL_NAMES 4
237 #define ARRIVE_AT_LOCATION 0
238 #define ARRIVE_NEAR_SHIP 1
239 #define ARRIVE_IN_FRONT_OF_SHIP 2
240 #define ARRIVE_FROM_DOCK_BAY 3
244 #define MAX_DEPARTURE_NAMES 2
245 #define DEPART_AT_LOCATION 0
246 #define DEPART_AT_DOCK_BAY 1
248 #define MAX_GOAL_TYPE_NAMES 3
251 #define MAX_ALT_TYPE_NAMES 100
256 #define MAX_CALLSIGNS 100
261 #define MAX_PATH_RESTRICTIONS 10
310 #define SUBSYS_STATUS_NO_CHANGE -999
338 #define MAX_OBJECT_STATUS 10
445 #define MAX_PARSE_OBJECT_FLAGS 27
447 #define P_SF_CARGO_KNOWN (1<<0)
448 #define P_SF_IGNORE_COUNT (1<<1)
449 #define P_OF_PROTECTED (1<<2)
450 #define P_SF_REINFORCEMENT (1<<3)
451 #define P_OF_NO_SHIELDS (1<<4)
452 #define P_SF_ESCORT (1<<5)
453 #define P_OF_PLAYER_START (1<<6)
454 #define P_SF_NO_ARRIVAL_MUSIC (1<<7)
455 #define P_SF_NO_ARRIVAL_WARP (1<<8)
456 #define P_SF_NO_DEPARTURE_WARP (1<<9)
457 #define P_SF_LOCKED (1<<10)
458 #define P_OF_INVULNERABLE (1<<11)
459 #define P_SF_HIDDEN_FROM_SENSORS (1<<12)
460 #define P_SF_SCANNABLE (1<<13) // ship is a "scannable" ship
461 #define P_AIF_KAMIKAZE (1<<14)
462 #define P_AIF_NO_DYNAMIC (1<<15)
463 #define P_SF_RED_ALERT_STORE_STATUS (1<<16)
464 #define P_OF_BEAM_PROTECTED (1<<17)
465 #define P_OF_FLAK_PROTECTED (1<<18)
466 #define P_OF_LASER_PROTECTED (1<<19)
467 #define P_OF_MISSILE_PROTECTED (1<<20)
468 #define P_SF_GUARDIAN (1<<21)
469 #define P_KNOSSOS_WARP_IN (1<<22)
470 #define P_SF_VAPORIZE (1<<23)
471 #define P_SF2_STEALTH (1<<24)
472 #define P_SF2_FRIENDLY_STEALTH_INVIS (1<<25)
473 #define P_SF2_DONT_COLLIDE_INVIS (1<<26)
476 #define P_SF_USE_UNIQUE_ORDERS (1<<27) // tells a newly created ship to use the default orders for that ship
477 #define P_SF_DOCK_LEADER (1<<28) // Goober5000 - a docked parse object that is the leader of its group
478 #define P_SF_CANNOT_ARRIVE (1<<29) // used to indicate that this ship's arrival cue will never be true
479 #define P_SF_WARP_BROKEN (1<<30) // warp engine should be broken for this ship
480 #define P_SF_WARP_NEVER (1<<31) // warp drive is destroyed
486 #define MAX_PARSE_OBJECT_FLAGS_2 25
488 #define P2_SF2_PRIMITIVE_SENSORS (1<<0)
489 #define P2_SF2_NO_SUBSPACE_DRIVE (1<<1)
490 #define P2_SF2_NAV_CARRY_STATUS (1<<2)
491 #define P2_SF2_AFFECTED_BY_GRAVITY (1<<3)
492 #define P2_SF2_TOGGLE_SUBSYSTEM_SCANNING (1<<4)
493 #define P2_OF_TARGETABLE_AS_BOMB (1<<5)
494 #define P2_SF2_NO_BUILTIN_MESSAGES (1<<6)
495 #define P2_SF2_PRIMARIES_LOCKED (1<<7)
496 #define P2_SF2_SECONDARIES_LOCKED (1<<8)
497 #define P2_SF2_NO_DEATH_SCREAM (1<<9)
498 #define P2_SF2_ALWAYS_DEATH_SCREAM (1<<10)
499 #define P2_SF2_NAV_NEEDSLINK (1<<11)
500 #define P2_SF2_HIDE_SHIP_NAME (1<<12)
501 #define P2_SF2_SET_CLASS_DYNAMICALLY (1<<13)
502 #define P2_SF2_LOCK_ALL_TURRETS_INITIALLY (1<<14)
503 #define P2_SF2_AFTERBURNER_LOCKED (1<<15)
504 #define P2_OF_FORCE_SHIELDS_ON (1<<16)
505 #define P2_OF_IMMOBILE (1<<17)
506 #define P2_SF2_NO_ETS (1<<18)
507 #define P2_SF2_CLOAKED (1<<19)
508 #define P2_SF2_SHIP_LOCKED (1<<20)
509 #define P2_SF2_WEAPONS_LOCKED (1<<21)
510 #define P2_SF2_SCRAMBLE_MESSAGES (1<<22)
511 #define P2_OF_NO_COLLIDE (1<<23) // This actually changes the OF_COLLIDES object flag
512 #define P2_SF2_NO_DISABLED_SELF_DESTRUCT (1<<24)
517 #define P2_RED_ALERT_DELETED (1<<30) // Goober5000 - used analogously to SEF_PLAYER_DELETED
518 #define P2_ALREADY_HANDLED (1<<31) // Goober5000 - used for docking currently, but could be used generically
523 #define POBJ_INDEX(pobjp) (pobjp - &Parse_objects[0]) // yes, this arithmetic is valid :D
547 #define MAX_P_WINGS 16
548 #define MAX_SHIP_LIST 16
void swap_parse_object(p_object *p_obj, int ship_class)
matrix skybox_orientation
void parse_dock_one_docked_object(p_object *pobjp, p_object *parent_pobjp)
char Neb2_texture_name[MAX_FILENAME_LEN]
int secondary_ammo[MAX_SHIP_SECONDARY_BANKS]
char Mission_alt_types[MAX_ALT_TYPE_NAMES][NAME_LENGTH]
subsys_status * parse_get_subsys_status(p_object *pobjp, char *subsys_name)
char Mission_filename[80]
#define MAX_SHIP_PRIMARY_BANKS
void mission_parse_fixup_players(void)
char * Status_desc_names[MAX_STATUS_NAMES]
char briefing_music_name[NAME_LENGTH]
int Mission_callsign_count
p_object * mission_parse_get_arrival_ship(ushort net_signature)
Returns the parse object on the ship arrival list associated with the given net signature.
int support_available_for_species
char ship_name[NAME_LENGTH]
struct subsys_status subsys_status
int Num_unknown_loadout_classes
SCP_vector< texture_replace > replacement_textures
void clear_texture_replacements()
#define GR_NUM_RESOLUTIONS
int secondary_banks[MAX_SHIP_SECONDARY_BANKS]
int parse_main(const char *mission_name, int flags=0)
char * Parse_object_flags[]
struct alt_class alt_class
#define MAX_FORMATION_NAMES
SCP_string team_color_setting
int primary_ammo[MAX_SHIP_PRIMARY_BANKS]
int mission_parse_add_alt(const char *name)
bool default_to_this_class
#define MAX_SHIP_BAY_PATHS
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
void mission_parse_eval_stuff()
int Knossos_warp_ani_used
void resolve_parse_flags(object *objp, int parse_flags, int parse_flags2)
int special_exp_shockwave_speed
int get_parse_name_index(const char *name)
char Cargo_names_buf[MAX_CARGO][NAME_LENGTH]
struct support_ship_info support_ship_info
p_object Support_ship_pobj
sound_env sound_environment
#define MAX_SHIP_SECONDARY_BANKS
void mission_parse_remove_alt(const char *name)
int destroy_before_mission_time
int Num_unknown_weapon_classes
char squad_filename[MAX_FILENAME_LEN]
int is_training_mission()
#define MAX_OBJECT_STATUS
#define MAX_DEPARTURE_NAMES
float max_shield_recharge
char created[DATE_TIME_LENGTH]
struct path_restriction_t path_restriction_t
p_object Ship_arrival_list
int Ignored_keys[CCFG_MAX]
int Mission_arrival_timestamp
char Mission_parse_storm_name[NAME_LENGTH]
void mission_parse_reset_callsign()
ai_profile_t * ai_profile
int Mission_alt_type_count
float max_hull_repair_val
char * Arrival_location_names[MAX_ARRIVAL_NAMES]
char Parse_names[MAX_SHIPS+MAX_WINGS][NAME_LENGTH]
void mission_parse_lookup_callsign_index(int index, char *out)
char * Nebula_filenames[NUM_NEBULAS]
void vm_set_identity(matrix *m)
float ship_max_hull_strength
int mission_parse_get_multi_mission_info(const char *filename)
int mission_parse_is_multi(const char *filename, char *mission_name)
SCP_vector< alt_class > alt_classes
char squad_name[NAME_LENGTH]
int primary_banks[MAX_SHIP_PRIMARY_BANKS]
int alt_iff_color[MAX_IFFS][MAX_IFFS]
char * Goal_type_names[MAX_GOAL_TYPE_NAMES]
#define MAX_GOAL_TYPE_NAMES
int status[MAX_OBJECT_STATUS]
#define DEFAULT_AMBIENT_LIGHT_LEVEL
char skybox_model[MAX_FILENAME_LEN]
#define MISSION_DESC_LENGTH
int Num_reinforcement_type_names
char path_names[MAX_SHIP_BAY_PATHS][MAX_NAME_LEN]
void mission_parse_support_arrived(int objnum)
char wing_status_wing_index
char * Mission_event_log_flags[]
char loading_screen[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
p_object * Player_start_pobject
void mission_parse_remove_callsign(const char *name)
void mission_add_to_arriving_support(object *requester_objp)
SCP_vector< mission_cutscene > cutscenes
char Mission_callsigns[MAX_CALLSIGNS][NAME_LENGTH]
void mission_parse_set_end_time(int seconds)
char modified[DATE_TIME_LENGTH]
bool use_special_explosion
void mission_parse_reset_alt()
int mission_is_repair_scheduled(object *objp)
struct mission_cutscene mission_cutscene
GLuint const GLchar * name
char filename[MAX_FILENAME_LEN]
char * Ship_class_names[MAX_SHIP_CLASSES]
char * Reinforcement_type_names[]
char command_sender[NAME_LENGTH]
p_object * Arriving_support_ship
int mission_do_departure(object *objp, bool goal_is_to_warp=false)
void mission_parse_lookup_alt_index(int index, char *out)
int get_mission_info(const char *filename, mission *missionp=NULL, bool basic=true)
#define MAX_ALT_TYPE_NAMES
char old_texture[MAX_FILENAME_LEN]
char * Ai_behavior_names[MAX_AI_BEHAVIORS]
int parse_wing_create_ships(wing *wingp, int num_to_create, int force=0, int specific_instance=-1)
Tries to create a wing of ships.
char event_music_name[NAME_LENGTH]
ushort Current_file_checksum
p_object * mission_parse_get_parse_object(ushort net_signature)
int special_exp_deathroll_time
char substitute_briefing_music_name[NAME_LENGTH]
char * Parse_object_flags_2[]
int Num_unknown_ship_classes
float ship_max_shield_strength
The total number of defined control actions (or last define + 1)
char * Formation_names[MAX_FORMATION_NAMES]
char mission_desc[MISSION_DESC_LENGTH]
char * Nebula_colors[NUM_NEBULA_COLORS]
int Mission_departure_timestamp
char Player_start_shipname[NAME_LENGTH]
int mission_parse_lookup_callsign(const char *name)
subsys_status * Subsys_status
int mission_parse_lookup_alt(const char *name)
#define MAX_ARRIVAL_NAMES
struct texture_replace texture_replace
SCP_vector< texture_replace > Fred_texture_replacements
char * Status_type_names[MAX_STATUS_NAMES]
int mission_is_support_ship_arriving(void)
char envmap_name[MAX_FILENAME_LEN]
#define NUM_NEBULA_COLORS
team_data Team_data[MAX_TVT_TEAMS]
int Loading_screen_bm_index
SCP_vector< p_object > Parse_objects
void mission_parse_close()
support_ship_info support_ships
matrix Parse_viewer_orient
int mission_remove_scheduled_repair(object *objp)
int parse_create_object(p_object *objp)
int status_type[MAX_OBJECT_STATUS]
char * Cargo_names[MAX_CARGO]
float max_subsys_repair_val
p_dock_instance * dock_list
char new_texture[MAX_FILENAME_LEN]
char wing_status_wing_pos
int mission_parse_add_callsign(const char *name)
char * Departure_location_names[MAX_DEPARTURE_NAMES]
char substitute_event_music_name[NAME_LENGTH]
void mission_bring_in_support_ship(object *requester_objp)
char * Status_target_names[MAX_STATUS_NAMES]