54 #define MISC_ANIM_MODE_LOOP 0 // loop the animation
55 #define MISC_ANIM_MODE_HOLD 1 // play to the end and hold the animation
56 #define MISC_ANIM_MODE_TIMED 2 // uses timestamps to determine when a finished anim should be checked again
57 #define NUM_REGIONS 7 // (6 + 1 for multiplayer equivalent of campaign room)
58 #define MAIN_HALL_MAX_CHEAT_LEN 40 // cheat buffer length (also maximum cheat length)
64 static int Main_hall_music_index = -1;
109 #define MAIN_HALL_REGION_LINGER 175 // in ms
147 #define DOOR_TEXT_X 100
148 #define DOOR_TEXT_Y 450
160 #define NUM_MAIN_HALL_MAX_REGIONS 20
163 #define EXIT_REGION 0
164 #define BARRACKS_REGION 1
165 #define READY_ROOM_REGION 2
166 #define TECH_ROOM_REGION 3
167 #define OPTIONS_REGION 4
168 #define CAMPAIGN_ROOM_REGION 5
169 #define MULTIPLAYER_REGION 10
170 #define LOAD_MISSION_REGION 11
171 #define QUICK_START_REGION 12
172 #define SKILL_LEVEL_REGION 13
173 #define SCRIPT_REGION 14
174 #define START_REGION 15
223 #define TOASTER_REGION 3
226 #define ALLENDER_REGION 4
241 static int Main_hall_paused = 0;
247 #define MAIN_HALL_NOTIFY_TIME 3500
267 #define MAIN_HALL_VERSION_X 630
268 #define MAIN_HALL_VERSION_Y 467
287 static int Main_hall_f1_text_frame = 0;
288 static int F1_text_done = 0;
291 #define MAIN_HALL_HELP_TIME 5000
339 popup(
PF_USE_AFFIRMATIVE_ICON |
PF_NO_NETWORKING, 1,
POPUP_OK,
XSTR(
"You have selected TCP/IP for multiplayer FreeSpace, but the TCP socket is already in use. Check for another instance and/or use the \"-port <port_num>\" command line option to select an available port.", 1604));
390 char *ret =
popup_input(0,
XSTR(
"Enter mission name.\n\n* This will destroy all legitimate progress in this campaign. *", 1605));
423 if (Main_hall_defines.size() == 0) {
425 }
else if (main_hall_name ==
"") {
426 Warning(
LOCATION,
"main_hall_init() was passed a blank main hall name; loading first available main hall.");
429 Warning(
LOCATION,
"Tried to load a main hall called '%s', but it does not exist; loading first available main hall.", main_hall_name.c_str());
432 main_hall_to_load = main_hall_name;
445 Assertion(Main_hall != NULL,
"Failed to obtain pointer to main hall '%s'; get a coder!\n", main_hall_to_load.c_str());
450 Main_hall->
regions[2].description =
XSTR(
"Multiplayer - Start or join a multiplayer game", 359);
452 Main_hall->
regions[2].description =
XSTR(
"Ready room - Start or continue a campaign", 355);
458 for (it = Main_hall->
regions.begin(); Main_hall->
regions.end() != it; ++it) {
475 Main_hall->
bitmap =
"vhallhead";
484 Main_hall->
bitmap =
"2_vhallhead";
494 nprintf((
"General",
"WARNING! Couldn't load main hall background bitmap %s\n", Main_hall->
bitmap.c_str()));
506 nprintf((
"General",
"WARNING! Couldn't load main hall background mask %s\n", Main_hall->
mask.c_str()));
508 Error(
LOCATION,
"Could not load in main hall mask '%s'!\n\n(This error most likely means that you are missing required 640x480 interface art.)", Main_hall->
mask.c_str());
510 Error(
LOCATION,
"Could not load in main hall mask '%s'!\n\n(This error most likely means that you are missing required 1024x768 interface art.)", Main_hall->
mask.c_str());
533 Main_hall_misc_anim.clear();
539 Main_hall_misc_anim.push_back(temp_anim);
540 Main_hall_misc_anim.at(idx).ani.bg_type = bg_type;
542 nprintf((
"General",
"WARNING!, Could not load misc %s anim in main hall\n",Main_hall->
misc_anim_name.at(idx).c_str()));
557 Main_hall_door_anim.clear();
563 Main_hall_door_anim.push_back(temp_anim);
564 Main_hall_door_anim.at(idx).ani.bg_type = bg_type;
566 nprintf((
"General",
"WARNING!, Could not load door anim %s in main hall\n",Main_hall->
door_anim_name.at(idx).c_str()));
584 if (Main_hall_f1_text_frame == 0) {
594 Main_hall_door_sound_handles.clear();
596 Main_hall_door_sound_handles.push_back(-1);
655 int code,
key, snazzy_action, region_action = -1;
690 bool cheat_anim_found, cheat_found =
false;
692 for (
int c_idx = 0; c_idx < (
int) Main_hall->
cheat.size(); c_idx++) {
693 cheat_anim_found =
false;
703 cur_frame = Main_hall_misc_anim.at(
idx).current_frame;
704 anim_time = Main_hall_misc_anim.at(
idx).anim_time;
710 nprintf((
"General",
"WARNING! Could not load misc %s anim in main hall\n", Main_hall->
misc_anim_name.at(
idx).c_str()));
717 Main_hall_misc_anim.at(
idx).current_frame = cur_frame;
718 Main_hall_misc_anim.at(
idx).anim_time = anim_time;
723 cheat_anim_found =
true;
728 if (!cheat_anim_found) {
733 cur_frame = Main_hall_door_anim.at(
idx).current_frame;
734 anim_time = Main_hall_door_anim.at(
idx).anim_time;
740 nprintf((
"General",
"WARNING! Could not load door anim %s in main hall\n", Main_hall->
door_anim_name.at(
idx).c_str()));
745 Main_hall_door_anim.at(
idx).current_frame = cur_frame;
746 Main_hall_door_anim.at(
idx).anim_time = anim_time;
748 cheat_anim_found =
true;
754 if (!cheat_anim_found) {
756 nprintf((
"General",
"Could not find animation '%s' for cheat '%s'!", Main_hall->
cheat_anim_from.at(c_idx).c_str(), Main_hall->
cheat.at(c_idx).c_str()));
792 switch (snazzy_action) {
794 for (it = Main_hall->
regions.begin(); Main_hall->
regions.end() != it; ++it) {
795 if (it->mask == code) {
812 for (it = Main_hall->
regions.begin(); Main_hall->
regions.end() != it; ++it) {
813 if (it->mask == code) {
814 region_action = it->action;
819 if (region_action == -1) {
830 switch (region_action) {
924 const char *lua = it->lua_action.c_str();
927 Warning(
LOCATION,
"mainhall '+Door Action / $Script' failed to evaluate \"%s\"; check your syntax", lua);
994 int rc =
popup(0, 3,
XSTR(
"Go to Campaign Room", 1607),
XSTR(
"Select another pilot", 1608),
XSTR(
"Exit Game", 1609),
XSTR(
"The currently active campaign cannot be found. Please select another...", 1600));
1049 if (Main_hall_misc_anim.at(idx).num_frames > 0) {
1056 if (Main_hall_door_anim.at(idx).num_frames > 0) {
1063 if ( (Main_hall_door_sound_handles.at(idx) != -1) &&
snd_is_playing(Main_hall_door_sound_handles.at(idx)) ) {
1064 snd_stop(Main_hall_door_sound_handles.at(idx));
1065 Main_hall_door_sound_handles.at(idx) = -1;
1088 Main_hall_paused = 0;
1105 if (main_hall_num < 0) {
1148 if (Main_hall_music_index < 0) {
1149 nprintf((
"Warning",
"No music file exists to play music at the main menu!\n"));
1154 Assert(filename != NULL);
1159 nprintf((
"Warning",
"No music file exists to play music at the main menu!\n"));
1184 std::deque<bool> group_anims_weve_checked;
1185 int idx, s_idx, jdx;
1190 group_anims_weve_checked.push_back(
false);
1193 if (Main_hall_misc_anim.at(idx).num_frames > 0 && Main_hall->
misc_anim_over_doors.at(idx) == over_doors) {
1204 if (group_anims_weve_checked.at(idx) ==
false) {
1206 bool all_neg1 =
true;
1211 Assert(group_anims_weve_checked.size() < INT_MAX);
1212 if ((
int)group_anims_weve_checked.size() <= jdx) {
1213 group_anims_weve_checked.push_back(
true);
1215 group_anims_weve_checked.at(jdx) =
true;
1218 group_indexes.push_back(jdx);
1228 Assert(group_indexes.size() < INT_MAX);
1229 regen_idx = group_indexes[rand() % (
int)group_indexes.size()];
1237 if (regen_idx >= 0) {
1246 Main_hall_misc_anim.at(idx).current_frame = 0;
1247 Main_hall_misc_anim.at(idx).anim_time = 0.0;
1286 if (Main_hall_misc_anim.at(idx).current_frame == Main_hall_misc_anim.at(idx).num_frames - 1) {
1324 Assert(Main_hall_door_anim.size() < INT_MAX);
1325 for (idx = 0; idx < (
int)Main_hall_door_anim.size(); idx++) {
1326 if (Main_hall_door_anim.at(idx).num_frames > 0) {
1344 if (cur_region >= (
int) Main_hall->
regions.size()) {
1350 if (cur_region != -1) {
1393 else if (region >= (
int) Main_hall_door_anim.size()) {
1401 if (Main_hall_door_anim.at(region).num_frames > 0) {
1403 if (Main_hall_door_sound_handles.at(region) != -1) {
1404 snd_stop(Main_hall_door_sound_handles.at(region));
1416 (
float)((Main_hall_door_anim.at(region).keyframe) ? Main_hall_door_anim.at(region).keyframe :
1417 Main_hall_door_anim.at(region).num_frames - Main_hall_door_anim.at(region).current_frame) /
1418 (
float)Main_hall_door_anim.at(region).num_frames, 1);
1432 else if (region >= (
int) Main_hall_door_anim.size()) {
1439 if (!Main_hall_door_anim.at(region).keyframe) {
1445 if (Main_hall_door_sound_handles.at(region) != -1) {
1446 snd_stop(Main_hall_door_sound_handles.at(region));
1458 if ( (Main_hall_door_anim.at(region).num_frames > 0) && (Main_hall_door_anim.at(region).current_frame != -1) ) {
1460 (
float)Main_hall_door_anim.at(region).current_frame / (
float)Main_hall_door_anim.at(region).num_frames,1);
1524 Assert(Main_hall_door_sound_handles.size() < INT_MAX);
1525 for (idx = 0; idx < (
int)Main_hall_door_sound_handles.size(); idx++) {
1526 if ( (Main_hall_door_sound_handles.at(idx) != -1) && !
snd_is_playing(Main_hall_door_sound_handles.at(idx)) ) {
1527 Main_hall_door_sound_handles.at(idx) = -1;
1552 if (Main_hall_paused) {
1636 int play_ambient_loop = 0;
1638 if (Main_hall_paused) {
1643 play_ambient_loop = 1;
1646 play_ambient_loop = 1;
1650 if (play_ambient_loop) {
1684 char version_string[100];
1759 Main_hall_f1_text_frame++;
1769 int y_anim_offset = Main_hall_f1_text_frame;
1773 Main_hall_f1_text_frame = -1;
1799 for (i = 0; i < Main_hall_defines.size(); i++) {
1800 if (Main_hall_defines.at(i).at(0).name == name_to_find) {
1819 for (i = 0; i < Main_hall_defines.size(); i++) {
1820 if (Main_hall_defines.at(i).at(0).name == name_to_find) {
1832 for (i = Main_hall_defines.at(main_hall_num).size() - 1; i >= 1; i--) {
1843 if (index>=Main_hall_defines.size()) {
1846 name = Main_hall_defines.at(index).at(0).name;
1852 if (Main_hall==NULL) {
1861 if (Main_hall==NULL) {
1871 if (Main_hall==NULL) {
2054 Main_hall_defines.clear();
2070 int idx, s_idx, m_idx;
2071 int num_resolutions = 2;
2086 if (num_resolutions < 1) {
2087 Error(
LOCATION,
"$Num Resolutions in %s is %d. (Must be 1 or greater)", filename, num_resolutions);
2091 count = Main_hall_defines.size();
2093 Main_hall_defines.push_back(temp_vector);
2095 for (m_idx = 0; m_idx < num_resolutions; m_idx++) {
2096 Main_hall_defines.at(count).push_back(temp);
2097 m = &Main_hall_defines.at(count).at(m_idx);
2109 m->
name = temp_string;
2112 Error(
LOCATION,
"A mainhall with the name '%s' already exists. All mainhalls must have unique names.", temp_string);
2117 m->
name = temp_string;
2129 if (strcmp(temp_string, Main_hall_defines.at(count).at(0).name.c_str()) != 0) {
2130 Error(
LOCATION,
"The mainhall '%s' has different names for different resolutions. All resolutions must have the same name. Either remove the hi-res entries' names entirely or set them to match the first resolution entry's name.", Main_hall_defines.at(0).at(count).name.c_str());
2134 m->
name = Main_hall_defines.at(count).at(0).name;
2140 m->
cheat.push_back(temp_scp_string);
2162 else if (m_idx == 0) {
2186 m->
mask = temp_string;
2306 for (s_idx = 0; s_idx < temp_int; s_idx++) {
2386 mask = (
int)strtol(temp_string, NULL, 0);
2389 if (idx >= (
int)m->
regions.size()) {
2398 if (idx >= (
int)m->
regions.size()) {
2410 for (
int i = 0; Main_hall_region_map[
i].
name != NULL;
i++) {
2411 if (temp_scp_string == Main_hall_region_map[
i].
name) {
2412 action = Main_hall_region_map[
i].
mask;
2419 for (
int i = 0; Main_hall_region_map[
i].
name != NULL;
i++) {
2423 err_msg += Main_hall_region_map[
i].
name;
2426 Error(
LOCATION,
"Unkown Door Region '%s'! Expected one of: %s", temp_scp_string.c_str(), err_msg.c_str());
2447 if (temp_scp_string !=
"default") {
2448 if (idx >= (
int)m->
regions.size()) {
2452 m->
regions[
idx].description = temp_scp_string;
2493 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n", filename, e.what()));
2521 if (Main_hall_paused) {
2525 Main_hall_paused = 1;
2537 if (!Main_hall_paused) {
2541 Main_hall_paused = 0;
#define MISC_ANIM_MODE_TIMED
void bm_unlock(int handle)
Unlocks a bitmap.
void advance_to_eoln(char *more_terminators)
int timestamp(int delta_ms)
int gr_get_current_fontnum()
void mouse_set_pos(int xpos, int ypos)
void parse_main_hall_table(const char *filename)
int Cmdline_freespace_no_music
GLfloat GLfloat GLfloat GLfloat h
char Recent_missions[MAX_RECENT_MISSIONS][MAX_FILENAME_LEN]
#define READY_ROOM_REGION
char Game_current_mission_filename[MAX_FILENAME_LEN]
#define MOUSE_LEFT_BUTTON
main_hall_region_info Main_hall_region_map[]
SCP_vector< int > misc_anim_paused
int main_hall_get_overlay_resolution_index()
bitmap * Main_hall_mask_bitmap
int Main_hall_ambient_loop
SCP_vector< SCP_string > cheat_anim_from
void main_hall_mouse_release_region(int region)
void main_hall_process_help_stuff()
SCP_vector< float > door_sound_pan
int snazzy_menu_do(ubyte *data, int mask_w, int mask_h, int num_regions, MENU_REGION *regions, int *action, int poll_key, int *key)
int gr_get_resolution_class(int width, int height)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
#define NETWORK_ERROR_CONNECT_TO_ISP
int Main_hall_region_linger_stamp
void main_hall_handle_right_clicks()
#define GR_NUM_RESOLUTIONS
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
int num_random_intercom_sounds
ambient sound for the Terran main hall (looping)
#define QUICK_START_REGION
int bm_get_info(int handle, int *w, int *h, ubyte *flags, int *nframes, int *fps)
Gets info on the bitmap indexed by handle.
void main_hall_start_ambient()
#define NETWORK_ERROR_NO_PROTOCOL
int snd_is_playing(int sig)
#define Assertion(expr, msg,...)
ubyte * Main_hall_mask_data
#define GR_MAYBE_CLEAR_RES(bmap)
int help_overlay_resolution_index
int main_hall_get_overlay_id()
#define MULTIPLAYER_REGION
void gr_set_screen_scale(int w, int h, int zoom_w, int zoom_h, int max_w, int max_h, int center_w, int center_h, bool force_stretch)
char Main_hall_notify_text[300]
void help_overlay_set_state(int overlay_id, int resolution_index, int state)
void gr_set_color_fast(color *dst)
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
#define MAIN_HALL_HELP_TIME
int key_to_ascii(int keycode)
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot.
SCP_vector< SCP_vector< int > > misc_anim_coords
SCP_vector< int > misc_anim_group
bool Campaign_room_no_campaigns
void snazzy_menu_add_region(MENU_REGION *region, const char *text, int mask, int key, int click_sound)
script_state Script_system("FS2_Open Scripting")
SCP_vector< SCP_vector< main_hall_defines > > Main_hall_defines
#define MISC_ANIM_MODE_LOOP
void misc_anim_init(main_hall_defines &m)
void stuff_float(float *f)
#define BMP_AABITMAP
antialiased bitmap
void game_increase_skill_level()
void generic_anim_unload(generic_anim *ga)
SCP_string Main_hall_cheat
int Campaign_file_missing
SCP_vector< SCP_vector< int > > door_sounds
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define GENERIC_ANIM_DIRECTION_FORWARDS
void parse_sound(const char *tag, int *idx_dest, const char *object_name, parse_sound_flags flags)
SCP_string substitute_music_name
void main_hall_table_init()
void main_hall_notify_do()
#define NETWORK_ERROR_LAN_AND_RAS
int Main_hall_last_clicked_region
main_hall_defines * main_hall_get_pointer(const SCP_string &name_to_find)
int cf_exists_full(const char *filename, int dir_type)
void region_info_init(main_hall_defines &m)
#define NETWORK_ERROR_NONE
void _cdecl gr_printf_menu_zoomed(int x, int y, const char *format,...)
void main_hall_render_misc_anims(float frametime, bool over_doors)
void main_hall_do_multi_ready()
void stuff_string(char *outstr, int type, int len, char *terminators)
SCP_vector< int > misc_anim_modes
void movie_play_two(char *name1, char *name2)
SCP_vector< SCP_string > cheat
void generic_anim_render(generic_anim *ga, float frametime, int x, int y, bool menu)
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void gr_shade(int x, int y, int w, int h, int resize_mode)
SCP_vector< SCP_string > cheat_anim_to
void get_version_string()
void main_hall_stop_ambient()
void main_hall_set_notify_string(const char *str)
int required_string(const char *pstr)
#define NETWORK_ERROR_NO_WINSOCK
SCP_vector< int > Main_hall_door_sound_handles
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
int psnet_get_network_status()
void main_hall_cull_door_sounds()
void main_hall_render_door_anims(float frametime)
#define CONNECTION_SPEED_NONE
int Multi_connection_speed
void main_hall_reset_ambient_vol()
int optional_string(const char *pstr)
bitmap * bm_lock(int handle, ubyte bpp, ubyte flags, bool nodebug)
Locks down the bitmap indexed by bitmapnum.
int Main_hall_notify_stamp
SCP_vector< bool > misc_anim_over_doors
#define GR_1024_THRESHOLD_WIDTH
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
#define NUM_MAIN_HALL_MAX_REGIONS
int psnet_use_protocol(int protocol)
void main_hall_blit_version()
#define SKILL_LEVEL_REGION
void main_hall_get_name(SCP_string &name, unsigned int index)
void audiostream_unpause(int i, bool via_sexp_or_script)
#define LOAD_MISSION_REGION
int Main_hall_intercom_sound_handle
shader Main_hall_tooltip_shader
int Main_hall_music_handle
int main_hall_is_vasudan()
SCP_vector< game_snd > Snds_iface
SCP_vector< generic_anim > Main_hall_misc_anim
const char * XSTR(const char *str, int index)
#define MAIN_HALL_NOTIFY_TIME
int mission_load_up_campaign(player *pl)
void main_hall_blit_table_status()
void main_hall_handle_random_intercom_sounds()
void stuff_boolean(int *i, bool a_to_eol)
SCP_vector< float > misc_anim_sound_pan
void main_hall_maybe_blit_tooltips()
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
Parse the list of sounds SCP style (just indexes and/or files names, no count first) ...
int Main_hall_right_click
void main_hall_handle_region_anims()
menu_music Spooled_music[MAX_SPOOLED_MUSIC]
void reset_parse(char *text)
void main_hall_handle_mouse_location(int cur_region)
GLuint const GLchar * name
__inline void gr_line(int x1, int y1, int x2, int y2, int resize_mode=GR_RESIZE_FULL)
int main_hall_get_resolution_index(int main_hall_num)
int max_w_unscaled_zoomed
void main_hall_exit_game()
int Main_hall_next_intercom_sound
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
void audiostream_close_file(int i, int fade)
bool gr_resize_screen_pos(int *x, int *y, int *w, int *h, int resize_mode)
#define GENERIC_ANIM_DIRECTION_NOLOOP
void door_anim_init(main_hall_defines &m)
SCP_vector< int > intercom_sounds
#define MOUSE_RIGHT_BUTTON
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
void main_hall_do(float frametime)
SCP_vector< SCP_vector< int > > misc_anim_special_trigger
#define GR_1024_THRESHOLD_HEIGHT
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0)
SCP_vector< main_hall_region > regions
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
void generic_anim_init(generic_anim *ga)
SCP_vector< SCP_vector< int > > intercom_delay
Search for sound in the interface part of sounds.tbl.
int snd_play_looping(game_snd *gs, float pan, int start_loop, int stop_loop, float vol_scale, int scriptingUpdateVolume)
int Main_hall_mouse_region
void mission_campaign_jump_to_mission(char *name, bool no_skip)
void main_hall_vasudan_funny()
#define MAIN_HALL_REGION_LINGER
void snd_set_volume(int sig, float volume)
float Master_event_music_volume
void gr_reset_screen_scale()
void snd_set_pos(int snd_handle, game_snd *gs, float val, int as_pct)
void main_hall_start_music()
const char * Skill_level_names(int skill_level, int translate=1)
#define timestamp_elapsed(stamp)
ptr_u data
Pointer to data, or maybe offset into VRAM.
void intercom_sounds_init(main_hall_defines &m)
BM_TYPE bm_get_type(int handle)
Returns the image type of the given bitmap handle.
void audiostream_play(int i, float volume, int looping)
bool EvalString(const char *string, const char *format=NULL, void *rtn=NULL, const char *debug_str=NULL)
bool movie_play(char *name)
#define NETWORK_ERROR_NO_TYPE
int parse_modular_table(const char *name_check, void(*parse_callback)(const char *filename), int path_type, int sort_type)
void gr_bitmap(int _x, int _y, int resize_mode)
void main_hall_campaign_cheat()
SCP_vector< float > intercom_sound_pan
int event_music_get_spooled_music_index(const char *name)
int audiostream_open(const char *filename, int type)
void gr_create_shader(shader *shade, ubyte r, ubyte g, ubyte b, ubyte c)
#define MAIN_HALL_MAX_CHEAT_LEN
#define PLAYER_FLAGS_IS_MULTI
void audiostream_pause(int i, bool via_sexp_or_script)
SCP_vector< SCP_vector< int > > door_anim_coords
void gamesnd_play_iface(int n)
SCP_vector< SCP_vector< int > > misc_anim_sound_flag
void gr_set_font(int fontnum)
void parse_sound_list(const char *tag, SCP_vector< int > &destination, const char *object_name, parse_sound_flags flags)
void main_hall_stop_music(bool fade)
int main_hall_get_index(const SCP_string &name_to_find)
void gr_set_shader(shader *shade)
SCP_vector< SCP_vector< int > > misc_anim_delay
int help_overlay_get_index(const char *overlay_name)
int generic_anim_stream(generic_anim *ga)
SCP_vector< generic_anim > Main_hall_door_anim
int Cmdline_reparse_mainhall
void gameseq_post_event(int event)
void main_hall_mouse_grab_region(int region)
void main_hall_init(const SCP_string &main_hall_name)
int main_hall_get_music_index(int main_hall_num)
SCP_vector< SCP_string > misc_anim_name
multi_global_options Multi_options_g
void help_overlay_maybe_blit(int overlay_id, int resolution_index)
int help_overlay_active(int overlay_id)
SCP_vector< SCP_string > door_anim_name
int max_h_unscaled_zoomed
SCP_vector< SCP_vector< int > > misc_anim_special_sounds
cmission missions[MAX_CAMPAIGN_MISSIONS]
#define GENERIC_ANIM_DIRECTION_BACKWARDS
void game_process_cheats(int k)
#define CAMPAIGN_ROOM_REGION
int Main_hall_next_intercom_sound_stamp
MENU_REGION Main_hall_region[NUM_MAIN_HALL_MAX_REGIONS]
void mission_campaign_load_failure_popup()
SCP_string help_overlay_name
#define GR_RESIZE_MENU_ZOOMED
int Game_weapons_tbl_valid
#define MISC_ANIM_MODE_HOLD