X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=bd5eb569e6954b7698e639910e039fb983d55afa;hb=dff0e0c8702770fe23992f07964ebe9ed54e9f7c;hp=57f7a4bcd35035605ddaaecacff1156370eaba5b;hpb=8acfa954d5b7d689ee20ffd1ed5a238909e1a1cc;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 57f7a4bc..bd5eb569 100644 --- a/src/screens.c +++ b/src/screens.c @@ -23,6 +23,7 @@ #include "cartoons.h" #include "network.h" #include "init.h" +#include "config.h" /* screens in the setup menu */ #define SETUP_MODE_MAIN 0 @@ -54,9 +55,10 @@ #define INFO_MODE_MUSIC 3 #define INFO_MODE_CREDITS 4 #define INFO_MODE_PROGRAM 5 -#define INFO_MODE_LEVELSET 6 +#define INFO_MODE_VERSION 6 +#define INFO_MODE_LEVELSET 7 -#define MAX_INFO_MODES 7 +#define MAX_INFO_MODES 8 /* for various menu stuff */ #define MENU_SCREEN_START_XPOS 1 @@ -153,6 +155,7 @@ static void HandleInfoScreen_Elements(int); static void HandleInfoScreen_Music(int); static void HandleInfoScreen_Credits(int); static void HandleInfoScreen_Program(int); +static void HandleInfoScreen_Version(int); static void MapScreenMenuGadgets(int); static void MapScreenTreeGadgets(TreeInfo *); @@ -461,7 +464,8 @@ static void InitializeMainControls() } } -static void DrawCursorAndText_Main(int nr, boolean active) +static void DrawCursorAndText_Main_Ext(int nr, boolean active_text, + boolean active_input) { int i; @@ -480,12 +484,17 @@ static void DrawCursorAndText_Main(int nr, boolean active) int font_text = mci->font_text; int font_input = mci->font_input; - if (active) + if (active_text) { button_graphic = BUTTON_GRAPHIC_ACTIVE(button_graphic); font_text = FONT_ACTIVE(font_text); } + if (active_input) + { + font_input = FONT_ACTIVE(font_input); + } + if (pos_button != NULL) { struct MenuPosInfo *pos = pos_button; @@ -499,8 +508,8 @@ static void DrawCursorAndText_Main(int nr, boolean active) if (pos_text != NULL && text != NULL) { struct MenuPosInfo *pos = pos_text; - int x = mSX + ALIGNED_XPOS(pos->x, pos->width, pos->align); - int y = mSY + pos->y; + int x = mSX + ALIGNED_MENU_XPOS(pos); + int y = mSY + ALIGNED_MENU_YPOS(pos); DrawBackgroundForFont(x, y, pos->width, pos->height, font_text); DrawText(x, y, text, font_text); @@ -509,8 +518,8 @@ static void DrawCursorAndText_Main(int nr, boolean active) if (pos_input != NULL && input != NULL) { struct MenuPosInfo *pos = pos_input; - int x = mSX + ALIGNED_XPOS(pos->x, pos->width, pos->align); - int y = mSY + pos->y; + int x = mSX + ALIGNED_MENU_XPOS(pos); + int y = mSY + ALIGNED_MENU_YPOS(pos); DrawBackgroundForFont(x, y, pos->width, pos->height, font_input); DrawText(x, y, input, font_input); @@ -519,6 +528,18 @@ static void DrawCursorAndText_Main(int nr, boolean active) } } +static void DrawCursorAndText_Main(int nr, boolean active_text) +{ + DrawCursorAndText_Main_Ext(nr, active_text, FALSE); +} + +#if 0 +static void DrawCursorAndText_Main_Input(int nr, boolean active_text) +{ + DrawCursorAndText_Main_Ext(nr, active_text, TRUE); +} +#endif + static struct MainControlInfo *getMainControlInfo(int nr) { int i; @@ -535,8 +556,8 @@ static boolean insideMenuPosRect(struct MenuPosInfo *rect, int x, int y) if (rect == NULL) return FALSE; - int rect_x = ALIGNED_XPOS(rect->x, rect->width, rect->align); - int rect_y = rect->y; + int rect_x = ALIGNED_MENU_XPOS(rect); + int rect_y = ALIGNED_MENU_YPOS(rect); return (x >= rect_x && x < rect_x + rect->width && y >= rect_y && y < rect_y + rect->height); @@ -624,6 +645,14 @@ static int getTitleScreenGraphic() IMG_TITLESCREEN_1); } +int effectiveGameStatus() +{ + if (game_status == GAME_MODE_INFO && info_mode == INFO_MODE_TITLE) + return GAME_MODE_TITLE; + + return game_status; +} + void DrawTitleScreenImage(int nr) { int graphic = getTitleScreenGraphic() + nr; @@ -683,6 +712,41 @@ void DrawTitleScreenImage(int nr) title.auto_delay_final = graphic_info[graphic].auto_delay; } +void DrawTitleScreenMessage(char *filename) +{ + int font_nr = FONT_TEXT_1; + int font_width; + int font_height; + int pad_x = 16; + int pad_y = 32; + int sx = pad_x; + int sy = pad_y; + int max_chars_per_line; + int max_lines_per_screen; + int last_game_status = game_status; /* save current game status */ + + if (filename == NULL) + return; + + SetDrawBackgroundMask(REDRAW_ALL); + SetWindowBackgroundImageIfDefined(IMG_BACKGROUND_MESSAGE); + + ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); + + /* force MESSAGE font on title message screen */ + game_status = GAME_MODE_MESSAGE; + + font_width = getFontWidth(font_nr); + font_height = getFontHeight(font_nr); + max_chars_per_line = (WIN_XSIZE - 2 * pad_x) / font_width; + max_lines_per_screen = (WIN_YSIZE - pad_y) / font_height - 1; + + DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, + max_lines_per_screen, FALSE); + + game_status = last_game_status; /* restore current game status */ +} + void DrawTitleScreen() { KeyboardAutoRepeatOff(); @@ -748,13 +812,14 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) /* needed if last screen (level choice) changed graphics, sounds or music */ ReloadCustomArtwork(0); -#ifdef TARGET_SDL +#if defined(TARGET_SDL) SetDrawtoField(DRAW_BACKBUFFER); #endif if (setup.show_titlescreen && ((levelset_has_changed && - graphic_info[IMG_TITLESCREEN_1].bitmap != NULL) || + (graphic_info[IMG_TITLESCREEN_1].bitmap != NULL || + getLevelSetMessageFilename() != NULL)) || (show_titlescreen_initial && graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap != NULL))) { @@ -922,9 +987,13 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { static unsigned long title_delay = 0; static int title_nr = 0; + static boolean showing_message = FALSE; + char *filename = getLevelSetMessageFilename(); boolean return_to_main_menu = FALSE; boolean use_fading_main_menu = TRUE; boolean use_cross_fading = !show_titlescreen_initial; /* default */ + boolean no_title_info = (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL && + filename == NULL); if (button == MB_MENU_INITIALIZE) { @@ -932,6 +1001,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) title_delay = 0; title_nr = 0; + showing_message = FALSE; if (show_titlescreen_initial && graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap == NULL) @@ -939,7 +1009,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (game_status == GAME_MODE_INFO) { - if (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL) + if (no_title_info) { DrawInfoScreen_NotAvailable("Title screen information:", "No title screen for this level set."); @@ -962,7 +1032,20 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) game_status = last_game_status; /* restore current game status */ - DrawTitleScreenImage(title_nr); + if (graphic_info[getTitleScreenGraphic()].bitmap != NULL) + { + DrawTitleScreenImage(title_nr); + } + else + { + DrawTitleScreenMessage(filename); + + showing_message = TRUE; + + title.fade_delay_final = title.fade_delay; + title.post_delay_final = title.post_delay; + title.auto_delay_final = -1; + } FadeIn(REDRAW_ALL); @@ -984,8 +1067,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { int anim_mode; - if (game_status == GAME_MODE_INFO && - graphic_info[IMG_TITLESCREEN_1].bitmap == NULL) + if (game_status == GAME_MODE_INFO && no_title_info) { FadeOut(REDRAW_FIELD); @@ -1030,6 +1112,22 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) DelayReached(&title_delay, 0); /* reset delay counter */ } + else if (!showing_message && filename != NULL) + { + if (use_cross_fading) + FadeCrossSaveBackbuffer(); + + DrawTitleScreenMessage(filename); + + if (use_cross_fading) + FadeCross(REDRAW_ALL); + else + FadeIn(REDRAW_ALL); + + DelayReached(&title_delay, 0); /* reset delay counter */ + + showing_message = TRUE; + } else { FadeSoundsAndMusic(); @@ -1091,6 +1189,8 @@ void HandleMainMenu_SelectLevel(int step, int direction) { struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL); + PlaySound(SND_MENU_ITEM_SELECTING); + level_nr = new_level_nr; #if 1 @@ -1163,6 +1263,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) { if (pos != choice) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + DrawCursorAndText_Main(choice, FALSE); DrawCursorAndText_Main(pos, TRUE); @@ -1171,6 +1273,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) } else { + PlaySound(SND_MENU_ITEM_SELECTING); + if (pos == MAIN_CONTROL_NAME) { game_status = GAME_MODE_PSEUDO_TYPENAME; @@ -1405,6 +1509,12 @@ static void execInfoProgram() DrawInfoScreen(); } +static void execInfoVersion() +{ + info_mode = INFO_MODE_VERSION; + DrawInfoScreen(); +} + static void execInfoLevelSet() { info_mode = INFO_MODE_LEVELSET; @@ -1424,6 +1534,7 @@ static struct TokenInfo info_info_main[] = { TYPE_ENTER_SCREEN, execInfoMusic, "Music Info" }, { TYPE_ENTER_SCREEN, execInfoCredits, "Credits" }, { TYPE_ENTER_SCREEN, execInfoProgram, "Program Info" }, + { TYPE_ENTER_SCREEN, execInfoVersion, "Version Info" }, { TYPE_ENTER_SCREEN, execInfoLevelSet, "Level Set Info" }, { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execExitInfo, "Exit" }, @@ -1571,6 +1682,8 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) { if (y != choice) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + #if 1 DrawCursorAndText_Info(choice, FALSE); DrawCursorAndText_Info(y, TRUE); @@ -1584,6 +1697,8 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button) } else if (!(info_info[y].type & TYPE_GHOSTED)) { + PlaySound(SND_MENU_ITEM_SELECTING); + if (info_info[y].type & TYPE_ENTER_OR_LEAVE) { void (*menu_callback_function)(void) = info_info[choice].value; @@ -1744,7 +1859,11 @@ static char *getHelpText(int element, int action, int direction) void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos) { +#if 1 + int font_nr = FONT_INFO_ELEMENTS; +#else int font_nr = FONT_LEVEL_NUMBER; +#endif int font_width = getFontWidth(font_nr); int sx = mSX + MINI_TILEX + TILEX + MINI_TILEX; int sy = mSY + 65 + 2 * 32 + 1; @@ -1834,6 +1953,8 @@ void HandleInfoScreen_Elements(int button) if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -1842,7 +1963,11 @@ void HandleInfoScreen_Elements(int button) else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE) { if (button != MB_MENU_INITIALIZE) + { + PlaySound(SND_MENU_ITEM_SELECTING); + page++; + } if (page >= num_pages) { @@ -1917,6 +2042,10 @@ void HandleInfoScreen_Music(int button) if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + + FadeSoundsAndMusic(); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -1927,8 +2056,12 @@ void HandleInfoScreen_Music(int button) int y = 0; if (button != MB_MENU_INITIALIZE) + { + PlaySound(SND_MENU_ITEM_SELECTING); + if (list != NULL) list = list->next; + } if (list == NULL) { @@ -2216,6 +2349,8 @@ void HandleInfoScreen_Credits(int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2225,6 +2360,8 @@ void HandleInfoScreen_Credits(int button) { boolean show_screen; + PlaySound(SND_MENU_ITEM_SELECTING); + screen_nr++; FadeCrossSaveBackbuffer(); @@ -2301,6 +2438,146 @@ void HandleInfoScreen_Program(int button) { if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + + info_mode = INFO_MODE_MAIN; + DrawInfoScreen(); + + return; + } + else if (button == MB_MENU_CHOICE) + { + PlaySound(SND_MENU_ITEM_SELECTING); + + FadeSoundsAndMusic(); + FadeOut(REDRAW_FIELD); + + info_mode = INFO_MODE_MAIN; + DrawAndFadeInInfoScreen(REDRAW_FIELD); + } + else + { + PlayMenuSoundIfLoop(); + } +} + +void DrawInfoScreen_Version() +{ + int font_header = FONT_TEXT_3; + int font_text = FONT_TEXT_2; + int xstep = getFontWidth(font_text); + int ystep = getFontHeight(font_text); + int xstart1 = SX + 2 * xstep; + int xstart2 = SX + 18 * xstep; + int xstart3 = SX + 28 * xstep; + int ystart = 150; + int ybottom = SYSIZE - 20; +#if defined(TARGET_SDL) + SDL_version sdl_version_compiled; + const SDL_version *sdl_version_linked; +#endif + + SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); + + FadeOut(REDRAW_FIELD); + + ClearWindow(); + DrawHeadline(); + + DrawTextSCentered(100, FONT_TEXT_1, "Version Information:"); + + DrawTextF(xstart1, ystart, font_header, "Name"); + DrawTextF(xstart2, ystart, font_text, PROGRAM_TITLE_STRING); + + ystart += ystep; + DrawTextF(xstart1, ystart, font_header, "Version"); + DrawTextF(xstart2, ystart, font_text, getProgramFullVersionString()); + + ystart += ystep; + DrawTextF(xstart1, ystart, font_header, "Platform"); + DrawTextF(xstart2, ystart, font_text, PLATFORM_STRING); + + ystart += ystep; + DrawTextF(xstart1, ystart, font_header, "Target"); + DrawTextF(xstart2, ystart, font_text, TARGET_STRING); + + ystart += ystep; + DrawTextF(xstart1, ystart, font_header, "Compile time"); + DrawTextF(xstart2, ystart, font_text, getCompileDateString()); + +#if defined(TARGET_SDL) + ystart += 3 * ystep; + DrawTextF(xstart1, ystart, font_header, "Library"); + DrawTextF(xstart2, ystart, font_header, "compiled"); + DrawTextF(xstart3, ystart, font_header, "linked"); + + SDL_VERSION(&sdl_version_compiled); + sdl_version_linked = SDL_Linked_Version(); + + ystart += 2 * ystep; + DrawTextF(xstart1, ystart, font_text, "SDL"); + DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + sdl_version_compiled.major, + sdl_version_compiled.minor, + sdl_version_compiled.patch); + DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + sdl_version_linked->major, + sdl_version_linked->minor, + sdl_version_linked->patch); + + SDL_IMAGE_VERSION(&sdl_version_compiled); +#if 0 + sdl_version_linked = IMG_Linked_Version(); +#else +#endif + + ystart += ystep; + DrawTextF(xstart1, ystart, font_text, "SDL_image"); + DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + sdl_version_compiled.major, + sdl_version_compiled.minor, + sdl_version_compiled.patch); +#if 0 + DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + sdl_version_linked->major, + sdl_version_linked->minor, + sdl_version_linked->patch); +#else + DrawTextF(xstart3, ystart, font_text, "?.?.?"); +#endif + + SDL_MIXER_VERSION(&sdl_version_compiled); + sdl_version_linked = Mix_Linked_Version(); + + ystart += ystep; + DrawTextF(xstart1, ystart, font_text, "SDL_mixer"); + DrawTextF(xstart2, ystart, font_text, "%d.%d.%d", + sdl_version_compiled.major, + sdl_version_compiled.minor, + sdl_version_compiled.patch); + DrawTextF(xstart3, ystart, font_text, "%d.%d.%d", + sdl_version_linked->major, + sdl_version_linked->minor, + sdl_version_linked->patch); + + ystart += ystep; + DrawTextF(xstart1, ystart, font_text, "SDL_net"); + DrawTextF(xstart2, ystart, font_text, "?.?.?"); + DrawTextF(xstart3, ystart, font_text, "?.?.?"); +#endif + + DrawTextSCentered(ybottom, FONT_TEXT_4, + "Press any key or button for info menu"); + + FadeIn(REDRAW_FIELD); +} + +void HandleInfoScreen_Version(int button) +{ + if (button == MB_MENU_LEAVE) + { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2308,6 +2585,8 @@ void HandleInfoScreen_Program(int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSoundsAndMusic(); FadeOut(REDRAW_FIELD); @@ -2325,7 +2604,11 @@ void DrawInfoScreen_LevelSet() int ystart = 150; int ybottom = SYSIZE - 20; char *filename = getLevelSetInfoFilename(); +#if 1 + int font_nr = FONT_INFO_LEVELSET; +#else int font_nr = FONT_LEVEL_NUMBER; +#endif int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); int pad_x = 32; @@ -2349,7 +2632,7 @@ void DrawInfoScreen_LevelSet() if (filename != NULL) DrawTextFromFile(sx, sy, filename, font_nr, max_chars_per_line, - max_lines_per_screen); + max_lines_per_screen, TRUE); else DrawTextSCentered(ystart, FONT_TEXT_2, "No information for this level set."); @@ -2361,6 +2644,8 @@ void HandleInfoScreen_LevelSet(int button) { if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2368,6 +2653,8 @@ void HandleInfoScreen_LevelSet(int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSoundsAndMusic(); FadeOut(REDRAW_FIELD); @@ -2394,6 +2681,8 @@ static void DrawInfoScreenExt(int redraw_mask, boolean do_fading) DrawInfoScreen_Credits(); else if (info_mode == INFO_MODE_PROGRAM) DrawInfoScreen_Program(); + else if (info_mode == INFO_MODE_VERSION) + DrawInfoScreen_Version(); else if (info_mode == INFO_MODE_LEVELSET) DrawInfoScreen_LevelSet(); else @@ -2430,6 +2719,8 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button) HandleInfoScreen_Credits(button); else if (info_mode == INFO_MODE_PROGRAM) HandleInfoScreen_Program(button); + else if (info_mode == INFO_MODE_VERSION) + HandleInfoScreen_Version(button); else if (info_mode == INFO_MODE_LEVELSET) HandleInfoScreen_LevelSet(button); else @@ -2446,6 +2737,11 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button) void HandleTypeName(int newxpos, Key key) { struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME); +#if 1 + struct MenuPosInfo *pos = mci->pos_input; + int startx = mSX + ALIGNED_MENU_XPOS(pos); + int starty = mSY + ALIGNED_MENU_YPOS(pos); +#endif #if 1 static int xpos = 0; #else @@ -2455,8 +2751,10 @@ void HandleTypeName(int newxpos, Key key) int font_active_nr = FONT_ACTIVE(font_nr); int font_width = getFontWidth(font_active_nr); #if 1 +#if 0 int startx = mSX + mci->pos_input->x; int starty = mSY + mci->pos_input->y; +#endif #else int name_width = getFontWidth(FONT_MENU_1) * strlen("Name:"); int startx = mSX + 32 + name_width; @@ -2705,6 +3003,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + if (ti->node_parent) { *ti_ptr = ti->node_parent; @@ -2805,6 +3105,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, if (node_cursor->node_group) { + PlaySound(SND_MENU_ITEM_SELECTING); + node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; *ti_ptr = node_cursor->node_group; @@ -2815,6 +3117,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else if (dx == -1 && ti->node_parent) { + PlaySound(SND_MENU_ITEM_SELECTING); + *ti_ptr = ti->node_parent; DrawChooseTree(ti_ptr); @@ -2830,6 +3134,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, { if (y != ti->cl_cursor) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + drawChooseTreeCursor(ti->cl_cursor, FALSE); drawChooseTreeCursor(y, TRUE); drawChooseTreeInfo(ti->cl_first + y, ti); @@ -2842,6 +3148,8 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, TreeInfo *node_first, *node_cursor; int entry_pos = ti->cl_first + y; + PlaySound(SND_MENU_ITEM_SELECTING); + node_first = getTreeInfoFirstGroupEntry(ti); node_cursor = getTreeInfoFromPos(node_first, entry_pos); @@ -3015,6 +3323,8 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSound(SND_BACKGROUND_SCORES); game_status = GAME_MODE_MAIN; @@ -3023,6 +3333,8 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSound(SND_BACKGROUND_SCORES); FadeOut(REDRAW_FIELD); @@ -3255,6 +3567,7 @@ static struct TokenInfo setup_info_editor[] = { TYPE_SWITCH, &setup.editor.el_dx_boulderdash,"DX-Boulderdash:" }, #endif { TYPE_SWITCH, &setup.editor.el_chars, "Text Characters:" }, + { TYPE_SWITCH, &setup.editor.el_steel_chars, "Text Characters (Steel):" }, { TYPE_SWITCH, &setup.editor.el_custom, "Custom & Group Elements:" }, #if 0 { TYPE_SWITCH, &setup.editor.el_headlines, "Headlines:" }, @@ -3714,6 +4027,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + for (y = 0; y < num_setup_info; y++) { if (setup_info[y].type & TYPE_LEAVE_MENU) @@ -3759,6 +4074,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) { if (y != choice && setup_info[y].type & ~TYPE_SKIP_ENTRY) { + PlaySound(SND_MENU_ITEM_ACTIVATING); + #if 1 DrawCursorAndText_Setup(choice, FALSE); DrawCursorAndText_Setup(y, TRUE); @@ -3772,6 +4089,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) } else if (!(setup_info[y].type & TYPE_GHOSTED)) { + PlaySound(SND_MENU_ITEM_SELECTING); + /* when selecting key headline, execute function for key value change */ if (setup_info[y].type & TYPE_KEYTEXT && setup_info[y + 1].type & TYPE_KEY)