void hud_scrollback_init() { int i; scrollback_buttons *b; // pause all game sounds beam_pause_sounds(); audiostream_pause_all(); common_set_interface_palette("BriefingPalette"); // set the interface palette Ui_window.create(0, 0, gr_screen.max_w, gr_screen.max_h, 0); Ui_window.set_mask_bmap(Hud_mission_log_mask_fname[gr_screen.res]); for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, (i < 2), 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add all strings #ifndef MAKE_FS1 Ui_window.add_XSTR("Continue", 1069, Buttons[gr_screen.res][ACCEPT_BUTTON].xt, Buttons[gr_screen.res][ACCEPT_BUTTON].yt, &Buttons[gr_screen.res][ACCEPT_BUTTON].button, UI_XSTR_COLOR_PINK); Ui_window.add_XSTR("Events", 1070, Buttons[gr_screen.res][SHOW_EVENTS_BUTTON].xt, Buttons[gr_screen.res][SHOW_EVENTS_BUTTON].yt, &Buttons[gr_screen.res][SHOW_EVENTS_BUTTON].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Objectives", 1071, Buttons[gr_screen.res][SHOW_OBJS_BUTTON].xt, Buttons[gr_screen.res][SHOW_OBJS_BUTTON].yt, &Buttons[gr_screen.res][SHOW_OBJS_BUTTON].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Messages", 1072, Buttons[gr_screen.res][SHOW_MSGS_BUTTON].xt, Buttons[gr_screen.res][SHOW_MSGS_BUTTON].yt, &Buttons[gr_screen.res][SHOW_MSGS_BUTTON].button, UI_XSTR_COLOR_GREEN); #endif // set up hotkeys for buttons so we draw the correct animation frame when a key is pressed Buttons[gr_screen.res][SCROLL_UP_BUTTON].button.set_hotkey(KEY_UP); Buttons[gr_screen.res][SCROLL_DOWN_BUTTON].button.set_hotkey(KEY_DOWN); Background_bitmap = bm_load(Hud_mission_log_fname[gr_screen.res]); #ifdef MAKE_FS1 Status_bitmap = bm_load(Hud_mission_log_status_fname[gr_screen.res]); #endif message_log_init_scrollback(Hud_mission_log_list_coords[gr_screen.res][2]); if (Scrollback_mode == SCROLLBACK_MODE_EVENT_LOG) Scroll_max = Num_log_lines * gr_get_font_height(); else if (Scrollback_mode == SCROLLBACK_MODE_OBJECTIVES) Scroll_max = Num_obj_lines * gr_get_font_height(); else Scroll_max = hud_query_scrollback_size(); Num_obj_lines = ML_objectives_init(Hud_mission_log_list_coords[gr_screen.res][0], Hud_mission_log_list_coords[gr_screen.res][1], Hud_mission_log_list_coords[gr_screen.res][2], Hud_mission_log_list_objective_x_coord[gr_screen.res]); hud_scroll_reset(); }
// Called once when red alert interface is started void red_alert_init() { int i; ui_button_info *b; if ( Red_alert_inited ) { return; } Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Red_alert_mask[gr_screen.res]); for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, 0, 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // all text for(i=0; i<RED_ALERT_NUM_TEXT; i++){ Ui_window.add_XSTR(&Red_alert_text[gr_screen.res][i]); } // set up red alert hotkeys Buttons[gr_screen.res][RA_CONTINUE].button.set_hotkey(KEY_CTRLED | KEY_ENTER); // hud_anim_init(&Flash_anim, Ra_flash_coords[gr_screen.res][RA_X_COORD], Ra_flash_coords[gr_screen.res][RA_Y_COORD], NOX("AlertFlash")); // hud_anim_load(&Flash_anim); Red_alert_voice = -1; if ( !Briefing ) { Briefing = &Briefings[0]; } // load in background image and flashing red alert animation Background_bitmap = mission_ui_background_load(Briefing->background[gr_screen.res], Red_alert_fname[gr_screen.res]); // Make sure word wrapping and rendering use the same font font::set_font(font::FONT1); if ( Briefing->num_stages > 0 ) { brief_color_text_init(Briefing->stages[0].text.c_str(), Ra_brief_text_wnd_coords[gr_screen.res][RA_W_COORD], default_redalert_briefing_color, 0); } red_alert_voice_load(); // we have to reset/setup the shipselect and weaponselect pointers before moving on ship_select_common_init(); weapon_select_common_init(); Text_delay = timestamp(200); Red_alert_voice_started = 0; Red_alert_inited = 1; }
// --------------------------------------------------------------------- // mission_hotkey_init() // // Initialize the hotkey assignment screen system. Called when GS_STATE_HOTKEY_SCREEN // is entered. // void mission_hotkey_init() { int i; hotkey_buttons *b; // pause all beam weapon sounds beam_pause_sounds(); // pause all game music audiostream_pause_all(); reset_hotkeys(); common_set_interface_palette(); // set the interface palette Ui_window.create(0, 0, gr_screen.max_w, gr_screen.max_h, 0); Ui_window.set_mask_bmap(Hotkey_mask_fname[gr_screen.res]); for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, i < 2 ? 1 : 0, 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add all xstr text for(i=0; i<HOTKEY_NUM_TEXT; i++) { Ui_window.add_XSTR(&Hotkey_text[gr_screen.res][i]); } for (i=0; i<LIST_BUTTONS_MAX; i++) { List_buttons[i].create(&Ui_window, "", 0, 0, 60, 30, (i < 2), 1); List_buttons[i].hide(); List_buttons[i].disable(); } // set up hotkeys for buttons so we draw the correct animation frame when a key is pressed Buttons[gr_screen.res][SCROLL_UP_BUTTON].button.set_hotkey(KEY_PAGEUP); Buttons[gr_screen.res][SCROLL_DOWN_BUTTON].button.set_hotkey(KEY_PAGEDOWN); // ensure help overlay is off help_overlay_set_state(HOTKEY_OVERLAY,0); // load in relevant bitmaps Background_bitmap = bm_load(Hotkey_background_fname[gr_screen.res]); if (Background_bitmap < 0) { // bitmap didnt load -- this is bad Int3(); } Wing_bmp = bm_load("WingDesignator"); if (Wing_bmp < 0) { // bitmap didnt load -- this is bad Int3(); } Scroll_offset = 0; Selected_line = 1; hotkey_build_listing(); }
// debrief void multi_df_debrief_init() { // no longer is mission Game_mode &= ~(GM_IN_MISSION); game_flush(); // call scoring level close for my stats. Needed for award_init. The stats will // be backed out if used chooses to replace them. scoring_level_close(); // multiplayer debriefing stuff multi_debrief_init(); // close down any old instances of the chatbox chatbox_close(); // create the new one chatbox_create(); // always play success music common_music_init(SCORE_DEBRIEF_SUCCESS); // setup kill matrix multi_df_setup_kill_matrix(); UI_WINDOW *w; ui_button_info *b; int idx; // load background bitmap Multi_df_background_bitmap = bm_load(Multi_df_background_fname[gr_screen.res]); Assert(Multi_df_background_bitmap); // create the UI window Multi_df_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Multi_df_window.set_mask_bmap(Multi_df_mask_fname[gr_screen.res]); // initialize the control buttons for (idx=0; idx<NUM_MULTI_DF_BUTTONS; idx++) { b = &Multi_df_buttons[gr_screen.res][idx]; // create the button b->button.create(&Multi_df_window, NULL, b->x, b->y, 60, 30, 1, 1); // set its highlight action b->button.set_highlight_action(common_play_highlight_sound); // set its animation bitmaps b->button.set_bmaps(b->filename); // link the mask hotspot b->button.link_hotspot(b->hotspot); } // add some text w = &Multi_df_window; w->add_XSTR("Accept", 1035, Multi_df_buttons[gr_screen.res][ACCEPT_BUTTON].xt, Multi_df_buttons[gr_screen.res][ACCEPT_BUTTON].yt, &Multi_df_buttons[gr_screen.res][ACCEPT_BUTTON].button, UI_XSTR_COLOR_PINK); }
void cutscenes_screen_init() { int i; ui_button_info *b; Ui_window.create(0, 0, gr_screen.max_w, gr_screen.max_h, 0); Ui_window.set_mask_bmap(Cutscene_mask_name[gr_screen.res]); for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, (i < 2), 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add xstrs for(i=0; i<NUM_CUTSCENE_TEXT; i++){ Ui_window.add_XSTR(&Cutscene_text[gr_screen.res][i]); } Buttons[gr_screen.res][EXIT_BUTTON].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Buttons[gr_screen.res][SCROLL_UP_BUTTON].button.set_hotkey(KEY_PAGEUP); Buttons[gr_screen.res][SCROLL_DOWN_BUTTON].button.set_hotkey(KEY_PAGEDOWN); List_region.create(&Ui_window, "", Cutscene_list_coords[gr_screen.res][0], Cutscene_list_coords[gr_screen.res][1], Cutscene_list_coords[gr_screen.res][2], Cutscene_list_coords[gr_screen.res][3], 0, 1); List_region.hide(); // set up hotkeys for buttons so we draw the correct animation frame when a key is pressed Buttons[gr_screen.res][SCROLL_UP_BUTTON].button.set_hotkey(KEY_PAGEUP); Buttons[gr_screen.res][SCROLL_DOWN_BUTTON].button.set_hotkey(KEY_PAGEDOWN); Background_bitmap = bm_load(Cutscene_bitmap_name[gr_screen.res]); Scroll_offset = Selected_line = 0; Description_index = -1; // when doing a debug version, just put all of the movie files here. #ifndef NDEBUG //Cutscenes_viewable = 0xffffffff; // makes all cutscenes viewble. #endif if (All_movies_enabled) Cutscenes_viewable = 0xffffffff; // Cheat code enables all movies. Num_files = 0; for ( i = 0; i < Num_cutscenes; i++ ) { if ( Cutscenes_viewable & (1<<i) ) { Cutscene_list[Num_files] = i; Num_files++; } } }
void cutscenes_screen_init() { int i; ui_button_info *b; Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Cutscene_mask_name[gr_screen.res]); for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, (i < 2), 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add xstrs for(i=0; i<NUM_CUTSCENE_TEXT; i++){ Ui_window.add_XSTR(&Cutscene_text[gr_screen.res][i]); } Buttons[gr_screen.res][EXIT_BUTTON].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Buttons[gr_screen.res][SCROLL_UP_BUTTON].button.set_hotkey(KEY_PAGEUP); Buttons[gr_screen.res][SCROLL_DOWN_BUTTON].button.set_hotkey(KEY_PAGEDOWN); List_region.create(&Ui_window, "", Cutscene_list_coords[gr_screen.res][0], Cutscene_list_coords[gr_screen.res][1], Cutscene_list_coords[gr_screen.res][2], Cutscene_list_coords[gr_screen.res][3], 0, 1); List_region.hide(); // set up hotkeys for buttons so we draw the correct animation frame when a key is pressed Buttons[gr_screen.res][SCROLL_UP_BUTTON].button.set_hotkey(KEY_PAGEUP); Buttons[gr_screen.res][SCROLL_DOWN_BUTTON].button.set_hotkey(KEY_PAGEDOWN); Background_bitmap = bm_load(Cutscene_bitmap_name[gr_screen.res]); Scroll_offset = Selected_line = 0; Description_index = -1; Cutscene_list.clear(); int u = 0; for (SCP_vector<cutscene_info>::iterator cut = Cutscenes.begin(); cut != Cutscenes.end(); ++cut, u++) { if ( (*cut).viewable ) { Cutscene_list.push_back(u); } } }
// called once when the gameplay help state is entered void gameplay_help_init() { int i; gameplay_help_buttons *b; if ( Gameplay_help_inited ) { return; } common_set_interface_palette("InterfacePalette"); // set the interface palette Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Game_help_mask_filename[gr_screen.res]); for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, 0, 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add all xstrs for (i=0; i<GAME_HELP_NUM_TEXT; i++) { Ui_window.add_XSTR(&Game_help_text[gr_screen.res][i]); } // set the proper last screen # based upon game mode if(Game_mode & GM_MULTIPLAYER){ Gp_last_screen = GP_LAST_SCREEN_MULTI; } else { Gp_last_screen = GP_LAST_SCREEN_SINGLE; } // setup hotkeys so lights flash when keys are pressed Buttons[gr_screen.res][CONTINUE_BUTTON].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Buttons[gr_screen.res][PREVIOUS_PAGE_BUTTON].button.set_hotkey(KEY_LEFT); Buttons[gr_screen.res][NEXT_PAGE_BUTTON].button.set_hotkey(KEY_RIGHT); Background_bitmap = bm_load(Game_help_filename[gr_screen.res]); Current_help_page = GP_HELP_BASIC_KEYS; Gameplay_help_inited = 1; }
// ----------------------------------------------------------------------------- void barracks_init() { //Set these to null, 'cause they aren't allocated yet. Stat_labels = NULL; Stats = NULL; UI_WINDOW *w = &Ui_window; // save current pilot file, so we don't possibly loose it. Pilot.save_player(); // create interface Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Barracks_bitmap_mask_fname[gr_screen.res]); // load background bitmap Background_bitmap = bm_load(Barracks_bitmap_fname[gr_screen.res]); if(Background_bitmap < 0){ // we failed to load the bitmap - this is very bad Int3(); } // create buttons int i; for (i=0; i<BARRACKS_NUM_BUTTONS; i++) { // create the object Buttons[gr_screen.res][i].button.create(&Ui_window, "", Buttons[gr_screen.res][i].x, Buttons[gr_screen.res][i].y, 60, 30, Buttons[gr_screen.res][i].repeat, 1); // set the sound to play when highlighted Buttons[gr_screen.res][i].button.set_highlight_action(common_play_highlight_sound); // set the ani for the button Buttons[gr_screen.res][i].button.set_bmaps(Buttons[gr_screen.res][i].filename); // set the hotspot Buttons[gr_screen.res][i].button.link_hotspot(Buttons[gr_screen.res][i].hotspot); } // add all strings w->add_XSTR("Create", 1034, Buttons[gr_screen.res][0].text_x, Buttons[gr_screen.res][0].text_y, &Buttons[gr_screen.res][0].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Accept", 1035, Buttons[gr_screen.res][5].text_x, Buttons[gr_screen.res][5].text_y, &Buttons[gr_screen.res][5].button, UI_XSTR_COLOR_PINK); w->add_XSTR("Help", 928, Buttons[gr_screen.res][6].text_x, Buttons[gr_screen.res][6].text_y, &Buttons[gr_screen.res][6].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Options",1036, Buttons[gr_screen.res][7].text_x, Buttons[gr_screen.res][7].text_y, &Buttons[gr_screen.res][7].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Medals", 1037, Buttons[gr_screen.res][8].text_x, Buttons[gr_screen.res][8].text_y, &Buttons[gr_screen.res][8].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Remove", 1038, Buttons[gr_screen.res][11].text_x, Buttons[gr_screen.res][11].text_y, &Buttons[gr_screen.res][11].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Select", 1552, Buttons[gr_screen.res][12].text_x, Buttons[gr_screen.res][12].text_y, &Buttons[gr_screen.res][12].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Clone", 1040, Buttons[gr_screen.res][13].text_x, Buttons[gr_screen.res][13].text_y, &Buttons[gr_screen.res][13].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Single", 1041, Buttons[gr_screen.res][14].text_x, Buttons[gr_screen.res][14].text_y, &Buttons[gr_screen.res][14].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Multi", 1042, Buttons[gr_screen.res][15].text_x, Buttons[gr_screen.res][15].text_y, &Buttons[gr_screen.res][15].button, UI_XSTR_COLOR_GREEN); // w->add_XSTR("Convert",1043, Buttons[gr_screen.res][16].text_x, Buttons[gr_screen.res][16].text_y, &Buttons[gr_screen.res][16].button, UI_XSTR_COLOR_GREEN); for(i=0; i<BARRACKS_NUM_TEXT; i++) { w->add_XSTR(&Barracks_text[gr_screen.res][i]); } // button for selecting pilot List_region.create(&Ui_window, "", Barracks_list_coords[gr_screen.res][BARRACKS_X_COORD], Barracks_list_coords[gr_screen.res][BARRACKS_Y_COORD], Barracks_list_coords[gr_screen.res][BARRACKS_W_COORD], Barracks_list_coords[gr_screen.res][BARRACKS_H_COORD], 0, 1); List_region.hide(); // create input box (for new pilot) Inputbox.create(&Ui_window, Barracks_list_coords[gr_screen.res][BARRACKS_X_COORD], Barracks_list_coords[gr_screen.res][BARRACKS_Y_COORD], Barracks_list_coords[gr_screen.res][BARRACKS_W_COORD], CALLSIGN_LEN - 1, "", UI_INPUTBOX_FLAG_INVIS | UI_INPUTBOX_FLAG_KEYTHRU | UI_INPUTBOX_FLAG_LETTER_FIRST); Inputbox.set_valid_chars(VALID_PILOT_CHARS); Inputbox.disable(); Inputbox.hide(); // load in help overlay bitmap Barracks_overlay_id = help_overlay_get_index(BARRACKS_OVERLAY); help_overlay_set_state(Barracks_overlay_id,gr_screen.res,0); // other init stuff Barracks_callsign_enter_mode = 0; List_scroll_offset = Stats_scroll_offset = Pic_number = Pic_squad_number = Selected_line = 0; Cur_pilot = &Players[Player_num]; // disable squad logo selection buttons in single player if(!(Cur_pilot->flags & PLAYER_FLAGS_IS_MULTI)){ // squad logo picture buttons Buttons[gr_screen.res][B_SQUAD_PREV_BUTTON].button.hide(); Buttons[gr_screen.res][B_SQUAD_PREV_BUTTON].button.disable(); Buttons[gr_screen.res][B_SQUAD_NEXT_BUTTON].button.hide(); Buttons[gr_screen.res][B_SQUAD_NEXT_BUTTON].button.disable(); } else { // squad logo picture buttons Buttons[gr_screen.res][B_SQUAD_PREV_BUTTON].button.enable(); Buttons[gr_screen.res][B_SQUAD_PREV_BUTTON].button.unhide(); Buttons[gr_screen.res][B_SQUAD_NEXT_BUTTON].button.enable(); Buttons[gr_screen.res][B_SQUAD_NEXT_BUTTON].button.unhide(); } // set up hotkeys for buttons so we draw the correct animation frame when a key is pressed barracks_set_hotkeys(1); // load ramp pips Rank_pips_bitmaps = bm_load_animation("IconRankMini.ani", &Rank_pips_count); // load up the pilot pic list pilot_load_pic_list(); pilot_load_squad_pic_list(); // don't load pilot images yet for (i=0; i<MAX_PILOT_IMAGES; i++) { Pilot_images[i] = BARRACKS_IMAGE_NOT_LOADED; // while -1 is can't load Pilot_squad_images[i] = BARRACKS_IMAGE_NOT_LOADED; } // init stats barracks_init_stats(&Cur_pilot->stats); // base the mode we're in (single or multi) on the status of the currently selected pilot barracks_init_player_stuff((Game_mode & GM_MULTIPLAYER) == GM_MULTIPLAYER); }
void credits_init() { int i; credits_screen_buttons *b; // pre-initialize Credits_num_images = DEFAULT_NUM_IMAGES; Credits_artwork_index = -1; // this is moved up here so we can override it if desired strcpy_s(Credits_music_name, "Cinema"); // parse credits early so as to set up any overrides (for music and such) Credits_parsed = false; credits_parse(); // we could conceivably have specified a number of images but not an index, // so if that's the case, set the value here if (Credits_artwork_index < 0) { Credits_artwork_index = rand() % Credits_num_images; } int credits_spooled_music_index = event_music_get_spooled_music_index(Credits_music_name); if(credits_spooled_music_index != -1){ char *credits_wavfile_name = Spooled_music[credits_spooled_music_index].filename; if(credits_wavfile_name != NULL){ credits_load_music(credits_wavfile_name); } } // Use this id to trigger the start of music playing on the briefing screen Credits_music_begin_timestamp = timestamp(Credits_music_delay); Credits_frametime = 0; Credits_last_time = timer_get_milliseconds(); if (!Credits_parsed) { Credit_text_parts.push_back(SCP_string("No credits available.\n")); } else { switch (SCP_credits_position) { case START: Credit_text_parts.insert(Credit_text_parts.begin(), fs2_open_credit_text); break; case END: Credit_text_parts.push_back(fs2_open_credit_text); break; default: Error(LOCATION, "Unimplemented credits position %d. Get a coder!", (int) SCP_credits_position); break; } } int ch; SCP_vector<SCP_string>::iterator iter; for (iter = Credit_text_parts.begin(); iter != Credit_text_parts.end(); ++iter) { for (SCP_string::iterator ii = iter->begin(); ii != iter->end(); ++ii) { ch = *ii; switch (ch) { case -4: ch = 129; break; case -28: ch = 132; break; case -10: ch = 148; break; case -23: ch = 130; break; case -30: ch = 131; break; case -25: ch = 135; break; case -21: ch = 137; break; case -24: ch = 138; break; case -17: ch = 139; break; case -18: ch = 140; break; case -60: ch = 142; break; case -55: ch = 144; break; case -12: ch = 147; break; case -14: ch = 149; break; case -5: ch = 150; break; case -7: ch = 151; break; case -42: ch = 153; break; case -36: ch = 154; break; case -31: ch = 160; break; case -19: ch = 161; break; case -13: ch = 162; break; case -6: ch = 163; break; case -32: ch = 133; break; case -22: ch = 136; break; case -20: ch = 141; break; } *ii = (char) ch; } } int temp_h; int h = 0; for (iter = Credit_text_parts.begin(); iter != Credit_text_parts.end(); ++iter) { gr_get_string_size(NULL, &temp_h, iter->c_str(), (int)iter->length()); h = h + temp_h; } Credit_start_pos = i2fl(Credits_text_coords[gr_screen.res][CREDITS_H_COORD]); Credit_stop_pos = -i2fl(h); Credit_position = Credit_start_pos; Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Credits_bitmap_mask_fname[gr_screen.res]); common_set_interface_palette("InterfacePalette"); // set the interface palette for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[i][gr_screen.res]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, (i < 2), 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add some text Ui_window.add_XSTR("Technical Database", 1055, Buttons[TECH_DATABASE_BUTTON][gr_screen.res].xt, Buttons[TECH_DATABASE_BUTTON][gr_screen.res].yt, &Buttons[TECH_DATABASE_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Mission Simulator", 1056, Buttons[SIMULATOR_BUTTON][gr_screen.res].xt, Buttons[SIMULATOR_BUTTON][gr_screen.res].yt, &Buttons[SIMULATOR_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Cutscenes", 1057, Buttons[CUTSCENES_BUTTON][gr_screen.res].xt, Buttons[CUTSCENES_BUTTON][gr_screen.res].yt, &Buttons[CUTSCENES_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Credits", 1058, Buttons[CREDITS_BUTTON][gr_screen.res].xt, Buttons[CREDITS_BUTTON][gr_screen.res].yt, &Buttons[CREDITS_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Exit", 1420, Buttons[EXIT_BUTTON][gr_screen.res].xt, Buttons[EXIT_BUTTON][gr_screen.res].yt, &Buttons[EXIT_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_PINK); if (Player->flags & PLAYER_FLAGS_IS_MULTI) { Buttons[SIMULATOR_BUTTON][gr_screen.res].button.disable(); Buttons[CUTSCENES_BUTTON][gr_screen.res].button.disable(); } Buttons[EXIT_BUTTON][gr_screen.res].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Background_bitmap = bm_load(Credits_bitmap_fname[gr_screen.res]); Credits_bmps.resize(Credits_num_images); for (i=0; i<Credits_num_images; i++) { Credits_bmps[i] = -1; } }
void techroom_init() { int i, idx; techroom_buttons *b; Ships_loaded = 0; Weapons_loaded = 0; Intel_loaded = 0; Techroom_show_all = 0; // set up UI stuff Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Tech_mask_filename[gr_screen.res]); Tech_background_bitmap = bm_load(Tech_background_filename[gr_screen.res]); if (Tech_background_bitmap < 0) { // failed to load bitmap, not a good thing Error(LOCATION,"Couldn't load techroom background bitmap"); } for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, b->flags & REPEAT, 1); // set up callback for when a mouse first goes over a button if (b->filename) { b->button.set_bmaps(b->filename); b->button.set_highlight_action(common_play_highlight_sound); } else { b->button.hide(); } b->button.link_hotspot(b->hotspot); } // common tab button text Ui_window.add_XSTR("Technical Database", 1055, Buttons[gr_screen.res][TECH_DATABASE_TAB].xt, Buttons[gr_screen.res][TECH_DATABASE_TAB].yt, &Buttons[gr_screen.res][TECH_DATABASE_TAB].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Mission Simulator", 1056, Buttons[gr_screen.res][SIMULATOR_TAB].xt, Buttons[gr_screen.res][SIMULATOR_TAB].yt, &Buttons[gr_screen.res][SIMULATOR_TAB].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Cutscenes", 1057, Buttons[gr_screen.res][CUTSCENES_TAB].xt, Buttons[gr_screen.res][CUTSCENES_TAB].yt, &Buttons[gr_screen.res][CUTSCENES_TAB].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Credits", 1058, Buttons[gr_screen.res][CREDITS_TAB].xt, Buttons[gr_screen.res][CREDITS_TAB].yt, &Buttons[gr_screen.res][CREDITS_TAB].button, UI_XSTR_COLOR_GREEN); // common ship/weapon/intel text Ui_window.add_XSTR("Ships", 293, Buttons[gr_screen.res][SHIPS_DATA_TAB].xt, Buttons[gr_screen.res][SHIPS_DATA_TAB].yt, &Buttons[gr_screen.res][SHIPS_DATA_TAB].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Weapons", 1553, Buttons[gr_screen.res][WEAPONS_DATA_TAB].xt, Buttons[gr_screen.res][WEAPONS_DATA_TAB].yt, &Buttons[gr_screen.res][WEAPONS_DATA_TAB].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Intelligence", 1066, Buttons[gr_screen.res][INTEL_DATA_TAB].xt, Buttons[gr_screen.res][INTEL_DATA_TAB].yt, &Buttons[gr_screen.res][INTEL_DATA_TAB].button, UI_XSTR_COLOR_GREEN); // common help/options/commit text Ui_window.add_XSTR("Exit", 1418, Buttons[gr_screen.res][EXIT_BUTTON].xt, Buttons[gr_screen.res][EXIT_BUTTON].yt, &Buttons[gr_screen.res][EXIT_BUTTON].button, UI_XSTR_COLOR_PINK); if (Player->flags & PLAYER_FLAGS_IS_MULTI) { Buttons[gr_screen.res][SIMULATOR_TAB].button.disable(); Buttons[gr_screen.res][CUTSCENES_TAB].button.disable(); } // set some hotkeys Buttons[gr_screen.res][PREV_ENTRY_BUTTON].button.set_hotkey(KEY_LEFT); Buttons[gr_screen.res][NEXT_ENTRY_BUTTON].button.set_hotkey(KEY_RIGHT); Buttons[gr_screen.res][SCROLL_INFO_UP].button.set_hotkey(KEY_UP); Buttons[gr_screen.res][SCROLL_INFO_DOWN].button.set_hotkey(KEY_DOWN); for (i=0; i<LIST_BUTTONS_MAX; i++) { List_buttons[i].create(&Ui_window, "", 0, 0, 60, 30, 0, 1); List_buttons[i].hide(); List_buttons[i].disable(); } View_window.create(&Ui_window, "", Tech_ship_display_coords[gr_screen.res][SHIP_X_COORD], Tech_ship_display_coords[gr_screen.res][SHIP_Y_COORD], Tech_ship_display_coords[gr_screen.res][SHIP_W_COORD], Tech_ship_display_coords[gr_screen.res][SHIP_H_COORD], 1, 1); View_window.hide(); Buttons[gr_screen.res][HELP_BUTTON].button.set_hotkey(KEY_F1); Buttons[gr_screen.res][EXIT_BUTTON].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Buttons[gr_screen.res][SCROLL_LIST_UP].button.set_hotkey(KEY_PAGEUP); Buttons[gr_screen.res][SCROLL_LIST_DOWN].button.set_hotkey(KEY_PAGEDOWN); // init help overlay states Techroom_overlay_id = help_overlay_get_index(TECH_ROOM_OVERLAY); help_overlay_set_state(Techroom_overlay_id, gr_screen.res, 0); // setup slider Tech_slider.create(&Ui_window, Tech_slider_coords[gr_screen.res][SHIP_X_COORD], Tech_slider_coords[gr_screen.res][SHIP_Y_COORD], Tech_slider_coords[gr_screen.res][SHIP_W_COORD], Tech_slider_coords[gr_screen.res][SHIP_H_COORD], Ship_info.size(), Tech_slider_filename[gr_screen.res], &tech_scroll_list_up, &tech_scroll_list_down, &tech_ship_scroll_capture); // zero intel anim/bitmap stuff for(idx=0; idx<MAX_INTEL_ENTRIES; idx++){ Intel_list[idx].animation.num_frames = 0; Intel_list[idx].bitmap = -1; } mprintf(("Techroom successfully initialized, now changing tab...\n")); techroom_change_tab(Tab); }
// functions for selecting single/multiplayer pilots at the very beginning of FreeSpace void player_select_init() { int i; barracks_buttons *b; UI_WINDOW *w; // start a looping ambient sound main_hall_start_ambient(); Player_select_force_main_hall = ""; Player_select_screen_active = 1; // create the UI window Player_select_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Player_select_window.set_mask_bmap(Player_select_background_mask_bitmap[gr_screen.res]); // initialize the control buttons for (i=0; i<NUM_PLAYER_SELECT_BUTTONS; i++) { b = &Player_select_buttons[gr_screen.res][i]; // create the button b->button.create(&Player_select_window, NULL, b->x, b->y, 60, 30, 1, 1); // set its highlight action b->button.set_highlight_action(common_play_highlight_sound); // set its animation bitmaps b->button.set_bmaps(b->filename); // link the mask hotspot b->button.link_hotspot(b->hotspot); } // add some text w = &Player_select_window; w->add_XSTR("Create", 1034, Player_select_buttons[gr_screen.res][CREATE_PILOT_BUTTON].xt, Player_select_buttons[gr_screen.res][CREATE_PILOT_BUTTON].yt, &Player_select_buttons[gr_screen.res][CREATE_PILOT_BUTTON].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Clone", 1040, Player_select_buttons[gr_screen.res][CLONE_BUTTON].xt, Player_select_buttons[gr_screen.res][CLONE_BUTTON].yt, &Player_select_buttons[gr_screen.res][CLONE_BUTTON].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Remove", 1038, Player_select_buttons[gr_screen.res][DELETE_BUTTON].xt, Player_select_buttons[gr_screen.res][DELETE_BUTTON].yt, &Player_select_buttons[gr_screen.res][DELETE_BUTTON].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Select", 1039, Player_select_buttons[gr_screen.res][ACCEPT_BUTTON].xt, Player_select_buttons[gr_screen.res][ACCEPT_BUTTON].yt, &Player_select_buttons[gr_screen.res][ACCEPT_BUTTON].button, UI_XSTR_COLOR_PINK); w->add_XSTR("Single", 1041, Player_select_buttons[gr_screen.res][SINGLE_BUTTON].xt, Player_select_buttons[gr_screen.res][SINGLE_BUTTON].yt, &Player_select_buttons[gr_screen.res][SINGLE_BUTTON].button, UI_XSTR_COLOR_GREEN); w->add_XSTR("Multi", 1042, Player_select_buttons[gr_screen.res][MULTI_BUTTON].xt, Player_select_buttons[gr_screen.res][MULTI_BUTTON].yt, &Player_select_buttons[gr_screen.res][MULTI_BUTTON].button, UI_XSTR_COLOR_GREEN); for(i=0; i<PLAYER_SELECT_NUM_TEXT; i++) { w->add_XSTR(&Player_select_text[gr_screen.res][i]); } // create the list button text select region Player_select_list_region.create(&Player_select_window, "", Choose_list_coords[gr_screen.res][0], Choose_list_coords[gr_screen.res][1], Choose_list_coords[gr_screen.res][2], Choose_list_coords[gr_screen.res][3], 0, 1); Player_select_list_region.hide(); // create the pilot callsign input box Player_select_input_box.create(&Player_select_window, Choose_list_coords[gr_screen.res][0], Choose_list_coords[gr_screen.res][1], Choose_list_coords[gr_screen.res][2] , CALLSIGN_LEN - 1, "", UI_INPUTBOX_FLAG_INVIS | UI_INPUTBOX_FLAG_KEYTHRU | UI_INPUTBOX_FLAG_LETTER_FIRST); Player_select_input_box.set_valid_chars(VALID_PILOT_CHARS); Player_select_input_box.hide(); Player_select_input_box.disable(); // not currently entering any text Player_select_input_mode = 0; // set up hotkeys for buttons so we draw the correct animation frame when a key is pressed Player_select_buttons[gr_screen.res][SCROLL_LIST_UP_BUTTON].button.set_hotkey(KEY_UP); Player_select_buttons[gr_screen.res][SCROLL_LIST_DOWN_BUTTON].button.set_hotkey(KEY_DOWN); Player_select_buttons[gr_screen.res][ACCEPT_BUTTON].button.set_hotkey(KEY_ENTER); Player_select_buttons[gr_screen.res][CREATE_PILOT_BUTTON].button.set_hotkey(KEY_C); // attempt to load in the background bitmap Player_select_background_bitmap = bm_load(Player_select_background_bitmap_name[gr_screen.res]); Assert(Player_select_background_bitmap >= 0); // load in the palette for the screen // Player_select_palette = bm_load(PLAYER_SELECT_PALETTE); // Player_select_palette_set = 0; // unset the very first pilot data Player_select_very_first_pilot = 0; Player_select_initial_count = -1; memset(Player_select_very_first_pilot_callsign, 0, CALLSIGN_LEN + 2); // if(Player_select_num_pilots == 0){ // Player_select_autoaccept = 1; // } // if we found a pilot if ( player_select_get_last_pilot_info() ) { if (Player_select_last_is_multi && !Networking_disabled) { player_select_init_player_stuff(PLAYER_SELECT_MODE_MULTI); } else { player_select_init_player_stuff(PLAYER_SELECT_MODE_SINGLE); } } else { // otherwise go to the single player mode by default player_select_init_player_stuff(PLAYER_SELECT_MODE_SINGLE); } if ( (Player_select_num_pilots == 1) && Player_select_input_mode ) { Player_select_autoaccept = 1; } }
void credits_init() { int i, w, h; credits_screen_buttons *b; char line[512] = ""; char *linep1, *linep2; int credits_spooled_music_index = event_music_get_spooled_music_index("Cinema"); if(credits_spooled_music_index != -1){ char *credits_wavfile_name = Spooled_music[credits_spooled_music_index].filename; if(credits_wavfile_name != NULL){ credits_load_music(credits_wavfile_name); } } // Use this id to trigger the start of music playing on the briefing screen Credits_music_begin_timestamp = timestamp(CREDITS_MUSIC_DELAY); Credits_frametime = 0; Credits_last_time = timer_get_milliseconds(); Credit_text = NULL; Credit_text_malloced = 0; // allocate enough space for credits text CFILE *fp = cfopen( NOX("credits.tbl"), "rb" ); if(fp != NULL){ int rval, size; size = cfilelength(fp); Credit_text = (char *) vm_malloc(size + 200 + strlen(fs2_open_credit_text) + strlen(unmodified_credits)); if (Credit_text == NULL) { return; } else { Credit_text_malloced = 1; } cfclose(fp); // open localization lcl_ext_open(); if ((rval = setjmp(parse_abort)) != 0) { mprintf(("TABLES: Unable to parse '%s'! Error code = %i.\n", "credits.tbl", rval)); lcl_ext_close(); return; } read_file_text("credits.tbl"); reset_parse(); // keep reading everything in strcpy(Credit_text, fs2_open_credit_text); bool first_run = true; while(!check_for_string_raw("#end")){ stuff_string_line(line, sizeof(line)); // This is a bit odd but it means if a total conversion uses different credits the // Volition credit won't happen if(first_run == true) { if(strcmp(line, mod_check) == 0) { strcat(Credit_text, unmodified_credits); } first_run = false; } linep1 = line; do { linep2 = split_str_once(linep1, Credits_text_coords[gr_screen.res][2]); Assert( linep2 != linep1 ); strcat(Credit_text, linep1); strcat(Credit_text, "\n"); linep1 = linep2; } while (linep2 != NULL); } // close localization lcl_ext_close(); } else { Credit_text = NOX("No credits available.\n"); } int ch; for ( i = 0; Credit_text[i]; i++ ) { ch = Credit_text[i]; switch (ch) { case -4: ch = 129; break; case -28: ch = 132; break; case -10: ch = 148; break; case -23: ch = 130; break; case -30: ch = 131; break; case -25: ch = 135; break; case -21: ch = 137; break; case -24: ch = 138; break; case -17: ch = 139; break; case -18: ch = 140; break; case -60: ch = 142; break; case -55: ch = 144; break; case -12: ch = 147; break; case -14: ch = 149; break; case -5: ch = 150; break; case -7: ch = 151; break; case -42: ch = 153; break; case -36: ch = 154; break; case -31: ch = 160; break; case -19: ch = 161; break; case -13: ch = 162; break; case -6: ch = 163; break; case -32: ch = 133; break; case -22: ch = 136; break; case -20: ch = 141; break; } Credit_text[i] = (char)ch; } gr_get_string_size(&w, &h, Credit_text); Credit_start_pos = i2fl(Credits_text_coords[gr_screen.res][CREDITS_H_COORD]); Credit_stop_pos = -i2fl(h); Credit_position = Credit_start_pos; Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Credits_bitmap_mask_fname[gr_screen.res]); common_set_interface_palette("InterfacePalette"); // set the interface palette for (i=0; i<NUM_BUTTONS; i++) { b = &Buttons[i][gr_screen.res]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, (i < 2), 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add some text Ui_window.add_XSTR("Technical Database", 1055, Buttons[TECH_DATABASE_BUTTON][gr_screen.res].xt, Buttons[TECH_DATABASE_BUTTON][gr_screen.res].yt, &Buttons[TECH_DATABASE_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Mission Simulator", 1056, Buttons[SIMULATOR_BUTTON][gr_screen.res].xt, Buttons[SIMULATOR_BUTTON][gr_screen.res].yt, &Buttons[SIMULATOR_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Cutscenes", 1057, Buttons[CUTSCENES_BUTTON][gr_screen.res].xt, Buttons[CUTSCENES_BUTTON][gr_screen.res].yt, &Buttons[CUTSCENES_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Credits", 1058, Buttons[CREDITS_BUTTON][gr_screen.res].xt, Buttons[CREDITS_BUTTON][gr_screen.res].yt, &Buttons[CREDITS_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_GREEN); Ui_window.add_XSTR("Exit", 1420, Buttons[EXIT_BUTTON][gr_screen.res].xt, Buttons[EXIT_BUTTON][gr_screen.res].yt, &Buttons[EXIT_BUTTON][gr_screen.res].button, UI_XSTR_COLOR_PINK); if (Player->flags & PLAYER_FLAGS_IS_MULTI) { Buttons[SIMULATOR_BUTTON][gr_screen.res].button.disable(); Buttons[CUTSCENES_BUTTON][gr_screen.res].button.disable(); } Buttons[EXIT_BUTTON][gr_screen.res].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Background_bitmap = bm_load(Credits_bitmap_fname[gr_screen.res]); Credits_artwork_index = rand() % NUM_IMAGES; for (i=0; i<NUM_IMAGES; i++){ Credits_bmps[i] = -1; } // CreditsWin01 = bm_load(NOX("CreditsWin01")); // CreditsWin02 = bm_load(NOX("CreditsWin02")); // CreditsWin03 = bm_load(NOX("CreditsWin03")); // CreditsWin04 = bm_load(NOX("CreditsWin04")); }
// init void loop_brief_init() { int idx; ui_button_info *b; // load the background bitmap Loop_brief_bitmap = bm_load(Loop_brief_fname[gr_screen.res]); Assert(Loop_brief_bitmap != -1); // window Loop_brief_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Loop_brief_window.set_mask_bmap(Loop_brief_mask[gr_screen.res]); // add the buttons for (idx=0; idx<NUM_LOOP_BRIEF_BUTTONS; idx++) { b = &Loop_buttons[gr_screen.res][idx]; b->button.create(&Loop_brief_window, "", b->x, b->y, 60, 30, 0, 1); b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add text for(idx=0; idx<NUM_LOOP_TEXT; idx++){ Loop_brief_window.add_XSTR(&Loop_text[gr_screen.res][idx]); } const char* anim_name; // load animation if any if(Campaign.missions[Campaign.current_mission].mission_branch_brief_anim != NULL){ anim_name = Campaign.missions[Campaign.current_mission].mission_branch_brief_anim; } else { anim_name = "CB_default"; } int stream_result = generic_anim_init_and_stream(&Loop_anim, anim_name, bm_get_type(Loop_brief_bitmap), true); // we've failed to load any animation if (stream_result < 0) { // load an image and treat it like a 1 frame animation Loop_anim.first_frame = bm_load(anim_name); //if we fail here, the value is still -1 if(Loop_anim.first_frame != -1) { Loop_anim.num_frames = 1; } } // init brief text if(Campaign.missions[Campaign.current_mission].mission_branch_desc != NULL){ brief_color_text_init(Campaign.missions[Campaign.current_mission].mission_branch_desc, Loop_brief_text_coords[gr_screen.res][2], default_loop_briefing_color); } bool sound_played = false; // open sound if(Campaign.missions[Campaign.current_mission].mission_branch_brief_sound != NULL){ Loop_sound = audiostream_open(Campaign.missions[Campaign.current_mission].mission_branch_brief_sound, ASF_VOICE); if(Loop_sound != -1){ audiostream_play(Loop_sound, Master_voice_volume, 0); sound_played = true; } } if(sound_played == false) { fsspeech_play(FSSPEECH_FROM_BRIEFING, Campaign.missions[Campaign.current_mission].mission_branch_desc); } // music common_music_init(SCORE_BRIEFING); }
// initialize all popup details (graphics, etc) void multi_pinfo_popup_init(net_player *np) { int idx; // no errors to start with Multi_pinfo_popup_error = 0; // shouldn't be done Multi_pinfo_popup_done = 0; // store the background as it currently is Multi_pinfo_screen_save = gr_save_screen(); if(Multi_pinfo_screen_save == -1){ Multi_pinfo_popup_error = 1; return; } // create the interface window Multi_pinfo_window.create(0,0,gr_screen.max_w_unscaled,gr_screen.max_h_unscaled,0); Multi_pinfo_window.set_mask_bmap(Multi_pinfo_bitmap_mask[gr_screen.res]); // load the background bitmap Multi_pinfo_bitmap = bm_load(Multi_pinfo_bitmap_name[gr_screen.res]); if(Multi_pinfo_bitmap < 0){ Multi_pinfo_popup_error = 1; return; } // backup hardware textures setting and bash to max Multi_pinfo_hardware_texture_backup = Detail.hardware_textures; Detail.hardware_textures = MAX_DETAIL_LEVEL; // zero bitmap info Mp_pilot.bitmap = -1; strcpy_s(Mp_pilot.filename, ""); Mp_squad.bitmap = -1; strcpy_s(Mp_squad.filename, ""); // set the player status multi_pinfo_reset_player(np); // create the interface buttons for(idx=0;idx<MULTI_PINFO_NUM_BUTTONS;idx++){ // create the object Multi_pinfo_buttons[gr_screen.res][idx].button.create(&Multi_pinfo_window, "", Multi_pinfo_buttons[gr_screen.res][idx].x, Multi_pinfo_buttons[gr_screen.res][idx].y, 1, 1, 0, 1); // set the sound to play when highlighted Multi_pinfo_buttons[gr_screen.res][idx].button.set_highlight_action(common_play_highlight_sound); // set the ani for the button Multi_pinfo_buttons[gr_screen.res][idx].button.set_bmaps(Multi_pinfo_buttons[gr_screen.res][idx].filename); // set the hotspot Multi_pinfo_buttons[gr_screen.res][idx].button.link_hotspot(Multi_pinfo_buttons[gr_screen.res][idx].hotspot); } // add xstrs for(idx=0; idx<MULTI_PINFO_NUM_TEXT; idx++){ Multi_pinfo_window.add_XSTR(&Multi_pinfo_text[gr_screen.res][idx]); } // initialize strings Multi_pinfo_stats_labels[0] = vm_strdup(XSTR("Rank", 1007)); Multi_pinfo_stats_labels[1] = vm_strdup(XSTR("Missions Flown", 1008)); Multi_pinfo_stats_labels[2] = vm_strdup(XSTR("Flight Time", 1009)); Multi_pinfo_stats_labels[3] = vm_strdup(XSTR("Last Flown",1010)); Multi_pinfo_stats_labels[4] = vm_strdup(XSTR("Total Kills", 115)); Multi_pinfo_stats_labels[5] = vm_strdup(XSTR("Primary Shots Fired", 1012)); Multi_pinfo_stats_labels[6] = vm_strdup(XSTR("Primary Hit %", 1013)); Multi_pinfo_stats_labels[7] = vm_strdup(XSTR("Secondary Shots Fired", 1014)); Multi_pinfo_stats_labels[8] = vm_strdup(XSTR("Secondary Hit %", 1015)); }
void multi_pause_init() { int i; // if we're already paused. do nothing if ( Multi_paused ) { return; } Assert( Game_mode & GM_MULTIPLAYER ); if ( !(Game_mode & GM_MULTIPLAYER) ) return; // pause all beam weapon sounds weapon_pause_sounds(); // standalone shouldn't be doing any freespace interface stuff if (Game_mode & GM_STANDALONE_SERVER) { std_debug_set_standalone_state_string("Multi paused do"); } // everyone else should be doing UI stuff else { // pause all game music audiostream_pause_all(); // switch off the text messaging system if it is active multi_msg_text_flush(); if ( Multi_paused_screen_id == -1 ) Multi_paused_screen_id = gr_save_screen(); // create ui window Multi_paused_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Multi_paused_window.set_mask_bmap(Multi_paused_bg_mask[gr_screen.res]); Multi_paused_background = bm_load(Multi_paused_bg_fname[gr_screen.res]); for (i=0; i<MULTI_PAUSED_NUM_BUTTONS; i++) { // create the button Multi_paused_buttons[gr_screen.res][i].button.create(&Multi_paused_window, "", Multi_paused_buttons[gr_screen.res][i].x, Multi_paused_buttons[gr_screen.res][i].y, 1, 1, 0, 1); // set the highlight action Multi_paused_buttons[gr_screen.res][i].button.set_highlight_action(common_play_highlight_sound); // set the ani Multi_paused_buttons[gr_screen.res][i].button.set_bmaps(Multi_paused_buttons[gr_screen.res][i].filename); // set the hotspot Multi_paused_buttons[gr_screen.res][i].button.link_hotspot(Multi_paused_buttons[gr_screen.res][i].hotspot); } // add text for(i=0; i<MULTI_PAUSED_NUM_TEXT; i++){ Multi_paused_window.add_XSTR(&Multi_paused_text[gr_screen.res][i]); } // close any instances of a chatbox chatbox_close(); // intialize our custom chatbox chatbox_create(CHATBOX_FLAG_MULTI_PAUSED); } Multi_paused = 1; // reset timestamps multi_reset_timestamps(); }
void cmd_brief_init(int team) { common_music_init(SCORE_BRIEFING); int i; ui_button_info *b; Cmd_brief_inited = 0; Cur_cmd_brief = &Cmd_briefs[team]; // Goober5000 - replace any variables (probably persistent variables) with their values for (i = 0; i < Cur_cmd_brief->num_stages; i++) sexp_replace_variable_names_with_values(Cur_cmd_brief->stage[i].text); if (Cur_cmd_brief->num_stages <= 0) return; gr_reset_clip(); gr_clear(); Mouse_hidden++; gr_flip(); Mouse_hidden--; // first determine which layout to use Uses_scroll_buttons = 1; // assume true Cmd_brief_background_bitmap = bm_load(Cmd_brief_fname[Uses_scroll_buttons][gr_screen.res]); // try to load extra one first if (Cmd_brief_background_bitmap < 0) // failed to load { Uses_scroll_buttons = 0; // nope, sorry Cmd_brief_background_bitmap = bm_load(Cmd_brief_fname[Uses_scroll_buttons][gr_screen.res]); } Ui_window.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Ui_window.set_mask_bmap(Cmd_brief_mask[Uses_scroll_buttons][gr_screen.res]); for (i=0; i<NUM_CMD_BRIEF_BUTTONS; i++) { b = &Cmd_brief_buttons[gr_screen.res][i]; b->button.create(&Ui_window, "", b->x, b->y, 60, 30, 0, 1); // set up callback for when a mouse first goes over a button b->button.set_highlight_action(common_play_highlight_sound); b->button.set_bmaps(b->filename); b->button.link_hotspot(b->hotspot); } // add text for(i=0; i<CMD_BRIEF_NUM_TEXT; i++){ Ui_window.add_XSTR(&Cmd_brief_text[gr_screen.res][i]); } // set up readyrooms for buttons so we draw the correct animation frame when a key is pressed Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_FIRST_STAGE].button.set_hotkey(KEY_SHIFTED | KEY_LEFT); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_LAST_STAGE].button.set_hotkey(KEY_SHIFTED | KEY_RIGHT); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_PREV_STAGE].button.set_hotkey(KEY_LEFT); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_NEXT_STAGE].button.set_hotkey(KEY_RIGHT); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_ACCEPT].button.set_hotkey(KEY_CTRLED | KEY_ENTER); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_HELP].button.set_hotkey(KEY_F1); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_OPTIONS].button.set_hotkey(KEY_F2); // extra - Goober5000 if (Uses_scroll_buttons) { Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_SCROLL_UP].button.set_hotkey(KEY_UP); Cmd_brief_buttons[gr_screen.res][CMD_BRIEF_BUTTON_SCROLL_DOWN].button.set_hotkey(KEY_DOWN); } // load in help overlay bitmap help_overlay_load(CMD_BRIEF_OVERLAY); help_overlay_set_state(CMD_BRIEF_OVERLAY,0); for (i=0; i<Cur_cmd_brief->num_stages; i++) cmd_brief_ani_wave_init(i); cmd_brief_init_voice(); cmd_brief_new_stage(0); Cmd_brief_paused = 0; Cmd_brief_inited = 1; }