void HudGaugeRadarDradis::initBitmaps(char* fname_xy, char* fname_xz_yz, char* fname_sweep, char* fname_target_brackets, char* fname_unknown) { xy_plane = bm_load(fname_xy); // Base if ( xy_plane < 0 ) { Warning(LOCATION,"Cannot load hud bitmap: %s\n", fname_xy); } xz_yz_plane = bm_load(fname_xz_yz); // Two vertical cross rings if ( xz_yz_plane < 0 ) { Warning(LOCATION,"Cannot load hud bitmap: %s\n", fname_xz_yz); } sweep_plane = bm_load(fname_sweep); // Sweep lines if ( sweep_plane < 0 ) { Warning(LOCATION,"Cannot load hud bitmap: %s\n", fname_sweep); } target_brackets = bm_load(fname_target_brackets); if ( target_brackets < 0 ) { Warning(LOCATION,"Cannot load hud bitmap: %s\n", fname_target_brackets); } unknown_contact_icon = bm_load(fname_unknown); if ( unknown_contact_icon < 0 ) { Warning(LOCATION,"Cannot load hud bitmap: %s\n", fname_unknown); } }
void training_menu_init() { char background_img_filename[MAX_FILENAME_LEN]; char background_mask_filename[MAX_FILENAME_LEN]; snazzy_menu_init(); read_menu_tbl(NOX("TRAINING MENU"), background_img_filename, background_mask_filename, region, &num_training); // load in the background bitmap (filenames are hard-coded temporarily) trainingMenuBitmap = bm_load(background_img_filename); if (trainingMenuBitmap < 0) { Error(LOCATION, "Could not load in %s!", background_img_filename); } trainingMenuMask = bm_load(background_mask_filename); Training_mask_w = -1; Training_mask_h = -1; if (trainingMenuMask < 0) { Error(LOCATION, "Could not load in %s!", background_mask_filename); } else { // get a pointer to bitmap by using bm_lock() trainingMenuMaskPtr = bm_lock(trainingMenuMask, 8, BMP_AABITMAP); mask_data = (ubyte*)trainingMenuMaskPtr->data; bm_get_info(trainingMenuMask, &Training_mask_w, &Training_mask_h); } }
// --------------------------------------------------------------------- // 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(); }
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 at the beginning of the game to load help bitmaps & data void help_overlay_init() { // load right_bracket bitmap help_right_bracket_bitmap = bm_load("right_bracket"); // we failed to load the bitmap - this is very bad Assertion( help_right_bracket_bitmap >= 0, "Failed to load bitmap right_bracket for help overlay\n"); // load left_bracket bitmap help_left_bracket_bitmap = bm_load("left_bracket"); // we failed to load the bitmap - this is very bad Assertion( help_left_bracket_bitmap >= 0, "Failed to load bitmap left_bracket for help overlay\n"); atexit(close_help); // parse help.tbl parse_helptbl(); }
// initialize the pause screen void pause_init() { // if we're already paused. do nothing if (Paused) { return; } Assert(!(Game_mode & GM_MULTIPLAYER)); // pause all beam weapon sounds beam_pause_sounds(); if (Pause_type == PAUSE_TYPE_NORMAL) { Pause_saved_screen = gr_save_screen(); } // pause all game music audiostream_pause_all(); //JAS: REMOVED CALL TO SET INTERFACE PALETTE TO GET RID OF SCREEN CLEAR WHEN PAUSING //common_set_interface_palette(); // set the interface palette Pause_win.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Pause_background_bitmap = bm_load(Pause_bmp_name[gr_screen.res]); Paused = 1; }
// initialize the pause screen void pause_init() { // if we're already paused. do nothing if ( Paused ) { return; } Assert( !(Game_mode & GM_MULTIPLAYER) ); // pause all weapon sounds weapon_pause_sounds(); if (Pause_type == PAUSE_TYPE_NORMAL) { Pause_saved_screen = gr_save_screen(); } // pause all game music audiostream_pause_all(); Pause_win.create(0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0); Pause_background_bitmap = bm_load(Pause_bmp_name[gr_screen.res]); Paused = 1; }
void pilot_manage_init(void) { UI_WINDOW *w = &Ui_window; // create interface Ui_window.create(0, 0, gr_screen.max_w, gr_screen.max_h, 0); Ui_window.set_mask_bmap(PilotManage_bitmap_mask_fname[gr_screen.res]); // load background bitmap Background_bitmap = bm_load(PilotManage_bitmap_fname[gr_screen.res]); if(Background_bitmap < 0){ // we failed to load the bitmap - this is very bad Int3(); } for (int i=0; i<PM_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); } // load in help overlay bitmap // needs to be fixed, taked out to get to compile // help_overlay_load(PILOT_MANAGE_OVERLAY); // help_overlay_set_state(PILOT_MANAGE_OVERLAY,0); // button for selecting pilot List_region.create(&Ui_window, "", Pilot_manage_list_coords[gr_screen.res][PM_X_COORD], Pilot_manage_list_coords[gr_screen.res][PM_Y_COORD], Pilot_manage_list_coords[gr_screen.res][PM_W_COORD], Pilot_manage_list_coords[gr_screen.res][PM_H_COORD], 0, 1); List_region.hide(); // create input box (for new pilot) Inputbox.create(&Ui_window, Pilot_manage_list_coords[gr_screen.res][PM_X_COORD], Pilot_manage_list_coords[gr_screen.res][PM_Y_COORD], Pilot_manage_list_coords[gr_screen.res][PM_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(); Rank_pips_bitmaps = bm_load_animation("IconRankMini.ani", &Rank_pips_count); pilot_manage_callsign_enter_mode = 0; List_scroll_offset = Pic_number = Pic_squad_number;// = Selected_line = 0; prev_single_player = -1; prev_multi_player = -1; pilot_manage_init_player_stuff(is_pilot_multi(Player)); // enable hotkeys from start pilot_manage_set_callsign_enter_mode(false); }
init_endlevel() { //##satellite_bitmap = bm_load("earth.bbm"); //##terrain_bitmap = bm_load("moon.bbm"); //## //##load_terrain("matt5b.bbm"); //load bitmap as height array //##//load_terrain("ttest2.bbm"); //load bitmap as height array #ifdef STATION_ENABLED station_bitmap = bm_load("steel3.bbm"); station_bitmap_list[0] = &station_bitmap; station_modelnum = load_polygon_model("station.pof",1,station_bitmap_list,NULL); #endif //!! exit_bitmap = bm_load("steel1.bbm"); //!! exit_bitmap_list[0] = &exit_bitmap; //!! exit_modelnum = load_polygon_model("exit01.pof",1,exit_bitmap_list,NULL); //!! destroyed_exit_modelnum = load_polygon_model("exit01d.pof",1,exit_bitmap_list,NULL); generate_starfield(); atexit(free_endlevel_data); terrain_bm_instance.bm_data = satellite_bm_instance.bm_data = NULL; }
void subtitle::clone(const subtitle &sub) { text_lines = sub.text_lines; text_fontnum = sub.text_fontnum; // copy the structs text_pos = sub.text_pos; image_pos = sub.image_pos; display_time = sub.display_time; fade_time = sub.fade_time; memcpy( &text_color, &sub.text_color, sizeof(color) ); if ( strlen(sub.imageanim) ) { memcpy( imageanim, sub.imageanim, MAX_FILENAME_LEN ); // we bm_load() again here to kick the refcount up image_id = bm_load(imageanim); } else { memset( imageanim, 0, MAX_FILENAME_LEN ); image_id = -1; } time_displayed = sub.time_displayed; time_displayed_end = sub.time_displayed_end; post_shaded = sub.post_shaded; }
/** * Page in debris bitmaps at level load */ void debris_page_in() { uint i; Debris_model = model_load( NOX("debris01.pof"), 0, NULL ); if (Debris_model >= 0) { polymodel * pm; pm = model_get(Debris_model); Debris_num_submodels = pm->n_models; } Debris_vaporize_model = model_load( NOX("debris02.pof"), 0, NULL ); for (i=0; i<Species_info.size(); i++ ) { species_info *species = &Species_info[i]; nprintf(( "Paging", "Paging in debris texture '%s'\n", species->debris_texture.filename)); species->debris_texture.bitmap_id = bm_load(species->debris_texture.filename); if (species->debris_texture.bitmap_id < 0) { Warning( LOCATION, "Couldn't load species %s debris\ntexture, '%s'\n", species->species_name, species->debris_texture.filename); } bm_page_in_texture(species->debris_texture.bitmap_id); } }
void techroom_select_new_entry() { Assert(Current_list != NULL); if (Current_list == NULL || Current_list_size <= 0) { Cur_entry_index = Cur_entry = -1; techroom_init_desc(NULL,0); return; } Cur_entry_index = Current_list[Cur_entry].index; Assert( Cur_entry_index >= 0 ); // if we are in the ships tab, load the ship model if (Tab == SHIPS_DATA_TAB) { ship_info *sip = &Ship_info[Cur_entry_index]; // little memory management, kinda hacky but it should keep the techroom at around // 100meg rather than the 700+ it can get to with all ships loaded - taylor for (int i=0; i<Current_list_size; i++) { if ((Current_list[i].model_num > -1) && (Current_list[i].textures_loaded)) { // don't unload any spot within 5 of current if ( (i < Cur_entry + 5) && (i > Cur_entry - 5) ) continue; mprintf(("TECH ROOM: Dumping excess ship textures...\n")); model_page_out_textures(Current_list[i].model_num); Current_list[i].textures_loaded = 0; } } Techroom_ship_modelnum = model_load(sip->pof_file, sip->n_subsystems, &sip->subsystems[0]); Current_list[Cur_entry].model_num = Techroom_ship_modelnum; // page in ship textures properly (takes care of nondimming pixels) model_page_in_textures(Techroom_ship_modelnum, Cur_entry_index); Current_list[Cur_entry].textures_loaded = 1; } else { Techroom_ship_modelnum = -1; Trackball_mode = 0; // load animation here, we now only have one loaded int stream_result = generic_anim_init_and_stream(&Current_list[Cur_entry].animation, Current_list[Cur_entry].tech_anim_filename, bm_get_type(Tech_background_bitmap), true); if (stream_result >= 0) { Current_list[Cur_entry].has_anim = 1; } else { // we've failed to load any animation // load an image and treat it like a 1 frame animation Current_list[Cur_entry].bitmap = bm_load(Current_list[Cur_entry].tech_anim_filename); } } techroom_init_desc(Current_list[Cur_entry].desc, Tech_desc_coords[gr_screen.res][SHIP_W_COORD]); fsspeech_play(FSSPEECH_FROM_TECHROOM, Current_list[Cur_entry].desc); }
// -------------------------------------------------------------------- // UI_WINDOW::set_foreground_bmap() // // Specify the filename for the mask bitmap to display on the ui window as // a background. // void UI_WINDOW::set_foreground_bmap(const char *fname) { // load in the background bitmap foreground_bmap_id = bm_load(fname); if (foreground_bmap_id < 0) { Error(LOCATION,"Could not load in %s!",fname); } }
// 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); }
// 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); // load in background image and flashing red alert animation Background_bitmap = bm_load(Red_alert_fname[gr_screen.res]); // 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]; } 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], 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; }
// -------------------------------------------------------------------- // UI_WINDOW::set_foreground_bmap() // // Specify the filename for the mask bitmap to display on the ui window as // a background. // void UI_WINDOW::set_foreground_bmap(char *fname) { // load in the background bitmap foreground_bmap_id = bm_load(fname); if (foreground_bmap_id < 0) { Error(LOCATION,"Could not load in %s!",fname); } #ifndef HARDWARE_ONLY palette_use_bm_palette(foreground_bmap_id); #endif }
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++; } } }
int generic_bitmap_load(generic_bitmap *gb) { if ( !VALID_FNAME(gb->filename) ) return -1; gb->bitmap_id = bm_load(gb->filename); if (gb->bitmap_id < 0) return -1; return 0; }
// Called once at the beginning of the game to load help bitmaps & data void help_overlay_init() { // load right_bracket bitmap help_right_bracket_bitmap = bm_load("right_bracket"); if (help_right_bracket_bitmap < 0) { // we failed to load the bitmap - this is very bad Int3(); } // load left_bracket bitmap help_left_bracket_bitmap = bm_load("left_bracket"); if (help_left_bracket_bitmap < 0) { // we failed to load the bitmap - this is very bad Int3(); } atexit(close_help); // parse help.tbl parse_helptbl(); }
// Called once at the beginning of the game to load help bitmaps & data void help_overlay_init() { // load right_bracket bitmap help_right_bracket_bitmap = bm_load("right_bracket"); // we failed to load the bitmap - this is very bad Assertion( help_right_bracket_bitmap >= 0, "Failed to load bitmap right_bracket for help overlay\n"); // load left_bracket bitmap help_left_bracket_bitmap = bm_load("left_bracket"); // we failed to load the bitmap - this is very bad Assertion( help_left_bracket_bitmap >= 0, "Failed to load bitmap left_bracket for help overlay\n"); atexit(close_help); num_help_overlays = 0; // parse help.tbl parse_helptbl(HELP_OVERLAY_FILENAME); // look for any modular tables parse_modular_table(NOX("*-hlp.tbm"), parse_helptbl); }
// -------------------------------------------------------------------- // UI_WINDOW::set_mask_bmap() // // Specify the filename for the mask bitmap to use. This has the hotspots // for all the different controls. // void UI_WINDOW::set_mask_bmap(const char *fname) { int bmap; bmap = bm_load(fname); if (bmap < 0) { Error(LOCATION, "Could not load in %s!", fname); } else { set_mask_bmap(bmap, fname); } }
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 mht_init() { int idx; // create the interface window Mht_window.create(0, 0, gr_screen.max_w_unscaled,gr_screen.max_h_unscaled, 0); Mht_window.set_mask_bmap(Mht_bitmap_mask_fname[gr_screen.res]); // load the background bitmap Mht_bitmap = bm_load(Mht_bitmap_fname[gr_screen.res]); if(Mht_bitmap < 0){ // we failed to load the bitmap - this is very bad Int3(); } // create the interface buttons for(idx=0; idx<MHT_NUM_BUTTONS; idx++){ // create the object Mht_buttons[gr_screen.res][idx].button.create(&Mht_window, "", Mht_buttons[gr_screen.res][idx].x, Mht_buttons[gr_screen.res][idx].y, 1, 1, 0, 1); // set the sound to play when highlighted Mht_buttons[gr_screen.res][idx].button.set_highlight_action(common_play_highlight_sound); // set the ani for the button Mht_buttons[gr_screen.res][idx].button.set_bmaps(Mht_buttons[gr_screen.res][idx].filename); // set the hotspot Mht_buttons[gr_screen.res][idx].button.link_hotspot(Mht_buttons[gr_screen.res][idx].hotspot); } // remove any multiplayer flags from the game mode Game_mode &= ~(GM_MULTIPLAYER); // initialize the music main_hall_start_music(); // set the game_mode based on the type of player Assert( Player != NULL ); if ( Player->flags & PLAYER_FLAGS_IS_MULTI ){ Game_mode = GM_MULTIPLAYER; } else { Game_mode = GM_NORMAL; } }
void cmd_brief_new_stage(int stage) { if (stage < 0) { cmd_brief_stop_anim(); Cur_stage = -1; } Cur_stage = stage; brief_color_text_init(Cur_cmd_brief->stage[stage].text.c_str(), Cmd_text_wnd_coords[Uses_scroll_buttons][gr_screen.res][CMD_W_COORD]); // load a new animation if it's different to what's already playing if (strcmp(Cur_anim_filename, Cur_cmd_brief->stage[stage].ani_filename) != 0) { // unload the previous anim if(Cur_Anim.num_frames > 0) { generic_anim_unload(&Cur_Anim); } // save new filename Cur_anim_filename = Cur_cmd_brief->stage[stage].ani_filename; // try to load the new anim in either high or low res int stream_result = generic_anim_init_and_stream(&Cur_Anim, Cur_anim_filename, bm_get_type(Cmd_brief_background_bitmap), true); // we've failed to load any animation if (stream_result < 0) { // load an image and treat it like a 1 frame animation Cur_Anim.first_frame = bm_load(Cur_cmd_brief->stage[stage].ani_filename); //if we fail here, the value is still -1 if(Cur_Anim.first_frame != -1) { Cur_Anim.num_frames = 1; } } } //resetting the audio here cmd_brief_stop_anim(); Top_cmd_brief_text_line = 0; }
Cursor* CursorManager::loadCursor(const char* fileName, bool animated) { int handle; if (animated) { handle = bm_load_animation(fileName, nullptr, nullptr); } else { handle = bm_load(fileName); } if (handle < 0) { mprintf(("Failed to load cursor bitmap %s!", fileName)); return nullptr; } Cursor* cursor = this->loadFromBitmap(handle); return cursor; }
// loads nframes bitmaps, starting at index start_frame. // anything < start_frame will not be loaded. // this keeps the loading code from trying to load bitmaps which don't exist // and taking an unnecessary disk hit. int UI_GADGET::set_bmaps(char *ani_fname, int nframes, int start_frame) { int first_frame, i; char full_name[MAX_FILENAME_LEN] = ""; char tmp[33]; int idx, s_idx; int num_digits; int its_all_good = 0; // clear out all frames for(idx=0; idx<MAX_BMAPS_PER_GADGET; idx++){ bmap_ids[idx] = -1; } // load all the bitmaps bm_filename = ani_fname; Assertion(nframes < MAX_BMAPS_PER_GADGET, "Too many frames specified (%d), must be less than MAX_BMAPS_PER_GADGET", nframes); m_num_frames = nframes; for(idx=start_frame; idx<nframes; idx++){ // clear the string strcpy_s(full_name, ""); // get the # of digits for this index num_digits = (idx < 10) ? 1 : (idx < 100) ? 2 : (idx < 1000) ? 3 : 4; // build the actual filename strcpy_s(full_name, ani_fname); for(s_idx=0; s_idx<(4-num_digits); s_idx++){ strcat_s(full_name, NOX("0")); } sprintf(tmp, "%d", idx); strcat_s(full_name, tmp); // try and load the bitmap bmap_ids[idx] = bm_load(full_name); if(bmap_ids[idx] != -1){ its_all_good = 1; } } // done if(its_all_good){ uses_bmaps = 1; return 0; } // no go, so try and load as an ani. try and load as an .ani first_frame = bm_load_animation(ani_fname, &m_num_frames); if((first_frame >= 0) && (m_num_frames <= MAX_BMAPS_PER_GADGET)){ // seems pretty stupid that we didn't just use a variable for the first frame and access all // other frames offset from it instead of accessing this bmap_ids[] array, but probably too // much trouble to go through and change this anymore. How sad.. for ( i=0; i<m_num_frames; i++ ) { bmap_ids[i] = first_frame + i; } } // flag that this control is using bitmaps for art uses_bmaps = 1; return 0; }
// initialize all chatbox details with the given mode flags int chatbox_create(int mode_flags) { int idx; // don't do anything if the chatbox is already initialized if (Chatbox_created){ return -1; } // probably shouldn't be using the chatbox in single player mode Assert(Game_mode & GM_MULTIPLAYER); // setup all data to correspond to our mode flags chatbox_set_mode(mode_flags); // initialize all low-level details related to chatting chatbox_chat_init(); // attempt to load in the chatbox background bitmap if(Chatbox_mode_flags & CHATBOX_FLAG_DRAW_BOX){ Chatbox_big_bitmap = bm_load(Chatbox_big_bitmap_fname[gr_screen.res]); Chatbox_small_bitmap = bm_load(Chatbox_small_bitmap_fname[gr_screen.res]); Chatbox_mp_bitmap = bm_load(Chatbox_p_bitmap_fname[gr_screen.res]); if(Chatbox_mode_flags & CHATBOX_FLAG_SMALL){ Chatbox_bitmap = Chatbox_small_bitmap; } else if(Chatbox_mode_flags & CHATBOX_FLAG_BIG){ Chatbox_bitmap = Chatbox_big_bitmap; } else { Chatbox_bitmap = Chatbox_mp_bitmap; } if((Chatbox_bitmap == -1) || (Chatbox_small_bitmap == -1) || (Chatbox_big_bitmap == -1) || (Chatbox_mp_bitmap == -1)){ return -1; } } // attempt to create the ui window for the chatbox and assign the mask Chat_window.create( 0, 0, gr_screen.max_w_unscaled, gr_screen.max_h_unscaled, 0 ); Chat_window.set_mask_bmap(Chatbox_mask); // create the chat text enter input area Chat_inputbox.create( &Chat_window, Chatbox_inputbox_x, Chatbox_textenter_y, Chatbox_inputbox_w, CHATBOX_MAX_LEN, "", UI_INPUTBOX_FLAG_INVIS | UI_INPUTBOX_FLAG_ESC_CLR | UI_INPUTBOX_FLAG_KEYTHRU | UI_INPUTBOX_FLAG_EAT_USED, Chatbox_w, Color_netplayer[MY_NET_PLAYER_NUM]); Chat_inputbox.set_focus(); Chat_inputbox.set_invalid_chars(CHATBOX_INVALID_CHARS); // if we're supposed to supply and check for out own buttons if((Chatbox_mode_flags & CHATBOX_FLAG_BUTTONS) && (Chatbox_mode_flags & CHATBOX_FLAG_DRAW_BOX)){ for(idx=0; idx<CHATBOX_NUM_BUTTONS; idx++){ // create the button Chatbox_buttons[gr_screen.res][idx].button.create(&Chat_window, "", Chatbox_buttons[gr_screen.res][idx].x, Chatbox_buttons[gr_screen.res][idx].y, 60, 30, (idx == CHATBOX_TOGGLE_SIZE) ? 0 : 1); // set the highlight action Chatbox_buttons[gr_screen.res][idx].button.set_highlight_action(common_play_highlight_sound); // set the bitmap Chatbox_buttons[gr_screen.res][idx].button.set_bmaps(Chatbox_buttons[gr_screen.res][idx].filename); // set the hotspot Chatbox_buttons[gr_screen.res][idx].button.link_hotspot(Chatbox_buttons[gr_screen.res][idx].hotspot); } // now create the toggle size button with the appropriate button if(Chatbox_mode_flags & CHATBOX_FLAG_SMALL){ Chatbox_buttons[gr_screen.res][CHATBOX_TOGGLE_SIZE].button.set_bmaps(Chatbox_buttons[gr_screen.res][CHATBOX_TOGGLE_SIZE].filename); } else { Chatbox_buttons[gr_screen.res][CHATBOX_TOGGLE_SIZE].button.set_bmaps(Chatbox_buttons[gr_screen.res][CHATBOX_TOGGLE_SIZE+1].filename); } } // an invisible button that will set focus to input box when clicked on Chat_enter_text.create( &Chat_window, "", 0, 0, 60, 30, 0); Chat_enter_text.hide(); // button doesn't show up Chat_enter_text.link_hotspot(50); Chatbox_created = 1; return 0; }
// ----------------------------------------------------------------------------- void barracks_do_frame(float frametime) { int k = Ui_window.process(); if ( k > 0 ) { if ( help_overlay_active(Barracks_overlay_id) ) { help_overlay_set_state(Barracks_overlay_id,gr_screen.res,0); k = 0; } } // pilot that mouse is over int prospective_pilot = -1; int i; // Entering pilot callsign if (Barracks_callsign_enter_mode) { // set focus to inputbox Inputbox.set_focus(); switch (k) { case KEY_ESC: // cancel create pilot Num_pilots--; for (i=0; i<Num_pilots; i++) { strcpy(Pilots[i], Pilots[i + 1]); Pilot_ranks[i] = Pilot_ranks[i + 1]; } barracks_set_callsign_enter_mode(false); break; case KEY_ENTER: barracks_accept_new_pilot_callsign(); break; } } else { // not entering pilot callsign switch (k) { case KEY_ENTER: if (barracks_new_pilot_selected()) { gamesnd_play_iface(SND_GENERAL_FAIL); } else { gamesnd_play_iface(SND_USER_SELECT); } break; case KEY_ESC: // cancel if (!help_overlay_active(Barracks_overlay_id)) { if (Num_pilots && !barracks_pilot_accepted()) { gameseq_post_event(GS_EVENT_MAIN_MENU); } else { gamesnd_play_iface(SND_GENERAL_FAIL); } } else { // kill the overlay help_overlay_set_state(Barracks_overlay_id,gr_screen.res,0); } break; case KEY_TAB: // switch mode (simgle/multi) if ( Networking_disabled ) { game_feature_disabled_popup(); break; } if (Player_sel_mode == PLAYER_SELECT_MODE_SINGLE) { Cur_pilot->flags |= PLAYER_FLAGS_IS_MULTI; Pilot.save_player(Cur_pilot); barracks_init_player_stuff(PLAYER_SELECT_MODE_MULTI); } else { // make sure we don't carry over the multi flag Cur_pilot->flags &= ~PLAYER_FLAGS_IS_MULTI; Pilot.save_player(Cur_pilot); barracks_init_player_stuff(PLAYER_SELECT_MODE_SINGLE); } gamesnd_play_iface(SND_USER_SELECT); break; case KEY_F1: // show help overlay gamesnd_play_iface(SND_HELP_PRESSED); break; case KEY_F2: // goto options screen gamesnd_play_iface(SND_SWITCH_SCREENS); gameseq_post_event(GS_EVENT_OPTIONS_MENU); break; } // end switch // process buttons for (i=0; i<BARRACKS_NUM_BUTTONS; i++) { if (Buttons[gr_screen.res][i].button.pressed()) { barracks_button_pressed(i); } } // if mouse is over a pilot, find index into Pilots array if (List_region.is_mouse_on()) { int y; List_region.get_mouse_pos(NULL, &y); int pilot_index = List_scroll_offset + (y / gr_get_font_height()); if ((pilot_index >= 0) && (pilot_index < Num_pilots)) { prospective_pilot = pilot_index; } } // if mouse clicked in list region, find index into Pilots array if (List_region.pressed()) { if (prospective_pilot != -1) { Selected_line = prospective_pilot; gamesnd_play_iface(SND_USER_SELECT); } } } // check mouse over help if (mouse_down(MOUSE_LEFT_BUTTON)) { help_overlay_set_state(Barracks_overlay_id, gr_screen.res, 0); } // do pilot pic stuff if ((Pic_number >= 0) && (Pic_number < Num_pilot_images)) { if (Pilot_images[Pic_number] == BARRACKS_IMAGE_NOT_LOADED) { // haven't tried loading it yet Pilot_images[Pic_number] = bm_load(Pilot_image_names[Pic_number]); if (Pilot_images[Pic_number] >= 0) { int w, h; bm_get_info(Pilot_images[Pic_number], &w, &h, NULL); // check for invalid pilot pic file if ((w != PLAYER_PILOT_PIC_W) || (h != PLAYER_PILOT_PIC_H)) { bm_release(Pilot_images[Pic_number]); Pilot_images[Pic_number] = -1; } } } } else { Pic_number = -1; } // do squad pic stuff if ((Pic_squad_number >= 0) && (Pic_squad_number < Num_pilot_squad_images)) { if (Pilot_squad_images[Pic_squad_number] == BARRACKS_IMAGE_NOT_LOADED) { // haven't tried loading it yet Pilot_squad_images[Pic_squad_number] = bm_load_duplicate(Pilot_squad_image_names[Pic_squad_number]); if (Pilot_squad_images[Pic_squad_number] >= 0) { int w, h; bm_get_info(Pilot_squad_images[Pic_squad_number], &w, &h, NULL); // check for invalid pilot pic file if ((w != PLAYER_SQUAD_PIC_W) || (h != PLAYER_SQUAD_PIC_H)) { bm_release(Pilot_squad_images[Pic_squad_number]); Pilot_squad_images[Pic_squad_number] = -1; } } } } else { Pic_squad_number = -1; } // draw the background, etc gr_reset_clip(); GR_MAYBE_CLEAR_RES(Background_bitmap); if (Background_bitmap >= 0) { gr_set_bitmap(Background_bitmap); gr_bitmap(0, 0, GR_RESIZE_MENU); } // draw pilot image and clean up afterwards barracks_draw_pilot_pic(); barracks_draw_squad_pic(); // draw the window Ui_window.draw(); // light up the correct mode button (single or multi) if (Player_sel_mode == PLAYER_SELECT_MODE_SINGLE) { Buttons[gr_screen.res][B_PILOT_SINGLE_MODE_BUTTON].button.draw_forced(2); } else { Buttons[gr_screen.res][B_PILOT_MULTI_MODE_BUTTON].button.draw_forced(2); } // write out pilot call signs barracks_display_pilot_callsigns(prospective_pilot); // write out current pilot stats barracks_display_pilot_stats(); // blit help overlay if active help_overlay_maybe_blit(Barracks_overlay_id, gr_screen.res); // flip the page gr_flip(); }
// ----------------------------------------------------------------------------- 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); }