X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=e86895089a59a74a9b4178b432266b3e3cbb3fb2;hb=0ec311a1d294eca8b0cf6b6a31f288b5c631ce8f;hp=05956c4c369b741eeed51faf4ae8138b61d0b6c7;hpb=c0c5862d9ee59c70412b1c35e558101b109a8ec9;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 05956c4c..e8689508 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * +* (c) 1995-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -72,9 +72,9 @@ #define MAX_MENU_TEXT_LENGTH_MEDIUM (MAX_MENU_TEXT_LENGTH_BIG * 2) /* buttons and scrollbars identifiers */ -#define SCREEN_CTRL_ID_LAST_LEVEL 0 +#define SCREEN_CTRL_ID_PREV_LEVEL 0 #define SCREEN_CTRL_ID_NEXT_LEVEL 1 -#define SCREEN_CTRL_ID_LAST_PLAYER 2 +#define SCREEN_CTRL_ID_PREV_PLAYER 2 #define SCREEN_CTRL_ID_NEXT_PLAYER 3 #define SCREEN_CTRL_ID_SCROLL_UP 4 #define SCREEN_CTRL_ID_SCROLL_DOWN 5 @@ -115,6 +115,18 @@ #define SC_BORDER_SIZE 14 +/* other useful macro definitions */ +#define BUTTON_GRAPHIC_ACTIVE(g) \ + (g == IMG_MENU_BUTTON_LEFT ? IMG_MENU_BUTTON_LEFT_ACTIVE : \ + g == IMG_MENU_BUTTON_RIGHT ? IMG_MENU_BUTTON_RIGHT_ACTIVE : \ + g == IMG_MENU_BUTTON_UP ? IMG_MENU_BUTTON_UP_ACTIVE : \ + g == IMG_MENU_BUTTON_DOWN ? IMG_MENU_BUTTON_DOWN_ACTIVE : \ + g == IMG_MENU_BUTTON_LEAVE_MENU ? IMG_MENU_BUTTON_LEAVE_MENU_ACTIVE : \ + g == IMG_MENU_BUTTON_ENTER_MENU ? IMG_MENU_BUTTON_ENTER_MENU_ACTIVE : \ + g == IMG_MENU_BUTTON_PREV_LEVEL ? IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE : \ + g == IMG_MENU_BUTTON_NEXT_LEVEL ? IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE : \ + IMG_MENU_BUTTON_ACTIVE) + /* forward declarations of internal functions */ static void HandleScreenGadgets(struct GadgetInfo *); @@ -128,9 +140,10 @@ static void HandleChooseTree(int, int, int, int, int, TreeInfo **); static void DrawChooseLevel(void); static void DrawInfoScreen(void); +static void DrawAndFadeInInfoScreen(int); static void DrawSetupScreen(void); -static void DrawInfoScreenExt(int); +static void DrawInfoScreenExt(int, int); static void DrawInfoScreen_NotAvailable(char *, char *); static void DrawInfoScreen_HelpAnim(int, int, boolean); static void DrawInfoScreen_HelpText(int, int, int, int); @@ -169,6 +182,254 @@ static Bitmap *scrollbar_bitmap[NUM_SCROLLBAR_BITMAPS]; #endif +#define MAIN_CONTROL_NAME 0 +#define MAIN_CONTROL_LEVELS 1 +#define MAIN_CONTROL_SCORES 2 +#define MAIN_CONTROL_EDITOR 3 +#define MAIN_CONTROL_INFO 4 +#define MAIN_CONTROL_GAME 5 +#define MAIN_CONTROL_SETUP 6 +#define MAIN_CONTROL_QUIT 7 +#define MAIN_CONTROL_PREV_LEVEL 8 +#define MAIN_CONTROL_NEXT_LEVEL 9 +#define MAIN_CONTROL_CURRENT_LEVEL 10 +#define MAIN_CONTROL_FIRST_LEVEL 11 +#define MAIN_CONTROL_LAST_LEVEL 12 +#define MAIN_CONTROL_LEVELSET_INFO 13 +#define MAIN_CONTROL_LEVEL_INFO 14 + +static char main_text_name[10]; +static char main_text_current_level[10]; +static char main_text_first_level[10]; +static char main_text_last_level[10]; +static char main_input_name[MAX_PLAYER_NAME_LEN + 1]; + +static struct +{ + int nr; + + struct Rect *pos_button; + int button_graphic; + + struct Rect *pos_text; + char *text; + int font_text; + + struct Rect *pos_input; + char *input; + int font_input; +} +main_controls[] = +{ + { + MAIN_CONTROL_NAME, + &menu.main.button.name, IMG_MENU_BUTTON, + &menu.main.text.name, main_text_name, FONT_MENU_1, + &menu.main.input.name, main_input_name, FONT_INPUT_1, + }, + { + MAIN_CONTROL_LEVELS, + &menu.main.button.levels, IMG_MENU_BUTTON_ENTER_MENU, + &menu.main.text.levels, "Levelset", FONT_MENU_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_SCORES, + &menu.main.button.scores, IMG_MENU_BUTTON, + &menu.main.text.scores, "Hall Of Fame", FONT_MENU_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_EDITOR, + &menu.main.button.editor, IMG_MENU_BUTTON, + &menu.main.text.editor, "Level Creator", FONT_MENU_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_INFO, + &menu.main.button.info, IMG_MENU_BUTTON_ENTER_MENU, + &menu.main.text.info, "Info Screen", FONT_MENU_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_GAME, + &menu.main.button.game, IMG_MENU_BUTTON, + &menu.main.text.game, "Start Game", FONT_MENU_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_SETUP, + &menu.main.button.setup, IMG_MENU_BUTTON_ENTER_MENU, + &menu.main.text.setup, "Setup", FONT_MENU_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_QUIT, + &menu.main.button.quit, IMG_MENU_BUTTON, + &menu.main.text.quit, "Quit", FONT_MENU_1, + NULL, NULL, -1, + }, +#if 0 + { + MAIN_CONTROL_PREV_LEVEL, + &menu.main.button.prev_level, IMG_MENU_BUTTON_PREV_LEVEL, + NULL, NULL, -1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_NEXT_LEVEL, + &menu.main.button.next_level, IMG_MENU_BUTTON_NEXT_LEVEL, + NULL, NULL, -1, + NULL, NULL, -1, + }, +#endif + { + MAIN_CONTROL_CURRENT_LEVEL, + NULL, -1, + &menu.main.text.current_level, main_text_current_level,FONT_VALUE_1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_FIRST_LEVEL, + NULL, -1, + &menu.main.text.first_level, main_text_first_level, FONT_TEXT_3, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LAST_LEVEL, + NULL, -1, + &menu.main.text.last_level, main_text_last_level, FONT_TEXT_3, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVELSET_INFO, + NULL, -1, + &menu.main.text.levelset_info, NULL, -1, + NULL, NULL, -1, + }, + { + MAIN_CONTROL_LEVEL_INFO, + NULL, -1, + &menu.main.text.level_info, NULL, -1, + NULL, NULL, -1, + }, + + { + -1, + NULL, -1, + NULL, NULL, -1, + NULL, NULL, -1, + } +}; + + +static void InitializeMainControls() +{ + boolean local_team_mode = (!options.network && setup.team_mode); + int i; + + /* set main control text values to dynamically determined values */ + sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:"); + sprintf(main_text_current_level, "%s", int2str(level_nr, 3)); + sprintf(main_text_first_level, "%03d", leveldir_current->first_level); + sprintf(main_text_last_level, "%03d", leveldir_current->last_level); + sprintf(main_input_name, "%s", setup.player_name); + + /* set main control screen positions to dynamically determined values */ + for (i = 0; main_controls[i].nr != -1; i++) + { + int nr = main_controls[i].nr; + struct Rect *pos_button = main_controls[i].pos_button; + struct Rect *pos_text = main_controls[i].pos_text; + struct Rect *pos_input = main_controls[i].pos_input; + char *text = main_controls[i].text; + char *input = main_controls[i].input; + int font_text = main_controls[i].font_text; + int font_input = main_controls[i].font_input; + int button_graphic = main_controls[i].button_graphic; + + int font_text_width = (font_text != -1 ? getFontWidth(font_text) : 0); + int font_text_height = (font_text != -1 ? getFontHeight(font_text) : 0); + int font_input_width = (font_input != -1 ? getFontWidth(font_input) : 0); + int font_input_height = (font_input != -1 ? getFontHeight(font_input) : 0); + int text_chars = (text != NULL ? strlen(text) : 0); + int input_chars = (input != NULL ? strlen(input) : 0); + + int button_width = graphic_info[button_graphic].width; + int button_height = graphic_info[button_graphic].height; + int text_width = font_text_width * text_chars; + int text_height = font_text_height; + int input_width = font_input_width * input_chars; + int input_height = font_input_height; + + if (nr == MAIN_CONTROL_NAME) + { + if (menu.main.input.name.x == -1) + menu.main.input.name.x = menu.main.text.name.x + text_width; + if (menu.main.input.name.y == -1) + menu.main.input.name.y = menu.main.text.name.y; + + menu.main.input.name.width = font_input_width * MAX_PLAYER_NAME_LEN; + menu.main.input.name.height = font_input_height; + } + + if (pos_button != NULL) + { + if (pos_button->width == 0) + pos_button->width = button_width; + if (pos_button->height == 0) + pos_button->height = button_height; + } + + if (pos_text != NULL) + { + if (pos_text->width == -1) + pos_text->width = text_width; + if (pos_text->height == -1) + pos_text->height = text_height; + } + + if (pos_input != NULL) + { + if (pos_input->width == -1) + pos_input->width = input_width; + if (pos_input->height == -1) + pos_input->height = input_height; + } + } +} + +static void DrawMainControlButton(int pos, boolean active) +{ + int i; + + for (i = 0; main_controls[i].nr != -1; i++) + { + if (main_controls[i].nr == pos) + { + struct Rect *pos_button = main_controls[i].pos_button; + int graphic = main_controls[i].button_graphic; + int x = mSX + pos_button->x; + int y = mSY + pos_button->y; + + if (active) + graphic = BUTTON_GRAPHIC_ACTIVE(graphic); + + DrawBackground(x, y, pos_button->width, pos_button->height); + DrawGraphicThruMaskExt(drawto, x, y, graphic, 0); + + break; + } + } +} + +static boolean insideRect(struct Rect *rect, int x, int y) +{ + return (rect != NULL && + x >= rect->x && x < rect->x + rect->width && + y >= rect->y && y < rect->y + rect->height); +} + static void drawCursorExt(int xpos, int ypos, int color, int g) { static int cursor_array[SCR_FIELDY]; @@ -182,13 +443,7 @@ static void drawCursorExt(int xpos, int ypos, int color, int g) } if (color == FC_RED) - g = (g == IMG_MENU_BUTTON_LEFT ? IMG_MENU_BUTTON_LEFT_ACTIVE : - g == IMG_MENU_BUTTON_RIGHT ? IMG_MENU_BUTTON_RIGHT_ACTIVE : - g == IMG_MENU_BUTTON_LEAVE_MENU ? IMG_MENU_BUTTON_LEAVE_MENU_ACTIVE : - g == IMG_MENU_BUTTON_ENTER_MENU ? IMG_MENU_BUTTON_ENTER_MENU_ACTIVE : - g == IMG_MENU_BUTTON_LAST_LEVEL ? IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE : - g == IMG_MENU_BUTTON_NEXT_LEVEL ? IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE : - IMG_MENU_BUTTON_ACTIVE); + g = BUTTON_GRAPHIC_ACTIVE(g); ypos += MENU_SCREEN_START_YPOS; @@ -229,25 +484,27 @@ void DrawHeadline() DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, PROGRAM_COPYRIGHT_STRING); } -static int getLastLevelButtonPos() +#if 0 +static int getPrevlevelButtonPos() { return 10; } static int getCurrentLevelTextPos() { - return (getLastLevelButtonPos() + 1); + return (getPrevlevelButtonPos() + 1); } static int getNextLevelButtonPos() { - return getLastLevelButtonPos() + 3 + 1; + return getPrevlevelButtonPos() + 3 + 1; } static int getLevelRangeTextPos() { return getNextLevelButtonPos() + 1; } +#endif void DrawTitleScreenImage(int nr) { @@ -303,13 +560,11 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) { static LevelDirTree *leveldir_last_valid = NULL; boolean levelset_has_changed = FALSE; - char *name_text = (!options.network && setup.team_mode ? "Team:" : "Name:"); -#if 1 - char *level_text = "Levelset"; -#else - char *level_text = "Level:"; -#endif +#if 0 + boolean local_team_mode = (!options.network && setup.team_mode); + char *name_text = (local_team_mode ? "Team:" : "Name:"); int name_width, level_width; +#endif int i; UnmapAllGadgets(); @@ -323,9 +578,7 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) audio.sound_deactivated = FALSE; -#if 1 GetPlayerConfig(); -#endif /* needed if last screen was the playing screen, invoked from level editor */ if (level_editor_test_game) @@ -364,23 +617,16 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) graphic_info[IMG_TITLESCREEN_1].bitmap != NULL) { game_status = GAME_MODE_TITLE; + DrawTitleScreen(); return; } -#if 0 - /* map gadgets for main menu screen */ - MapTapeButtons(); -#endif - /* level_nr may have been set to value over handicap with level editor */ if (setup.handicap && level_nr > leveldir_current->handicap_level) level_nr = leveldir_current->handicap_level; -#if 0 - GetPlayerConfig(); -#endif LoadLevel(level_nr); SetMainBackgroundImage(IMG_BACKGROUND_MAIN); @@ -388,8 +634,35 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) DrawHeadline(); +#if 1 + InitializeMainControls(); + + for (i = 0; main_controls[i].nr != -1; i++) + { + struct Rect *pos_button = main_controls[i].pos_button; + struct Rect *pos_text = main_controls[i].pos_text; + struct Rect *pos_input = main_controls[i].pos_input; + char *text = main_controls[i].text; + char *input = main_controls[i].input; + int font_text = main_controls[i].font_text; + int font_input = main_controls[i].font_input; + int button_graphic = main_controls[i].button_graphic; + + if (pos_button != NULL) + DrawGraphicThruMaskExt(drawto, mSX + pos_button->x, mSY + pos_button->y, + button_graphic, 0); + + if (pos_text != NULL && text != NULL) + DrawText(mSX + pos_text->x, mSY + pos_text->y, text, font_text); + + if (pos_input != NULL && input != NULL) + DrawText(mSX + pos_input->x, mSY + pos_input->y, input, font_input); + } + +#else + DrawText(mSX + 32, mSY + 2 * 32, name_text, FONT_MENU_1); - DrawText(mSX + 32, mSY + 3 * 32, level_text, FONT_MENU_1); + DrawText(mSX + 32, mSY + 3 * 32, "Levelset", FONT_MENU_1); DrawText(mSX + 32, mSY + 4 * 32, "Hall Of Fame", FONT_MENU_1); DrawText(mSX + 32, mSY + 5 * 32, "Level Creator", FONT_MENU_1); DrawText(mSX + 32, mSY + 6 * 32, "Info Screen", FONT_MENU_1); @@ -399,102 +672,35 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) /* calculated after (possible) reload of custom artwork */ name_width = getTextWidth(name_text, FONT_MENU_1); -#if 1 level_width = 9 * 32; -#else -#if 1 - level_width = 9 * getFontWidth(FONT_MENU_1); -#else - level_width = getTextWidth(level_text, FONT_MENU_1); -#endif -#endif DrawText(mSX + 32 + name_width, mSY + 2 * 32, setup.player_name, FONT_INPUT_1); -#if 1 DrawText(mSX + getCurrentLevelTextPos() * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1); -#else -#if 1 - DrawText(mSX + level_width + 2 * 32, mSY + 3 * 32, int2str(level_nr, 3), - FONT_VALUE_1); -#else - DrawText(mSX + level_width + 5 * 32, mSY + 3 * 32, int2str(level_nr, 3), - FONT_VALUE_1); -#endif -#endif - - DrawPreviewLevel(TRUE); - -#if 1 -#if 1 { int text_height = getFontHeight(FONT_TEXT_3); -#if 1 - int xpos = getLevelRangeTextPos() * 32; -#else - int xpos = level_width + 6 * 32; -#endif - int ypos2 = -SY + 3 * 32 + 16; + int xpos = getLevelRangeTextPos() * 32 + 8; + int ypos2 = 3 * 32 + 16; int ypos1 = ypos2 - text_height; - DrawTextF(mSX + xpos, mSY + ypos1, FONT_TEXT_3, + DrawTextF(mSX - SX + xpos, mSY - SY + ypos1, FONT_TEXT_3, "%03d", leveldir_current->first_level); - DrawTextF(mSX + xpos, mSY + ypos2, FONT_TEXT_3, + DrawTextF(mSX - SX + xpos, mSY - SY + ypos2, FONT_TEXT_3, "%03d", leveldir_current->last_level); } -#else - DrawTextF(mSX + level_width + 6 * 32, mSY + 3 * 32 + 1, FONT_TEXT_3, - "%d", leveldir_current->levels); -#endif - -#else - DrawTextF(mSX + 32 + level_width - 2, mSY + 3 * 32 + 1, FONT_TEXT_3, "%d-%d", - leveldir_current->first_level, leveldir_current->last_level); -#endif - -#if 0 - if (leveldir_current->readonly) - { - DrawTextS(mSX + level_width + 9 * 32 - 2, - mSY + 3 * 32 + 1 - 7, FONT_TEXT_3, "READ"); - DrawTextS(mSX + level_width + 9 * 32 - 2, - mSY + 3 * 32 + 1 + 7, FONT_TEXT_3, "ONLY"); - } -#endif for (i = 0; i < 8; i++) initCursor(i, (i == 1 || i == 4 || i == 6 ? IMG_MENU_BUTTON_ENTER_MENU : IMG_MENU_BUTTON)); - -#if 0 - -#if 1 - drawCursorXY(getLastLevelButtonPos(), 1, IMG_MENU_BUTTON_LAST_LEVEL); - drawCursorXY(getNextLevelButtonPos(), 1, IMG_MENU_BUTTON_NEXT_LEVEL); -#else -#if 1 - drawCursorXY(level_width / 32 + 1, 1, IMG_MENU_BUTTON_LEFT); - drawCursorXY(level_width / 32 + 5, 1, IMG_MENU_BUTTON_RIGHT); -#else - drawCursorXY(level_width / 32 + 4, 1, IMG_MENU_BUTTON_LEFT); - drawCursorXY(level_width / 32 + 8, 1, IMG_MENU_BUTTON_RIGHT); -#endif #endif -#endif + DrawPreviewLevel(TRUE); DrawTextSCentered(326, FONT_TITLE_2, "A Game by Artsoft Entertainment"); -#if 0 - FadeToFront(); -#endif -#if 0 - InitAnimation(); -#endif - HandleMainMenu(0, 0, 0, 0, MB_MENU_INITIALIZE); TapeStop(); @@ -505,22 +711,6 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) PlayMenuSound(); PlayMenuMusic(); -#if 0 -#if 1 - OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2); -#else - if (fade_delay > 0) - OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); - else - OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2); -#endif -#endif - -#if 0 - InitAnimation(); -#endif - -#if 1 /* create gadgets for main menu screen */ FreeScreenGadgets(); CreateScreenGadgets(); @@ -528,26 +718,17 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) /* map gadgets for main menu screen */ MapTapeButtons(); MapScreenMenuGadgets(SCREEN_MASK_MAIN); -#endif -#if 1 -#if 1 + DrawMaskedBorder(REDRAW_ALL); + if (do_fading) FadeIn(redraw_mask); else BackToFront(); -#else - BackToFront(); -#endif -#endif -#if 1 InitAnimation(); -#endif -#if 1 OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2); -#endif } void DrawAndFadeInMainMenu(int redraw_mask) @@ -656,15 +837,11 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (title_nr < MAX_NUM_TITLE_SCREENS && graphic_info[IMG_TITLESCREEN_1 + title_nr].bitmap != NULL) { - Bitmap *drawto_last = drawto; - if (use_cross_fading) - drawto = bitmap_db_cross; + FadeCrossSaveBackbuffer(); DrawTitleScreenImage(title_nr); - drawto = drawto_last; - if (use_cross_fading) FadeCross(REDRAW_ALL); else @@ -689,7 +866,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); info_mode = INFO_MODE_MAIN; - DrawInfoScreenExt(use_fading_main_menu); + DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu); } else /* default: return to main menu */ { @@ -722,34 +899,164 @@ void HandleMainMenu_SelectLevel(int step, int direction) SaveLevelSetup_SeriesInfo(); } - new_level_nr = leveldir_current->handicap_level; + new_level_nr = leveldir_current->handicap_level; + } + + if (new_level_nr != old_level_nr) + { + level_nr = new_level_nr; + + DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1); + + LoadLevel(level_nr); + DrawPreviewLevel(TRUE); + + TapeErase(); + LoadTape(level_nr); + DrawCompleteVideoDisplay(); + + /* needed because DrawPreviewLevel() takes some time */ + BackToFront(); + SyncDisplay(); + } +} + +#if 1 + +void HandleMainMenu(int mx, int my, int dx, int dy, int button) +{ + static int choice = MAIN_CONTROL_GAME; + int pos = choice; + int i; + + if (button == MB_MENU_INITIALIZE) + { + DrawMainControlButton(choice, TRUE); + + return; + } + + if (mx || my) /* mouse input */ + { + pos = -1; + + for (i = 0; main_controls[i].nr != -1; i++) + { + if (insideRect(main_controls[i].pos_button, mx - mSX, my - mSY) || + insideRect(main_controls[i].pos_text, mx - mSX, my - mSY) || + insideRect(main_controls[i].pos_input, mx - mSX, my - mSY)) + { + pos = main_controls[i].nr; + + break; + } + } + } + else if (dx || dy) /* keyboard input */ + { + if (dx > 0 && (choice == MAIN_CONTROL_INFO || + choice == MAIN_CONTROL_SETUP)) + button = MB_MENU_CHOICE; + else if (dy) + pos = choice + dy; + } + + if (pos == MAIN_CONTROL_LEVELS && dx != 0 && button) + { + HandleMainMenu_SelectLevel(1, dx < 0 ? -1 : +1); + } + else if (pos >= MAIN_CONTROL_NAME && pos <= MAIN_CONTROL_QUIT) + { + if (button) + { + if (pos != choice) + { + DrawMainControlButton(pos, TRUE); + DrawMainControlButton(choice, FALSE); + + choice = pos; + } + } + else + { + if (pos == MAIN_CONTROL_NAME) + { + game_status = GAME_MODE_PSEUDO_TYPENAME; + + HandleTypeName(strlen(setup.player_name), 0); + } + else if (pos == MAIN_CONTROL_LEVELS) + { + if (leveldir_first) + { + game_status = GAME_MODE_LEVELS; + + SaveLevelSetup_LastSeries(); + SaveLevelSetup_SeriesInfo(); + +#if 0 + gotoTopLevelDir(); +#endif + + DrawChooseLevel(); + } + } + else if (pos == MAIN_CONTROL_SCORES) + { + game_status = GAME_MODE_SCORES; + + DrawHallOfFame(-1); + } + else if (pos == MAIN_CONTROL_EDITOR) + { + if (leveldir_current->readonly && + !strEqual(setup.player_name, "Artsoft")) + Request("This level is read only !", REQ_CONFIRM); + + game_status = GAME_MODE_EDITOR; + + DrawLevelEd(); + } + else if (pos == MAIN_CONTROL_INFO) + { + game_status = GAME_MODE_INFO; + info_mode = INFO_MODE_MAIN; + + DrawInfoScreen(); + } + else if (pos == MAIN_CONTROL_GAME) + { + StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE); + } + else if (pos == MAIN_CONTROL_SETUP) + { + game_status = GAME_MODE_SETUP; + setup_mode = SETUP_MODE_MAIN; + + DrawSetupScreen(); + } + else if (pos == MAIN_CONTROL_QUIT) + { + SaveLevelSetup_LastSeries(); + SaveLevelSetup_SeriesInfo(); + + if (Request("Do you really want to quit ?", REQ_ASK | REQ_STAY_CLOSED)) + game_status = GAME_MODE_QUIT; + } + } } - if (new_level_nr != old_level_nr) + if (game_status == GAME_MODE_MAIN) { - level_nr = new_level_nr; - - DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1); - - LoadLevel(level_nr); - DrawPreviewLevel(TRUE); - - TapeErase(); - LoadTape(level_nr); - DrawCompleteVideoDisplay(); - - /* needed because DrawPreviewLevel() takes some time */ - BackToFront(); - SyncDisplay(); + DrawPreviewLevel(FALSE); + DoAnimation(); } } +#else + void HandleMainMenu(int mx, int my, int dx, int dy, int button) { -#if 0 - static unsigned long level_delay = 0; - static unsigned long level_delay_value = GADGET_FRAME_DELAY; -#endif static int choice = 5; int x = 0; int y = choice; @@ -778,75 +1085,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) y = choice + dy; } -#if 0 - /* start gadget delay with longer delay after first click on gadget */ - if (button == 0) - pressed_delay_value = GADGET_FRAME_DELAY_FIRST; -#endif - -#if 1 - if (y == 1 && dx != 0 && button) { HandleMainMenu_SelectLevel(1, dx < 0 ? -1 : +1); } - -#else - - if (y == 1 && ((x == 10 && level_nr > leveldir_current->first_level) || - (x == 14 && level_nr < leveldir_current->last_level)) && - button && DelayReached(&level_delay, level_delay_value)) - { - int step = (button == 1 ? 1 : button == 2 ? 5 : 10); - int old_level_nr = level_nr; - int new_level_nr; - - new_level_nr = level_nr + (x == 10 ? -step : +step); - if (new_level_nr < leveldir_current->first_level) - new_level_nr = leveldir_current->first_level; - if (new_level_nr > leveldir_current->last_level) - new_level_nr = leveldir_current->last_level; - - if (setup.handicap && new_level_nr > leveldir_current->handicap_level) - { - /* skipping levels is only allowed when trying to skip single level */ - if (setup.skip_levels && step == 1 && - Request("Level still unsolved ! Skip despite handicap ?", REQ_ASK)) - { - leveldir_current->handicap_level++; - SaveLevelSetup_SeriesInfo(); - } - - new_level_nr = leveldir_current->handicap_level; - } - - if (new_level_nr != old_level_nr) - { - level_nr = new_level_nr; - - DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), - FONT_VALUE_1); - - LoadLevel(level_nr); - DrawPreviewLevel(TRUE); - - TapeErase(); - LoadTape(level_nr); - DrawCompleteVideoDisplay(); - - /* needed because DrawPreviewLevel() takes some time */ - BackToFront(); - SyncDisplay(); - - DelayReached(&level_delay, 0); /* reset delay counter */ -#if 0 - pressed_delay_value = GADGET_FRAME_DELAY_FIRST; -#endif - } - } - -#endif - else if (IN_VIS_FIELD(x, y) && y >= 0 && y <= 7 && (y != 1 || x < 10)) { @@ -929,6 +1171,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) } } +#endif + /* ========================================================================= */ /* info screen functions */ @@ -993,7 +1237,7 @@ static struct TokenInfo info_info_main[] = { 0, NULL, NULL } }; -static void DrawInfoScreen_Main(boolean do_fading) +static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) { int i; @@ -1002,11 +1246,7 @@ static void DrawInfoScreen_Main(boolean do_fading) ClearWindow(); -#if 1 DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Info Screen"); -#else - DrawText(mSX + 16, mSY + 16, "Info Screen", FONT_TITLE_1); -#endif info_info = info_info_main; num_info_info = 0; @@ -1029,30 +1269,19 @@ static void DrawInfoScreen_Main(boolean do_fading) num_info_info++; } -#if 1 - HandleInfoScreen_Main(0, 0, 0, 0, MB_MENU_INITIALIZE); PlayMenuSound(); PlayMenuMusic(); + DrawMaskedBorder(REDRAW_ALL); + if (do_fading) - FadeIn(REDRAW_ALL); + FadeIn(redraw_mask); else BackToFront(); InitAnimation(); - -#else - - FadeToFront(); - InitAnimation(); - - PlayMenuSound(); - PlayMenuMusic(); - - HandleInfoScreen_Main(0, 0, 0, 0, MB_MENU_INITIALIZE); -#endif } void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) @@ -1330,12 +1559,15 @@ void DrawInfoScreen_Elements() { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS); + FadeOut(REDRAW_FIELD); + LoadHelpAnimInfo(); LoadHelpTextInfo(); HandleInfoScreen_Elements(MB_MENU_INITIALIZE); - FadeToFront(); + FadeIn(REDRAW_FIELD); + InitAnimation(); } @@ -1384,14 +1616,21 @@ void HandleInfoScreen_Elements(int button) if (page >= num_pages) { FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); info_mode = INFO_MODE_MAIN; - DrawInfoScreen(); + DrawAndFadeInInfoScreen(REDRAW_FIELD); return; } + if (button != MB_MENU_INITIALIZE) + FadeCrossSaveBackbuffer(); + DrawInfoScreen_HelpAnim(page * anims_per_page, num_anims, TRUE); + + if (button != MB_MENU_INITIALIZE) + FadeCross(REDRAW_FIELD); } else { @@ -1407,12 +1646,16 @@ void DrawInfoScreen_Music() { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_MUSIC); + FadeOut(REDRAW_FIELD); + ClearWindow(); DrawHeadline(); LoadMusicInfo(); HandleInfoScreen_Music(MB_MENU_INITIALIZE); + + FadeIn(REDRAW_FIELD); } void HandleInfoScreen_Music(int button) @@ -1451,7 +1694,6 @@ void HandleInfoScreen_Music(int button) if (button_released || button == MB_MENU_INITIALIZE) { - Bitmap *drawto_last = drawto; int y = 0; if (button != MB_MENU_INITIALIZE) @@ -1460,8 +1702,11 @@ void HandleInfoScreen_Music(int button) if (list == NULL) { + FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); + info_mode = INFO_MODE_MAIN; - DrawInfoScreen(); + DrawAndFadeInInfoScreen(REDRAW_FIELD); return; } @@ -1469,7 +1714,7 @@ void HandleInfoScreen_Music(int button) FadeSoundsAndMusic(); if (button != MB_MENU_INITIALIZE) - drawto = bitmap_db_cross; + FadeCrossSaveBackbuffer(); ClearWindow(); DrawHeadline(); @@ -1533,8 +1778,6 @@ void HandleInfoScreen_Music(int button) DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for next page"); - drawto = drawto_last; - if (button != MB_MENU_INITIALIZE) FadeCross(REDRAW_FIELD); } @@ -1548,6 +1791,9 @@ static boolean DrawInfoScreen_CreditsScreen(int screen_nr) int ystart = 150, ystep = 30; int ybottom = SYSIZE - 20; + if (screen_nr > 8) + return FALSE; + ClearWindow(); DrawHeadline(); @@ -1702,10 +1948,12 @@ static boolean DrawInfoScreen_CreditsScreen(int screen_nr) DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_3, "since 1995"); } +#if 0 else { return FALSE; } +#endif DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for next page"); @@ -1719,7 +1967,11 @@ void DrawInfoScreen_Credits() FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); + HandleInfoScreen_Credits(MB_MENU_INITIALIZE); + + FadeIn(REDRAW_FIELD); } void HandleInfoScreen_Credits(int button) @@ -1741,16 +1993,13 @@ void HandleInfoScreen_Credits(int button) } else if (button == MB_MENU_CHOICE) { - Bitmap *drawto_last = drawto; boolean show_screen; screen_nr++; - drawto = bitmap_db_cross; + FadeCrossSaveBackbuffer(); show_screen = DrawInfoScreen_CreditsScreen(screen_nr); - - drawto = drawto_last; if (show_screen) { @@ -1759,9 +2008,10 @@ void HandleInfoScreen_Credits(int button) else { FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); info_mode = INFO_MODE_MAIN; - DrawInfoScreen(); + DrawAndFadeInInfoScreen(REDRAW_FIELD); } } else @@ -1777,6 +2027,8 @@ void DrawInfoScreen_Program() SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); + FadeOut(REDRAW_FIELD); + ClearWindow(); DrawHeadline(); @@ -1811,6 +2063,8 @@ void DrawInfoScreen_Program() DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); + + FadeIn(REDRAW_FIELD); } void HandleInfoScreen_Program(int button) @@ -1828,9 +2082,10 @@ void HandleInfoScreen_Program(int button) if (button_released) { FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); info_mode = INFO_MODE_MAIN; - DrawInfoScreen(); + DrawAndFadeInInfoScreen(REDRAW_FIELD); } else { @@ -1855,6 +2110,8 @@ void DrawInfoScreen_LevelSet() SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); + FadeOut(REDRAW_FIELD); + ClearWindow(); DrawHeadline(); @@ -1869,6 +2126,8 @@ void DrawInfoScreen_LevelSet() else DrawTextSCentered(ystart, FONT_TEXT_2, "No information for this level set."); + + FadeIn(REDRAW_FIELD); } void HandleInfoScreen_LevelSet(int button) @@ -1886,9 +2145,10 @@ void HandleInfoScreen_LevelSet(int button) if (button_released) { FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); info_mode = INFO_MODE_MAIN; - DrawInfoScreen(); + DrawAndFadeInInfoScreen(REDRAW_FIELD); } else { @@ -1896,7 +2156,7 @@ void HandleInfoScreen_LevelSet(int button) } } -static void DrawInfoScreenExt(boolean do_fading) +static void DrawInfoScreenExt(int redraw_mask, boolean do_fading) { SetMainBackgroundImage(IMG_BACKGROUND_INFO); @@ -1913,7 +2173,7 @@ static void DrawInfoScreenExt(boolean do_fading) else if (info_mode == INFO_MODE_LEVELSET) DrawInfoScreen_LevelSet(); else - DrawInfoScreen_Main(do_fading); + DrawInfoScreen_Main(redraw_mask, do_fading); if (info_mode != INFO_MODE_MAIN && info_mode != INFO_MODE_TITLE && @@ -1924,9 +2184,14 @@ static void DrawInfoScreenExt(boolean do_fading) } } +void DrawAndFadeInInfoScreen(int redraw_mask) +{ + DrawInfoScreenExt(redraw_mask, TRUE); +} + void DrawInfoScreen() { - DrawInfoScreenExt(0); + DrawInfoScreenExt(REDRAW_ALL, FALSE); } void HandleInfoScreen(int mx, int my, int dx, int dy, int button) @@ -2052,34 +2317,15 @@ static void drawChooseTreeList(int first_entry, int num_page_entries, { int i; char *title_string = NULL; -#if 0 - int xoffset_sets = 16; -#endif int yoffset_sets = MENU_TITLE1_YPOS; -#if 0 - int xoffset_setup = 16; -#endif int yoffset_setup = 16; -#if 1 -#if 0 - int xoffset = (ti->type == TREE_TYPE_LEVEL_DIR ? xoffset_sets : - xoffset_setup); -#endif int yoffset = (ti->type == TREE_TYPE_LEVEL_DIR ? yoffset_sets : yoffset_setup); -#else - int xoffset = (ti->type == TREE_TYPE_LEVEL_DIR ? 0 : xoffset_setup); - int yoffset = (ti->type == TREE_TYPE_LEVEL_DIR ? 0 : yoffset_setup); -#endif int last_game_status = game_status; /* save current game status */ title_string = ti->infotext; -#if 1 DrawTextSCentered(mSY - SY + yoffset, FONT_TITLE_1, title_string); -#else - DrawText(SX + xoffset, SY + yoffset, title_string, FONT_TITLE_1); -#endif /* force LEVELS font on artwork setup screen */ game_status = GAME_MODE_LEVELS; @@ -2130,11 +2376,7 @@ static void drawChooseTreeInfo(int entry_pos, TreeInfo *ti) { TreeInfo *node, *node_first; int x, last_redraw_mask = redraw_mask; -#if 1 int ypos = MENU_TITLE2_YPOS; -#else - int ypos = 40; -#endif if (ti->type != TREE_TYPE_LEVEL_DIR) return; @@ -2425,9 +2667,6 @@ void DrawHallOfFame(int highlight_position) FadeOut(REDRAW_FIELD); -#if 0 - FadeToFront(); -#endif InitAnimation(); PlayMenuSound(); @@ -2445,15 +2684,9 @@ static void drawHallOfFameList(int first_entry, int highlight_position) SetMainBackgroundImage(IMG_BACKGROUND_SCORES); ClearWindow(); -#if 1 DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, "Hall Of Fame"); DrawTextFCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, "HighScores of Level %d", level_nr); -#else - DrawText(mSX + 80, mSY + MENU_TITLE1_YPOS, "Hall Of Fame", FONT_TITLE_1); - DrawTextFCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, - "HighScores of Level %d", level_nr); -#endif for (i = 0; i < NUM_MENU_ENTRIES_ON_SCREEN; i++) { @@ -2791,8 +3024,8 @@ static struct TokenInfo setup_info_graphics[] = #if 0 { TYPE_SWITCH, &setup.soft_scrolling, "Soft Scrolling:" }, { TYPE_SWITCH, &setup.double_buffering,"Double-Buffering:" }, - { TYPE_SWITCH, &setup.fading, "Fading:" }, #endif + { TYPE_SWITCH, &setup.fade_screens, "Fade Screens:" }, { TYPE_SWITCH, &setup.quick_switch, "Quick Player Focus Switch:" }, { TYPE_SWITCH, &setup.quick_doors, "Quick Menu Doors:" }, { TYPE_SWITCH, &setup.show_titlescreen,"Show Title Screens:" }, @@ -2968,18 +3201,11 @@ static void drawSetupValue(int pos) if (type & TYPE_KEY) { -#if 1 xpos = MENU_SCREEN_START_XPOS; -#else - xpos = 3; -#endif if (type & TYPE_QUERY) { value_string = ""; -#if 0 - font_nr = FONT_INPUT_1_ACTIVE; -#endif } } else if (type & TYPE_STRING) @@ -2987,25 +3213,10 @@ static void drawSetupValue(int pos) int max_value_len = (SCR_FIELDX - 2) * 2; xpos = MENU_SCREEN_START_XPOS; -#if 0 - font_nr = FONT_VALUE_2; -#endif if (strlen(value_string) > max_value_len) value_string[max_value_len] = '\0'; } - else if (type & TYPE_ECS_AGA) - { -#if 0 - font_nr = FONT_VALUE_1; -#endif - } - else if (type & TYPE_BOOLEAN_STYLE) - { -#if 0 - font_nr = (*(boolean *)value ? FONT_OPTION_ON : FONT_OPTION_OFF); -#endif - } startx = mSX + xpos * 32; starty = mSY + ypos * 32; @@ -3032,12 +3243,6 @@ static void drawSetupValue(int pos) startx + font2_xoffset < text_startx + text_width + text_font_xoffset) correct_font_draw_xoffset = TRUE; -#if 0 - printf("::: %d + %d < %d + %d + %d\n", - startx, font_xoffset, text_startx, text_width, text_font_xoffset); - printf("::: => need correction == %d\n", correct_font_draw_xoffset); -#endif - /* check if setup value would overlap with setup text when printed */ /* (this can happen for extreme/wrong values for font draw offset) */ if (correct_font_draw_xoffset) @@ -3053,18 +3258,8 @@ static void drawSetupValue(int pos) } } -#if 1 for (i = 0; i <= MENU_SCREEN_MAX_XPOS - xpos; i++) DrawText(startx + i * font_width, starty, " ", font_nr); -#else -#if 1 - for (i = xpos; i <= MENU_SCREEN_MAX_XPOS; i++) - DrawText(mSX + i * 32, starty, " ", font_nr); -#else - DrawText(startx, starty, - (xpos == 3 ? " " : " "), font_nr); -#endif -#endif DrawText(startx, starty, value_string, font_nr); @@ -3145,11 +3340,7 @@ static void DrawSetupScreen_Generic() title_string = "Setup Shortcuts"; } -#if 1 DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, title_string); -#else - DrawText(mSX + 16, mSY + 16, title_string, FONT_TITLE_1); -#endif num_setup_info = 0; for (i = 0; setup_info[i].type != 0 && i < NUM_MENU_ENTRIES_ON_SCREEN; i++) @@ -3157,11 +3348,7 @@ static void DrawSetupScreen_Generic() void *value_ptr = setup_info[i].value; int xpos = MENU_SCREEN_START_XPOS; int ypos = MENU_SCREEN_START_YPOS + i; -#if 1 int font_nr; -#else - int font_nr = FONT_MENU_1; -#endif /* set some entries to "unchangeable" according to other variables */ if ((value_ptr == &setup.sound_simple && !audio.sound_available) || @@ -3171,21 +3358,7 @@ static void DrawSetupScreen_Generic() (value_ptr == &screen_mode_text && !video.fullscreen_available)) setup_info[i].type |= TYPE_GHOSTED; -#if 1 font_nr = getSetupTextFont(setup_info[i].type); -#else -#if 1 - if (setup_info[i].type & (TYPE_SWITCH | - TYPE_YES_NO | - TYPE_STRING | - TYPE_ECS_AGA | - TYPE_KEYTEXT)) - font_nr = FONT_MENU_2; -#else - if (setup_info[i].type & TYPE_STRING) - font_nr = FONT_MENU_2; -#endif -#endif DrawText(mSX + xpos * 32, mSY + ypos * 32, setup_info[i].text, font_nr); @@ -3272,7 +3445,6 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) y += dy; } -#if 1 if (IN_VIS_FIELD(x, y) && y >= 0 && y < num_setup_info) { if (button) @@ -3309,61 +3481,19 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) } } } -#else - if (IN_VIS_FIELD(x, y) && - y >= 0 && y < num_setup_info && setup_info[y].type & ~TYPE_SKIP_ENTRY) - { - if (button) - { - if (y != choice) - { - drawCursor(y, FC_RED); - drawCursor(choice, FC_BLUE); - choice = choice_store[setup_mode] = y; - } - } - else if (!(setup_info[y].type & TYPE_GHOSTED)) - { - if (setup_info[y].type & TYPE_ENTER_OR_LEAVE) - { - void (*menu_callback_function)(void) = setup_info[choice].value; - - menu_callback_function(); - } - else - { - if (setup_info[y].type & TYPE_KEYTEXT && - setup_info[y + 1].type & TYPE_KEY) - y++; - - if (setup_info[y].type & TYPE_VALUE) - changeSetupValue(y); - } - } - } -#endif } void DrawSetupScreen_Input() { ClearWindow(); -#if 1 DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Setup Input"); -#else - DrawText(mSX + 16, mSY + 16, "Setup Input", FONT_TITLE_1); -#endif initCursor(0, IMG_MENU_BUTTON); initCursor(1, IMG_MENU_BUTTON); initCursor(2, IMG_MENU_BUTTON_ENTER_MENU); initCursor(13, IMG_MENU_BUTTON_LEAVE_MENU); -#if 0 - drawCursorXY(10, 0, IMG_MENU_BUTTON_LEFT); - drawCursorXY(12, 0, IMG_MENU_BUTTON_RIGHT); -#endif - DrawText(mSX + 32, mSY + 2 * 32, "Player:", FONT_MENU_1); DrawText(mSX + 32, mSY + 3 * 32, "Device:", FONT_MENU_1); DrawText(mSX + 32, mSY + 15 * 32, "Back", FONT_MENU_1); @@ -3376,14 +3506,12 @@ void DrawSetupScreen_Input() "Joysticks deactivated on this screen"); #endif -#if 1 /* create gadgets for setup input menu screen */ FreeScreenGadgets(); CreateScreenGadgets(); /* map gadgets for setup input menu screen */ MapScreenMenuGadgets(SCREEN_MASK_INPUT); -#endif HandleSetupScreen_Input(0, 0, 0, 0, MB_MENU_INITIALIZE); FadeToFront(); @@ -3555,31 +3683,10 @@ void HandleSetupScreen_Input(int mx, int my, int dx, int dy, int button) y = (dy > 0 ? pos_empty2 + 1 : pos_empty1 - 1); } -#if 1 - if (y == 0 && dx != 0 && button) { HandleSetupScreen_Input_Player(1, dx < 0 ? -1 : +1); } - -#else - - if (IN_VIS_FIELD(x, y) && - y == 0 && ((x < 10 && !button) || ((x == 10 || x == 12) && button))) - { - static unsigned long delay = 0; - - if (!DelayReached(&delay, GADGET_FRAME_DELAY)) - return; - - input_player_nr = - (input_player_nr + (x == 10 ? -1 : +1) + MAX_PLAYERS) % MAX_PLAYERS; - - drawPlayerSetupInputInfo(input_player_nr); - } - -#endif - else if (IN_VIS_FIELD(x, y) && y >= pos_start && y <= pos_end && !(y >= pos_empty1 && y <= pos_empty2)) @@ -3665,11 +3772,7 @@ void CustomizeKeyboard(int player_nr) ClearWindow(); -#if 1 DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Keyboard Input"); -#else - DrawText(mSX + 16, mSY + 16, "Keyboard Input", FONT_TITLE_1); -#endif BackToFront(); InitAnimation(); @@ -4044,8 +4147,19 @@ static void getScreenMenuButtonPos(int *x, int *y, int gadget_id) { switch (gadget_id) { - case SCREEN_CTRL_ID_LAST_LEVEL: - *x = mSX + TILEX * getLastLevelButtonPos(); +#if 1 + case SCREEN_CTRL_ID_PREV_LEVEL: + *x = mSX + menu.main.button.prev_level.x; + *y = mSY + menu.main.button.prev_level.y; + break; + + case SCREEN_CTRL_ID_NEXT_LEVEL: + *x = mSX + menu.main.button.next_level.x; + *y = mSY + menu.main.button.next_level.y; + break; +#else + case SCREEN_CTRL_ID_PREV_LEVEL: + *x = mSX + TILEX * getPrevlevelButtonPos(); *y = mSY + TILEY * (MENU_SCREEN_START_YPOS + 1); break; @@ -4053,8 +4167,9 @@ static void getScreenMenuButtonPos(int *x, int *y, int gadget_id) *x = mSX + TILEX * getNextLevelButtonPos(); *y = mSY + TILEY * (MENU_SCREEN_START_YPOS + 1); break; +#endif - case SCREEN_CTRL_ID_LAST_PLAYER: + case SCREEN_CTRL_ID_PREV_PLAYER: *x = mSX + TILEX * 10; *y = mSY + TILEY * MENU_SCREEN_START_YPOS; break; @@ -4079,9 +4194,9 @@ static struct } menubutton_info[NUM_SCREEN_MENUBUTTONS] = { { - IMG_MENU_BUTTON_LAST_LEVEL, IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE, + IMG_MENU_BUTTON_PREV_LEVEL, IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE, getScreenMenuButtonPos, - SCREEN_CTRL_ID_LAST_LEVEL, + SCREEN_CTRL_ID_PREV_LEVEL, SCREEN_MASK_MAIN, "last level" }, @@ -4095,7 +4210,7 @@ static struct { IMG_MENU_BUTTON_LEFT, IMG_MENU_BUTTON_LEFT_ACTIVE, getScreenMenuButtonPos, - SCREEN_CTRL_ID_LAST_PLAYER, + SCREEN_CTRL_ID_PREV_PLAYER, SCREEN_MASK_INPUT, "last player" }, @@ -4434,14 +4549,9 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) int button = gi->event.button; int step = (button == 1 ? 1 : button == 2 ? 5 : 10); -#if 0 - if (game_status != GAME_MODE_LEVELS && game_status != GAME_MODE_SETUP) - return; -#endif - switch (id) { - case SCREEN_CTRL_ID_LAST_LEVEL: + case SCREEN_CTRL_ID_PREV_LEVEL: HandleMainMenu_SelectLevel(step, -1); break; @@ -4449,7 +4559,7 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) HandleMainMenu_SelectLevel(step, +1); break; - case SCREEN_CTRL_ID_LAST_PLAYER: + case SCREEN_CTRL_ID_PREV_PLAYER: HandleSetupScreen_Input_Player(step, -1); break;