summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0c64a3c)
* added feedback sounds for menu navigation "menu.item.activating" and
"menu.item.selecting" (for highlighting and executing menu entries)
+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)
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
2006-12-02
* fixed bug with displaying masked borders over title screens when
{ "door.opening", "oeffnen.wav" },
{ "door.closing", "oeffnen.wav" },
{ "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 },
{ "background.TITLE", UNDEFINED_FILENAME },
{ "background.MAIN", UNDEFINED_FILENAME },
{ "background.LEVELS", UNDEFINED_FILENAME },
#define SND_GAME_SOKOBAN_SOLVING 179
#define SND_DOOR_OPENING 180
#define SND_DOOR_CLOSING 181
#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
-#define COMPILE_DATE_STRING "[2006-12-03 12:49]"
+#define COMPILE_DATE_STRING "[2006-12-06 01:13]"
CreateToolButtons();
CreateScreenGadgets();
CreateToolButtons();
CreateScreenGadgets();
+ InitGadgetsSoundCallback(PlaySoundActivating, PlaySoundSelecting);
+
gadgets_initialized = TRUE;
}
gadgets_initialized = TRUE;
}
static int next_free_gadget_id = 1;
static boolean gadget_id_wrapped = FALSE;
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;
static struct GadgetInfo *getGadgetInfoFromGadgetID(int id)
{
struct GadgetInfo *gi = gadget_list_first_entry;
+ PlayGadgetSoundActivating();
+
if (gi->type == GD_TYPE_CHECK_BUTTON)
{
gi->checked = !gi->checked;
if (gi->type == GD_TYPE_CHECK_BUTTON)
{
gi->checked = !gi->checked;
struct GadgetInfo *next; /* next list entry */
};
struct GadgetInfo *next; /* next list entry */
};
+
+void InitGadgetsSoundCallback(void (*activating_function)(void),
+ void (*selecting_function)(void));
+
struct GadgetInfo *CreateGadget(int, ...);
void FreeGadget(struct GadgetInfo *);
struct GadgetInfo *CreateGadget(int, ...);
void FreeGadget(struct GadgetInfo *);
case ANIM_STOP:
if (anim_running)
{
case ANIM_STOP:
if (anim_running)
{
int draw_mode;
redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER);
int draw_mode;
redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER);
-static void DrawCursorAndText_Main(int nr, boolean active)
+static void DrawCursorAndText_Main_Ext(int nr, boolean active_text,
+ boolean active_input)
int font_text = mci->font_text;
int font_input = mci->font_input;
int font_text = mci->font_text;
int font_input = mci->font_input;
{
button_graphic = BUTTON_GRAPHIC_ACTIVE(button_graphic);
font_text = FONT_ACTIVE(font_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;
if (pos_button != NULL)
{
struct MenuPosInfo *pos = pos_button;
+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;
static struct MainControlInfo *getMainControlInfo(int nr)
{
int i;
{
struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL);
{
struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL);
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
level_nr = new_level_nr;
#if 1
level_nr = new_level_nr;
#if 1
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+
DrawCursorAndText_Main(choice, FALSE);
DrawCursorAndText_Main(pos, TRUE);
DrawCursorAndText_Main(choice, FALSE);
DrawCursorAndText_Main(pos, TRUE);
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (pos == MAIN_CONTROL_NAME)
{
game_status = GAME_MODE_PSEUDO_TYPENAME;
if (pos == MAIN_CONTROL_NAME)
{
game_status = GAME_MODE_PSEUDO_TYPENAME;
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+
#if 1
DrawCursorAndText_Info(choice, FALSE);
DrawCursorAndText_Info(y, TRUE);
#if 1
DrawCursorAndText_Info(choice, FALSE);
DrawCursorAndText_Info(y, TRUE);
}
else if (!(info_info[y].type & TYPE_GHOSTED))
{
}
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;
if (info_info[y].type & TYPE_ENTER_OR_LEAVE)
{
void (*menu_callback_function)(void) = info_info[choice].value;
if (button == MB_MENU_LEAVE)
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE)
{
if (button != MB_MENU_INITIALIZE)
else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE)
{
if (button != MB_MENU_INITIALIZE)
+ {
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (button == MB_MENU_LEAVE)
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
+ FadeSoundsAndMusic();
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
int y = 0;
if (button != MB_MENU_INITIALIZE)
int y = 0;
if (button != MB_MENU_INITIALIZE)
+ {
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (list != NULL)
list = list->next;
if (list != NULL)
list = list->next;
}
else if (button == MB_MENU_LEAVE)
{
}
else if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
screen_nr++;
FadeCrossSaveBackbuffer();
screen_nr++;
FadeCrossSaveBackbuffer();
{
if (button == MB_MENU_LEAVE)
{
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
}
else if (button == MB_MENU_CHOICE)
{
}
else if (button == MB_MENU_CHOICE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
{
if (button == MB_MENU_LEAVE)
{
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
}
else if (button == MB_MENU_CHOICE)
{
}
else if (button == MB_MENU_CHOICE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
void HandleTypeName(int newxpos, Key key)
{
struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME);
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
#if 1
static int xpos = 0;
#else
int font_active_nr = FONT_ACTIVE(font_nr);
int font_width = getFontWidth(font_active_nr);
#if 1
int font_active_nr = FONT_ACTIVE(font_nr);
int font_width = getFontWidth(font_active_nr);
#if 1
int startx = mSX + mci->pos_input->x;
int starty = mSY + mci->pos_input->y;
int startx = mSX + mci->pos_input->x;
int starty = mSY + mci->pos_input->y;
#else
int name_width = getFontWidth(FONT_MENU_1) * strlen("Name:");
int startx = mSX + 32 + name_width;
#else
int name_width = getFontWidth(FONT_MENU_1) * strlen("Name:");
int startx = mSX + 32 + name_width;
}
else if (button == MB_MENU_LEAVE)
{
}
else if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (ti->node_parent)
{
*ti_ptr = ti->node_parent;
if (ti->node_parent)
{
*ti_ptr = ti->node_parent;
if (node_cursor->node_group)
{
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;
node_cursor->cl_first = ti->cl_first;
node_cursor->cl_cursor = ti->cl_cursor;
*ti_ptr = node_cursor->node_group;
}
else if (dx == -1 && ti->node_parent)
{
}
else if (dx == -1 && ti->node_parent)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
*ti_ptr = ti->node_parent;
DrawChooseTree(ti_ptr);
*ti_ptr = ti->node_parent;
DrawChooseTree(ti_ptr);
{
if (y != ti->cl_cursor)
{
{
if (y != ti->cl_cursor)
{
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+
drawChooseTreeCursor(ti->cl_cursor, FALSE);
drawChooseTreeCursor(y, TRUE);
drawChooseTreeInfo(ti->cl_first + y, ti);
drawChooseTreeCursor(ti->cl_cursor, FALSE);
drawChooseTreeCursor(y, TRUE);
drawChooseTreeInfo(ti->cl_first + y, ti);
TreeInfo *node_first, *node_cursor;
int entry_pos = ti->cl_first + y;
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);
node_first = getTreeInfoFirstGroupEntry(ti);
node_cursor = getTreeInfoFromPos(node_first, entry_pos);
}
else if (button == MB_MENU_LEAVE)
{
}
else if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSound(SND_BACKGROUND_SCORES);
game_status = GAME_MODE_MAIN;
FadeSound(SND_BACKGROUND_SCORES);
game_status = GAME_MODE_MAIN;
}
else if (button == MB_MENU_CHOICE)
{
}
else if (button == MB_MENU_CHOICE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSound(SND_BACKGROUND_SCORES);
FadeOut(REDRAW_FIELD);
FadeSound(SND_BACKGROUND_SCORES);
FadeOut(REDRAW_FIELD);
}
else if (button == MB_MENU_LEAVE)
{
}
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)
for (y = 0; y < num_setup_info; y++)
{
if (setup_info[y].type & TYPE_LEAVE_MENU)
{
if (y != choice && setup_info[y].type & ~TYPE_SKIP_ENTRY)
{
{
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);
#if 1
DrawCursorAndText_Setup(choice, FALSE);
DrawCursorAndText_Setup(y, TRUE);
}
else if (!(setup_info[y].type & TYPE_GHOSTED))
{
}
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)
/* when selecting key headline, execute function for key value change */
if (setup_info[y].type & TYPE_KEYTEXT &&
setup_info[y + 1].type & TYPE_KEY)
if (music == MUS_UNDEFINED)
return;
if (music == MUS_UNDEFINED)
return;
+ if (!setup.sound_music)
+ return;
+
+void PlaySoundActivating()
+{
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+}
+
+void PlaySoundSelecting()
+{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+}
+
void ToggleFullscreenIfNeeded()
{
boolean change_fullscreen = (setup.fullscreen !=
void ToggleFullscreenIfNeeded()
{
boolean change_fullscreen = (setup.fullscreen !=
void PlayMenuSoundStereo(int, int);
void PlayMenuSoundIfLoop();
void PlayMenuMusic();
void PlayMenuSoundStereo(int, int);
void PlayMenuSoundIfLoop();
void PlayMenuMusic();
+void PlaySoundActivating();
+void PlaySoundSelecting();
void ToggleFullscreenIfNeeded();
void ToggleFullscreenIfNeeded();