From: Holger Schemel Date: Wed, 6 Dec 2006 00:17:03 +0000 (+0100) Subject: rnd-20061206-1-src X-Git-Tag: 3.2.3^2~5 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=4d4b9cf009d4aefe9e167ac6b838c468513684ab rnd-20061206-1-src * added feedback sounds for menu navigation "menu.item.activating" and "menu.item.selecting" (for highlighting and executing menu entries) --- diff --git a/ChangeLog b/ChangeLog index 6d84463c..7fb353ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,13 @@ +2006-12-05 + * added feedback sounds for menu navigation "menu.item.activating" and + "menu.item.selecting" (for highlighting and executing menu entries) + 2006-12-03 * improved "no scrolling when relocating" to also consider scroll delay (meaning that the player is not automatically centered in this case; this makes it possible to "invisibly" relocate the player to a region of the level playfield which looks the same as the old level region) + * fixed bug with not recognizing "main.input.name.align" when active 2006-12-02 * fixed bug with displaying masked borders over title screens when diff --git a/src/conf_snd.c b/src/conf_snd.c index 1c3ce29a..c18925af 100644 --- a/src/conf_snd.c +++ b/src/conf_snd.c @@ -240,6 +240,10 @@ struct ConfigInfo sound_config[] = { "door.opening", "oeffnen.wav" }, { "door.closing", "oeffnen.wav" }, + /* sounds for menu actions */ + { "menu.item.activating", "empty.wav" }, + { "menu.item.selecting", "base.wav" }, + { "background.TITLE", UNDEFINED_FILENAME }, { "background.MAIN", UNDEFINED_FILENAME }, { "background.LEVELS", UNDEFINED_FILENAME }, diff --git a/src/conf_snd.h b/src/conf_snd.h index 3c2fa46d..015e3eba 100644 --- a/src/conf_snd.h +++ b/src/conf_snd.h @@ -200,14 +200,16 @@ #define SND_GAME_SOKOBAN_SOLVING 179 #define SND_DOOR_OPENING 180 #define SND_DOOR_CLOSING 181 -#define SND_BACKGROUND_TITLE 182 -#define SND_BACKGROUND_MAIN 183 -#define SND_BACKGROUND_LEVELS 184 -#define SND_BACKGROUND_SCORES 185 -#define SND_BACKGROUND_EDITOR 186 -#define SND_BACKGROUND_INFO 187 -#define SND_BACKGROUND_SETUP 188 +#define SND_MENU_ITEM_ACTIVATING 182 +#define SND_MENU_ITEM_SELECTING 183 +#define SND_BACKGROUND_TITLE 184 +#define SND_BACKGROUND_MAIN 185 +#define SND_BACKGROUND_LEVELS 186 +#define SND_BACKGROUND_SCORES 187 +#define SND_BACKGROUND_EDITOR 188 +#define SND_BACKGROUND_INFO 189 +#define SND_BACKGROUND_SETUP 190 -#define NUM_SOUND_FILES 189 +#define NUM_SOUND_FILES 191 #endif /* CONF_SND_H */ diff --git a/src/conftime.h b/src/conftime.h index 0a5d014f..8c7013bb 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2006-12-03 12:49]" +#define COMPILE_DATE_STRING "[2006-12-06 01:13]" diff --git a/src/init.c b/src/init.c index 2ebf076c..8da4aaf2 100644 --- a/src/init.c +++ b/src/init.c @@ -104,6 +104,8 @@ void InitGadgets() CreateToolButtons(); CreateScreenGadgets(); + InitGadgetsSoundCallback(PlaySoundActivating, PlaySoundSelecting); + gadgets_initialized = TRUE; } diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index 7c140cbe..afe4c810 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -32,6 +32,17 @@ static struct GadgetInfo *last_info_gi = NULL; static int next_free_gadget_id = 1; static boolean gadget_id_wrapped = FALSE; +static void (*PlayGadgetSoundActivating)(void) = NULL; +static void (*PlayGadgetSoundSelecting)(void) = NULL; + + +void InitGadgetsSoundCallback(void (*activating_function)(void), + void (*selecting_function)(void)) +{ + PlayGadgetSoundActivating = activating_function; + PlayGadgetSoundSelecting = selecting_function; +} + static struct GadgetInfo *getGadgetInfoFromGadgetID(int id) { struct GadgetInfo *gi = gadget_list_first_entry; @@ -1783,6 +1794,8 @@ boolean HandleGadgets(int mx, int my, int button) if (gadget_pressed) { + PlayGadgetSoundActivating(); + if (gi->type == GD_TYPE_CHECK_BUTTON) { gi->checked = !gi->checked; diff --git a/src/libgame/gadgets.h b/src/libgame/gadgets.h index 7f352a87..8c8d6c35 100644 --- a/src/libgame/gadgets.h +++ b/src/libgame/gadgets.h @@ -251,6 +251,10 @@ struct GadgetInfo struct GadgetInfo *next; /* next list entry */ }; + +void InitGadgetsSoundCallback(void (*activating_function)(void), + void (*selecting_function)(void)); + struct GadgetInfo *CreateGadget(int, ...); void FreeGadget(struct GadgetInfo *); diff --git a/src/libgame/toons.c b/src/libgame/toons.c index 17fe7c3c..bbbd8833 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -336,7 +336,7 @@ void HandleAnimation(int mode) case ANIM_STOP: if (anim_running) { -#if 0 +#if 1 int draw_mode; redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER); diff --git a/src/screens.c b/src/screens.c index 00a6d19c..a1061589 100644 --- a/src/screens.c +++ b/src/screens.c @@ -461,7 +461,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 +481,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; @@ -519,6 +525,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; @@ -1099,6 +1117,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 @@ -1171,6 +1191,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); @@ -1179,6 +1201,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; @@ -1579,6 +1603,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); @@ -1592,6 +1618,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; @@ -1842,6 +1870,8 @@ void HandleInfoScreen_Elements(int button) if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -1850,7 +1880,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) { @@ -1925,6 +1959,10 @@ void HandleInfoScreen_Music(int button) if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + + FadeSoundsAndMusic(); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -1935,8 +1973,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) { @@ -2224,6 +2266,8 @@ void HandleInfoScreen_Credits(int button) } else if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2233,6 +2277,8 @@ void HandleInfoScreen_Credits(int button) { boolean show_screen; + PlaySound(SND_MENU_ITEM_SELECTING); + screen_nr++; FadeCrossSaveBackbuffer(); @@ -2309,6 +2355,8 @@ void HandleInfoScreen_Program(int button) { if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2316,6 +2364,8 @@ void HandleInfoScreen_Program(int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSoundsAndMusic(); FadeOut(REDRAW_FIELD); @@ -2369,6 +2419,8 @@ void HandleInfoScreen_LevelSet(int button) { if (button == MB_MENU_LEAVE) { + PlaySound(SND_MENU_ITEM_SELECTING); + info_mode = INFO_MODE_MAIN; DrawInfoScreen(); @@ -2376,6 +2428,8 @@ void HandleInfoScreen_LevelSet(int button) } else if (button == MB_MENU_CHOICE) { + PlaySound(SND_MENU_ITEM_SELECTING); + FadeSoundsAndMusic(); FadeOut(REDRAW_FIELD); @@ -2454,6 +2508,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_XPOS(pos->x, pos->width, pos->align); + int starty = mSY + pos->y; +#endif #if 1 static int xpos = 0; #else @@ -2463,8 +2522,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; @@ -2713,6 +2774,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; @@ -2813,6 +2876,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; @@ -2823,6 +2888,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); @@ -2838,6 +2905,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); @@ -2850,6 +2919,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); @@ -3023,6 +3094,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; @@ -3031,6 +3104,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); @@ -3722,6 +3797,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) @@ -3767,6 +3844,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); @@ -3780,6 +3859,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) diff --git a/src/tools.c b/src/tools.c index 45238146..a10f0dd2 100644 --- a/src/tools.c +++ b/src/tools.c @@ -6186,9 +6186,22 @@ void PlayMenuMusic() if (music == MUS_UNDEFINED) return; + if (!setup.sound_music) + return; + PlayMusic(music); } +void PlaySoundActivating() +{ + PlaySound(SND_MENU_ITEM_ACTIVATING); +} + +void PlaySoundSelecting() +{ + PlaySound(SND_MENU_ITEM_SELECTING); +} + void ToggleFullscreenIfNeeded() { boolean change_fullscreen = (setup.fullscreen != diff --git a/src/tools.h b/src/tools.h index 1aab5d32..12d49c99 100644 --- a/src/tools.h +++ b/src/tools.h @@ -178,6 +178,8 @@ void PlayMenuSound(); void PlayMenuSoundStereo(int, int); void PlayMenuSoundIfLoop(); void PlayMenuMusic(); +void PlaySoundActivating(); +void PlaySoundSelecting(); void ToggleFullscreenIfNeeded();