53 #define MAX_TOTAL_DEBRIEF_LINES 200
55 #define TEXT_TYPE_NORMAL 1
56 #define TEXT_TYPE_RECOMMENDATION 2
58 #define DEBRIEF_NUM_STATS_PAGES 4
59 #define DEBRIEF_MISSION_STATS 0
60 #define DEBRIEF_MISSION_KILLS 1
61 #define DEBRIEF_ALLTIME_STATS 2
62 #define DEBRIEF_ALLTIME_KILLS 3
64 #define DEBRIEFING_FONT FONT1
110 #define MULTI_LIST_TEAM_OFFSET 16
167 #define DB_WITH_MEDAL 0
168 #define DB_WITHOUT_MEDAL 1
191 #define NUM_BUTTONS 18
194 #define DEBRIEF_TAB 0
196 #define TEXT_SCROLL_UP 2
197 #define TEXT_SCROLL_DOWN 3
198 #define REPLAY_MISSION 4
199 #define RECOMMENDATIONS 5
200 #define FIRST_STAGE 6
204 #define MULTI_PINFO_POPUP 10
205 #define MULTI_KICK 11
206 #define MEDALS_BUTTON 12
207 #define PLAYER_SCROLL_UP 13
208 #define PLAYER_SCROLL_DOWN 14
209 #define HELP_BUTTON 15
210 #define OPTIONS_BUTTON 16
211 #define ACCEPT_BUTTON 17
278 #define NUM_DEBRIEF_TEXT 10
279 #define MP_TEXT_INDEX_1 4
280 #define MP_TEXT_INDEX_2 5
281 #define MP_TEXT_INDEX_3 6
315 static int Background_bitmap;
316 static int Award_bg_bitmap;
317 static int Debrief_multi_loading_bitmap;
318 static int Rank_bitmap;
319 static int Medal_bitmap;
320 static int Badge_bitmap;
323 static int Debrief_accepted;
324 static int Turned_traitor;
325 static int Must_replay_mission;
327 static int Current_mode;
329 static int Recommend_active;
330 static int Award_active;
331 static int Text_offset;
332 static int Num_text_lines = 0;
334 static int Debrief_inited = 0;
335 static int New_stage;
336 static int Current_stage;
337 static int Num_stages;
338 static int Num_debrief_stages;
339 static int Stage_voice = -1;
340 static int Debrief_music_timeout = 0;
342 static int Multi_list_size;
343 static int Multi_list_offset;
355 #define DEBRIEF_VOICE_DELAY 400 // time to delay voice playback when a new stage starts
356 static int Debrief_cue_voice;
357 static int Debrief_first_voice_flag = 1;
359 static int Debriefing_paused = 0;
377 static int Debrief_skip_popup_already_shown = 0;
385 #define NUM_VOLITION_CAMPAIGNS 1
387 char campaign_name[32];
440 {
"loop1-1.fs2", 4 },
441 {
"loop1-2.fs2", 4 },
442 {
"loop1-3.fs2", 5 },
443 {
"loop2-1.fs2", 4 },
453 #define AWARD_TEXT_MAX_LINES 5
454 #define AWARD_TEXT_MAX_LINE_LENGTH 128
471 return XSTR(
"Medal", 435);
476 return XSTR(
"Rank", 436);
481 return XSTR(
"Badge", 437);
485 if (Medal_bitmap >= 0){
490 if (Rank_bitmap >= 0){
495 if (Badge_bitmap >= 0){
509 Debrief_voices[
i] = -1;
515 int load_attempts = 0;
518 if ( load_attempts++ > 5 ) {
523 if ( Debrief_voices[voice_num] >= 0 ) {
550 for ( i=0; i<Num_debrief_stages; i++ ) {
551 if ( strlen(Debrief_stages[i]->voice) <= 0 ) {
554 if (
strnicmp(Debrief_stages[i]->voice,
NOX(
"none"), 4) ) {
567 if ( Debrief_voices[i] != -1 ) {
569 Debrief_voices[
i] = -1;
582 if (Stage_voice >= Num_debrief_stages){
587 if (Debrief_cue_voice) {
593 if ((Stage_voice < Num_debrief_stages) && (Debrief_voices[Stage_voice] >= 0)) {
595 Debrief_cue_voice = 0;
613 if ((Stage_voice < 0) || (Stage_voice > Num_debrief_stages) || (Debrief_voices[Stage_voice] < 0))
626 if (Debriefing_paused)
629 Debriefing_paused = 1;
635 if ((Stage_voice < 0) || (Stage_voice > Num_debrief_stages) || (Debrief_voices[Stage_voice] < 0))
645 if (!Debriefing_paused)
648 Debriefing_paused = 1;
654 if ((Stage_voice < 0) || (Stage_voice > Num_debrief_stages) || (Debrief_voices[Stage_voice] < 0))
670 if ( Badge_bitmap >= 0 ) {
672 for ( i = Num_debrief_stages; i > 0; i-- ) {
673 Debrief_stages[
i] = Debrief_stages[i-1];
675 Debrief_stages[0] = &Badge_stage;
676 Num_debrief_stages++;
679 if ( Promoted >= 0) {
681 for ( i = Num_debrief_stages; i > 0; i-- ) {
682 Debrief_stages[
i] = Debrief_stages[i-1];
684 Debrief_stages[0] = &Promotion_stage;
685 Num_debrief_stages++;
704 Num_debrief_stages = 0;
707 for (i = 0; i < stage_count; i++) {
723 memset( stage_active, 0,
sizeof(stage_active) );
728 stages[
i] = stage_active[
i];
731 stage_active[
i][num_stages] = j;
736 stage_count[
i] = num_stages;
765 Num_debrief_stages = 0;
781 Num_debrief_stages = 0;
783 Debrief_stages[Num_debrief_stages++] = &Promotion_stage;
786 if (Badge_bitmap >= 0) {
787 Debrief_stages[Num_debrief_stages++] = &Badge_stage;
792 Debrief_stages[Num_debrief_stages++] = &debriefp->
stages[
i];
796 return Num_debrief_stages;
807 b->
button.
create( &Debrief_ui_window,
"", b->
x, b->
y, 60, 30, 0 , 1 );
876 if ( Background_bitmap < 0 ) {
877 Warning(
LOCATION,
"Could not load the background bitmap for debrief screen");
923 if (persona_index >= 0)
926 sprintf(voice_dest,
NOX(
"%d_%s"), persona_index, voice_base);
938 strcpy(voice_dest, voice_base);
943 strcpy(voice_dest,
"9_");
944 strcpy(voice_dest + 2, voice_base);
950 Assert(buf != NULL && medal_earned >= 0 && zero_based_version_index >= 0);
956 char *
p = strstr(buf,
"##");
963 if (zero_based_version_index >=
Medals[medal_earned].num_versions)
964 version =
Medals[medal_earned].num_versions - 1;
966 version = zero_based_version_index;
969 if (
Medals[medal_earned].version_starts_at_1)
973 Assert(strlen(number) == 2);
974 strncpy(p, number, 2);
1044 if ((Rank_bitmap >= 0) || (Medal_bitmap >= 0) || (Badge_bitmap >= 0)) {
1076 stagep = &debrief->
stages[stage_num++];
1102 mprintf((
"TABLES: Unable to parse '%s'! Error message = %s.\n",
"traitor.tbl", e.what()));
1108 Debrief_accepted = 0;
1109 Turned_traitor = Must_replay_mission = 0;
1116 Must_replay_mission = 1;
1120 if (Turned_traitor || Must_replay_mission) {
1132 Multi_list_size = 0;
1133 Multi_list_offset = 0;
1151 if(Multi_list_offset == 0){
1157 Multi_list_offset--;
1174 Multi_list_offset++;
1181 int y,
z, font_height,
idx;
1191 for(idx=0;idx<Multi_list_size;idx++){
1206 z = Multi_list_offset;
1210 if (z >= Multi_list_size){
1264 strcpy_s(str,Multi_list[z].callsign);
1292 if (mission_loop_desc == NULL) {
1293 strcpy(buffer,
XSTR(
"<No Mission Loop Description Available>", 1490));
1294 mprintf((
"No mission loop description available\n"));
1296 strcpy(buffer, mission_loop_desc);
1299 strcat(buffer,
XSTR(
"\n\n\nDo you want to play the optional mission?", 1491));
1307 Weapon_energy_cheat=0;
1318 str =
XSTR(
"Your career is over, Traitor! You can't accept new missions!", 439);
1322 str =
XSTR(
"You have failed this mission and cannot accept. What do you you wish to do instead?", 441);
1325 z =
popup(0, 3,
XSTR(
"Return to &Debriefing", 442),
XSTR(
"Go to &Flight Deck", 443),
XSTR(
"&Replay Mission", 444), str);
1328 }
else if ( z == 1 ) {
1335 Debrief_accepted = 1;
1342 int play_commit_sound = 1;
1377 if (go_loop && ok_to_post_start_game_event) {
1395 if ( ok_to_post_start_game_event ) {
1398 play_commit_sound = 0;
1417 New_mode = Current_mode + 1;
1424 New_mode = Current_mode - 1;
1434 if (Current_stage < Num_stages - 1) {
1435 New_stage = Current_stage + 1;
1447 if (Current_stage) {
1448 New_stage = Current_stage - 1;
1459 if (Current_stage) {
1471 if (Current_stage != Num_stages - 1) {
1472 New_stage = Num_stages - 1;
1488 sprintf(buf,
XSTR(
"%d of %d", 445), Current_stage + 1, Num_stages);
1516 int i,
y, font_height;
1529 switch ( Current_stage ) {
1531 i = Current_stage - 1;
1543 i = Current_stage - 1;
1555 if (i >= Num_text_lines)
1566 Assert(Debrief_stats_kills != NULL);
1576 if (Num_text_lines == 2) {
1598 choice =
popup(0, 2,
POPUP_CANCEL,
XSTR(
"&Replay", 451),
XSTR(
"If you choose to replay this mission, you will be required to complete it again before proceeding to future missions.\n\nIn addition, any statistics gathered during this mission will be discarded if you choose to replay.", 452));
1638 if (num != Current_mode){
1646 if (num != Current_mode){
1680 Recommend_active = !Recommend_active;
1748 if(Debrief_stats_kills == NULL)
1753 Assert(Debrief_player != NULL);
1768 if ( kill_arr[i] <= 0 ){
1773 kill_info = &Debrief_stats_kills[Num_text_lines++];
1775 kill_info->
num = kill_arr[
i];
1781 Num_text_lines += 2;
1803 if ((z >= 0) && (z < Multi_list_size)) {
1830 bool use_sim_speech =
true;
1832 if(Debrief_voices[i] != -1) {
1833 use_sim_speech =
false;
1843 for (i=0; i<Num_debrief_stages; i++) {
1848 src = Debrief_stages[
i]->
text.c_str();
1853 if (use_sim_speech && !Recommend_active) {
1859 if (Recommend_active) {
1862 if ((i == Num_debrief_stages - 1) && !r_count && !*src)
1863 src =
XSTR(
"We have no recommendations for you.", 1054);
1871 if (use_sim_speech) {
1880 if(use_sim_speech) {
1896 static void debrief_init_music()
1900 Debrief_music_timeout = 0;
1916 Debrief_music_timeout =
timestamp(2000);
1953 Recommend_active = Award_active = 0;
1957 Debrief_cue_voice = 0;
1959 Debrief_first_voice_flag = 1;
2002 if ( Num_debrief_stages <= 0 ) {
2003 Num_debrief_stages = 0;
2011 Num_debrief_stages = 0;
2027 debrief_init_music();
2047 if (!Award_active) {
2052 Debrief_skip_popup_already_shown = 0;
2090 if( !Debrief_accepted || !(
Game_mode & GM_CAMPAIGN_MODE) ){
2101 if (Debrief_accepted) {
2116 if (Background_bitmap >= 0){
2120 if (Award_bg_bitmap >= 0){
2124 if (Rank_bitmap >= 0){
2128 if (Medal_bitmap >= 0){
2132 if (Badge_bitmap >= 0){
2144 if(Debrief_stats_kills != NULL)
2146 delete[] Debrief_stats_kills;
2147 Debrief_stats_kills = NULL;
2153 Debriefing_paused = 0;
2179 if (!Turned_traitor && !Must_replay_mission && (
Game_mode & GM_CAMPAIGN_MODE)) {
2190 }
else if ( ( Turned_traitor || Must_replay_mission ) && (
Game_mode & GM_CAMPAIGN_MODE)) {
2192 choice =
popup(0, 2,
POPUP_NO,
POPUP_YES,
XSTR(
"Because this mission was a failure, you must replay this mission when you continue your campaign.\n\nReturn to the Flight Deck?", 457));
2211 int start_y, curr_y,
i,
x, sw;
2229 if ((i == 1) || (i == 3)) {
2267 Debrief_award_text_num_lines++;
2273 if (line2 != NULL) {
2276 Debrief_award_text_num_lines++;
2284 const char *please_wait_str =
XSTR(
"Please Wait", 1242);
2293 if ( !(( Turned_traitor || Must_replay_mission) && (
Game_mode & GM_CAMPAIGN_MODE)) )
2306 if (Background_bitmap >= 0) {
2311 Debrief_ui_window.
draw();
2313 if ( Debrief_multi_loading_bitmap > -1 ){
2359 new_k = Debrief_ui_window.
process(k);
2361 new_k = Debrief_ui_window.
process(k, 0);
2381 if ( Current_mode != New_mode ) {
2383 Current_mode = New_mode;
2388 Debrief_cue_voice = 0;
2390 if (Debrief_first_voice_flag) {
2392 Debrief_first_voice_flag = 0;
2399 if ((Num_stages > 0) && (New_stage != Current_stage)) {
2400 Current_stage = New_stage;
2409 Debrief_music_timeout = 0;
2429 if (Background_bitmap >= 0) {
2435 if ( Award_active && (Award_bg_bitmap >= 0) ) {
2438 if (Rank_bitmap >= 0) {
2443 if (Medal_bitmap >= 0) {
2448 if (Badge_bitmap >= 0) {
2457 Debrief_ui_window.
draw();
2460 if (Recommend_active && (Current_mode !=
STATS_TAB)) {
2470 #if !defined(NDEBUG)
2479 switch (Current_mode) {
2481 if ( Num_debrief_stages <= 0 ) {
2535 int popup_choice =
popup(0, 3,
XSTR(
"Do Not Skip This Mission", 1473),
2536 XSTR(
"Advance To The Next Mission", 1474),
2537 XSTR(
"Don't Show Me This Again", 1475),
2538 XSTR(
"You have failed this mission five times. If you like, you may advance to the next mission.", 1472) );
2539 switch (popup_choice) {
2555 Debrief_skip_popup_already_shown = 1;
2573 Multi_list_size = 0;
2579 list = &Multi_list[Multi_list_size++];
void set_highlight_action(void(*_user_function)(void))
#define DEBRIEF_MISSION_KILLS
int timestamp(int delta_ms)
void fsspeech_pause(bool playing)
#define MULTIPLAYER_CLIENT
#define MY_NET_PLAYER_NUM
void debrief_multi_list_draw()
SCP_vector< medal_stuff > Medals
float Brief_text_wipe_time_elapsed
int Briefing_voice_enabled
int Debrief_text_wnd_coords[GR_NUM_RESOLUTIONS][4]
int chatbox_create(int mode_flags)
void add_XSTR(char *string, int _xstr_id, int _x, int _y, UI_GADGET *_assoc, int _color_type, int _font_id=-1)
int Debrief_award_coords[GR_NUM_RESOLUTIONS][2]
char * Debrief_loading_bitmap_fname[GR_NUM_RESOLUTIONS]
void multi_campaign_eval_debrief()
int Debrief_award_text_num_lines
void debrief_check_buttons()
int kills[MAX_SHIP_CLASSES]
#define CF_TYPE_VOICE_DEBRIEFINGS
void scoring_level_init(scoring_struct *scp)
void debrief_last_stage()
char Game_current_mission_filename[MAX_FILENAME_LEN]
SCP_string recommendation_text
color Color_more_indicator
#define DEBRIEF_ALLTIME_STATS
#define DEBRIEF_VOICE_DELAY
#define PLAYER_SCROLL_DOWN
int Debrief_title_coords[GR_NUM_RESOLUTIONS][3]
void lcl_translate_medal_name_gr(char *name)
void show_stats_label(int stage, int sx, int sy, int dy)
const float BRIEF_TEXT_WIPE_TIME
int brief_color_text_init(const char *src, int w, const char default_color, int instance, int max_lines, const bool append)
#define MISSION_FLAG_TOGGLE_DEBRIEFING
#define MULTI_STANDALONE(np)
void debrief_traitor_init()
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void debrief_setup_ship_kill_stats(int stage_num)
#define GR_NUM_RESOLUTIONS
int debrief_find_persona_index()
#define NETINFO_FLAG_OBSERVER
__inline void gr_string(int x, int y, const char *string, int resize_mode=GR_RESIZE_FULL)
general failure sound for any event
ubyte debrief_persona_index
void debrief_kick_selected_player()
void debrief_multi_fixup_stages()
int Debrief_should_show_popup
#define DEBRIEFING_OVERLAY
#define GR_MAYBE_CLEAR_RES(bmap)
void common_music_close()
void debrief_redraw_pressed_buttons()
#define NETINFO_FLAG_OBS_PLAYER
void help_overlay_set_state(int overlay_id, int resolution_index, int state)
void set_ignore_gadgets(int state)
void gr_set_color_fast(color *dst)
void debrief_prev_stage()
void mission_campaign_mission_over(bool do_next_mission)
void debrief_multi_server_stuff()
color Color_text_active_hi
void gr_set_bitmap(int bitmap_num, int alphablend_mode, int bitblt_mode, float alpha)
void debrief_voice_stop()
void multi_debrief_replay_hit()
#define PLAYER_FLAGS_PROMOTED
GLenum GLuint GLenum GLsizei const GLchar * buf
const char *(* tooltip_handler)(const char *text)
#define PLAYER_MISSION_FAILURE_LIMIT
int bm_release(int handle, int clear_render_targets)
Frees both a bitmap's data and it's associated slot.
void debrief_voice_load_all()
char callsign[CALLSIGN_LEN+1]
void debrief_multi_list_init()
SCP_vector< int > m_badge_earned
void debrief_next_stage()
void multi_debrief_do_frame()
void debrief_replay_pressed()
void mission_campaign_skip_to_next(int start_game)
int audiostream_is_playing(int i)
void common_set_interface_palette(char *filename)
void mission_debrief_common_reset()
__inline void gr_set_clip(int x, int y, int w, int h, int resize_mode=GR_RESIZE_FULL)
void draw_forced(int frame_num)
void show_stats_numbers(int stage, int sx, int sy, int dy, int add_mission)
#define SCORE_DEBRIEF_FAIL
char * Debrief_mask_name[GR_NUM_RESOLUTIONS]
void set_mask_bmap(char *fname)
#define SCORE_DEBRIEF_AVERAGE
int set_bmaps(char *ani_filename, int nframes=3, int start_frame=1)
void game_format_time(long, char *)
void multi_kick_player(int player_index, int ban, int reason)
int Debrief_award_text_width[GR_NUM_RESOLUTIONS][2]
int m_okKills[MAX_SHIP_CLASSES]
void common_free_interface_palette()
void debrief_multi_list_scroll_down()
void scoring_backout_accept(scoring_struct *score)
#define NUM_VOLITION_CAMPAIGNS
void mission_campaign_store_goals_and_events()
int Debrief_text_x2[GR_NUM_RESOLUTIONS]
void set_player_stats(int pid)
void audiostream_stop(int i, int rewind, int paused)
void scoring_level_close(int accepted)
int cf_exists_full(const char *filename, int dir_type)
void fsspeech_start_buffer()
#define strnicmp(s1, s2, n)
void multi_pinfo_popup(net_player *np)
int Debrief_medal_text_coords[GR_NUM_RESOLUTIONS][3]
Switching to a new screen, but not commit.
void stuff_string(char *outstr, int type, int len, char *terminators)
int Debrief_stage_info_coords[GR_NUM_RESOLUTIONS][2]
void debrief_award_init()
#define MISSION_FLAG_END_TO_MAINHALL
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void debrief_first_stage()
void debrief_voice_play()
int required_string(const char *pstr)
int failures_this_session
SCP_vector< int > medal_counts
#define NETINFO_FLAG_GAME_HOST
int Briefing_music_handle
int Debrief_award_wnd_coords[GR_NUM_RESOLUTIONS][2]
void debrief_do_frame(float frametime)
void debrief_render_mission_difficulty(int y_loc)
void debrief_load_voice_file(int voice_num, char *name)
void debrief_render_mission_time(int y_loc)
#define NETPLAYER_STATE_DEBRIEF_REPLAY
char Mission_filename[80]
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
void debrief_handle_player_drop()
int Debrief_multi_voice_loaded
void debrief_stats_render()
void multi_debrief_init()
void audiostream_unpause(int i, bool via_sexp_or_script)
#define MULTI_LIST_TEAM_OFFSET
char voice[MAX_FILENAME_LEN]
GLint GLint GLint GLint GLint x
int debrief_set_stages_and_multi_stuff()
const char * XSTR(const char *str, int index)
user_click (mouse selects a control)
void debrief_voice_unload_all()
void fsspeech_play_buffer(int type)
char modified[DATE_TIME_LENGTH]
char callsign[CALLSIGN_LEN]
void debrief_multi_list_scroll_up()
void set_hotkey(int keycode)
char default_debriefing_color
void reset_parse(char *text)
char * Debrief_multi_name[GR_NUM_RESOLUTIONS]
GLuint const GLchar * name
void multi_debrief_esc_hit()
char background[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
#define AWARD_TEXT_MAX_LINES
char default_recommendation_color
void debrief_add_award_text(char *str)
bool sexp_replace_variable_names_with_values(char *text, int max_len)
void mission_campaign_store_variables()
int bm_load(const char *real_filename)
Loads a bitmap so we can draw with it later.
int multi_quit_game(int prompt, int notify_code, int err_code, int wsa_error)
GLboolean GLboolean GLboolean b
void debrief_button_pressed(int num)
void audiostream_close_file(int i, int fade)
debrief_stage stages[MAX_DEBRIEF_STAGES]
#define MULTI_PERM_OBSERVER(np)
#define DEBRIEF_MISSION_STATS
const char * debrief_tooltip_handler(const char *str)
#define DEBRIEF_ALLTIME_KILLS
void fsspeech_stuff_buffer(const char *text)
void mission_campaign_eval_next_mission()
void debrief_award_text_clear()
scroll pressed (and scroll)
void update_stats_backout(scoring_struct *stats, bool training=false)
void debrief_buttons_init()
void link_hotspot(int num)
void debrief_rebuild_player_list()
void multi_debrief_accept_hit()
void create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _w, int _h, int do_repeat=0, int ignore_focus=0)
#define DEBRIEF_NUM_STATS_PAGES
press briefing, ship selection or weapons bar (top-left)
const char * Resolution_prefixes[GR_NUM_RESOLUTIONS]
#define UI_XSTR_COLOR_PINK
voice_map Debrief_promotion_voice_mapping[NUM_VOLITION_CAMPAIGNS][MAX_CAMPAIGN_MISSIONS]
#define MULTI_CONNECTED(np)
void create(int _x, int _y, int _w, int _h, int _flags, int _f_id=-1)
int eval_sexp(int cur_node, int referenced_node)
#define NETPLAYER_STATE_DEBRIEF_ACCEPT
int gr_force_fit_string(char *str, int max_str, int max_width)
void debrief_accept(int ok_to_post_start_game_event=1)
int Please_wait_coords[GR_NUM_RESOLUTIONS][4]
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
void debrief_do_keys(int new_k)
void multi_debrief_close()
char * split_str_once(char *src, int max_pixel_w)
struct voice_map voice_map
char Debrief_award_text[AWARD_TEXT_MAX_LINES][AWARD_TEXT_MAX_LINE_LENGTH]
void debrief_assemble_optional_mission_popup_text(char *buffer, char *mission_loop_desc)
#define MULTIPLAYER_MASTER
SCP_map< int, char * > promotion_text
SCP_vector< ship_info > Ship_info
void common_play_highlight_sound()
#define MICON_TEAM0_SELECT
int Debrief_multi_list_team_max_display[GR_NUM_RESOLUTIONS]
const char * Skill_level_names(int skill_level, int translate=1)
#define timestamp_elapsed(stamp)
void multi_common_voice_display_status()
void get_mouse_pos(int *xx, int *yy)
#define MAX_DEBRIEF_LINES
v_campaign Volition_campaigns[NUM_VOLITION_CAMPAIGNS]
int chatbox_process(int key_in)
void audiostream_play(int i, float volume, int looping)
#define AWARD_TEXT_MAX_LINE_LENGTH
UI_XSTR Debrief_strings[GR_NUM_RESOLUTIONS][NUM_DEBRIEF_TEXT]
debriefing Debriefings[MAX_TVT_TEAMS]
char Debrief_current_callsign[CALLSIGN_LEN+10]
void debrief_disable_accept()
#define MICON_TEAM1_SELECT
int brief_render_text(int line_offset, int x, int y, int h, float frametime, int instance, int line_spacing)
void debrief_draw_award_text()
rank_stuff Ranks[NUM_RANKS]
#define MAX_CAMPAIGN_MISSIONS
void gr_bitmap(int _x, int _y, int resize_mode)
#define CAMPAIGN_LOOP_MISSION_UNINITIALIZED
void debrief_choose_voice(char *voice_dest, char *voice_base, int persona_index, int default_to_base=0)
#define UI_XSTR_COLOR_GREEN
#define SCORE_DEBRIEF_SUCCESS
void send_debrief_info(int stage_count[], int *stages[])
char filename[MAX_FILENAME_LEN]
int mission_ui_background_load(const char *custom_background, const char *single_background, const char *multi_background)
int audiostream_open(const char *filename, int type)
void debrief_render_stagenum()
int multi_debrief_stats_accept_code()
void audiostream_pause(int i, bool via_sexp_or_script)
void launch_context_help()
void gamesnd_play_iface(int n)
void debrief_choose_medal_variant(char *buf, int medal_earned, int zero_based_version_index)
struct ui_button_info ui_button_info
void gr_set_font(int fontnum)
#define MULTI_PINFO_POPUP
#define MISSION_FLAG_NO_TRAITOR
int process(int key_in=-1, int process_mouse=1)
int help_overlay_get_index(const char *overlay_name)
int Multi_common_icons[MULTI_NUM_COMMON_ICONS]
char promotion_voice_base[MAX_FILENAME_LEN]
int Debrief_award_text_coords[GR_NUM_RESOLUTIONS][3]
net_player Net_players[MAX_PLAYERS]
void _cdecl gr_printf_menu(int x, int y, const char *format,...)
void gameseq_post_event(int event)
#define CMISSION_FLAG_HAS_LOOP
void lcl_translate_medal_name_pl(char *name)
debriefing Traitor_debriefing
#define timestamp_valid(stamp)
void debrief_voice_init()
void help_overlay_maybe_blit(int overlay_id, int resolution_index)
int help_overlay_active(int overlay_id)
void debrief_set_multi_clients(int stage_count, int active_stages[])
char * Debrief_single_name[GR_NUM_RESOLUTIONS]
int Debrief_list_coords[GR_NUM_RESOLUTIONS][4]
float Master_voice_volume
cmission missions[MAX_CAMPAIGN_MISSIONS]
void common_music_init(int score_index)
int Debrief_multi_stages_loaded
#define MAX_DEBRIEF_STAGES
int Debrief_more_coords[GR_NUM_RESOLUTIONS][2]