static char main_text_last_level[10];
static char main_input_name[MAX_PLAYER_NAME_LEN + 1];
-static struct
+struct MainControlInfo
{
int nr;
struct MenuPosInfo *pos_input;
char *input;
int font_input;
-}
-main_controls[] =
+};
+
+static struct MainControlInfo main_controls[] =
{
{
MAIN_CONTROL_NAME,
NULL, NULL, -1,
},
#if 0
+ /* (these two buttons are real gadgets) */
{
MAIN_CONTROL_PREV_LEVEL,
&menu.main.button.prev_level, IMG_MENU_BUTTON_PREV_LEVEL,
/* set main control screen positions to dynamically determined values */
for (i = 0; main_controls[i].nr != -1; i++)
{
- int nr = main_controls[i].nr;
- struct MenuPosInfo *pos_button = main_controls[i].pos_button;
- struct MenuPosInfo *pos_text = main_controls[i].pos_text;
- struct MenuPosInfo *pos_input = main_controls[i].pos_input;
- char *text = main_controls[i].text;
- char *input = main_controls[i].input;
- int button_graphic = main_controls[i].button_graphic;
- int font_text = main_controls[i].font_text;
- int font_input = main_controls[i].font_input;
+ struct MainControlInfo *mci = &main_controls[i];
+ int nr = mci->nr;
+ struct MenuPosInfo *pos_button = mci->pos_button;
+ struct MenuPosInfo *pos_text = mci->pos_text;
+ struct MenuPosInfo *pos_input = mci->pos_input;
+ char *text = mci->text;
+ char *input = mci->input;
+ int button_graphic = mci->button_graphic;
+ int font_text = mci->font_text;
+ int font_input = mci->font_input;
int font_text_width = (font_text != -1 ? getFontWidth(font_text) : 0);
int font_text_height = (font_text != -1 ? getFontHeight(font_text) : 0);
}
}
-static void DrawCursorAndText_Main(int pos, boolean active)
+static void DrawCursorAndText_Main(int nr, boolean active)
{
int i;
for (i = 0; main_controls[i].nr != -1; i++)
{
- if (main_controls[i].nr == pos || pos == -1)
+ struct MainControlInfo *mci = &main_controls[i];
+
+ if (mci->nr == nr || nr == -1)
{
- struct MenuPosInfo *pos_button = main_controls[i].pos_button;
- struct MenuPosInfo *pos_text = main_controls[i].pos_text;
- struct MenuPosInfo *pos_input = main_controls[i].pos_input;
- char *text = main_controls[i].text;
- char *input = main_controls[i].input;
- int button_graphic = main_controls[i].button_graphic;
- int font_text = main_controls[i].font_text;
- int font_input = main_controls[i].font_input;
+ struct MenuPosInfo *pos_button = mci->pos_button;
+ struct MenuPosInfo *pos_text = mci->pos_text;
+ struct MenuPosInfo *pos_input = mci->pos_input;
+ char *text = mci->text;
+ char *input = mci->input;
+ int button_graphic = mci->button_graphic;
+ int font_text = mci->font_text;
+ int font_input = mci->font_input;
if (active)
{
}
}
+static struct MainControlInfo *getMainControlInfo(int nr)
+{
+ int i;
+
+ for (i = 0; main_controls[i].nr != -1; i++)
+ if (main_controls[i].nr == nr)
+ return &main_controls[i];
+
+ return NULL;
+}
+
static boolean insideMenuPosRect(struct MenuPosInfo *rect, int x, int y)
{
if (rect == NULL)
BlitBitmap(bitmap, drawto, src_x, src_y, width, height, dst_x, dst_y);
redraw_mask = REDRAW_ALL;
+
+ /* reset fading control values to default config settings */
+ title.fade_delay_final = title.fade_delay;
+ title.post_delay_final = title.post_delay;
+ title.auto_delay_final = title.auto_delay;
+
+ /* override default settings with image config settings, if defined */
+ if (graphic_info[graphic].fade_delay > -1)
+ title.fade_delay_final = graphic_info[graphic].fade_delay;
+ if (graphic_info[graphic].post_delay > -1)
+ title.post_delay_final = graphic_info[graphic].post_delay;
+ if (graphic_info[graphic].auto_delay > -1)
+ title.auto_delay_final = graphic_info[graphic].auto_delay;
}
void DrawTitleScreen()
boolean return_to_main_menu = FALSE;
boolean use_fading_main_menu = TRUE;
boolean use_cross_fading = !show_titlescreen_initial; /* default */
- int auto_delay = menu.auto_delay;
if (button == MB_MENU_INITIALIZE)
{
title_delay = 0;
title_nr = 0;
+ if (show_titlescreen_initial &&
+ graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap == NULL)
+ show_titlescreen_initial = FALSE;
+
if (game_status == GAME_MODE_INFO)
{
if (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL)
return;
}
- int anim_delay = graphic_info[getTitleScreenGraphic() + title_nr].anim_delay;
- if (anim_delay > 1)
- auto_delay = anim_delay;
-
- if (auto_delay > 0 && DelayReached(&title_delay, auto_delay))
+ if (title.auto_delay_final > -1 &&
+ DelayReached(&title_delay, title.auto_delay_final))
button = MB_MENU_CHOICE;
if (button == MB_MENU_LEAVE)
}
else if (button == MB_MENU_CHOICE)
{
+ int anim_mode;
+
if (game_status == GAME_MODE_INFO &&
graphic_info[IMG_TITLESCREEN_1].bitmap == NULL)
{
title_nr = 0; /* restart with title screens for current level set */
}
- int anim_mode = graphic_info[getTitleScreenGraphic() + title_nr].anim_mode;
+ anim_mode = graphic_info[getTitleScreenGraphic() + title_nr].anim_mode;
use_cross_fading = (anim_mode == ANIM_FADE ? FALSE :
anim_mode == ANIM_CROSSFADE ? TRUE :
if (return_to_main_menu)
{
+ show_titlescreen_initial = FALSE;
+
RedrawBackground();
if (game_status == GAME_MODE_INFO)
if (new_level_nr != old_level_nr)
{
+ struct MainControlInfo *mci= getMainControlInfo(MAIN_CONTROL_CURRENT_LEVEL);
+
level_nr = new_level_nr;
+#if 1
+ DrawText(mSX + mci->pos_text->x, mSY + mci->pos_text->y,
+ int2str(level_nr, 3), mci->font_text);
+#else
DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1);
+#endif
LoadLevel(level_nr);
DrawPreviewLevel(TRUE);
static int num_pages;
static int page;
int anims_per_page = MAX_INFO_ELEMENTS_ON_SCREEN;
- int button_released = !button;
int i;
if (button == MB_MENU_INITIALIZE)
boolean new_element = TRUE;
num_anims = 0;
+
for (i = 0; helpanim_info[i].element != HELPANIM_LIST_END; i++)
{
if (helpanim_info[i].element == HELPANIM_LIST_NEXT)
num_pages = (num_anims + anims_per_page - 1) / anims_per_page;
page = 0;
}
- else if (button == MB_MENU_LEAVE)
+
+ if (button == MB_MENU_LEAVE)
{
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
return;
}
-
- if (button_released || button == MB_MENU_INITIALIZE)
+ else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE)
{
if (button != MB_MENU_INITIALIZE)
page++;
static struct MusicFileInfo *list = NULL;
int ystart = 150, dy = 30;
int ybottom = SYSIZE - 20;
- int button_released = !button;
if (button == MB_MENU_INITIALIZE)
{
return;
}
}
- else if (button == MB_MENU_LEAVE)
+
+ if (button == MB_MENU_LEAVE)
{
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
return;
}
-
- if (button_released || button == MB_MENU_INITIALIZE)
+ else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE)
{
int y = 0;
void HandleInfoScreen_Program(int button)
{
- int button_released = !button;
-
if (button == MB_MENU_LEAVE)
{
info_mode = INFO_MODE_MAIN;
return;
}
-
- if (button_released)
+ else if (button == MB_MENU_CHOICE)
{
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
void HandleInfoScreen_LevelSet(int button)
{
- int button_released = !button;
-
if (button == MB_MENU_LEAVE)
{
info_mode = INFO_MODE_MAIN;
return;
}
-
- if (button_released)
+ else if (button == MB_MENU_CHOICE)
{
FadeSoundsAndMusic();
FadeOut(REDRAW_FIELD);
void HandleTypeName(int newxpos, Key key)
{
+ struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME);
+#if 1
+ static int xpos = 0;
+#else
static int xpos = 0, ypos = 2;
- int font_width = getFontWidth(FONT_INPUT_1_ACTIVE);
+#endif
+ int font_nr = mci->font_input;
+ 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;
+#else
int name_width = getFontWidth(FONT_MENU_1) * strlen("Name:");
int startx = mSX + 32 + name_width;
int starty = mSY + ypos * 32;
+#endif
if (newxpos)
{
xpos = newxpos;
- DrawText(startx, starty, setup.player_name, FONT_INPUT_1_ACTIVE);
- DrawText(startx + xpos * font_width, starty, "_", FONT_INPUT_1_ACTIVE);
+ DrawText(startx, starty, setup.player_name, font_active_nr);
+ DrawText(startx + xpos * font_width, starty, "_", font_active_nr);
return;
}
setup.player_name[xpos] = ascii;
setup.player_name[xpos + 1] = 0;
+
xpos++;
- DrawText(startx, starty, setup.player_name, FONT_INPUT_1_ACTIVE);
- DrawText(startx + xpos * font_width, starty, "_", FONT_INPUT_1_ACTIVE);
+ DrawText(startx, starty, setup.player_name, font_active_nr);
+ DrawText(startx + xpos * font_width, starty, "_", font_active_nr);
}
else if ((key == KSYM_Delete || key == KSYM_BackSpace) && xpos > 0)
{
xpos--;
+
setup.player_name[xpos] = 0;
- DrawText(startx + xpos * font_width, starty, "_ ", FONT_INPUT_1_ACTIVE);
+ DrawText(startx + xpos * font_width, starty, "_ ", font_active_nr);
}
else if (key == KSYM_Return && xpos > 0)
{
- DrawText(startx, starty, setup.player_name, FONT_INPUT_1);
- DrawText(startx + xpos * font_width, starty, " ", FONT_INPUT_1_ACTIVE);
+ DrawText(startx, starty, setup.player_name, font_nr);
+ DrawText(startx + xpos * font_width, starty, " ", font_active_nr);
SaveSetup();
+
game_status = GAME_MODE_MAIN;
}
}
{
UnmapAllGadgets();
FadeSoundsAndMusic();
+
+ /* (this is needed when called from GameEnd() after winning a game) */
+ KeyboardAutoRepeatOn();
+ ActivateJoystick();
+
+ /* (this is needed when called from GameEnd() after winning a game) */
+ SetDrawDeactivationMask(REDRAW_NONE);
+ SetDrawBackgroundMask(REDRAW_FIELD);
+
CloseDoor(DOOR_CLOSE_2);
if (highlight_position < 0)