X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=972e2109bc2a6edeffbc7552ec394d4989caafa5;hb=857e68049be393b09c7066cda9eafdbd05d18cfc;hp=2114c845d7506666153521d8485c88a789024e65;hpb=cf6db6f4ddaf8a02ee1336e9b04200e436d9f60f;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 2114c845..972e2109 100644 --- a/src/screens.c +++ b/src/screens.c @@ -82,11 +82,40 @@ #define MAX_MENU_MODES MAX(MAX_INFO_MODES, MAX_SETUP_MODES) +/* setup screen titles */ +#define STR_SETUP_MAIN "Setup" +#define STR_SETUP_GAME "Game & Menu" +#define STR_SETUP_EDITOR "Editor" +#define STR_SETUP_GRAPHICS "Graphics" +#define STR_SETUP_SOUND "Sound & Music" +#define STR_SETUP_ARTWORK "Custom Artwork" +#define STR_SETUP_INPUT "Input Devices" +#define STR_SETUP_TOUCH "Touch Controls" +#define STR_SETUP_SHORTCUTS "Key Shortcuts" +#define STR_SETUP_EXIT "Exit" +#define STR_SETUP_SAVE_AND_EXIT "Save and Exit" + +#define STR_SETUP_CHOOSE_GAME_SPEED "Game Speed" +#define STR_SETUP_CHOOSE_SCROLL_DELAY "Scroll Delay" +#define STR_SETUP_CHOOSE_SNAPSHOT_MODE "Snapshot Mode" +#define STR_SETUP_CHOOSE_WINDOW_SIZE "Window Scaling" +#define STR_SETUP_CHOOSE_SCALING_TYPE "Anti-Aliasing" +#define STR_SETUP_CHOOSE_RENDERING "Rendering Mode" +#define STR_SETUP_CHOOSE_VOLUME_SIMPLE "Sound Volume" +#define STR_SETUP_CHOOSE_VOLUME_LOOPS "Loops Volume" +#define STR_SETUP_CHOOSE_VOLUME_MUSIC "Music Volume" +#define STR_SETUP_CHOOSE_TOUCH_CONTROL "Control Type" +#define STR_SETUP_CHOOSE_MOVE_DISTANCE "Move Distance" +#define STR_SETUP_CHOOSE_DROP_DISTANCE "Drop Distance" + /* for input setup functions */ #define SETUPINPUT_SCREEN_POS_START 0 -#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 4) -#define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3) -#define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1) +#define SETUPINPUT_SCREEN_POS_EMPTY1 3 +#define SETUPINPUT_SCREEN_POS_EMPTY2 12 +#define SETUPINPUT_SCREEN_POS_END 13 + +#define MENU_SETUP_FONT_TITLE FONT_TEXT_1 +#define MENU_SETUP_FONT_TEXT FONT_TITLE_2 /* for various menu stuff */ #define MENU_SCREEN_START_XPOS 1 @@ -95,15 +124,21 @@ #define MENU_SCREEN_MAX_XPOS (SCR_FIELDX - 1) #define MENU_TITLE1_YPOS 8 #define MENU_TITLE2_YPOS 46 -#define MENU_TITLE_FONT_INFO FONT_TEXT_1 -#define MENU_SPACING_TITLE (menu.text.headline.normal_spacing) -#define MENU_SCREEN_INFO_XSTART 16 -#define MENU_SCREEN_INFO_YSTART1 100 -#define MENU_SCREEN_INFO_YSTART2 (MENU_SCREEN_INFO_YSTART1 + \ - getMenuTextStep(MENU_SPACING_TITLE, \ - MENU_TITLE_FONT_INFO)) +#define MENU_INFO_FONT_TITLE FONT_TEXT_1 +#define MENU_INFO_FONT_HEAD FONT_TEXT_2 +#define MENU_INFO_FONT_TEXT FONT_TEXT_3 +#define MENU_INFO_FONT_FOOT FONT_TEXT_4 +#define MENU_INFO_SPACE_HEAD (menu.headline2_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_LEFT (menu.left_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_RIGHT (menu.right_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_TOP (menu.top_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_SPACE_BOTTOM (menu.bottom_spacing_info[info_mode]) +#define MENU_SCREEN_INFO_YSTART1 MENU_SCREEN_INFO_SPACE_TOP +#define MENU_SCREEN_INFO_YSTART2 (MENU_SCREEN_INFO_YSTART1 + \ + getMenuTextStep(MENU_INFO_SPACE_HEAD, \ + MENU_INFO_FONT_TITLE)) #define MENU_SCREEN_INFO_YSTEP (TILEY + 4) -#define MENU_SCREEN_INFO_YBOTTOM (SYSIZE - 20) +#define MENU_SCREEN_INFO_YBOTTOM (SYSIZE - MENU_SCREEN_INFO_SPACE_BOTTOM) #define MENU_SCREEN_INFO_YSIZE (MENU_SCREEN_INFO_YBOTTOM - \ MENU_SCREEN_INFO_YSTART2 - \ TILEY / 2) @@ -271,7 +306,7 @@ static struct char *text; } scaling_types_list[] = { - { SCALING_QUALITY_NEAREST, "None" }, + { SCALING_QUALITY_NEAREST, "Off" }, { SCALING_QUALITY_LINEAR, "Linear" }, { SCALING_QUALITY_BEST, "Anisotropic" }, @@ -389,6 +424,7 @@ static struct char *text; } touch_controls_list[] = { + { TOUCH_CONTROL_OFF, "Off" }, { TOUCH_CONTROL_VIRTUAL_BUTTONS, "Virtual Buttons" }, { TOUCH_CONTROL_WIPE_GESTURES, "Wipe Gestures" }, { TOUCH_CONTROL_FOLLOW_FINGER, "Follow Finger" }, @@ -438,6 +474,9 @@ static struct #define DRAW_YOFFSET_INFO(i) (DRAW_MODE_INFO(i) == INFO_MODE_MAIN ? \ menu.draw_yoffset[GAME_MODE_INFO] : \ menu.draw_yoffset_info[DRAW_MODE_INFO(i)]) +#define EXTRA_SPACING_INFO(i) (DRAW_MODE_INFO(i) == INFO_MODE_MAIN ? \ + menu.extra_spacing[GAME_MODE_INFO] : \ + menu.extra_spacing_info[DRAW_MODE_INFO(i)]) #define DRAW_XOFFSET_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \ menu.draw_xoffset[GAME_MODE_SETUP] : \ @@ -445,6 +484,9 @@ static struct #define DRAW_YOFFSET_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \ menu.draw_yoffset[GAME_MODE_SETUP] : \ menu.draw_yoffset_setup[DRAW_MODE_SETUP(i)]) +#define EXTRA_SPACING_SETUP(i) (DRAW_MODE_SETUP(i) == SETUP_MODE_MAIN ? \ + menu.extra_spacing[GAME_MODE_SETUP] : \ + menu.extra_spacing_setup[DRAW_MODE_SETUP(i)]) #define DRAW_XOFFSET(s) ((s) == GAME_MODE_INFO ? \ DRAW_XOFFSET_INFO(info_mode) : \ @@ -456,6 +498,11 @@ static struct (s) == GAME_MODE_SETUP ? \ DRAW_YOFFSET_SETUP(setup_mode) : \ menu.draw_yoffset[DRAW_MODE(s)]) +#define EXTRA_SPACING(s) ((s) == GAME_MODE_INFO ? \ + EXTRA_SPACING_INFO(info_mode) : \ + (s) == GAME_MODE_SETUP ? \ + EXTRA_SPACING_SETUP(setup_mode) : \ + menu.extra_spacing[DRAW_MODE(s)]) #define mSX (SX + DRAW_XOFFSET(game_status)) #define mSY (SY + DRAW_YOFFSET(game_status)) @@ -538,6 +585,9 @@ static char *main_text_level_year = NULL; static char *main_text_level_imported_from = NULL; static char *main_text_level_imported_by = NULL; static char *main_text_level_tested_by = NULL; +static char *main_text_title_1 = NULL; +static char *main_text_title_2 = NULL; +static char *main_text_title_3 = NULL; struct MainControlInfo { @@ -687,19 +737,19 @@ static struct MainControlInfo main_controls[] = { MAIN_CONTROL_TITLE_1, NULL, -1, - &menu.main.text.title_1, &setup.internal.program_title, + &menu.main.text.title_1, &main_text_title_1, NULL, NULL, }, { MAIN_CONTROL_TITLE_2, NULL, -1, - &menu.main.text.title_2, &setup.internal.program_copyright, + &menu.main.text.title_2, &main_text_title_2, NULL, NULL, }, { MAIN_CONTROL_TITLE_3, NULL, -1, - &menu.main.text.title_3, &setup.internal.program_company, + &menu.main.text.title_3, &main_text_title_3, NULL, NULL, }, @@ -971,6 +1021,10 @@ static void InitializeMainControls() main_text_level_imported_by = leveldir_current->imported_by; main_text_level_tested_by = leveldir_current->tested_by; + main_text_title_1 = getConfigProgramTitleString(); + main_text_title_2 = getConfigProgramCopyrightString(); + main_text_title_3 = getConfigProgramCompanyString(); + /* set main control screen positions to dynamically determined values */ for (i = 0; main_controls[i].nr != -1; i++) { @@ -1279,9 +1333,8 @@ static void drawChooseTreeCursor(int ypos, boolean active) void DrawHeadline() { - DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, getProgramTitleString()); - DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, - setup.internal.program_copyright); + DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, main_text_title_1); + DrawTextSCentered(MENU_TITLE2_YPOS, FONT_TITLE_2, main_text_title_2); } void DrawTitleScreenImage(int nr, boolean initial) @@ -1469,7 +1522,7 @@ void DrawMainMenu() if (redraw_mask & REDRAW_ALL) fade_mask = REDRAW_ALL; - if (CheckIfGlobalBorderHasChanged()) + if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged()) fade_mask = REDRAW_ALL; FadeOut(fade_mask); @@ -2092,7 +2145,7 @@ static void DrawCursorAndText_Menu_Ext(struct TokenInfo *token_info, int ypos = MENU_SCREEN_START_YPOS + screen_pos; int font_nr = getMenuTextFont(ti->type); - if (token_info == setup_info_input) + if (setup_mode == SETUP_MODE_INPUT) font_nr = FONT_MENU_1; if (active) @@ -2169,7 +2222,7 @@ static void DrawInfoScreen_Main() if (redraw_mask & REDRAW_ALL) fade_mask = REDRAW_ALL; - if (CheckIfGlobalBorderHasChanged()) + if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged()) fade_mask = REDRAW_ALL; UnmapAllGadgets(); @@ -2526,15 +2579,16 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) static int getMenuFontSpacing(int spacing_height, int font_nr) { - return (spacing_height < 0 ? ABS(spacing_height) * getFontHeight(font_nr) : + int font_spacing = getFontHeight(font_nr) + EXTRA_SPACING(game_status); + + return (spacing_height < 0 ? ABS(spacing_height) * font_spacing : spacing_height); } static int getMenuTextSpacing(int spacing_height, int font_nr) { - int extra_spacing = menu.text.all.extra_spacing; - - return getMenuFontSpacing(spacing_height, font_nr) + extra_spacing; + return (getMenuFontSpacing(spacing_height, font_nr) + + EXTRA_SPACING(game_status)); } static int getMenuTextStep(int spacing_height, int font_nr) @@ -2544,14 +2598,14 @@ static int getMenuTextStep(int spacing_height, int font_nr) void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) { - int font_title = FONT_TEXT_1; + int font_title = MENU_INFO_FONT_TITLE; int font_error = FONT_TEXT_2; - int font_foot = FONT_TEXT_4; - int spacing_title = menu.text.headline.large_spacing; + int font_foot = MENU_INFO_FONT_FOOT; + int spacing_title = menu.headline1_spacing_info[info_mode]; int ystep_title = getMenuTextStep(spacing_title, font_title); - int ystart1 = mSY - SY + 100; + int ystart1 = mSY - SY + MENU_SCREEN_INFO_YSTART1; int ystart2 = ystart1 + ystep_title; - int ybottom = mSY - SY + SYSIZE - 20; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO); @@ -2573,9 +2627,9 @@ void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) { static int infoscreen_step[MAX_INFO_ELEMENTS_ON_SCREEN]; static int infoscreen_frame[MAX_INFO_ELEMENTS_ON_SCREEN]; - int font_title = FONT_TEXT_1; - int font_foot = FONT_TEXT_4; - int xstart = mSX + MENU_SCREEN_INFO_XSTART; + int font_title = MENU_INFO_FONT_TITLE; + int font_foot = MENU_INFO_FONT_FOOT; + int xstart = mSX + MENU_SCREEN_INFO_SPACE_LEFT; int ystart1 = mSY - SY + MENU_SCREEN_INFO_YSTART1; int ystart2 = mSY + MENU_SCREEN_INFO_YSTART2; int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; @@ -2705,11 +2759,12 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos) int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); int yoffset = (TILEX - 2 * font_height) / 2; - int xstart = mSX + MINI_TILEX + TILEX + MINI_TILEX; + int xstart = mSX + MENU_SCREEN_INFO_SPACE_LEFT + TILEX + MINI_TILEX; int ystart = mSY + MENU_SCREEN_INFO_YSTART2 + yoffset; int ystep = TILEY + 4; - int pad_x = xstart - SX; - int max_chars_per_line = (SXSIZE - pad_x - MINI_TILEX) / font_width; + int pad_left = xstart - SX; + int pad_right = MENU_SCREEN_INFO_SPACE_RIGHT; + int max_chars_per_line = (SXSIZE - pad_left - pad_right) / font_width; int max_lines_per_text = 2; char *text = NULL; @@ -2860,18 +2915,16 @@ void DrawInfoScreen_Music() void HandleInfoScreen_Music(int button) { static struct MusicFileInfo *list = NULL; - int font_title = FONT_TEXT_1; - int font_head = FONT_TEXT_2; - int font_text = FONT_TEXT_3; - int font_foot = FONT_TEXT_4; - int spacing_title = menu.text.headline.large_spacing; - int spacing_head = menu.text.headline.normal_spacing; - int spacing_line = menu.text.line.large_spacing; + int font_title = MENU_INFO_FONT_TITLE; + int font_head = MENU_INFO_FONT_HEAD; + int font_text = MENU_INFO_FONT_TEXT; + int font_foot = MENU_INFO_FONT_FOOT; + int spacing_title = menu.headline1_spacing_info[info_mode]; + int spacing_head = menu.headline2_spacing_info[info_mode]; int ystep_title = getMenuTextStep(spacing_title, font_title); int ystep_head = getMenuTextStep(spacing_head, font_head); - int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; if (button == MB_MENU_INITIALIZE) { @@ -2965,7 +3018,7 @@ void HandleInfoScreen_Music(int button) } DrawTextFCentered(ystart, font_text, "\"%s\"", list->title); - ystart += ystep_line; + ystart += ystep_head; } if (!strEqual(list->artist, UNKNOWN_NAME)) @@ -2978,7 +3031,7 @@ void HandleInfoScreen_Music(int button) ystart += ystep_head; DrawTextFCentered(ystart, font_text, "%s", list->artist); - ystart += ystep_line; + ystart += ystep_head; } if (!strEqual(list->album, UNKNOWN_NAME)) @@ -2991,7 +3044,7 @@ void HandleInfoScreen_Music(int button) ystart += ystep_head; DrawTextFCentered(ystart, font_text, "\"%s\"", list->album); - ystart += ystep_line; + ystart += ystep_head; } if (!strEqual(list->year, UNKNOWN_NAME)) @@ -3004,7 +3057,7 @@ void HandleInfoScreen_Music(int button) ystart += ystep_head; DrawTextFCentered(ystart, font_text, "%s", list->year); - ystart += ystep_line; + ystart += ystep_head; } DrawTextSCentered(ybottom, FONT_TEXT_4, @@ -3020,22 +3073,20 @@ void HandleInfoScreen_Music(int button) static void DrawInfoScreen_CreditsScreen(int screen_nr) { - int font_title = FONT_TEXT_1; - int font_head = FONT_TEXT_2; - int font_text = FONT_TEXT_3; - int font_foot = FONT_TEXT_4; - int spacing_title = menu.text.headline.large_spacing; - int spacing_head = menu.text.headline.normal_spacing; - int spacing_para = menu.text.paragraph.large_spacing; - int spacing_line = menu.text.line.large_spacing; - int spacing_line1 = menu.text.line.normal_spacing; + int font_title = MENU_INFO_FONT_TITLE; + int font_head = MENU_INFO_FONT_HEAD; + int font_text = MENU_INFO_FONT_TEXT; + int font_foot = MENU_INFO_FONT_FOOT; + int spacing_title = menu.headline1_spacing_info[info_mode]; + int spacing_head = menu.headline2_spacing_info[info_mode]; + int spacing_para = menu.paragraph_spacing_info[info_mode]; + int spacing_line = menu.line_spacing_info[info_mode]; int ystep_title = getMenuTextStep(spacing_title, font_title); int ystep_head = getMenuTextStep(spacing_head, font_head); int ystep_para = getMenuTextStep(spacing_para, font_text); int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystep_line1 = getMenuTextStep(spacing_line1, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; ClearField(); DrawHeadline(); @@ -3050,19 +3101,19 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Peter Liepa"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for creating"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "\"Boulder Dash\""); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "in the year"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "1984"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "published by"); ystart += ystep_head; @@ -3076,19 +3127,19 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Klaus Heinz & Volker Wertich"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for creating"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "\"Emerald Mine\""); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "in the year"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "1987"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "published by"); ystart += ystep_head; @@ -3102,19 +3153,19 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Michael Stopp & Philip Jespersen"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for creating"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "\"Supaplex\""); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "in the year"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "1991"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "published by"); ystart += ystep_head; @@ -3128,19 +3179,19 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Hiroyuki Imabayashi"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for creating"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "\"Sokoban\""); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "in the year"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "1982"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "published by"); ystart += ystep_head; @@ -3154,16 +3205,16 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Alan Bond"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "and"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "J\xfcrgen Bonhagen"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for the continuous creation"); - ystart += ystep_line1; + ystart += ystep_line; DrawTextSCentered(ystart, font_head, "of outstanding level sets"); } @@ -3174,7 +3225,7 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Peter Elzner"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for ideas and inspiration by"); ystart += ystep_head; @@ -3187,7 +3238,7 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Steffest"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for ideas and inspiration by"); ystart += ystep_head; @@ -3201,10 +3252,10 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "David Tritscher"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for the code base used for the"); - ystart += ystep_line1; + ystart += ystep_line; DrawTextSCentered(ystart, font_head, "native Emerald Mine engine"); } @@ -3215,7 +3266,7 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Guido Schulz"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for the initial DOS port"); ystart += ystep_para; @@ -3225,7 +3276,7 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) ystart += ystep_head; DrawTextSCentered(ystart, font_text, "Karl H\xf6rnell"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "for some additional toons"); } @@ -3233,16 +3284,16 @@ static void DrawInfoScreen_CreditsScreen(int screen_nr) { DrawTextSCentered(ystart, font_head, "And not to forget:"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "Many thanks to"); ystart += ystep_head; DrawTextSCentered(ystart, font_text, "All those who contributed"); - ystart += ystep_line1; + ystart += ystep_line; DrawTextSCentered(ystart, font_text, "levels to this game"); - ystart += ystep_line1; + ystart += ystep_line; DrawTextSCentered(ystart, font_text, "since 1995"); } @@ -3323,22 +3374,20 @@ void HandleInfoScreen_Credits(int button) void DrawInfoScreen_Program() { - int font_title = FONT_TEXT_1; - int font_head = FONT_TEXT_2; - int font_text = FONT_TEXT_3; - int font_foot = FONT_TEXT_4; - int spacing_title = menu.text.headline.large_spacing; - int spacing_head = menu.text.headline.normal_spacing; - int spacing_para = menu.text.paragraph.large_spacing; - int spacing_line = menu.text.line.large_spacing; - int spacing_line1 = menu.text.line.normal_spacing; + int font_title = MENU_INFO_FONT_TITLE; + int font_head = MENU_INFO_FONT_HEAD; + int font_text = MENU_INFO_FONT_TEXT; + int font_foot = MENU_INFO_FONT_FOOT; + int spacing_title = menu.headline1_spacing_info[info_mode]; + int spacing_head = menu.headline2_spacing_info[info_mode]; + int spacing_para = menu.paragraph_spacing_info[info_mode]; + int spacing_line = menu.line_spacing_info[info_mode]; int ystep_title = getMenuTextStep(spacing_title, font_title); int ystep_head = getMenuTextStep(spacing_head, font_head); int ystep_para = getMenuTextStep(spacing_para, font_text); int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystep_line1 = getMenuTextStep(spacing_line1, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); @@ -3352,7 +3401,7 @@ void DrawInfoScreen_Program() DrawTextSCentered(ystart, font_head, "This game is Freeware!"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, "If you like it, send e-mail to:"); ystart += ystep_head; @@ -3369,10 +3418,10 @@ void DrawInfoScreen_Program() DrawTextSCentered(ystart, font_head, "If you have created new levels,"); - ystart += ystep_line1; + ystart += ystep_line; DrawTextSCentered(ystart, font_head, "send them to me to include them!"); - ystart += ystep_line; + ystart += ystep_head; DrawTextSCentered(ystart, font_head, ":-)"); @@ -3410,21 +3459,21 @@ void HandleInfoScreen_Program(int button) void DrawInfoScreen_Version() { - int font_title = FONT_TEXT_1; - int font_head = FONT_TEXT_2; - int font_text = FONT_TEXT_3; - int font_foot = FONT_TEXT_4; - int spacing_title = menu.text.headline.large_spacing; - int spacing_head = menu.text.headline.normal_spacing; - int spacing_para = menu.text.paragraph.normal_spacing; - int spacing_line = menu.text.line.normal_spacing; + int font_title = MENU_INFO_FONT_TITLE; + int font_head = MENU_INFO_FONT_HEAD; + int font_text = MENU_INFO_FONT_TEXT; + int font_foot = MENU_INFO_FONT_FOOT; + int spacing_title = menu.headline1_spacing_info[info_mode]; + int spacing_head = menu.headline2_spacing_info[info_mode]; + int spacing_para = menu.paragraph_spacing_info[info_mode]; + int spacing_line = menu.line_spacing_info[info_mode]; int xstep = getFontWidth(font_text); int ystep_title = getMenuTextStep(spacing_title, font_title); int ystep_head = getMenuTextStep(spacing_head, font_head); int ystep_para = getMenuTextStep(spacing_para, font_text); int ystep_line = getMenuTextStep(spacing_line, font_text); - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; int xstart1 = mSX - SX + 2 * xstep; int xstart2 = mSX - SX + 18 * xstep; int xstart3 = mSX - SX + 28 * xstep; @@ -3610,8 +3659,8 @@ void DrawInfoScreen_LevelSet() struct TitleMessageInfo *tmi = &readme; char *filename = getLevelSetInfoFilename(); char *title = "Level Set Information:"; - int ystart = mSY - SY + 100; - int ybottom = mSY - SY + SYSIZE - 20; + int ystart = mSY - SY + MENU_SCREEN_INFO_YSTART1; + int ybottom = mSY - SY + MENU_SCREEN_INFO_YBOTTOM; if (filename == NULL) { @@ -3643,7 +3692,7 @@ void DrawInfoScreen_LevelSet() /* if height set to "-1", automatically determine by playfield height */ if (tmi->height == -1) - tmi->height = SYSIZE - 20 - tmi->y - 10; + tmi->height = MENU_SCREEN_INFO_YBOTTOM - tmi->y - 10; /* if chars set to "-1", automatically determine by text and font width */ if (tmi->chars == -1) @@ -3826,7 +3875,7 @@ static void DrawChooseTree(TreeInfo **ti_ptr) { int fade_mask = REDRAW_FIELD; - if (CheckIfGlobalBorderHasChanged()) + if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged()) fade_mask = REDRAW_ALL; if (strEqual((*ti_ptr)->subdir, STRING_TOP_DIRECTORY)) @@ -4345,7 +4394,7 @@ void DrawHallOfFame(int highlight_position) { int fade_mask = REDRAW_FIELD; - if (CheckIfGlobalBorderHasChanged()) + if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged()) fade_mask = REDRAW_ALL; UnmapAllGadgets(); @@ -4541,7 +4590,7 @@ static void execSetupGame_setGameSpeeds() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Game Speed"); + setString(&ti->infotext, STR_SETUP_CHOOSE_GAME_SPEED); pushTreeInfo(&game_speeds, ti); } @@ -4591,7 +4640,7 @@ static void execSetupGame_setScrollDelays() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Scroll Delay"); + setString(&ti->infotext, STR_SETUP_CHOOSE_SCROLL_DELAY); pushTreeInfo(&scroll_delays, ti); } @@ -4641,7 +4690,7 @@ static void execSetupGame_setSnapshotModes() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Snapshot Mode"); + setString(&ti->infotext, STR_SETUP_CHOOSE_SNAPSHOT_MODE); pushTreeInfo(&snapshot_modes, ti); } @@ -4738,7 +4787,7 @@ static void execSetupGraphics_setWindowSizes(boolean update_list) setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Window Scaling"); + setString(&ti->infotext, STR_SETUP_CHOOSE_WINDOW_SIZE); pushTreeInfo(&window_sizes, ti); @@ -4763,7 +4812,7 @@ static void execSetupGraphics_setWindowSizes(boolean update_list) setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Window Scaling"); + setString(&ti->infotext, STR_SETUP_CHOOSE_WINDOW_SIZE); pushTreeInfo(&window_sizes, ti); } @@ -4815,7 +4864,7 @@ static void execSetupGraphics_setScalingTypes() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Anti-Aliasing"); + setString(&ti->infotext, STR_SETUP_CHOOSE_SCALING_TYPE); pushTreeInfo(&scaling_types, ti); } @@ -4865,7 +4914,7 @@ static void execSetupGraphics_setRenderingModes() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Special Rendering"); + setString(&ti->infotext, STR_SETUP_CHOOSE_RENDERING); pushTreeInfo(&rendering_modes, ti); } @@ -4992,7 +5041,7 @@ static void execSetupSound() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Sound Volume"); + setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_SIMPLE); pushTreeInfo(&volumes_simple, ti); @@ -5017,7 +5066,7 @@ static void execSetupSound() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Sound Volume"); + setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_SIMPLE); pushTreeInfo(&volumes_simple, ti); } @@ -5060,7 +5109,7 @@ static void execSetupSound() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Loops Volume"); + setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_LOOPS); pushTreeInfo(&volumes_loops, ti); @@ -5085,7 +5134,7 @@ static void execSetupSound() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Loops Volume"); + setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_LOOPS); pushTreeInfo(&volumes_loops, ti); } @@ -5128,7 +5177,7 @@ static void execSetupSound() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Music Volume"); + setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_MUSIC); pushTreeInfo(&volumes_music, ti); @@ -5153,7 +5202,7 @@ static void execSetupSound() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Music Volume"); + setString(&ti->infotext, STR_SETUP_CHOOSE_VOLUME_MUSIC); pushTreeInfo(&volumes_music, ti); } @@ -5232,7 +5281,7 @@ static void execSetupTouch() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Control Type"); + setString(&ti->infotext, STR_SETUP_CHOOSE_TOUCH_CONTROL); pushTreeInfo(&touch_controls, ti); } @@ -5274,7 +5323,7 @@ static void execSetupTouch() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Move Distance"); + setString(&ti->infotext, STR_SETUP_CHOOSE_MOVE_DISTANCE); pushTreeInfo(&move_distances, ti); } @@ -5317,7 +5366,7 @@ static void execSetupTouch() setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Drop Distance"); + setString(&ti->infotext, STR_SETUP_CHOOSE_DROP_DISTANCE); pushTreeInfo(&drop_distances, ti); } @@ -5465,17 +5514,17 @@ static void execSaveAndExitSetup() static struct TokenInfo setup_info_main[] = { - { TYPE_ENTER_MENU, execSetupGame, "Game & Menu" }, - { TYPE_ENTER_MENU, execSetupEditor, "Editor" }, - { TYPE_ENTER_MENU, execSetupGraphics, "Graphics" }, - { TYPE_ENTER_MENU, execSetupSound, "Sound & Music" }, - { TYPE_ENTER_MENU, execSetupArtwork, "Custom Artwork" }, - { TYPE_ENTER_MENU, execSetupInput, "Input Devices" }, - { TYPE_ENTER_MENU, execSetupTouch, "Touch Controls" }, - { TYPE_ENTER_MENU, execSetupShortcuts, "Key Shortcuts" }, + { TYPE_ENTER_MENU, execSetupGame, STR_SETUP_GAME }, + { TYPE_ENTER_MENU, execSetupEditor, STR_SETUP_EDITOR }, + { TYPE_ENTER_MENU, execSetupGraphics, STR_SETUP_GRAPHICS }, + { TYPE_ENTER_MENU, execSetupSound, STR_SETUP_SOUND }, + { TYPE_ENTER_MENU, execSetupArtwork, STR_SETUP_ARTWORK }, + { TYPE_ENTER_MENU, execSetupInput, STR_SETUP_INPUT }, + { TYPE_ENTER_MENU, execSetupTouch, STR_SETUP_TOUCH }, + { TYPE_ENTER_MENU, execSetupShortcuts, STR_SETUP_SHORTCUTS }, { TYPE_EMPTY, NULL, "" }, - { TYPE_LEAVE_MENU, execExitSetup, "Exit" }, - { TYPE_LEAVE_MENU, execSaveAndExitSetup, "Save and Exit" }, + { TYPE_LEAVE_MENU, execExitSetup, STR_SETUP_EXIT }, + { TYPE_LEAVE_MENU, execSaveAndExitSetup, STR_SETUP_SAVE_AND_EXIT }, { 0, NULL, NULL } }; @@ -5608,6 +5657,7 @@ static struct TokenInfo setup_info_input[] = { TYPE_SWITCH, NULL, "Player:" }, { TYPE_SWITCH, NULL, "Device:" }, { TYPE_SWITCH, NULL, "" }, + { TYPE_SKIPPABLE, NULL, "" }, { TYPE_EMPTY, NULL, "" }, { TYPE_EMPTY, NULL, "" }, { TYPE_EMPTY, NULL, "" }, @@ -5616,8 +5666,7 @@ static struct TokenInfo setup_info_input[] = { TYPE_EMPTY, NULL, "" }, { TYPE_EMPTY, NULL, "" }, { TYPE_EMPTY, NULL, "" }, - { TYPE_EMPTY, NULL, "" }, - { TYPE_EMPTY, NULL, "" }, + { TYPE_SKIPPABLE, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, { 0, NULL, NULL } @@ -5971,7 +6020,7 @@ static void changeSetupValue(int screen_pos, int setup_info_pos_raw, int dx) static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig) { - static struct TokenInfo *setup_info_hide = NULL; + static struct TokenInfo *setup_info_final = NULL; int list_size = 0; int list_pos = 0; int i; @@ -5980,15 +6029,25 @@ static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig) while (setup_info_orig[list_size++].type != 0); /* free, allocate and clear memory for target list */ - checked_free(setup_info_hide); - setup_info_hide = checked_calloc(list_size * sizeof(struct TokenInfo)); + checked_free(setup_info_final); + setup_info_final = checked_calloc(list_size * sizeof(struct TokenInfo)); /* copy setup info list without setup entries marked as hidden */ for (i = 0; setup_info_orig[i].type != 0; i++) - if (!hideSetupEntry(setup_info_orig[i].value)) - setup_info_hide[list_pos++] = setup_info_orig[i]; + { + /* skip setup entries configured to be hidden */ + if (hideSetupEntry(setup_info_orig[i].value)) + continue; - return setup_info_hide; + /* skip skippable setup entries if screen is lower than usual */ + if (SCR_FIELDY < SCR_FIELDY_DEFAULT && + setup_info_orig[i].type == TYPE_SKIPPABLE) + continue; + + setup_info_final[list_pos++] = setup_info_orig[i]; + } + + return setup_info_final; } static void DrawSetupScreen_Generic() @@ -5998,7 +6057,7 @@ static void DrawSetupScreen_Generic() char *title_string = NULL; int i; - if (CheckIfGlobalBorderHasChanged()) + if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged()) fade_mask = REDRAW_ALL; UnmapAllGadgets(); @@ -6024,37 +6083,37 @@ static void DrawSetupScreen_Generic() if (setup_mode == SETUP_MODE_MAIN) { setup_info = setup_info_main; - title_string = "Setup"; + title_string = STR_SETUP_MAIN; } else if (setup_mode == SETUP_MODE_GAME) { setup_info = setup_info_game; - title_string = "Setup Game"; + title_string = STR_SETUP_GAME; } else if (setup_mode == SETUP_MODE_EDITOR) { setup_info = setup_info_editor; - title_string = "Setup Editor"; + title_string = STR_SETUP_EDITOR; } else if (setup_mode == SETUP_MODE_GRAPHICS) { setup_info = setup_info_graphics; - title_string = "Setup Graphics"; + title_string = STR_SETUP_GRAPHICS; } else if (setup_mode == SETUP_MODE_SOUND) { setup_info = setup_info_sound; - title_string = "Setup Sound"; + title_string = STR_SETUP_SOUND; } else if (setup_mode == SETUP_MODE_ARTWORK) { setup_info = setup_info_artwork; - title_string = "Custom Artwork"; + title_string = STR_SETUP_ARTWORK; } else if (setup_mode == SETUP_MODE_TOUCH) { setup_info = setup_info_touch; - title_string = "Setup Touch Ctrls"; + title_string = STR_SETUP_TOUCH; if (strEqual(setup.touch.control_type, TOUCH_CONTROL_WIPE_GESTURES)) setup_info = setup_info_touch_wipe_gestures; @@ -6062,32 +6121,32 @@ static void DrawSetupScreen_Generic() else if (setup_mode == SETUP_MODE_SHORTCUTS) { setup_info = setup_info_shortcuts; - title_string = "Setup Shortcuts"; + title_string = STR_SETUP_SHORTCUTS; } else if (setup_mode == SETUP_MODE_SHORTCUTS_1) { setup_info = setup_info_shortcuts_1; - title_string = "Setup Shortcuts"; + title_string = STR_SETUP_SHORTCUTS; } else if (setup_mode == SETUP_MODE_SHORTCUTS_2) { setup_info = setup_info_shortcuts_2; - title_string = "Setup Shortcuts"; + title_string = STR_SETUP_SHORTCUTS; } else if (setup_mode == SETUP_MODE_SHORTCUTS_3) { setup_info = setup_info_shortcuts_3; - title_string = "Setup Shortcuts"; + title_string = STR_SETUP_SHORTCUTS; } else if (setup_mode == SETUP_MODE_SHORTCUTS_4) { setup_info = setup_info_shortcuts_4; - title_string = "Setup Shortcuts"; + title_string = STR_SETUP_SHORTCUTS; } else if (setup_mode == SETUP_MODE_SHORTCUTS_5) { setup_info = setup_info_shortcuts_5; - title_string = "Setup Shortcuts"; + title_string = STR_SETUP_SHORTCUTS; } /* use modified setup info without setup entries marked as hidden */ @@ -6133,11 +6192,11 @@ void DrawSetupScreen_Input() ClearField(); - setup_info = setup_info_input; + setup_info = getSetupInfoFinal(setup_info_input); - DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Setup Input"); + DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, STR_SETUP_INPUT); - for (i = 0; setup_info[i].type != 0 && i < MAX_MENU_ENTRIES_ON_SCREEN; i++) + for (i = 0; setup_info[i].type != 0; i++) { if (setup_info[i].type & (TYPE_ENTER_MENU|TYPE_ENTER_LIST)) initCursor(i, IMG_MENU_BUTTON_ENTER_MENU); @@ -6206,7 +6265,19 @@ static void drawPlayerSetupInputInfo(int player_nr, boolean active) "Joystick3", "Joystick4" }; - int text_font_nr = (active ? FONT_MENU_1_ACTIVE : FONT_MENU_1); + int font_nr_menu = (active ? FONT_MENU_1_ACTIVE : FONT_MENU_1); + int font_nr_info = FONT_MENU_1; + int font_nr_name = FONT_VALUE_OLD; + int font_nr_on = FONT_VALUE_1; + int font_nr_off = FONT_VALUE_OLD; + int pos = 4; + + if (SCR_FIELDX < SCR_FIELDX_DEFAULT) + { + font_nr_info = FONT_MENU_2; + font_nr_on = FONT_VALUE_NARROW; + font_nr_off = FONT_VALUE_OLD_NARROW; + } custom_key = setup.input[player_nr].key; @@ -6224,41 +6295,44 @@ static void drawPlayerSetupInputInfo(int player_nr, boolean active) int joystick_nr = getJoystickNrFromDeviceName(device_name); boolean joystick_active = CheckJoystickOpened(joystick_nr); char *text = joystick_name[joystick_nr]; - int font_nr = (joystick_active ? FONT_VALUE_1 : FONT_VALUE_OLD); + int font_nr = (joystick_active ? font_nr_on : font_nr_off); DrawText(mSX + 8 * 32, mSY + 3 * 32, text, font_nr); - DrawText(mSX + 32, mSY + 4 * 32, "Configure", text_font_nr); + DrawText(mSX + 32, mSY + 4 * 32, "Configure", font_nr_menu); } else { - DrawText(mSX + 8 * 32, mSY + 3 * 32, "Keyboard ", FONT_VALUE_1); - DrawText(mSX + 1 * 32, mSY + 4 * 32, "Customize", text_font_nr); + DrawText(mSX + 8 * 32, mSY + 3 * 32, "Keyboard ", font_nr_on); + DrawText(mSX + 1 * 32, mSY + 4 * 32, "Customize", font_nr_menu); } - DrawText(mSX + 32, mSY + 5 * 32, "Actual Settings:", FONT_MENU_1); + if (SCR_FIELDY >= SCR_FIELDY_DEFAULT) + DrawText(mSX + 32, mSY + 5 * 32, "Actual Settings:", font_nr_info); + else + pos = 3; - drawCursorXY(1, 4, IMG_MENU_BUTTON_LEFT); - drawCursorXY(1, 5, IMG_MENU_BUTTON_RIGHT); - drawCursorXY(1, 6, IMG_MENU_BUTTON_UP); - drawCursorXY(1, 7, IMG_MENU_BUTTON_DOWN); + drawCursorXY(1, pos + 0, IMG_MENU_BUTTON_LEFT); + drawCursorXY(1, pos + 1, IMG_MENU_BUTTON_RIGHT); + drawCursorXY(1, pos + 2, IMG_MENU_BUTTON_UP); + drawCursorXY(1, pos + 3, IMG_MENU_BUTTON_DOWN); - DrawText(mSX + 2 * 32, mSY + 6 * 32, ":", FONT_VALUE_OLD); - DrawText(mSX + 2 * 32, mSY + 7 * 32, ":", FONT_VALUE_OLD); - DrawText(mSX + 2 * 32, mSY + 8 * 32, ":", FONT_VALUE_OLD); - DrawText(mSX + 2 * 32, mSY + 9 * 32, ":", FONT_VALUE_OLD); - DrawText(mSX + 1 * 32, mSY + 10 * 32, "Snap Field:", FONT_VALUE_OLD); - DrawText(mSX + 1 * 32, mSY + 12 * 32, "Drop Element:", FONT_VALUE_OLD); + DrawText(mSX + 2 * 32, mSY + (pos + 2) * 32, ":", font_nr_name); + DrawText(mSX + 2 * 32, mSY + (pos + 3) * 32, ":", font_nr_name); + DrawText(mSX + 2 * 32, mSY + (pos + 4) * 32, ":", font_nr_name); + DrawText(mSX + 2 * 32, mSY + (pos + 5) * 32, ":", font_nr_name); + DrawText(mSX + 1 * 32, mSY + (pos + 6) * 32, "Snap Field:", font_nr_name); + DrawText(mSX + 1 * 32, mSY + (pos + 8) * 32, "Drop Element:", font_nr_name); for (i = 0; i < 6; i++) { - int ypos = 6 + i + (i > 3 ? i-3 : 0); + int ypos = (pos + 2) + i + (i > 3 ? i - 3 : 0); DrawText(mSX + 3 * 32, mSY + ypos * 32, - " ", FONT_VALUE_1); + " ", font_nr_on); DrawText(mSX + 3 * 32, mSY + ypos * 32, (setup.input[player_nr].use_joystick ? custom[i].text : - getKeyNameFromKey(*custom[i].key)), FONT_VALUE_1); + getKeyNameFromKey(*custom[i].key)), font_nr_on); } } @@ -6293,8 +6367,27 @@ void HandleSetupScreen_Input(int mx, int my, int dx, int dy, int button) int pos_empty2 = SETUPINPUT_SCREEN_POS_EMPTY2; int pos_end = SETUPINPUT_SCREEN_POS_END; + if (SCR_FIELDY < SCR_FIELDY_DEFAULT) + { + int i; + + for (i = 0; setup_info_input[i].type != 0; i++) + { + /* adjust menu structure according to skipped setup entries */ + if (setup_info_input[i].type == TYPE_SKIPPABLE) + { + pos_empty2--; + pos_end--; + } + } + } + if (button == MB_MENU_INITIALIZE) { + /* input setup menu may have changed size due to graphics configuration */ + if (choice >= pos_empty1) + choice = pos_end; + drawPlayerSetupInputInfo(input_player_nr, (choice == 2)); DrawCursorAndText_Setup(choice, -1, TRUE); @@ -6395,7 +6488,7 @@ void HandleSetupScreen_Input(int mx, int my, int dx, int dy, int button) } } -void CustomizeKeyboard(int player_nr) +static boolean CustomizeKeyboardMain(int player_nr) { int i; int step_nr; @@ -6414,6 +6507,15 @@ void CustomizeKeyboard(int player_nr) { &custom_key.snap, "Snap Field" }, { &custom_key.drop, "Drop Element" } }; + int font_nr_old = FONT_VALUE_OLD; + int font_nr_new = FONT_VALUE_1; + int success = FALSE; + + if (SCR_FIELDX < SCR_FIELDX_DEFAULT) + { + font_nr_old = FONT_VALUE_OLD_NARROW; + font_nr_new = FONT_VALUE_NARROW; + } /* read existing key bindings from player setup */ custom_key = setup.input[player_nr].key; @@ -6431,7 +6533,7 @@ void CustomizeKeyboard(int player_nr) DrawText(mSX, mSY + (2 + 2 * step_nr + 1) * 32, "Key:", FONT_INPUT_1_ACTIVE); DrawText(mSX + 4 * 32, mSY + (2 + 2 * step_nr + 1) * 32, - getKeyNameFromKey(*customize_step[step_nr].key), FONT_VALUE_OLD); + getKeyNameFromKey(*customize_step[step_nr].key), font_nr_old); FadeIn(REDRAW_FIELD); @@ -6447,18 +6549,15 @@ void CustomizeKeyboard(int player_nr) { Key key = GetEventKey((KeyEvent *)&event, FALSE); - if (key == KSYM_Escape || (key == KSYM_Return && step_nr == 6)) + /* press 'Escape' to abort and keep the old key bindings */ + if (key == KSYM_Escape) { - if (key == KSYM_Escape) - FadeSkipNextFadeIn(); + FadeSkipNextFadeIn(); finished = TRUE; - break; - } - /* all keys configured -- wait for "Escape" or "Return" key */ - if (step_nr == 6) break; + } /* press 'Enter' to keep the existing key binding */ if (key == KSYM_Return) @@ -6474,9 +6573,9 @@ void CustomizeKeyboard(int player_nr) /* got new key binding */ *customize_step[step_nr].key = key; DrawText(mSX + 4 * 32, mSY + (2 + 2 * step_nr + 1) * 32, - " ", FONT_VALUE_1); + " ", font_nr_new); DrawText(mSX + 4 * 32, mSY + (2 + 2 * step_nr + 1) * 32, - getKeyNameFromKey(key), FONT_VALUE_1); + getKeyNameFromKey(key), font_nr_new); step_nr++; /* un-highlight last query */ @@ -6485,11 +6584,12 @@ void CustomizeKeyboard(int player_nr) DrawText(mSX, mSY + (2 + 2 * (step_nr - 1) + 1) * 32, "Key:", FONT_MENU_1); - /* press 'Enter' to leave */ + /* all keys configured */ if (step_nr == 6) { - DrawText(mSX + 16, mSY + 15 * 32 + 16, - "Press Enter", FONT_TITLE_1); + finished = TRUE; + success = TRUE; + break; } @@ -6500,7 +6600,7 @@ void CustomizeKeyboard(int player_nr) "Key:", FONT_INPUT_1_ACTIVE); DrawText(mSX + 4 * 32, mSY + (2 + 2 * step_nr + 1) * 32, getKeyNameFromKey(*customize_step[step_nr].key), - FONT_VALUE_OLD); + font_nr_old); } break; @@ -6517,8 +6617,38 @@ void CustomizeKeyboard(int player_nr) BackToFront(); } - /* write new key bindings back to player setup */ - setup.input[player_nr].key = custom_key; + /* write new key bindings back to player setup, if successfully finished */ + if (success) + setup.input[player_nr].key = custom_key; + + return success; +} + +void CustomizeKeyboard(int player_nr) +{ + boolean success = CustomizeKeyboardMain(player_nr); + + if (success) + { + int font_nr = FONT_TITLE_1; + int font_height = getFontHeight(font_nr); + int ypos1 = SYSIZE / 2 - font_height * 2; + int ypos2 = SYSIZE / 2 - font_height * 1; + unsigned int wait_frame_delay = 0; + unsigned int wait_frame_delay_value = 2000; + + ResetDelayCounter(&wait_frame_delay); + + ClearField(); + + DrawTextSCentered(ypos1, font_nr, "Keyboard"); + DrawTextSCentered(ypos2, font_nr, "configured!"); + + while (!DelayReached(&wait_frame_delay, wait_frame_delay_value)) + BackToFront(); + + ClearEventQueue(); + } DrawSetupScreen_Input(); } @@ -6542,16 +6672,14 @@ static boolean ConfigureJoystickMapButtonsAndAxes(SDL_Joystick *joystick) int alpha = 200, alpha_step = -1; int alpha_ticks = 0; char mapping[4096], temp[4096]; - int font_name = FONT_TEXT_1; - int font_info = FONT_REQUEST; - int spacing_name = menu.text.line.normal_spacing; - int spacing_line = menu.text.line.normal_spacing; - int spacing_line2 = menu.text.line.large_spacing; - int ystep_name = getMenuTextStep(spacing_name, font_name); - int ystep_line = getMenuTextStep(spacing_line, font_info); - int ystep_line2 = getMenuTextStep(spacing_line2, font_info); - // int ystep1 = getFontHeight(font_name) + 2; - // int ystep2 = getFontHeight(font_info) + 2; + int font_name = MENU_SETUP_FONT_TITLE; + int font_info = MENU_SETUP_FONT_TEXT; + int spacing_name = menu.line_spacing_setup[SETUP_MODE_INPUT]; + int spacing_line = menu.line_spacing_setup[SETUP_MODE_INPUT]; + int spacing_para = menu.paragraph_spacing_setup[SETUP_MODE_INPUT]; + int ystep_name = getMenuTextStep(spacing_name, font_name); + int ystep_line = getMenuTextStep(spacing_line, font_info); + int ystep_para = getMenuTextStep(spacing_para, font_info); int i, j; struct @@ -6674,7 +6802,7 @@ static boolean ConfigureJoystickMapButtonsAndAxes(SDL_Joystick *joystick) ystart2 += ystep_line; DrawTextSCentered(ystart2, font_info, "(Your controller may look different.)"); - ystart2 += ystep_line2; + ystart2 += ystep_para; #if defined(PLATFORM_ANDROID) DrawTextSCentered(ystart2, font_info, @@ -6932,11 +7060,14 @@ void ConfigureJoystick(int player_nr) if (state != JOYSTICK_NOT_CONFIGURED) { boolean success = (state == JOYSTICK_CONFIGURED); - char *message = (success ? " IS CONFIGURED! " : " NOT AVAILABLE! "); + char message1[MAX_OUTPUT_LINESIZE + 1]; + char *message2 = (success ? "configured!" : "not available!"); char *device_name = setup.input[player_nr].joy.device_name; int nr = getJoystickNrFromDeviceName(device_name) + 1; - int xpos = mSX - SX; - int ypos = mSY - SY; + int font_nr = FONT_TITLE_1; + int font_height = getFontHeight(font_nr); + int ypos1 = SYSIZE / 2 - font_height * 2; + int ypos2 = SYSIZE / 2 - font_height * 1; unsigned int wait_frame_delay = 0; unsigned int wait_frame_delay_value = 2000; @@ -6944,8 +7075,10 @@ void ConfigureJoystick(int player_nr) ClearField(); - DrawTextF(xpos + 16, ypos + 6 * 32, FONT_TITLE_1, " JOYSTICK %d ", nr); - DrawTextF(xpos + 16, ypos + 7 * 32, FONT_TITLE_1, message); + sprintf(message1, "Joystick %d", nr); + + DrawTextSCentered(ypos1, font_nr, message1); + DrawTextSCentered(ypos2, font_nr, message2); while (!DelayReached(&wait_frame_delay, wait_frame_delay_value)) BackToFront(); @@ -7048,6 +7181,9 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) void HandleGameActions() { + if (game.restart_game_message != NULL) + RequestRestartGame(game.restart_game_message); + if (game_status != GAME_MODE_PLAYING) return;