}
}
-static void DrawCursorAndText_Main(int nr, boolean active)
+static void DrawCursorAndText_Main_Ext(int nr, boolean active_text,
+ boolean active_input)
{
int i;
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;
}
}
+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;
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;
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();
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)))
{
{
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)
{
title_delay = 0;
title_nr = 0;
+ showing_message = FALSE;
if (show_titlescreen_initial &&
graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap == NULL)
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.");
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);
{
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);
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();
{
struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL);
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
level_nr = new_level_nr;
#if 1
{
if (pos != choice)
{
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+
DrawCursorAndText_Main(choice, FALSE);
DrawCursorAndText_Main(pos, TRUE);
}
else
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (pos == MAIN_CONTROL_NAME)
{
game_status = GAME_MODE_PSEUDO_TYPENAME;
{
if (y != choice)
{
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+
#if 1
DrawCursorAndText_Info(choice, FALSE);
DrawCursorAndText_Info(y, TRUE);
}
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 (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
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)
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
+ FadeSoundsAndMusic();
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
int y = 0;
if (button != MB_MENU_INITIALIZE)
+ {
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (list != NULL)
list = list->next;
+ }
if (list == NULL)
{
}
else if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
{
boolean show_screen;
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
screen_nr++;
FadeCrossSaveBackbuffer();
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
}
else if (button == MB_MENU_CHOICE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
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.");
{
if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
}
else if (button == MB_MENU_CHOICE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
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
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;
}
else if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
if (ti->node_parent)
{
*ti_ptr = ti->node_parent;
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;
}
else if (dx == -1 && ti->node_parent)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
*ti_ptr = ti->node_parent;
DrawChooseTree(ti_ptr);
{
if (y != ti->cl_cursor)
{
+ PlaySound(SND_MENU_ITEM_ACTIVATING);
+
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;
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
node_first = getTreeInfoFirstGroupEntry(ti);
node_cursor = getTreeInfoFromPos(node_first, entry_pos);
}
else if (button == MB_MENU_LEAVE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSound(SND_BACKGROUND_SCORES);
game_status = GAME_MODE_MAIN;
}
else if (button == MB_MENU_CHOICE)
{
+ PlaySound(SND_MENU_ITEM_SELECTING);
+
FadeSound(SND_BACKGROUND_SCORES);
FadeOut(REDRAW_FIELD);
{ 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:" },
}
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)
{
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);
}
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)