return (initial ? &titlemessage_initial[nr] : &titlemessage[nr]);
}
+#if 0
+static int getTitleScreenGameMode(boolean initial)
+{
+ return (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE);
+}
+#endif
+
+static int getTitleMessageGameMode(boolean initial)
+{
+ return (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE);
+}
+
+#if 0
+static int getTitleScreenBackground(boolean initial)
+{
+ return (initial ? IMG_BACKGROUND_TITLE_INITIAL : IMG_BACKGROUND_TITLE);
+}
+#endif
+
+#if 0
+static int getTitleMessageBackground(int nr, boolean initial)
+{
+ return (initial ? IMG_BACKGROUND_TITLE_INITIAL : IMG_BACKGROUND_TITLE);
+}
+#endif
+
+static int getTitleBackground(int nr, boolean initial, boolean is_image)
+{
+ int base = (is_image ?
+ (initial ? IMG_BACKGROUND_TITLESCREEN_INITIAL_1 :
+ IMG_BACKGROUND_TITLESCREEN_1) :
+ (initial ? IMG_BACKGROUND_TITLEMESSAGE_INITIAL_1 :
+ IMG_BACKGROUND_TITLEMESSAGE_1));
+ int graphic_global = (initial ? IMG_BACKGROUND_TITLE_INITIAL :
+ IMG_BACKGROUND_TITLE);
+ int graphic_local = base + nr;
+
+ if (graphic_info[graphic_local].bitmap != NULL)
+ return graphic_local;
+
+ if (graphic_info[graphic_global].bitmap != NULL)
+ return graphic_global;
+
+ return IMG_UNDEFINED;
+}
+
+static int getTitleSound(int nr, boolean initial, boolean is_image)
+{
+ int mode = (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE);
+ int base = (is_image ?
+ (initial ? SND_BACKGROUND_TITLESCREEN_INITIAL_1 :
+ SND_BACKGROUND_TITLESCREEN_1) :
+ (initial ? SND_BACKGROUND_TITLEMESSAGE_INITIAL_1 :
+ SND_BACKGROUND_TITLEMESSAGE_1));
+ int sound_global = menu.sound[mode];
+ int sound_local = base + nr;
+
+#if 0
+ printf("::: %d, %d, %d: %d ['%s'], %d ['%s']\n",
+ nr, initial, is_image,
+ sound_global, getSoundListEntry(sound_global)->filename,
+ sound_local, getSoundListEntry(sound_local)->filename);
+#endif
+
+ if (!strEqual(getSoundListEntry(sound_local)->filename, UNDEFINED_FILENAME))
+ return sound_local;
+
+ if (!strEqual(getSoundListEntry(sound_global)->filename, UNDEFINED_FILENAME))
+ return sound_global;
+
+ return SND_UNDEFINED;
+}
+
+static int getTitleMusic(int nr, boolean initial, boolean is_image)
+{
+ int mode = (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE);
+ int base = (is_image ?
+ (initial ? MUS_BACKGROUND_TITLESCREEN_INITIAL_1 :
+ MUS_BACKGROUND_TITLESCREEN_1) :
+ (initial ? MUS_BACKGROUND_TITLEMESSAGE_INITIAL_1 :
+ MUS_BACKGROUND_TITLEMESSAGE_1));
+ int music_global = menu.music[mode];
+ int music_local = base + nr;
+
+#if 0
+ printf("::: %d, %d, %d: %d ['%s'], %d ['%s']\n",
+ nr, initial, is_image,
+ music_global, getMusicListEntry(music_global)->filename,
+ music_local, getMusicListEntry(music_local)->filename);
+#endif
+
+ if (!strEqual(getMusicListEntry(music_local)->filename, UNDEFINED_FILENAME))
+ return music_local;
+
+ if (!strEqual(getMusicListEntry(music_global)->filename, UNDEFINED_FILENAME))
+ return music_global;
+
+ return MUS_UNDEFINED;
+}
+
static int compareTitleControlInfo(const void *object1, const void *object2)
{
const struct TitleControlInfo *tci1 = (struct TitleControlInfo *)object1;
height = WIN_YSIZE;
}
+ /* always display title screens centered */
dst_x = (WIN_XSIZE - width) / 2;
dst_y = (WIN_YSIZE - height) / 2;
SetDrawBackgroundMask(REDRAW_ALL);
- SetWindowBackgroundImage(IMG_BACKGROUND_TITLE);
+ SetWindowBackgroundImage(getTitleBackground(nr, initial, TRUE));
ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
if (filename == NULL)
return;
- /* force MESSAGE font on title message screen */
- game_status = GAME_MODE_MESSAGE;
+ /* force TITLE font on title message screen */
+ game_status = getTitleMessageGameMode(initial);
/* if chars set to "-1", automatically determine by text and font width */
if (tmi->chars == -1)
tmi->height = tmi->lines * getFontHeight(tmi->font);
SetDrawBackgroundMask(REDRAW_ALL);
- SetWindowBackgroundImage(IMG_BACKGROUND_MESSAGE);
+ SetWindowBackgroundImage(getTitleBackground(nr, initial, FALSE));
ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
{
static unsigned long title_delay = 0;
static int title_screen_nr = 0;
+ static int last_sound = -1, last_music = -1;
boolean return_to_main_menu = FALSE;
boolean use_fading_main_menu = TRUE;
#if 1
boolean use_cross_fading = !show_title_initial; /* default */
#endif
struct TitleControlInfo *tci;
+ int sound, music;
if (button == MB_MENU_INITIALIZE)
{
+#if 0
int last_game_status = game_status; /* save current game status */
+#endif
title_delay = 0;
title_screen_nr = 0;
tci = &title_controls[title_screen_nr];
+ last_sound = SND_UNDEFINED;
+ last_music = MUS_UNDEFINED;
+
#if 0
/* determine number of title screens to display (images and messages) */
InitializeTitleControls();
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 (tci->is_image)
{
DrawTitleScreenImage(tci->local_nr, tci->initial);
title.auto_delay_final = -1;
}
+#if 1
+ sound = getTitleSound(tci->local_nr, tci->initial, tci->is_image);
+ music = getTitleMusic(tci->local_nr, tci->initial, tci->is_image);
+
+ if (sound != last_sound)
+ PlayMenuSoundExt(sound);
+ if (music != last_music)
+ PlayMenuMusicExt(music);
+
+ last_sound = sound;
+ last_music = music;
+#endif
+
SetMouseCursor(CURSOR_NONE);
FadeIn(REDRAW_ALL);
if (title_screen_nr < num_title_screens)
{
- if (!use_cross_fading)
- FadeOut(REDRAW_ALL);
+ sound = getTitleSound(tci->local_nr, tci->initial, tci->is_image);
+ music = getTitleMusic(tci->local_nr, tci->initial, tci->is_image);
+
+ 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 (tci->is_image)
DrawTitleScreenImage(tci->local_nr, tci->initial);
else
DrawTitleScreenMessage(tci->local_nr, tci->initial);
+#if 1
+ sound = getTitleSound(tci->local_nr, tci->initial, tci->is_image);
+ music = getTitleMusic(tci->local_nr, tci->initial, tci->is_image);
+
+ if (sound != last_sound)
+ PlayMenuSoundExt(sound);
+ if (music != last_music)
+ PlayMenuMusicExt(music);
+
+ last_sound = sound;
+ last_music = music;
+#endif
+
if (use_cross_fading)
FadeCross(REDRAW_ALL);
else