#define SETUP_MODE_SHORTCUT_2 6
#define SETUP_MODE_GRAPHICS 7
#define SETUP_MODE_CHOOSE_SCREEN_MODE 8
-#define SETUP_MODE_SOUND 9
-#define SETUP_MODE_ARTWORK 10
-#define SETUP_MODE_CHOOSE_GRAPHICS 11
-#define SETUP_MODE_CHOOSE_SOUNDS 12
-#define SETUP_MODE_CHOOSE_MUSIC 13
+#define SETUP_MODE_CHOOSE_SCROLL_DELAY 9
+#define SETUP_MODE_SOUND 10
+#define SETUP_MODE_ARTWORK 11
+#define SETUP_MODE_CHOOSE_GRAPHICS 12
+#define SETUP_MODE_CHOOSE_SOUNDS 13
+#define SETUP_MODE_CHOOSE_MUSIC 14
-#define MAX_SETUP_MODES 14
+#define MAX_SETUP_MODES 15
/* for input setup functions */
#define SETUPINPUT_SCREEN_POS_START 0
static TreeInfo *screen_modes = NULL;
static TreeInfo *screen_mode_current = NULL;
+static TreeInfo *scroll_delays = NULL;
+static TreeInfo *scroll_delay_current = NULL;
+
static TreeInfo *game_speeds = NULL;
static TreeInfo *game_speed_current = NULL;
{ -1, NULL },
};
+static struct
+{
+ int value;
+ char *text;
+} scroll_delays_list[] =
+{
+ { 0, "0 Tiles (No Scroll Delay)" },
+ { 1, "1 Tile" },
+ { 2, "2 Tiles" },
+ { 3, "3 Tiles (Default)" },
+ { 4, "4 Tiles" },
+ { 5, "5 Tiles" },
+ { 6, "6 Tiles" },
+ { 7, "7 Tiles" },
+ { 8, "8 Tiles (Maximum Scroll Delay)"},
+
+ { -1, NULL },
+};
+
#define DRAW_MODE(s) ((s) >= GAME_MODE_MAIN && \
(s) <= GAME_MODE_SETUP ? (s) : \
(s) == GAME_MODE_PSEUDO_TYPENAME ? \
struct TitleControlInfo title_controls[MAX_NUM_TITLE_SCREENS];
-
/* main menu display and control definitions */
#define MAIN_CONTROL_NAME 0
return IMG_UNDEFINED;
}
-static int getTitleSound(int nr, boolean initial, boolean is_image)
+static int getTitleSound(struct TitleControlInfo *tci)
{
+ boolean is_image = tci->is_image;
+ int initial = tci->initial;
+ int nr = tci->local_nr;
int mode = (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE);
int base = (is_image ?
(initial ? SND_BACKGROUND_TITLESCREEN_INITIAL_1 :
return SND_UNDEFINED;
}
-static int getTitleMusic(int nr, boolean initial, boolean is_image)
+static int getTitleMusic(struct TitleControlInfo *tci)
{
+ boolean is_image = tci->is_image;
+ int initial = tci->initial;
+ int nr = tci->local_nr;
int mode = (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE);
int base = (is_image ?
(initial ? MUS_BACKGROUND_TITLESCREEN_INITIAL_1 :
return MUS_UNDEFINED;
}
+static struct TitleFadingInfo getTitleFading(struct TitleControlInfo *tci)
+{
+ boolean is_image = tci->is_image;
+ int initial = tci->initial;
+ int nr = tci->local_nr;
+ struct TitleFadingInfo ti;
+
+ if (is_image)
+ {
+ int graphic = getTitleScreenGraphic(nr, initial);
+
+ /* initialize fading control values to default title config settings */
+ ti = (initial ? title_initial_default : title_default);
+
+ /* override default settings with image config settings, if defined */
+ if (graphic_info[graphic].fade_mode != FADE_MODE_DEFAULT)
+ ti.fade_mode = graphic_info[graphic].fade_mode;
+ if (graphic_info[graphic].fade_delay > -1)
+ ti.fade_delay = graphic_info[graphic].fade_delay;
+ if (graphic_info[graphic].post_delay > -1)
+ ti.post_delay = graphic_info[graphic].post_delay;
+ if (graphic_info[graphic].auto_delay > -1)
+ ti.auto_delay = graphic_info[graphic].auto_delay;
+ }
+ else
+ {
+ if (initial)
+ {
+ ti.fade_mode = titlemessage_initial[nr].fade_mode;
+ ti.fade_delay = titlemessage_initial[nr].fade_delay;
+ ti.post_delay = titlemessage_initial[nr].post_delay;
+ ti.auto_delay = titlemessage_initial[nr].auto_delay;
+ }
+ else
+ {
+ ti.fade_mode = titlemessage[nr].fade_mode;
+ ti.fade_delay = titlemessage[nr].fade_delay;
+ ti.post_delay = titlemessage[nr].post_delay;
+ ti.auto_delay = titlemessage[nr].auto_delay;
+ }
+ }
+
+#if 0
+ if (ti.anim_mode == ANIM_NONE)
+ ti.fade_delay = ti.post_delay = 0;
+#endif
+
+ return ti;
+}
+
static int compareTitleControlInfo(const void *object1, const void *object2)
{
const struct TitleControlInfo *tci1 = (struct TitleControlInfo *)object1;
/* set main control text values to dynamically determined values */
sprintf(main_text_name, "%s", local_team_mode ? "Team:" : "Name:");
- sprintf(main_text_first_level, "%03d", leveldir_current->first_level);
- sprintf(main_text_last_level, "%03d", leveldir_current->last_level);
- sprintf(main_text_level_number, "%s", int2str(level_nr, 3));
+
+ strcpy(main_text_first_level, int2str(leveldir_current->first_level,
+ menu.main.text.first_level.size));
+ strcpy(main_text_last_level, int2str(leveldir_current->last_level,
+ menu.main.text.last_level.size));
+ strcpy(main_text_level_number, int2str(level_nr,
+ menu.main.text.level_number.size));
main_text_level_year = leveldir_current->year;
main_text_level_imported_from = leveldir_current->imported_from;
redraw_mask = REDRAW_ALL;
/* reset fading control values to default config settings */
+#if 1
+
+#if 0
+ title = getTitleFading(nr, initial, TRUE);
+#endif
+
+#else
+
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].anim_mode != ANIM_DEFAULT)
+ title.anim_mode = graphic_info[graphic].anim_mode;
if (graphic_info[graphic].fade_delay > -1)
- title.fade_delay_final = graphic_info[graphic].fade_delay;
+ title.fade_delay = graphic_info[graphic].fade_delay;
if (graphic_info[graphic].post_delay > -1)
- title.post_delay_final = graphic_info[graphic].post_delay;
+ title.post_delay = graphic_info[graphic].post_delay;
if (graphic_info[graphic].auto_delay > -1)
- title.auto_delay_final = graphic_info[graphic].auto_delay;
+ title.auto_delay = graphic_info[graphic].auto_delay;
+#endif
}
void DrawTitleScreenMessage(int nr, boolean initial)
int i;
#endif
+#if 0
+ /* !!! CHANGE THIS !!! */
+ title = title_default;
+#endif
+
+#if 0
+ {
+ int graphicA = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
+ int graphicB = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_PANEL];
+ int graphic1 = element_info[EL_CONVEYOR_BELT_1_MIDDLE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
+ int graphic2 = element_info[EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
+
+ printf("::: %d [%d] -> %d, %d [%d, %d]\n",
+ graphicA, graphicB,
+ graphic_info[graphicA].src_x,
+ graphic_info[graphicA].src_y,
+ graphic1, graphic2);
+ }
+#endif
+
+#if 0
+ printf("::: %d, %d\n", fading.anim_mode == ANIM_CROSSFADE,
+ redraw_mask == REDRAW_ALL);
+#endif
+
+ FadeSetLeaveScreen();
+
+#if 1
+ FadeOut(redraw_mask);
+#endif
+
UnmapAllGadgets();
FadeSoundsAndMusic();
SetDrawtoField(DRAW_BACKBUFFER);
#endif
+#if 0
+ if (levelset_has_changed)
+ fading = title_default;
+#endif
+
#if 1
if (CheckTitleScreen(levelset_has_changed))
{
LoadLevel(level_nr);
SetMainBackgroundImage(IMG_BACKGROUND_MAIN);
+
+#if 0
+ FadeOut(redraw_mask);
+#endif
+
+#if 1
+ if (redraw_mask == REDRAW_ALL)
+ {
+#if 0
+ int door_state = GetDoorState();
+#endif
+
+ RedrawBackground();
+
+ // OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+
+#if 0
+#if 1
+ OpenDoor(DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+#else
+ OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+#endif
+#endif
+ }
+#endif
+
ClearWindow();
#if 1
FreeScreenGadgets();
CreateScreenGadgets();
+#if 0
+ BlitBitmap(drawto, window, VX, VY, VXSIZE, VYSIZE, VX, VY);
+ Delay(3000);
+#endif
+
/* map gadgets for main menu screen */
MapTapeButtons();
MapScreenMenuGadgets(SCREEN_MASK_MAIN);
DrawMaskedBorder(REDRAW_ALL);
+#if 1
+ if (redraw_mask == REDRAW_ALL)
+ {
+ int door_state = GetDoorState();
+
+ OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+ }
+#endif
+
+#if 0
+ {
+ game_status = GAME_MODE_PSEUDO_PREVIEW;
+
+ DrawText(20, 400, "text_3.PREVIEW", FONT_TEXT_3);
+ DrawText(20, 420, "text_4.PREVIEW", FONT_TEXT_4);
+
+ game_status = GAME_MODE_MAIN;
+
+ DrawText(20, 440, "text_3.MAIN", FONT_TEXT_3);
+ DrawText(20, 460, "text_4.MAIN", FONT_TEXT_4);
+ }
+#endif
+
+#if 1
+ FadeIn(redraw_mask);
+#else
+#if 1
+ if (!do_fading)
+ BackToFront();
+ else if (fading.anim_mode == ANIM_CROSSFADE)
+ FadeCross(redraw_mask);
+ else
+ FadeIn(redraw_mask);
+#else
if (do_fading)
FadeIn(redraw_mask);
else
BackToFront();
+#endif
+#endif
+
+#if 1
+ FadeSetEnterMenu();
+#else
+ fading = title_default;
+#endif
SetMouseCursor(CURSOR_DEFAULT);
}
#endif
-#if 1
void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
{
static unsigned long title_delay = 0;
static int last_sound = -1, last_music = -1;
boolean return_to_main_menu = FALSE;
boolean use_fading_main_menu = TRUE;
+#if 0
#if 1
boolean use_cross_fading = FALSE;
#else
boolean use_cross_fading = !show_title_initial; /* default */
+#endif
#endif
struct TitleControlInfo *tci;
+ struct TitleFadingInfo fading_default;
+ struct TitleFadingInfo fading_last = fading;
+ struct TitleFadingInfo fading_next;
int sound, music;
if (button == MB_MENU_INITIALIZE)
{
+#if 0
+ boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE);
+#endif
+
#if 0
int last_game_status = game_status; /* save current game status */
#endif
DrawInfoScreen_NotAvailable("Title screen information:",
"No title screen for this level set.");
- title.auto_delay_final = -1;
+#if 0
+ /* use default settings for fading, but always disable auto delay */
+ fading = title_default;
+ fading.auto_delay = -1;
+#endif
return;
}
FadeSoundsAndMusic();
+#if 1
FadeOut(REDRAW_ALL);
+#endif
}
if (tci->is_image)
- {
DrawTitleScreenImage(tci->local_nr, tci->initial);
- }
else
- {
DrawTitleScreenMessage(tci->local_nr, tci->initial);
- title.fade_delay_final = title.fade_delay;
- title.post_delay_final = title.post_delay;
- title.auto_delay_final = -1;
+ fading_default = (tci->initial ? title_initial_default : title_default);
+
+ fading = fading_next = getTitleFading(tci);
+
+#if 1
+#if 1
+ if (!(fading_last.fade_mode & FADE_TYPE_TRANSFORM) &&
+ fading_next.fade_mode & FADE_TYPE_TRANSFORM)
+ {
+ fading.fade_mode = FADE_MODE_FADE;
+ fading.fade_delay = fading_default.fade_delay;
}
+#else
+ if (fading_last.fade_mode != FADE_MODE_CROSSFADE &&
+ fading_next.fade_mode == FADE_MODE_CROSSFADE)
+ fading.fade_mode = FADE_MODE_FADE;
+#endif
+#endif
#if 1
- sound = getTitleSound(tci->local_nr, tci->initial, tci->is_image);
- music = getTitleMusic(tci->local_nr, tci->initial, tci->is_image);
+ sound = getTitleSound(tci);
+ music = getTitleMusic(tci);
if (sound != last_sound)
PlayMenuSoundExt(sound);
SetMouseCursor(CURSOR_NONE);
+ // printf("::: mode: %d, delay: %d\n", fading.fade_mode, fading.fade_delay);
+
+#if 1
FadeIn(REDRAW_ALL);
+#endif
+
+ fading = fading_next;
DelayReached(&title_delay, 0); /* reset delay counter */
return;
}
- if (title.auto_delay_final > -1 &&
- DelayReached(&title_delay, title.auto_delay_final))
+#if 1
+ if (fading.auto_delay > 0 && DelayReached(&title_delay, fading.auto_delay))
+ button = MB_MENU_CHOICE;
+#else
+ if (fading.auto_delay > -1 && DelayReached(&title_delay, fading.auto_delay))
button = MB_MENU_CHOICE;
+#endif
if (button == MB_MENU_LEAVE)
{
}
else if (button == MB_MENU_CHOICE)
{
- int anim_mode;
+#if 0
+ boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE);
+#endif
if (game_status == GAME_MODE_INFO && num_title_screens == 0)
{
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
+
+ FadeSetEnterScreen();
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
title_screen_nr++;
tci = &title_controls[title_screen_nr];
- if (tci->is_image)
- anim_mode =
- graphic_info[getTitleScreenGraphic(tci->local_nr,
- tci->initial)].anim_mode;
- else
- anim_mode = ANIM_FADE; /* ??? */
-
- use_cross_fading = (anim_mode == ANIM_FADE ? FALSE :
- anim_mode == ANIM_CROSSFADE ? TRUE :
- use_cross_fading);
-
if (title_screen_nr < num_title_screens)
{
- sound = getTitleSound(tci->local_nr, tci->initial, tci->is_image);
- music = getTitleMusic(tci->local_nr, tci->initial, tci->is_image);
+#if 1
+#if 0
+ boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE);
+#endif
+#else
+ int anim_mode;
+
+ if (tci->is_image)
+ anim_mode =
+ graphic_info[getTitleScreenGraphic(tci->local_nr,
+ tci->initial)].anim_mode;
+ else
+ anim_mode = ANIM_FADE; /* ??? */
+
+ use_cross_fading = (anim_mode == ANIM_FADE ? FALSE :
+ anim_mode == ANIM_CROSSFADE ? TRUE :
+ use_cross_fading);
+#endif
+
+ sound = getTitleSound(tci);
+ music = getTitleMusic(tci);
if (sound == SND_UNDEFINED || sound != last_sound)
FadeSounds();
if (music == MUS_UNDEFINED || music != last_music)
FadeMusic();
- if (use_cross_fading)
- FadeCrossSaveBackbuffer();
- else
- FadeOut(REDRAW_ALL);
+#if 1
+ FadeOut(REDRAW_ALL);
+#endif
if (tci->is_image)
DrawTitleScreenImage(tci->local_nr, tci->initial);
else
DrawTitleScreenMessage(tci->local_nr, tci->initial);
+ fading_next = getTitleFading(tci);
+
#if 1
- sound = getTitleSound(tci->local_nr, tci->initial, tci->is_image);
- music = getTitleMusic(tci->local_nr, tci->initial, tci->is_image);
+ sound = getTitleSound(tci);
+ music = getTitleMusic(tci);
if (sound != last_sound)
PlayMenuSoundExt(sound);
last_music = music;
#endif
- if (use_cross_fading)
- FadeCross(REDRAW_ALL);
- else
- FadeIn(REDRAW_ALL);
-
- DelayReached(&title_delay, 0); /* reset delay counter */
- }
- else
- {
- FadeSoundsAndMusic();
-
- FadeOut(REDRAW_ALL);
-
- return_to_main_menu = TRUE;
- }
- }
-
- if (return_to_main_menu)
- {
- RedrawBackground();
-
- SetMouseCursor(CURSOR_DEFAULT);
-
- if (game_status == GAME_MODE_INFO)
- {
- OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
-
- info_mode = INFO_MODE_MAIN;
- DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu);
- }
- else /* default: return to main menu */
- {
- OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
-
- game_status = GAME_MODE_MAIN;
- DrawMainMenuExt(REDRAW_ALL, use_fading_main_menu);
- }
- }
-}
+#if 0
+ printf("::: %d -> %d\n", fading.fade_mode, fading_next.fade_mode);
+#endif
+#if 1
+ /* last screen already faded out, next screen has no animation */
+ if (!(fading.fade_mode & FADE_TYPE_TRANSFORM) &&
+ fading_next.fade_mode == FADE_MODE_NONE)
+ fading = fading_next;
#else
+ /* last screen already faded out, next screen has no animation */
+ if (fading.fade_mode != FADE_MODE_CROSSFADE &&
+ fading_next.fade_mode == FADE_MODE_NONE)
+ fading = fading_next;
+#endif
-void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
-{
- 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_title_initial; /* default */
- boolean no_title_info = (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL &&
- getLevelSetMessageFilename(1, FALSE) == NULL);
-
- if (button == MB_MENU_INITIALIZE)
- {
- int last_game_status = game_status; /* save current game status */
-
- title_delay = 0;
- title_nr = 0;
- showing_message = FALSE;
-
- if (show_title_initial &&
- graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap == NULL &&
- getLevelSetMessageFilename(1, TRUE) == NULL)
- show_title_initial = FALSE;
-
- if (game_status == GAME_MODE_INFO)
- {
- if (no_title_info)
- {
- DrawInfoScreen_NotAvailable("Title screen information:",
- "No title screen for this level set.");
-
- title.auto_delay_final = -1;
-
- return;
- }
-
- FadeSoundsAndMusic();
-
- FadeOut(REDRAW_ALL);
- }
-
- /* force TITLE music on title info screen */
- game_status = GAME_MODE_TITLE;
-
- PlayMenuSound();
- PlayMenuMusic();
-
- game_status = last_game_status; /* restore current game status */
-
- if (graphic_info[getTitleScreenGraphic(0, show_title_initial)].bitmap != NULL)
- {
- DrawTitleScreenImage(title_nr, show_title_initial);
- }
- 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);
-
- DelayReached(&title_delay, 0); /* reset delay counter */
-
- return;
- }
-
- if (title.auto_delay_final > -1 &&
- DelayReached(&title_delay, title.auto_delay_final))
- button = MB_MENU_CHOICE;
-
- if (button == MB_MENU_LEAVE)
- {
- return_to_main_menu = TRUE;
- use_fading_main_menu = FALSE;
- }
- else if (button == MB_MENU_CHOICE)
- {
- int anim_mode;
-
- if (game_status == GAME_MODE_INFO && no_title_info)
- {
- FadeOut(REDRAW_FIELD);
-
- info_mode = INFO_MODE_MAIN;
- DrawAndFadeInInfoScreen(REDRAW_FIELD);
-
- return;
- }
-
- title_nr++;
-
- if (show_title_initial &&
- (title_nr >= MAX_NUM_TITLE_IMAGES ||
- graphic_info[IMG_TITLESCREEN_INITIAL_1 + title_nr].bitmap == NULL))
- {
- show_title_initial = FALSE;
-
- title_nr = 0; /* restart with title screens for current level set */
- }
-
- anim_mode = graphic_info[getTitleScreenGraphic(title_nr, show_title_initial)].anim_mode;
-
- use_cross_fading = (anim_mode == ANIM_FADE ? FALSE :
- anim_mode == ANIM_CROSSFADE ? TRUE :
- use_cross_fading);
-
- if (!use_cross_fading)
- FadeOut(REDRAW_ALL);
-
- if (title_nr < MAX_NUM_TITLE_IMAGES &&
- graphic_info[getTitleScreenGraphic(title_nr, show_title_initial)].bitmap != NULL)
- {
- if (use_cross_fading)
- FadeCrossSaveBackbuffer();
-
- DrawTitleScreenImage(title_nr, show_title_initial);
-
- if (use_cross_fading)
- FadeCross(REDRAW_ALL);
- else
- FadeIn(REDRAW_ALL);
-
- DelayReached(&title_delay, 0); /* reset delay counter */
- }
- else if (!showing_message && filename != NULL)
- {
- if (use_cross_fading)
- FadeCrossSaveBackbuffer();
-
- DrawTitleScreenMessage(filename);
+#if 1
+ FadeIn(REDRAW_ALL);
+#endif
- if (use_cross_fading)
- FadeCross(REDRAW_ALL);
- else
- FadeIn(REDRAW_ALL);
+ fading = fading_next;
DelayReached(&title_delay, 0); /* reset delay counter */
-
- showing_message = TRUE;
}
else
{
FadeSoundsAndMusic();
+#if 0
+#if 1
+ {
+#if 0
+ boolean use_cross_fading = (fading.anim_mode == ANIM_CROSSFADE);
+#endif
+
+#if 1
+ FadeOut(REDRAW_ALL);
+#endif
+ }
+#else
FadeOut(REDRAW_ALL);
+#endif
+#endif
return_to_main_menu = TRUE;
}
if (return_to_main_menu)
{
- show_title_initial = FALSE;
-
+#if 0
RedrawBackground();
+#endif
+
+ SetMouseCursor(CURSOR_DEFAULT);
if (game_status == GAME_MODE_INFO)
{
+#if 0
OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+#endif
info_mode = INFO_MODE_MAIN;
DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu);
}
else /* default: return to main menu */
{
+#if 0
OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+#endif
game_status = GAME_MODE_MAIN;
DrawMainMenuExt(REDRAW_ALL, use_fading_main_menu);
}
}
}
-#endif
void HandleMainMenu_SelectLevel(int step, int direction)
{
#if 1
DrawText(mSX + mci->pos_text->x, mSY + mci->pos_text->y,
- int2str(level_nr, 3), mci->pos_text->font);
+ int2str(level_nr, menu.main.text.level_number.size),
+ mci->pos_text->font);
#else
DrawText(mSX + 11 * 32, mSY + 3 * 32, int2str(level_nr, 3), FONT_VALUE_1);
#endif
game_status = GAME_MODE_EDITOR;
+ FadeSetEnterScreen();
+
DrawLevelEd();
}
else if (pos == MAIN_CONTROL_INFO)
game_status = GAME_MODE_INFO;
info_mode = INFO_MODE_MAIN;
+#if 0
+ fading = menu.navigation;
+#endif
+
DrawInfoScreen();
}
else if (pos == MAIN_CONTROL_GAME)
static void execInfoTitleScreen()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_TITLE;
DrawInfoScreen();
}
static void execInfoElements()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_ELEMENTS;
DrawInfoScreen();
}
static void execInfoMusic()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_MUSIC;
DrawInfoScreen();
}
static void execInfoCredits()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_CREDITS;
DrawInfoScreen();
}
static void execInfoProgram()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_PROGRAM;
DrawInfoScreen();
}
static void execInfoVersion()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_VERSION;
DrawInfoScreen();
}
static void execInfoLevelSet()
{
+#if 0
+ FadeSetEnterScreen();
+#endif
+
info_mode = INFO_MODE_LEVELSET;
DrawInfoScreen();
}
static void execExitInfo()
{
+#if 0
+ FadeSetLeaveMenu();
+#endif
+
game_status = GAME_MODE_MAIN;
+#if 1
+ DrawMainMenuExt(REDRAW_FIELD, FALSE);
+#else
DrawMainMenu();
+#endif
}
static struct TokenInfo info_info_main[] =
UnmapAllGadgets();
CloseDoor(DOOR_CLOSE_2);
+ /* (needed after displaying title screens which disable auto repeat) */
+ KeyboardAutoRepeatOn();
+
+ FadeSetLeaveScreen();
+
+#if 1
+ FadeOut(redraw_mask);
+#endif
+
+#if 1
+ if (redraw_mask == REDRAW_ALL)
+ {
+ RedrawBackground();
+ OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+ }
+#endif
+
ClearWindow();
DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Info Screen");
PlayMenuSound();
PlayMenuMusic();
- DrawMaskedBorder(REDRAW_ALL);
+ DrawMaskedBorder(redraw_mask);
+#if 1
+ FadeIn(redraw_mask);
+#else
+#if 1
+ if (!do_fading)
+ BackToFront();
+ else if (fading.anim_mode == ANIM_CROSSFADE)
+ FadeCross(redraw_mask);
+ else
+ FadeIn(redraw_mask);
+#else
if (do_fading)
FadeIn(redraw_mask);
else
BackToFront();
+#endif
+#endif
InitAnimation();
}
{
void (*menu_callback_function)(void) = info_info[y].value;
+ FadeSetLeaveMenu();
+
menu_callback_function();
break; /* absolutely needed because function changes 'info_info'! */
{
void (*menu_callback_function)(void) = info_info[choice].value;
+ FadeSetFromType(info_info[y].type);
+
menu_callback_function();
}
}
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
ClearWindow();
DrawHeadline();
DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for info menu");
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init)
{
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS);
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
LoadHelpAnimInfo();
LoadHelpTextInfo();
HandleInfoScreen_Elements(MB_MENU_INITIALIZE);
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
InitAnimation();
}
if (page >= num_pages)
{
FadeSoundsAndMusic();
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
{
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_MUSIC);
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
ClearWindow();
DrawHeadline();
HandleInfoScreen_Music(MB_MENU_INITIALIZE);
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
void HandleInfoScreen_Music(int button)
if (list == NULL)
{
FadeSoundsAndMusic();
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
FadeSoundsAndMusic();
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
HandleInfoScreen_Credits(MB_MENU_INITIALIZE);
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
void HandleInfoScreen_Credits(int button)
else
{
FadeSoundsAndMusic();
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM);
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
ClearWindow();
DrawHeadline();
DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for info menu");
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
void HandleInfoScreen_Program(int button)
PlaySound(SND_MENU_ITEM_SELECTING);
FadeSoundsAndMusic();
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION);
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
ClearWindow();
DrawHeadline();
DrawTextSCentered(ybottom, FONT_TEXT_4,
"Press any key or button for info menu");
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
void HandleInfoScreen_Version(int button)
PlaySound(SND_MENU_ITEM_SELECTING);
FadeSoundsAndMusic();
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
ClearWindow();
DrawHeadline();
DrawTextCentered(mSY + SYSIZE - 20, FONT_TEXT_4,
"Press any key or button for info menu");
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
void HandleInfoScreen_LevelSet(int button)
PlaySound(SND_MENU_ITEM_SELECTING);
FadeSoundsAndMusic();
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
info_mode = INFO_MODE_MAIN;
DrawAndFadeInInfoScreen(REDRAW_FIELD);
void DrawInfoScreen()
{
- DrawInfoScreenExt(REDRAW_ALL, FALSE);
+ DrawInfoScreenExt(REDRAW_FIELD, FALSE);
}
void HandleInfoScreen(int mx, int my, int dx, int dy, int button)
CloseDoor(DOOR_CLOSE_2);
+#if 1
+ FadeOut(REDRAW_FIELD);
+#endif
+
ClearWindow();
HandleChooseTree(0, 0, 0, 0, MB_MENU_INITIALIZE, ti_ptr);
MapScreenTreeGadgets(*ti_ptr);
- FadeToFront();
+#if 1
+ FadeIn(REDRAW_FIELD);
+#endif
+
InitAnimation();
}
}
else if (button == MB_MENU_LEAVE)
{
+ FadeSetLeaveMenu();
+
PlaySound(SND_MENU_ITEM_SELECTING);
if (ti->node_parent)
{
if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED)
execSetupGame();
- else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
+ else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE ||
+ setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
execSetupGraphics();
else
execSetupArtwork();
else
{
game_status = GAME_MODE_MAIN;
+#if 1
+ DrawMainMenuExt(REDRAW_FIELD, FALSE);
+#else
DrawMainMenu();
+#endif
}
return;
if (node_cursor->node_group)
{
+ FadeSetEnterMenu();
+
PlaySound(SND_MENU_ITEM_SELECTING);
node_cursor->cl_first = ti->cl_first;
}
else if (dx == -1 && ti->node_parent)
{
+ FadeSetLeaveMenu();
+
PlaySound(SND_MENU_ITEM_SELECTING);
*ti_ptr = ti->node_parent;
if (node_cursor->node_group)
{
+ FadeSetEnterMenu();
+
node_cursor->cl_first = ti->cl_first;
node_cursor->cl_cursor = ti->cl_cursor;
*ti_ptr = node_cursor->node_group;
}
else if (node_cursor->parent_link)
{
+ FadeSetLeaveMenu();
+
*ti_ptr = node_cursor->node_parent;
DrawChooseTree(ti_ptr);
}
else
{
+ FadeSetEnterScreen();
+
node_cursor->cl_first = ti->cl_first;
node_cursor->cl_cursor = ti->cl_cursor;
*ti_ptr = node_cursor;
{
if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED)
execSetupGame();
- else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
+ else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE ||
+ setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
execSetupGraphics();
else
execSetupArtwork();
if (highlight_position < 0)
LoadScore(level_nr);
+ FadeSetEnterScreen();
+
+ // printf("::: %d: %d\n", game_status, menu.enter_screen[game_status]);
+
+#if 1
FadeOut(REDRAW_FIELD);
+#endif
InitAnimation();
HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE);
+#if 1
FadeIn(REDRAW_FIELD);
+#endif
}
static void drawHallOfFameList(int first_entry, int highlight_position)
PlaySound(SND_MENU_ITEM_SELECTING);
FadeSound(SND_BACKGROUND_SCORES);
+
+#if 0
FadeOut(REDRAW_FIELD);
+#endif
game_status = GAME_MODE_MAIN;
static int num_setup_info;
static char *screen_mode_text;
+static char *scroll_delay_text;
static char *game_speed_text;
static char *graphics_set_name;
static char *sounds_set_name;
static void execSetupMain()
{
+#if 0
+ FadeSetLeaveMenu();
+#endif
+
setup_mode = SETUP_MODE_MAIN;
DrawSetupScreen();
}
static void execSetupGame()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
if (game_speeds == NULL)
{
int i;
static void execSetupChooseGameSpeed()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_CHOOSE_GAME_SPEED;
DrawSetupScreen();
}
static void execSetupEditor()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_EDITOR;
DrawSetupScreen();
}
static void execSetupGraphics()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
if (video.fullscreen_available && screen_modes == NULL)
{
int i;
screen_mode_text = screen_mode_current->name;
}
+#if 1
+ if (scroll_delays == NULL)
+ {
+ int i;
+
+ for (i = 0; scroll_delays_list[i].value != -1; i++)
+ {
+ TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+ char identifier[32], name[32];
+ int value = scroll_delays_list[i].value;
+ char *text = scroll_delays_list[i].text;
+
+ ti->node_top = &scroll_delays;
+ ti->sort_priority = value;
+
+ sprintf(identifier, "%d", value);
+ sprintf(name, "%s", text);
+
+ setString(&ti->identifier, identifier);
+ setString(&ti->name, name);
+ setString(&ti->name_sorting, name);
+ setString(&ti->infotext, "Scroll Delay");
+
+ pushTreeInfo(&scroll_delays, ti);
+ }
+
+ /* sort scroll delay values to start with lowest scroll delay value */
+ sortTreeInfo(&scroll_delays);
+
+ /* set current scroll delay value to configured scroll delay value */
+ scroll_delay_current =
+ getTreeInfoFromIdentifier(scroll_delays,i_to_a(setup.scroll_delay_value));
+
+ /* if that fails, set current scroll delay to reliable default value */
+ if (scroll_delay_current == NULL)
+ scroll_delay_current =
+ getTreeInfoFromIdentifier(scroll_delays, i_to_a(STD_SCROLL_DELAY));
+
+ /* if that also fails, set current scroll delay to first available value */
+ if (scroll_delay_current == NULL)
+ scroll_delay_current = scroll_delays;
+ }
+
+ setup.scroll_delay_value = atoi(scroll_delay_current->identifier);
+
+ /* needed for displaying scroll delay text instead of identifier */
+ scroll_delay_text = scroll_delay_current->name;
+#endif
+
setup_mode = SETUP_MODE_GRAPHICS;
DrawSetupScreen();
}
static void execSetupChooseScreenMode()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
if (!video.fullscreen_available)
return;
DrawSetupScreen();
}
+static void execSetupChooseScrollDelay()
+{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
+ setup_mode = SETUP_MODE_CHOOSE_SCROLL_DELAY;
+ DrawSetupScreen();
+}
+
static void execSetupSound()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_SOUND;
DrawSetupScreen();
}
static void execSetupArtwork()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup.graphics_set = artwork.gfx_current->identifier;
setup.sounds_set = artwork.snd_current->identifier;
setup.music_set = artwork.mus_current->identifier;
static void execSetupChooseGraphics()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_CHOOSE_GRAPHICS;
DrawSetupScreen();
}
static void execSetupChooseSounds()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_CHOOSE_SOUNDS;
DrawSetupScreen();
}
static void execSetupChooseMusic()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_CHOOSE_MUSIC;
DrawSetupScreen();
}
static void execSetupInput()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_INPUT;
DrawSetupScreen();
}
static void execSetupShortcut1()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_SHORTCUT_1;
DrawSetupScreen();
}
static void execSetupShortcut2()
{
+#if 0
+ FadeSetEnterMenu();
+#endif
+
setup_mode = SETUP_MODE_SHORTCUT_2;
DrawSetupScreen();
}
static void execExitSetup()
{
+#if 0
+ FadeSetLeaveMenu();
+#endif
+
game_status = GAME_MODE_MAIN;
+#if 1
+ DrawMainMenuExt(REDRAW_FIELD, FALSE);
+#else
DrawMainMenu();
+#endif
}
static void execSaveAndExitSetup()
{ TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" },
{ TYPE_ENTER_LIST, execSetupChooseScreenMode, "Fullscreen Mode:" },
{ TYPE_STRING, &screen_mode_text, "" },
- { TYPE_SWITCH, &setup.scroll_delay, "Delayed Scrolling:" },
+#if 0
+ { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" },
+#endif
+ { TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay Value:" },
+ { TYPE_STRING, &scroll_delay_text, "" },
#if 0
{ TYPE_SWITCH, &setup.soft_scrolling, "Soft Scrolling:" },
{ TYPE_SWITCH, &setup.double_buffering,"Double-Buffering:" },
UnmapAllGadgets();
CloseDoor(DOOR_CLOSE_2);
+#if 1
+ FadeOut(REDRAW_FIELD);
+#endif
+
ClearWindow();
if (setup_mode == SETUP_MODE_MAIN)
"Joysticks deactivated in setup menu");
#endif
- FadeToFront();
+#if 1
+ HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE);
+#endif
+
+#if 1
+ FadeIn(REDRAW_FIELD);
+#endif
+
InitAnimation();
+#if 0
HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE);
+#endif
}
void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button)
{
void (*menu_callback_function)(void) = setup_info[y].value;
+ FadeSetLeaveMenu();
+
menu_callback_function();
break; /* absolutely needed because function changes 'setup_info'! */
{
void (*menu_callback_function)(void) = setup_info[y].value;
+ FadeSetFromType(setup_info[y].type);
+
menu_callback_function();
}
else
int i;
#endif
+#if 1
+ FadeOut(REDRAW_FIELD);
+#endif
+
ClearWindow();
#if 1
MapScreenMenuGadgets(SCREEN_MASK_INPUT);
HandleSetupScreen_Input(0, 0, 0, 0, MB_MENU_INITIALIZE);
- FadeToFront();
+
+#if 1
+ FadeIn(REDRAW_FIELD);
+#endif
+
InitAnimation();
}
{
InitJoysticks();
+ FadeSetLeaveMenu();
+
setup_mode = SETUP_MODE_MAIN;
DrawSetupScreen();
}
/* read existing key bindings from player setup */
custom_key = setup.input[player_nr].key;
+ FadeSetEnterMenu();
+ FadeOut(REDRAW_FIELD);
+
ClearWindow();
DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Keyboard Input");
+#if 0
BackToFront();
InitAnimation();
+#endif
step_nr = 0;
DrawText(mSX, mSY + (2 + 2 * step_nr) * 32,
DrawText(mSX + 4 * 32, mSY + (2 + 2 * step_nr + 1) * 32,
getKeyNameFromKey(*customize_step[step_nr].key), FONT_VALUE_OLD);
+#if 1
+ FadeIn(REDRAW_FIELD);
+
+ InitAnimation();
+#endif
+
while (!finished)
{
if (PendingEvent()) /* got event */
if (key == KSYM_Escape || (key == KSYM_Return && step_nr == 6))
{
+ if (key == KSYM_Escape)
+ FadeSkipNextFadeIn();
+
finished = TRUE;
break;
}
if (joystick_fd < 0 || !setup.input[player_nr].use_joystick)
return FALSE;
+ FadeSetEnterMenu();
+ FadeOut(REDRAW_FIELD);
+
ClearWindow();
for (y = 0; y < 3; y++)
new_joystick_ymiddle = joy_y;
DrawGraphic(xpos + last_x, ypos + last_y, IMG_MENU_CALIBRATE_RED, 0);
+
+#if 1
+ FadeIn(REDRAW_FIELD);
+#else
BackToFront();
+#endif
while (Joystick(player_nr) & JOY_BUTTON); /* wait for released button */
InitAnimation();
break;
case KSYM_Escape:
+ FadeSkipNextFadeIn();
result = 0;
break;
DrawChooseTree(&game_speed_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
DrawChooseTree(&screen_mode_current);
+ else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
+ DrawChooseTree(&scroll_delay_current);
else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS)
DrawChooseTree(&artwork.gfx_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS)
HandleChooseTree(mx, my, dx, dy, button, &game_speed_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE)
HandleChooseTree(mx, my, dx, dy, button, &screen_mode_current);
+ else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY)
+ HandleChooseTree(mx, my, dx, dy, button, &scroll_delay_current);
else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS)
HandleChooseTree(mx, my, dx, dy, button, &artwork.gfx_current);
else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS)