}
}
-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)
{
- int button_x = mSX + pos_button->x;
- int button_y = mSY + pos_button->y;
+ struct MenuPosInfo *pos = pos_button;
+ int x = mSX + pos->x;
+ int y = mSY + pos->y;
- DrawBackground(button_x,button_y, pos_button->width,pos_button->height);
- DrawGraphicThruMaskExt(drawto, button_x, button_y, button_graphic, 0);
+ DrawBackgroundForGraphic(x, y, pos->width, pos->height, button_graphic);
+ DrawGraphicThruMaskExt(drawto, x, y, button_graphic, 0);
}
if (pos_text != NULL && text != NULL)
{
- int text_x = mSX + ALIGNED_XPOS(pos_text->x, pos_text->width,
- pos_text->align);
- int text_y = mSY + pos_text->y;
+ struct MenuPosInfo *pos = pos_text;
+ int x = mSX + ALIGNED_XPOS(pos->x, pos->width, pos->align);
+ int y = mSY + pos->y;
- DrawBackground(text_x, text_y, pos_text->width, pos_text->height);
- DrawText(text_x, text_y, text, font_text);
+ DrawBackgroundForFont(x, y, pos->width, pos->height, font_text);
+ DrawText(x, y, text, font_text);
}
if (pos_input != NULL && input != NULL)
{
- int input_x = mSX + ALIGNED_XPOS(pos_input->x, pos_input->width,
- pos_input->align);
- int input_y = mSY + pos_input->y;
+ struct MenuPosInfo *pos = pos_input;
+ int x = mSX + ALIGNED_XPOS(pos->x, pos->width, pos->align);
+ int y = mSY + pos->y;
- DrawBackground(input_x, input_y, pos_input->width, pos_input->height);
- DrawText(input_x, input_y, input, font_input);
+ DrawBackgroundForFont(x, y, pos->width, pos->height, font_input);
+ DrawText(x, y, input, font_input);
}
}
}
}
+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;
if (active)
graphic = BUTTON_GRAPHIC_ACTIVE(graphic);
- DrawBackground(x, y, TILEX, TILEY);
+ DrawBackgroundForGraphic(x, y, TILEX, TILEY, graphic);
DrawGraphicThruMaskExt(drawto, x, y, graphic, 0);
}
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;
Bitmap *bitmap = graphic_info[graphic].bitmap;
+#if 1
+ int width = graphic_info[graphic].width;
+ int height = graphic_info[graphic].height;
+ int src_x = graphic_info[graphic].src_x;
+ int src_y = graphic_info[graphic].src_y;
+#else
int width = graphic_info[graphic].src_image_width;
int height = graphic_info[graphic].src_image_height;
int src_x = 0, src_y = 0;
+#endif
int dst_x, dst_y;
if (bitmap == NULL)
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.");
+ title.auto_delay_final = -1;
+
return;
}
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);
+
info_mode = INFO_MODE_MAIN;
- DrawInfoScreen();
+ DrawAndFadeInInfoScreen(REDRAW_FIELD);
return;
}
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;
void DrawInfoScreen_NotAvailable(char *text_title, char *text_error)
{
- int ystart = 150;
+ int ystart1 = 100;
+ int ystart2 = 150;
int ybottom = SYSIZE - 20;
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
+ FadeOut(REDRAW_FIELD);
+
ClearWindow();
DrawHeadline();
- DrawTextSCentered(100, FONT_TEXT_1, text_title);
+ DrawTextSCentered(ystart1, FONT_TEXT_1, text_title);
+ DrawTextSCentered(ystart2, FONT_TEXT_2, text_error);
DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for info menu");
- DrawTextSCentered(ystart, FONT_TEXT_2, text_error);
+ FadeIn(REDRAW_FIELD);
}
void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init)
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;
/* force LEVELS font on artwork setup screen */
game_status = GAME_MODE_LEVELS;
+#if 1
+ /* clear tree list area, but not title or scrollbar */
+ DrawBackground(mSX, mSY + MENU_SCREEN_START_YPOS * 32,
+ SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset,
+ NUM_MENU_ENTRIES_ON_SCREEN * 32);
+#else
/* clear tree list area, but not title or scrollbar */
DrawBackground(mSX, mSY + MENU_SCREEN_START_YPOS * 32,
SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset,
MAX_MENU_ENTRIES_ON_SCREEN * 32);
+#endif
for (i = 0; i < num_page_entries; i++)
{
TreeInfo *node, *node_first;
int x, last_redraw_mask = redraw_mask;
int ypos = MENU_TITLE2_YPOS;
+ int font_nr = FONT_TITLE_2;
if (ti->type != TREE_TYPE_LEVEL_DIR)
return;
node_first = getTreeInfoFirstGroupEntry(ti);
node = getTreeInfoFromPos(node_first, entry_pos);
- DrawBackground(SX, SY + ypos, SXSIZE, getFontHeight(FONT_TITLE_2));
+ DrawBackgroundForFont(SX, SY + ypos, SXSIZE, getFontHeight(font_nr), font_nr);
if (node->parent_link)
- DrawTextFCentered(ypos, FONT_TITLE_2, "leave group \"%s\"",
+ DrawTextFCentered(ypos, font_nr, "leave group \"%s\"",
node->class_desc);
else if (node->level_group)
- DrawTextFCentered(ypos, FONT_TITLE_2, "enter group \"%s\"",
+ DrawTextFCentered(ypos, font_nr, "enter group \"%s\"",
node->class_desc);
else if (ti->type == TREE_TYPE_LEVEL_DIR)
- DrawTextFCentered(ypos, FONT_TITLE_2, "%3d levels (%s)",
+ DrawTextFCentered(ypos, font_nr, "%3d levels (%s)",
node->levels, node->class_desc);
/* let BackToFront() redraw only what is needed */
}
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)