rnd-20061206-1-src
authorHolger Schemel <info@artsoft.org>
Wed, 6 Dec 2006 00:17:03 +0000 (01:17 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:53:52 +0000 (10:53 +0200)
* added feedback sounds for menu navigation "menu.item.activating" and
  "menu.item.selecting" (for highlighting and executing menu entries)

ChangeLog
src/conf_snd.c
src/conf_snd.h
src/conftime.h
src/init.c
src/libgame/gadgets.c
src/libgame/gadgets.h
src/libgame/toons.c
src/screens.c
src/tools.c
src/tools.h

index 6d84463cbbf8e8984f1c559144cf6e40f55718c6..7fb353ec9789e5389aee227edd5af7654d8950b9 100644 (file)
--- 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
index 1c3ce29a083677a45da67addc203c8ed9825072c..c18925af126be3d614e11fec29757542a4adcbef 100644 (file)
@@ -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              },
index 3c2fa46db458b93d6c841fed5fbdae73b1dfcffe..015e3ebab192bdbec967f727aad6568ab07ae6ec 100644 (file)
 #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 */
index 0a5d014f7dd9e9508293b722b222dd30ce2f4e75..8c7013bb719f22185b966874c5fafeb70dfdcabd 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2006-12-03 12:49]"
+#define COMPILE_DATE_STRING "[2006-12-06 01:13]"
index 2ebf076c47e8402ed417236cb36957563fe70735..8da4aaf2298c3712369084d5f6c529aff8dede30 100644 (file)
@@ -104,6 +104,8 @@ void InitGadgets()
   CreateToolButtons();
   CreateScreenGadgets();
 
+  InitGadgetsSoundCallback(PlaySoundActivating, PlaySoundSelecting);
+
   gadgets_initialized = TRUE;
 }
 
index 7c140cbedffbaf8d7cb742cd6cc5f3e741327b7c..afe4c81026630cef7c9a22a57e6bd69f60783958 100644 (file)
@@ -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;
index 7f352a87b5d49b61d4fe8817aaeb8dd864dea6f3..8c8d6c353bfd9b70a24a7792e9e8d11f9c394417 100644 (file)
@@ -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 *);
 
index 17fe7c3c4f116cd4db3cdf9dbd061f280048725c..bbbd88333e7fc106abb68146b8efd0d7306177f9 100644 (file)
@@ -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);
index 00a6d19c0654ee0f42e91370c17108e3939d7852..a10615890ecf57ede3ee3068ad614a229e34d5fb 100644 (file)
@@ -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)
index 452381468b245d31f9141847ea7e56b544f60677..a10f0dd247ef6ae1ad3f9c5415a0e2e4bd3d3888 100644 (file)
@@ -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 !=
index 1aab5d3244ae971678b1c35b0ee3fee3b5866d65..12d49c994834a7664ca0a50c74c36de5f46773f1 100644 (file)
@@ -178,6 +178,8 @@ void PlayMenuSound();
 void PlayMenuSoundStereo(int, int);
 void PlayMenuSoundIfLoop();
 void PlayMenuMusic();
+void PlaySoundActivating();
+void PlaySoundSelecting();
 
 void ToggleFullscreenIfNeeded();