/* screens on the info screen */
#define INFO_MODE_MAIN 0
-#define INFO_MODE_ELEMENTS 1
-#define INFO_MODE_MUSIC 2
-#define INFO_MODE_CREDITS 3
-#define INFO_MODE_PROGRAM 4
-#define INFO_MODE_LEVELSET 5
+#define INFO_MODE_TITLE 1
+#define INFO_MODE_ELEMENTS 2
+#define INFO_MODE_MUSIC 3
+#define INFO_MODE_CREDITS 4
+#define INFO_MODE_PROGRAM 5
+#define INFO_MODE_LEVELSET 6
-#define MAX_INFO_MODES 6
+#define MAX_INFO_MODES 7
/* for various menu stuff */
#define MENU_SCREEN_START_XPOS 1
static void DrawInfoScreen(void);
static void DrawSetupScreen(void);
+static void DrawInfoScreenExt(int);
+static void DrawInfoScreen_NotAvailable(char *, char *);
static void DrawInfoScreen_HelpAnim(int, int, boolean);
static void DrawInfoScreen_HelpText(int, int, int, int);
static void HandleInfoScreen_Main(int, int, int, int, int);
+static void HandleInfoScreen_TitleScreen(int);
static void HandleInfoScreen_Elements(int);
static void HandleInfoScreen_Music(int);
static void HandleInfoScreen_Credits(int);
game_status = last_game_status; /* restore current game status */
}
-static void PlayMenuSound()
-{
- int sound = menu.sound[game_status];
-
- if (sound == SND_UNDEFINED)
- return;
-
- if (sound_info[sound].loop)
- PlaySoundLoop(sound);
- else
- PlaySound(sound);
-}
-
-static void PlayMenuSoundIfLoop()
-{
- int sound = menu.sound[game_status];
-
- if (sound == SND_UNDEFINED)
- return;
-
- if (sound_info[sound].loop)
- PlaySoundLoop(sound);
-}
-
-static void PlayMenuMusic()
-{
- int music = menu.music[game_status];
-
- if (music == MUS_UNDEFINED)
- return;
-
- PlayMusic(music);
-}
-
void DrawHeadline()
{
DrawTextSCentered(MENU_TITLE1_YPOS, FONT_TITLE_1, PROGRAM_TITLE_STRING);
if (width > WIN_XSIZE)
{
+ /* image width too large for window => center image horizontally */
src_x = (width - WIN_XSIZE) / 2;
width = WIN_XSIZE;
}
if (height > WIN_YSIZE)
{
+ /* image height too large for window => center image vertically */
src_y = (height - WIN_YSIZE) / 2;
height = WIN_YSIZE;
}
dst_x = (WIN_XSIZE - width) / 2;
dst_y = (WIN_YSIZE - height) / 2;
-#if 1
ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
-#else
- DrawBackground(0, 0, WIN_XSIZE, WIN_YSIZE);
-#endif
if (DrawingOnBackground(dst_x, dst_y))
BlitBitmapMasked(bitmap, drawto, src_x, src_y, width, height, dst_x, dst_y);
SetMainBackgroundImage(IMG_BACKGROUND_TITLE);
-#if 0
- CloseDoor(DOOR_CLOSE_1);
-#endif
-
HandleTitleScreen(0, 0, 0, 0, MB_MENU_INITIALIZE);
- PlayMenuSound();
- PlayMenuMusic();
-
-#if 1
- FadeIn(1000);
-#else
- FadeToFront();
-#endif
StopAnimation();
}
-void DrawMainMenu()
+static void DrawMainMenuExt(int fade_delay)
{
static LevelDirTree *leveldir_last_valid = NULL;
boolean levelset_has_changed = FALSE;
audio.sound_deactivated = FALSE;
+#if 1
+ GetPlayerConfig();
+#endif
+
/* needed if last screen was the playing screen, invoked from level editor */
if (level_editor_test_game)
{
SetDrawtoField(DRAW_BACKBUFFER);
#endif
- if (levelset_has_changed && graphic_info[IMG_TITLESCREEN_1].bitmap != NULL)
+ if (setup.show_titlescreen &&
+ levelset_has_changed &&
+ graphic_info[IMG_TITLESCREEN_1].bitmap != NULL)
{
game_status = GAME_MODE_TITLE;
DrawTitleScreen();
if (setup.handicap && level_nr > leveldir_current->handicap_level)
level_nr = leveldir_current->handicap_level;
+#if 0
GetPlayerConfig();
+#endif
LoadLevel(level_nr);
SetMainBackgroundImage(IMG_BACKGROUND_MAIN);
DrawTextSCentered(326, FONT_TITLE_2, "A Game by Artsoft Entertainment");
+#if 0
FadeToFront();
+#endif
+#if 0
InitAnimation();
+#endif
HandleMainMenu(0, 0, 0, 0, MB_MENU_INITIALIZE);
PlayMenuSound();
PlayMenuMusic();
+#if 0
+#if 1
OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
+#else
+ if (fade_delay > 0)
+ OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+ else
+ OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
+#endif
+#endif
+
+#if 0
+ InitAnimation();
+#endif
#if 1
/* map gadgets for main menu screen */
MapTapeButtons();
#endif
+
+#if 1
+#if 1
+ FadeIn(fade_delay);
+#else
+ BackToFront();
+#endif
+#endif
+
+#if 1
+ InitAnimation();
+#endif
+
+#if 1
+ OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
+#endif
+}
+
+void DrawMainMenu()
+{
+ DrawMainMenuExt(0);
}
#if 0
{
static int title_nr = 0;
boolean return_to_main_menu = FALSE;
+ boolean use_fading_main_menu = TRUE;
boolean use_cross_fading = TRUE;
- int fade_delay = 1000;
- int post_delay = 500;
+ int fade_delay = 500;
+ int post_delay = fade_delay / 2;
if (button == MB_MENU_INITIALIZE)
{
+ int last_game_status = game_status; /* save current game status */
title_nr = 0;
+ if (game_status == GAME_MODE_INFO)
+ {
+ if (graphic_info[IMG_TITLESCREEN_1].bitmap == NULL)
+ {
+ DrawInfoScreen_NotAvailable("Title screen information:",
+ "No title screen for this level set.");
+
+ return;
+ }
+
+ FadeSoundsAndMusic();
+
+ FadeOut(fade_delay, post_delay);
+ }
+
+ /* force TITLE music on title info screen */
+ game_status = GAME_MODE_TITLE;
+
+ PlayMenuSound();
+ PlayMenuMusic();
+
+ game_status = last_game_status; /* restore current game status */
+
DrawTitleScreenImage(title_nr);
+ FadeIn(fade_delay);
+
return;
}
else if (button == MB_MENU_LEAVE)
{
return_to_main_menu = TRUE;
+ use_fading_main_menu = FALSE;
}
else if (button == MB_MENU_CHOICE)
{
+ if (game_status == GAME_MODE_INFO &&
+ graphic_info[IMG_TITLESCREEN_1].bitmap == NULL)
+ {
+ info_mode = INFO_MODE_MAIN;
+ DrawInfoScreen();
+
+ return;
+ }
+
title_nr++;
if (!use_cross_fading)
- {
- FadeOut(fade_delay);
- Delay(post_delay);
- }
+ FadeOut(fade_delay, post_delay);
if (title_nr < MAX_NUM_TITLE_SCREENS &&
graphic_info[IMG_TITLESCREEN_1 + title_nr].bitmap != NULL)
drawto = drawto_last;
if (use_cross_fading)
- FadeCross(bitmap_db_title, fade_delay);
+ FadeCross(fade_delay);
else
FadeIn(fade_delay);
}
else
{
- FadeOut(fade_delay);
- Delay(post_delay);
+ FadeSoundsAndMusic();
+
+ FadeOut(fade_delay, post_delay);
return_to_main_menu = TRUE;
}
if (return_to_main_menu)
{
+ int menu_fade_delay = (use_fading_main_menu ? fade_delay : 0);
+
RedrawBackground();
- game_status = GAME_MODE_MAIN;
- DrawMainMenu();
+ 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(menu_fade_delay);
+ }
+ 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(menu_fade_delay);
+ }
}
}
static struct TokenInfo *info_info;
static int num_info_info;
+static void execInfoTitleScreen()
+{
+ info_mode = INFO_MODE_TITLE;
+ DrawInfoScreen();
+}
+
static void execInfoElements()
{
info_mode = INFO_MODE_ELEMENTS;
static struct TokenInfo info_info_main[] =
{
+ { TYPE_ENTER_SCREEN, execInfoTitleScreen, "Title Screen" },
{ TYPE_ENTER_SCREEN, execInfoElements, "Elements Info" },
{ TYPE_ENTER_SCREEN, execInfoMusic, "Music Info" },
{ TYPE_ENTER_SCREEN, execInfoCredits, "Credits" },
{ 0, NULL, NULL }
};
-static void DrawInfoScreen_Main()
+static void DrawInfoScreen_Main(int fade_delay)
{
int i;
num_info_info++;
}
+#if 1
+
+ HandleInfoScreen_Main(0, 0, 0, 0, MB_MENU_INITIALIZE);
+
+ PlayMenuSound();
+ PlayMenuMusic();
+
+ FadeIn(fade_delay);
+ InitAnimation();
+
+#else
+
FadeToFront();
InitAnimation();
PlayMenuMusic();
HandleInfoScreen_Main(0, 0, 0, 0, MB_MENU_INITIALIZE);
+#endif
}
void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button)
}
}
+void DrawInfoScreen_NotAvailable(char *text_title, char *text_error)
+{
+ int ystart = 150;
+ int ybottom = SYSIZE - 20;
+
+ SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
+
+ ClearWindow();
+ DrawHeadline();
+
+ DrawTextSCentered(100, FONT_TEXT_1, text_title);
+
+ DrawTextSCentered(ybottom, FONT_TEXT_4,
+ "Press any key or button for info menu");
+
+ DrawTextSCentered(ystart, FONT_TEXT_2, text_error);
+}
+
void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init)
{
static int infoscreen_step[MAX_INFO_ELEMENTS_ON_SCREEN];
max_chars_per_line, max_lines_per_text);
}
+void DrawInfoScreen_TitleScreen()
+{
+ DrawTitleScreen();
+}
+
+void HandleInfoScreen_TitleScreen(int button)
+{
+ HandleTitleScreen(0, 0, 0, 0, button);
+}
+
void DrawInfoScreen_Elements()
{
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS);
PlaySoundLoop(list->music);
}
-void DrawInfoScreen_Credits()
+static boolean DrawInfoScreen_CreditsScreen(int screen_nr)
{
int ystart = 150, ystep = 30;
int ybottom = SYSIZE - 20;
- SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_CREDITS);
-
- FadeSoundsAndMusic();
-
ClearWindow();
DrawHeadline();
DrawTextSCentered(100, FONT_TEXT_1, "Credits:");
- DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2, "DOS port of the game:");
- DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3, "Guido Schulz");
- DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2, "Additional toons:");
- DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3, "Karl Hörnell");
- DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2,
- "...and many thanks to all contributors");
- DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2, "of new levels!");
+
+ if (screen_nr == 0)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Special thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Peter Liepa");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for creating");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "\"Boulder Dash\"");
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ "in the year");
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ "1984");
+ DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ "published by");
+ DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ "First Star Software");
+ }
+ else if (screen_nr == 1)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Special thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Klaus Heinz & Volker Wertich");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for creating");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "\"Emerald Mine\"");
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ "in the year");
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ "1987");
+ DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ "published by");
+ DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ "Kingsoft");
+ }
+ else if (screen_nr == 2)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Special thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Michael Stopp & Philip Jespersen");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for creating");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "\"Supaplex\"");
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ "in the year");
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ "1991");
+ DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ "published by");
+ DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ "Digital Integration");
+ }
+ else if (screen_nr == 3)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Special thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Hiroyuki Imabayashi");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for creating");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "\"Sokoban\"");
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ "in the year");
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ "1982");
+ DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ "published by");
+ DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_3,
+ "Thinking Rabbit");
+ }
+ else if (screen_nr == 4)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Special thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Alan Bond");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "and");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "Jürgen Bonhagen");
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ "for the continuous creation");
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2,
+ "of outstanding level sets");
+ }
+ else if (screen_nr == 5)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Peter Elzner");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for ideas and inspiration by");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "Diamond Caves");
+
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_2,
+ "Thanks to");
+ DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_3,
+ "Steffest");
+ DrawTextSCentered(ystart + 7 * ystep, FONT_TEXT_2,
+ "for ideas and inspiration by");
+ DrawTextSCentered(ystart + 8 * ystep, FONT_TEXT_3,
+ "DX-Boulderdash");
+ }
+ else if (screen_nr == 6)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "David Tritscher");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for the new Emerald Mine engine");
+ }
+ else if (screen_nr == 7)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "Thanks to");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_3,
+ "Guido Schulz");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_2,
+ "for the initial DOS port");
+
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_2,
+ "Thanks to");
+ DrawTextSCentered(ystart + 5 * ystep, FONT_TEXT_3,
+ "Karl Hörnell");
+ DrawTextSCentered(ystart + 6 * ystep, FONT_TEXT_2,
+ "for some additional toons");
+ }
+ else if (screen_nr == 8)
+ {
+ DrawTextSCentered(ystart + 0 * ystep, FONT_TEXT_2,
+ "And not to forget:");
+ DrawTextSCentered(ystart + 1 * ystep, FONT_TEXT_2,
+ "Many thanks to");
+ DrawTextSCentered(ystart + 2 * ystep, FONT_TEXT_3,
+ "All those who contributed");
+ DrawTextSCentered(ystart + 3 * ystep, FONT_TEXT_3,
+ "levels to this game");
+ DrawTextSCentered(ystart + 4 * ystep, FONT_TEXT_3,
+ "since 1995");
+ }
+ else
+ {
+ return FALSE;
+ }
DrawTextSCentered(ybottom, FONT_TEXT_4,
- "Press any key or button for info menu");
+ "Press any key or button for next page");
+
+ return TRUE;
+}
+
+void DrawInfoScreen_Credits()
+{
+ SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_CREDITS);
+
+ FadeSoundsAndMusic();
+
+ HandleInfoScreen_Credits(MB_MENU_INITIALIZE);
}
void HandleInfoScreen_Credits(int button)
{
- int button_released = !button;
+ static int screen_nr = 0;
- if (button == MB_MENU_LEAVE)
+ if (button == MB_MENU_INITIALIZE)
+ {
+ screen_nr = 0;
+
+ DrawInfoScreen_CreditsScreen(screen_nr);
+ }
+ else if (button == MB_MENU_LEAVE)
{
info_mode = INFO_MODE_MAIN;
DrawInfoScreen();
return;
}
-
- if (button_released)
+ else if (button == MB_MENU_CHOICE)
{
- FadeSoundsAndMusic();
+ screen_nr++;
- info_mode = INFO_MODE_MAIN;
- DrawInfoScreen();
+ if (!DrawInfoScreen_CreditsScreen(screen_nr))
+ {
+ FadeSoundsAndMusic();
+
+ info_mode = INFO_MODE_MAIN;
+ DrawInfoScreen();
+ }
}
else
{
}
}
-void DrawInfoScreen()
+static void DrawInfoScreenExt(int fade_delay)
{
SetMainBackgroundImage(IMG_BACKGROUND_INFO);
- if (info_mode == INFO_MODE_ELEMENTS)
+ if (info_mode == INFO_MODE_TITLE)
+ DrawInfoScreen_TitleScreen();
+ else if (info_mode == INFO_MODE_ELEMENTS)
DrawInfoScreen_Elements();
else if (info_mode == INFO_MODE_MUSIC)
DrawInfoScreen_Music();
else if (info_mode == INFO_MODE_LEVELSET)
DrawInfoScreen_LevelSet();
else
- DrawInfoScreen_Main();
+ DrawInfoScreen_Main(fade_delay);
- if (info_mode != INFO_MODE_MUSIC)
+ if (info_mode != INFO_MODE_MAIN &&
+ info_mode != INFO_MODE_TITLE &&
+ info_mode != INFO_MODE_MUSIC)
{
PlayMenuSound();
PlayMenuMusic();
}
}
+void DrawInfoScreen()
+{
+ DrawInfoScreenExt(0);
+}
+
void HandleInfoScreen(int mx, int my, int dx, int dy, int button)
{
- if (info_mode == INFO_MODE_ELEMENTS)
+ if (info_mode == INFO_MODE_TITLE)
+ HandleInfoScreen_TitleScreen(button);
+ else if (info_mode == INFO_MODE_ELEMENTS)
HandleInfoScreen_Elements(button);
else if (info_mode == INFO_MODE_MUSIC)
HandleInfoScreen_Music(button);
#endif
{ TYPE_SWITCH, &setup.quick_switch, "Quick Player Focus Switch:" },
{ TYPE_SWITCH, &setup.quick_doors, "Quick Menu Doors:" },
- { TYPE_SWITCH, &setup.toons, "Toons:" },
+ { TYPE_SWITCH, &setup.show_titlescreen,"Show Title Screens:" },
+ { TYPE_SWITCH, &setup.toons, "Show Toons:" },
{ TYPE_ECS_AGA, &setup.prefer_aga_graphics,"EMC graphics preference:" },
{ TYPE_EMPTY, NULL, "" },
{ TYPE_LEAVE_MENU, execSetupMain, "Back" },