void toggle_fill_the_screen(bool fill_the_screen) { if (fill_the_screen != screen_mode.fill_the_screen) { screen_mode.fill_the_screen = fill_the_screen; if (in_game) change_screen_mode(&screen_mode, true); else { change_screen_mode(640, 480, bit_depth, true); clear_screen(); } } }
void toggle_fullscreen(bool fs) { if (fs != screen_mode.fullscreen) { screen_mode.fullscreen = fs; if (in_game) change_screen_mode(&screen_mode, true); else { #ifdef PSP change_screen_mode(480, 272, bit_depth, true); #else change_screen_mode(640, 480, bit_depth, true); #endif clear_screen(); } } }
void enter_screen(void) { if (world_view->overhead_map_active) set_overhead_map_status(false); if (world_view->terminal_mode_active) set_terminal_status(false); // Adding this view-effect resetting here since initialize_world_view() no longer resets it world_view->effect = NONE; // Set screen to selected size in_game = true; change_screen_mode(&screen_mode, true); PrevFullscreen = screen_mode.fullscreen; #if defined(HAVE_OPENGL) && !defined(MUST_RELOAD_VIEW_CONTEXT) // if MUST_RELOAD_VIEW_CONTEXT, we know this just happened in // change_screen_mode if (screen_mode.acceleration == _opengl_acceleration) OGL_StartRun(); #endif #ifdef HAVE_OPENGL if (OGL_IsActive()) OGL_HUDActive = true; else OGL_HUDActive = false; #endif // Reset modifier key status SDL_SetModState(KMOD_NONE); }
void exit_screen(void) { // Return to 640x480 without OpenGL in_game = false; change_screen_mode(640, 480, bit_depth, true); #ifdef HAVE_OPENGL OGL_StopRun(); #endif }
void initialize_screen(struct screen_mode_data *mode, bool ShowFreqDialog) { interface_bit_depth = bit_depth = mode->bit_depth; #ifdef PSP printf("Initializing screen with size = %d (%d x %d)\n", mode->size, ViewSizes[mode->size].OverallWidth, ViewSizes[mode->size].OverallHeight); #endif if (!screen_initialized) { uncorrected_color_table = (struct color_table *)malloc(sizeof(struct color_table)); world_color_table = (struct color_table *)malloc(sizeof(struct color_table)); visible_color_table = (struct color_table *)malloc(sizeof(struct color_table)); interface_color_table = (struct color_table *)malloc(sizeof(struct color_table)); assert(uncorrected_color_table && world_color_table && visible_color_table && interface_color_table); memset(uncorrected_color_table, 0, sizeof(struct color_table)); memset(world_color_table, 0, sizeof(struct color_table)); memset(visible_color_table, 0, sizeof(struct color_table)); memset(interface_color_table, 0, sizeof(struct color_table)); // Allocate the bitmap_definition structure for our GWorld (it is reinitialized every frame) world_pixels_structure = (struct bitmap_definition *)malloc(sizeof(struct bitmap_definition) + sizeof(pixel8 *) * MAXIMUM_WORLD_HEIGHT); assert(world_pixels_structure); // Allocate and initialize our view_data structure world_view = (struct view_data *)malloc(sizeof(struct view_data)); assert(world_view); world_view->field_of_view = NORMAL_FIELD_OF_VIEW; // degrees (was 74 for a long, long time) world_view->target_field_of_view = NORMAL_FIELD_OF_VIEW; // for no change in FOV world_view->overhead_map_scale = DEFAULT_OVERHEAD_MAP_SCALE; world_view->overhead_map_active = false; world_view->terminal_mode_active = false; world_view->horizontal_scale = 1; world_view->vertical_scale = 1; world_view->tunnel_vision_active = false; #if SDL_VERSION_ATLEAST(1, 2, 10) desktop_height = SDL_GetVideoInfo()->current_h; desktop_width = SDL_GetVideoInfo()->current_w; #endif } else { unload_all_collections(); if (world_pixels) SDL_FreeSurface(world_pixels); } world_pixels = NULL; // Set screen to 640x480 without OpenGL for menu screen_mode = *mode; change_screen_mode(640, 480, bit_depth, true); screen_initialized = true; }
void change_screen_mode(struct screen_mode_data *mode, bool redraw) { // Get the screen mode here screen_mode = *mode; // "Redraw" change now and clear the screen if (redraw) { int msize = mode->size; assert(msize >= 0 && msize < NUMBER_OF_VIEW_SIZES); change_screen_mode(ViewSizes[msize].OverallWidth, ViewSizes[msize].OverallHeight, mode->bit_depth, false); clear_screen(); recenter_mouse(); } frame_count = frame_index = 0; }
/* -------- code */ void do_preferences( void) { struct screen_mode_data mode= graphics_preferences->screen_mode; GDSpec old_spec= graphics_preferences->device_spec; handle_preferences(); if (!EqualGDSpec(&graphics_preferences->device_spec, &old_spec) || mode.bit_depth != graphics_preferences->screen_mode.bit_depth || mode.acceleration != graphics_preferences->screen_mode.acceleration) { paint_window_black(); initialize_screen(&graphics_preferences->screen_mode); /* Re fade in, so that we get the proper colortable loaded.. */ display_main_menu(); } else if (memcmp(&mode, &graphics_preferences->screen_mode, sizeof(struct screen_mode_data))) { change_screen_mode(&graphics_preferences->screen_mode, FALSE); } return; }
static void handle_game_key(const SDL_Event &event) { SDL_Keycode key = event.key.keysym.sym; SDL_Scancode sc = event.key.keysym.scancode; bool changed_screen_mode = false; bool changed_prefs = false; if (!game_is_networked && (event.key.keysym.mod & KMOD_CTRL) && CheatsActive) { int type_of_cheat = process_keyword_key(key); if (type_of_cheat != NONE) handle_keyword(type_of_cheat); } if (Console::instance()->input_active()) { switch(key) { case SDLK_RETURN: case SDLK_KP_ENTER: Console::instance()->enter(); break; case SDLK_ESCAPE: Console::instance()->abort(); break; case SDLK_BACKSPACE: Console::instance()->backspace(); break; case SDLK_DELETE: Console::instance()->del(); break; case SDLK_UP: Console::instance()->up_arrow(); break; case SDLK_DOWN: Console::instance()->down_arrow(); break; case SDLK_LEFT: Console::instance()->left_arrow(); break; case SDLK_RIGHT: Console::instance()->right_arrow(); break; case SDLK_HOME: Console::instance()->line_home(); break; case SDLK_END: Console::instance()->line_end(); break; case SDLK_a: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->line_home(); break; case SDLK_b: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->left_arrow(); break; case SDLK_d: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->del(); break; case SDLK_e: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->line_end(); break; case SDLK_f: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->right_arrow(); break; case SDLK_h: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->backspace(); break; case SDLK_k: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->forward_clear(); break; case SDLK_n: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->down_arrow(); break; case SDLK_p: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->up_arrow(); break; case SDLK_t: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->transpose(); break; case SDLK_u: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->clear(); break; case SDLK_w: if (event.key.keysym.mod & KMOD_CTRL) Console::instance()->delete_word(); break; } } else { if (sc == SDL_SCANCODE_ESCAPE) // (ZZZ) Quit gesture (now safer) { if(!player_controlling_game()) do_menu_item_command(mGame, iQuitGame, false); else { if(get_ticks_since_local_player_in_terminal() > 1 * TICKS_PER_SECOND) { if(!game_is_networked) { do_menu_item_command(mGame, iQuitGame, false); } else { #if defined(__APPLE__) && defined(__MACH__) screen_printf("If you wish to quit, press Command-Q"); #else screen_printf("If you wish to quit, press Alt+Q."); #endif } } } } else if (input_preferences->shell_key_bindings[_key_volume_up].count(sc)) { changed_prefs = SoundManager::instance()->AdjustVolumeUp(Sound_AdjustVolume()); } else if (input_preferences->shell_key_bindings[_key_volume_down].count(sc)) { changed_prefs = SoundManager::instance()->AdjustVolumeDown(Sound_AdjustVolume()); } else if (input_preferences->shell_key_bindings[_key_switch_view].count(sc)) { walk_player_list(); render_screen(NONE); } else if (input_preferences->shell_key_bindings[_key_zoom_in].count(sc)) { if (zoom_overhead_map_in()) PlayInterfaceButtonSound(Sound_ButtonSuccess()); else PlayInterfaceButtonSound(Sound_ButtonFailure()); } else if (input_preferences->shell_key_bindings[_key_zoom_out].count(sc)) { if (zoom_overhead_map_out()) PlayInterfaceButtonSound(Sound_ButtonSuccess()); else PlayInterfaceButtonSound(Sound_ButtonFailure()); } else if (input_preferences->shell_key_bindings[_key_inventory_left].count(sc)) { if (player_controlling_game()) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); scroll_inventory(-1); } else decrement_replay_speed(); } else if (input_preferences->shell_key_bindings[_key_inventory_right].count(sc)) { if (player_controlling_game()) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); scroll_inventory(1); } else increment_replay_speed(); } else if (input_preferences->shell_key_bindings[_key_toggle_fps].count(sc)) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); extern bool displaying_fps; displaying_fps = !displaying_fps; } else if (input_preferences->shell_key_bindings[_key_activate_console].count(sc)) { if (game_is_networked) { #if !defined(DISABLE_NETWORKING) Console::instance()->activate_input(InGameChatCallbacks::SendChatMessage, InGameChatCallbacks::prompt()); #endif PlayInterfaceButtonSound(Sound_ButtonSuccess()); } else if (Console::instance()->use_lua_console()) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); Console::instance()->activate_input(ExecuteLuaString, ">"); } else { PlayInterfaceButtonSound(Sound_ButtonFailure()); } } else if (input_preferences->shell_key_bindings[_key_show_scores].count(sc)) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); { extern bool ShowScores; ShowScores = !ShowScores; } } else if (sc == SDL_SCANCODE_F1) // Decrease screen size { if (!graphics_preferences->screen_mode.hud) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.hud = true; changed_screen_mode = changed_prefs = true; } else { int mode = alephone::Screen::instance()->FindMode(get_screen_mode()->width, get_screen_mode()->height); if (mode < alephone::Screen::instance()->GetModes().size() - 1) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.width = alephone::Screen::instance()->ModeWidth(mode + 1); graphics_preferences->screen_mode.height = alephone::Screen::instance()->ModeHeight(mode + 1); graphics_preferences->screen_mode.auto_resolution = false; graphics_preferences->screen_mode.hud = false; changed_screen_mode = changed_prefs = true; } else PlayInterfaceButtonSound(Sound_ButtonFailure()); } } else if (sc == SDL_SCANCODE_F2) // Increase screen size { if (graphics_preferences->screen_mode.hud) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.hud = false; changed_screen_mode = changed_prefs = true; } else { int mode = alephone::Screen::instance()->FindMode(get_screen_mode()->width, get_screen_mode()->height); int automode = get_screen_mode()->fullscreen ? 0 : 1; if (mode > automode) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.width = alephone::Screen::instance()->ModeWidth(mode - 1); graphics_preferences->screen_mode.height = alephone::Screen::instance()->ModeHeight(mode - 1); if ((mode - 1) == automode) graphics_preferences->screen_mode.auto_resolution = true; graphics_preferences->screen_mode.hud = true; changed_screen_mode = changed_prefs = true; } else PlayInterfaceButtonSound(Sound_ButtonFailure()); } } else if (sc == SDL_SCANCODE_F3) // Resolution toggle { if (!OGL_IsActive()) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.high_resolution = !graphics_preferences->screen_mode.high_resolution; changed_screen_mode = changed_prefs = true; } else PlayInterfaceButtonSound(Sound_ButtonFailure()); } else if (sc == SDL_SCANCODE_F4) // Reset OpenGL textures { #ifdef HAVE_OPENGL if (OGL_IsActive()) { // Play the button sound in advance to get the full effect of the sound PlayInterfaceButtonSound(Sound_OGL_Reset()); OGL_ResetTextures(); } else #endif PlayInterfaceButtonSound(Sound_ButtonInoperative()); } else if (sc == SDL_SCANCODE_F5) // Make the chase cam switch sides { if (ChaseCam_IsActive()) PlayInterfaceButtonSound(Sound_ButtonSuccess()); else PlayInterfaceButtonSound(Sound_ButtonInoperative()); ChaseCam_SwitchSides(); } else if (sc == SDL_SCANCODE_F6) // Toggle the chase cam { PlayInterfaceButtonSound(Sound_ButtonSuccess()); ChaseCam_SetActive(!ChaseCam_IsActive()); } else if (sc == SDL_SCANCODE_F7) // Toggle tunnel vision { PlayInterfaceButtonSound(Sound_ButtonSuccess()); SetTunnelVision(!GetTunnelVision()); } else if (sc == SDL_SCANCODE_F8) // Toggle the crosshairs { PlayInterfaceButtonSound(Sound_ButtonSuccess()); player_preferences->crosshairs_active = !player_preferences->crosshairs_active; Crosshairs_SetActive(player_preferences->crosshairs_active); changed_prefs = true; } else if (sc == SDL_SCANCODE_F9) // Screen dump { dump_screen(); } else if (sc == SDL_SCANCODE_F10) // Toggle the position display { PlayInterfaceButtonSound(Sound_ButtonSuccess()); { extern bool ShowPosition; ShowPosition = !ShowPosition; } } else if (sc == SDL_SCANCODE_F11) // Decrease gamma level { if (graphics_preferences->screen_mode.gamma_level) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.gamma_level--; change_gamma_level(graphics_preferences->screen_mode.gamma_level); changed_prefs = true; } else PlayInterfaceButtonSound(Sound_ButtonFailure()); } else if (sc == SDL_SCANCODE_F12) // Increase gamma level { if (graphics_preferences->screen_mode.gamma_level < NUMBER_OF_GAMMA_LEVELS - 1) { PlayInterfaceButtonSound(Sound_ButtonSuccess()); graphics_preferences->screen_mode.gamma_level++; change_gamma_level(graphics_preferences->screen_mode.gamma_level); changed_prefs = true; } else PlayInterfaceButtonSound(Sound_ButtonFailure()); } else { if (get_game_controller() == _demo) set_game_state(_close_game); } } if (changed_screen_mode) { screen_mode_data temp_screen_mode = graphics_preferences->screen_mode; temp_screen_mode.fullscreen = get_screen_mode()->fullscreen; change_screen_mode(&temp_screen_mode, true); render_screen(0); } if (changed_prefs) write_preferences(); }
// See also: Inventory::draw(), Soldier::draw_inventory() // Called by: Connect::do_planner() via Units::execute and execute_main() void Editor::show() { reset_video(); destroy_bitmap(screen2); screen2 = create_bitmap(640, 400); clear(screen2); // Prepare background picture for editor screen to improve // performance a bit (static image that is never changed) BITMAP *editor_bg = create_bitmap(640, 400); clear_to_color(editor_bg, COLOR_BLACK1); SPK *tac01 = new SPK("$(xcom)/ufograph/tac01.scr"); // Picture with buttons tac01->show(editor_bg, 0, 0); // draw buttons: OK, Next-Man, Prev-Man, Unload-clip, Scroll-right delete tac01; BITMAP *b5 = create_bitmap(32, 15); clear(b5); // Button for Scroll-left blit(editor_bg, b5, 288, 137, 0, 0, 32, 15); draw_sprite_vh_flip(editor_bg, b5, 255, 137); // Button: Scroll-left destroy_bitmap(b5); rectfill(editor_bg, 288, 32, 319, 57, COLOR_GRAY15); //hide unused "unload" button text_mode(-1); textout(editor_bg, g_small_font, _("Click-and-drop weapons from the armory to the soldier, right-click to remove"), 0, 364 + 22, COLOR_WHITE); position_mouse(320, 200); MouseRange temp_mouse_range(0, 0, 639, 400); int DONE = 0; int mouse_leftr = 1, mouse_rightr = 1; int i; int color = COLOR_LT_OLIVE; int A1 = 0, A2 = 0; while (mouse_b & 3) rest(1); g_console->resize(SCREEN_W, SCREEN_H - 400); g_console->set_full_redraw(); g_console->redraw(screen, 0, 400); while (!DONE) { net->check(); rest(1); // Don't eat all CPU resources if (CHANGE) { g_console->redraw(screen, 0, 400); blit(editor_bg, screen2, 0, 0, 0, 0, editor_bg->w, editor_bg->h); man->showspk(screen2); // Show "bigpicture" of soldier in choosen armor color = COLOR_DK_GRAY; if (man->x != 0) // ??? This soldier already selected for the mission ? color = COLOR_LT_OLIVE; text_mode(-1); textout(screen2, large, man->md.Name, 0, 0, color); for (i = 0; i < NUMBER_OF_PLACES; i++) //man->drawgrid(); man->place(i)->drawgrid(screen2, i); m_armoury->drawgrid(screen2, P_ARMOURY); man->draw_unibord(1, 320, 0); // Attribute-Barchart if (sel_item != NULL) { if (sel_item_place == P_ARMOURY) sel_item->od_info(330, 235, COLOR_WHITE); else sel_item->od_info(330, 235, COLOR_OLIVE); textprintf(screen2, g_small_font, 128, 140, COLOR_GREEN, "%s", sel_item->name().c_str()); if (sel_item->haveclip()) { //textprintf(screen2, font, 272, 80, color, "%d", sel_item->roundsremain()); textout(screen2, g_small_font, _("AMMO:"), 272, 64, COLOR_LT_OLIVE); textout(screen2, g_small_font, _("ROUNDS"), 272, 72, COLOR_LT_OLIVE); textout(screen2, g_small_font, _("LEFT="), 272, 80, COLOR_LT_OLIVE); textprintf(screen2, g_small_font, 299, 80, COLOR_ORANGE, "%d", sel_item->roundsremain()); rect(screen2, 272, 88, 303, 135, COLOR_DK_GRAY); //clip PCK::showpck(sel_item->clip()->obdata_pInv(), 272, 88 + 8); } else if (sel_item->obdata_isAmmo()) { //textprintf(screen2, font, 272, 80, color, "%d", sel_item->rounds); textout(screen2, g_small_font, _("AMMO:"), 272, 64, COLOR_LT_OLIVE); textout(screen2, g_small_font, _("ROUNDS"), 272, 72, COLOR_LT_OLIVE); textout(screen2, g_small_font, _("LEFT="), 272, 80, COLOR_LT_OLIVE); textprintf(screen2, g_small_font, 299, 80, COLOR_ORANGE, "%d", sel_item->m_rounds); rect(screen2, 272, 88, 303, 135, COLOR_DK_GRAY); //clip PCK::showpck(sel_item->obdata_pInv(), 272, 88 + 8); } PCK::showpck(sel_item->obdata_pInv(), mouse_x - sel_item->obdata_width() * 16 / 2, mouse_y - sel_item->obdata_height() * 16 / 2 + 8); } else { Item *it = m_armoury->item_under_mouse(0, 0); if (it != NULL) { if (is_item_allowed(it->m_type)) it->od_info(330, 235, COLOR_GRAY05); else it->od_info(330, 235, COLOR_GRAY10); } else { //textprintf(screen2, large, 330, 220, COLOR_LT_BLUE, _("Click here to change equipment set")); int ty = 235; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F1: Help")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F2/F3: Save/load team")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F4: Edit soldier attributes")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F5: Change weaponset")); ty += 15; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F6: Save as weapon set template")); ty += 15; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" Ctrl+Ins: Copy current soldier")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _("Shift+Ins: Paste on current soldier")); ty += 15; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" Del: Delete items of current man")); /*ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _("Shift+Del: Drop items of current man"));*/ ty += 15; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F11: Cycle through appearences")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" F12: Cycle through human armours")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _("Shift+F12: Cycle through alien races")); ty += 15; textprintf(screen2, font, 330, ty, COLOR_BLUE, _(" Tab: Next soldier")); ty += 10; textprintf(screen2, font, 330, ty, COLOR_BLUE, _("Shift+Tab: Previous soldier")); ty += 10; } } int wht = man->count_weight(); int max_wht = man->md.Strength; color = max_wht < wht ? COLOR_RED03 : COLOR_GRAY02; textprintf(screen2, g_small_font, 0, 20, color, _("Equipment weight: %2d/%2d"), wht, max_wht); char str1[64]; // to adjust position of translated string //int x1 = 120; int x2 = 236; sprintf(str1, "%s: %4d", _("Soldier cost"), man->calc_full_ammunition_cost() ); int w1 = text_length(g_small_font, str1); // right-justify string textprintf(screen2, g_small_font, x2-w1, 20, COLOR_GRAY02, "%s", str1); draw_alpha_sprite(screen2, mouser, mouse_x, mouse_y); blit(screen2, screen, 0, 0, 0, 0, screen2->w, screen2->h); CHANGE = 0; } if ((mouse_b & 1) && (mouse_leftr)) { //left mouseclick mouse_leftr = 0; CHANGE = 1; if (handle_mouse_leftclick()) DONE = 1; } if ((mouse_b & 2) && (mouse_rightr)) { //right mouseclick: get & put items mouse_rightr = 0; CHANGE = 1; if (sel_item != NULL) { if (sel_item_place == P_ARMOURY) { // If item was taken from the armoury - just delete it delete sel_item; sel_item = NULL; } else { // If item was taken from the the soldier - put it back man->putitem(sel_item, sel_item_place, sel_item->m_x, sel_item->m_y); sel_item = NULL; } } else { // Delete item under mouse cursor for (i = 0; i < NUMBER_OF_PLACES; i++) { Item *it = man->place(i)->mselect(0, 0); if (it != NULL) delete(it); } } } if (!(mouse_b & 1)) { mouse_leftr = 1; } if (!(mouse_b & 2)) { mouse_rightr = 1; } if (keypressed()) { CHANGE = 1; //int c = readkey(); //switch (c >> 8) { int scancode; int keycode = ureadkey(&scancode); switch (scancode) { case KEY_F1: help( HELP_INVENTORY ); break; // Todo: Change from "Save&Load Team" to "Save&Load Soldier" // Todo: move "Save&Load Team" to Mission-planner (connect.cpp) case KEY_F2: //if (askmenu("SAVE DATA")) { save(); //} break; case KEY_F3: //if (askmenu("LOAD DATA")) { load(); //} break; case KEY_F4: edit_soldier(); // Edit Attributes+Armor break; case KEY_F5: change_equipment(); break; case KEY_F6: export_weaponset(); break; case KEY_F10: change_screen_mode(); break; case KEY_F11: // cycle thru apperances: A1 = man->md.Appearance; A2 = man->md.fFemale; if ((key[KEY_LSHIFT]) || (key[KEY_RSHIFT]) ) { // Shift-F11: A2++; if (A2 >= 2) A2 = 0; man->md.fFemale = A2; } else { // F11: A1 = A1 + (A2 ? 4 : 0); A1++; if (A1 >= 8) A1 = 0; man->md.fFemale = A1 >= 4; man->md.Appearance = A1 % 4; } man->process_MANDATA(); break; case KEY_F12: // cycle thru armor-types: A1 = man->md.SkinType; if ((key[KEY_LSHIFT]) || (key[KEY_RSHIFT]) ) // Shift-F12: Aliens man->skin()->next_alien(); else // F12: Human Armor man->skin()->next_human(); man->process_MANDATA(); break; // case KEY_INSERT: // Todo: Copy items from last DEL to current man if ((key[KEY_LCONTROL]) || (key[KEY_RCONTROL])) { copy_soldier(man); break; } if ((key[KEY_LSHIFT]) || (key[KEY_RSHIFT])) { paste_soldier(man); break; } break; case KEY_DEL: // Todo: store the deleted items (where?) for KEY_INSERT if ((key[KEY_LSHIFT]) || (key[KEY_RSHIFT]) ) { // Shift-DEL: // Drop all carried items: // Todo: drop to common pool Item * it; for (int i = 0; i < NUMBER_OF_CARRIED_PLACES; i++) { it = man->item(i); if (it != NULL) man->putitem(it, P_MAP); } } else { // DEL: // Destroy items of current man, including those on the ground: man->destroy_all_items(); } break; case KEY_TAB: // jump to next/prev. soldier if ((key[KEY_LSHIFT]) || (key[KEY_RSHIFT]) ) { // Shift-TAB: man = man->prevman(); } else { // TAB: man = man->nextman(); } break; case KEY_LEFT: man = man->prevman(); break; case KEY_RIGHT: man = man->nextman(); break; case KEY_PGUP: scroll_equipment(-1); break; case KEY_PGDN: scroll_equipment(+1); break; case KEY_PRTSCR: if (askmenu(_("SCREEN-SNAPSHOT"))) { savescreen(); } break; case KEY_ESC: DONE = 1; break; default: if (g_console->process_keyboard_input(keycode, scancode)) net->send_message((char *)g_console->get_text()); } } } m_plt->save_FULLDATA("$(home)/squad.lua"); destroy_bitmap(editor_bg); destroy_bitmap(screen2); screen2 = create_bitmap(SCREEN2W, SCREEN2H); clear(screen2); g_console->resize(SCREEN_W, SCREEN_H - SCREEN2H); g_console->set_full_redraw(); clear(screen); }