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_MESSAGE_INITIAL : GAME_MODE_MESSAGE);
+}
+
+static int getTitleScreenBackground(boolean initial)
+{
+ return (initial ? IMG_BACKGROUND_TITLE_INITIAL : IMG_BACKGROUND_TITLE);
+}
+
+static int getTitleMessageBackground(boolean initial)
+{
+ return (initial ? IMG_BACKGROUND_MESSAGE_INITIAL : IMG_BACKGROUND_MESSAGE);
+}
+
+static int getTitleSound(int nr, boolean initial, boolean is_image)
+{
+ int mode = (is_image ?
+ (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE) :
+ (initial ? GAME_MODE_MESSAGE_INITIAL : GAME_MODE_MESSAGE));
+ int base = (is_image ?
+ (initial ? SND_TITLESCREEN_INITIAL_1 : SND_TITLESCREEN_1) :
+ (initial ? SND_TITLEMESSAGE_INITIAL_1 : SND_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 = (is_image ?
+ (initial ? GAME_MODE_TITLE_INITIAL : GAME_MODE_TITLE) :
+ (initial ? GAME_MODE_MESSAGE_INITIAL : GAME_MODE_MESSAGE));
+ int base = (is_image ?
+ (initial ? MUS_TITLESCREEN_INITIAL_1 : MUS_TITLESCREEN_1) :
+ (initial ? MUS_TITLEMESSAGE_INITIAL_1 : MUS_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(getTitleScreenBackground(initial));
ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
{
char *filename = getLevelSetTitleMessageFilename(nr, initial);
struct TitleMessageInfo *tmi = getTitleMessageInfo(nr, initial);
+#if 0
int font_nr = FONT_TEXT_1;
int font_width;
int font_height;
int sy = pad_y;
int max_chars_per_line;
int max_lines_per_screen;
+#endif
int last_game_status = game_status; /* save current game status */
if (filename == NULL)
return;
+ /* force MESSAGE 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->chars = tmi->width / getFontWidth(tmi->font);
+ else
+ tmi->width = tmi->chars * getFontWidth(tmi->font);
+
+ /* if lines set to "-1", automatically determine by text and font height */
+ if (tmi->lines == -1)
+ tmi->lines = tmi->height / getFontHeight(tmi->font);
+ else
+ tmi->height = tmi->lines * getFontHeight(tmi->font);
+
SetDrawBackgroundMask(REDRAW_ALL);
- SetWindowBackgroundImage(IMG_BACKGROUND_MESSAGE);
+ SetWindowBackgroundImage(getTitleMessageBackground(initial));
ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
- /* force MESSAGE font on title message screen */
- game_status = GAME_MODE_MESSAGE;
-
+#if 0
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;
+#endif
+#if 1
+ DrawTextFile(ALIGNED_TEXT_XPOS(tmi), ALIGNED_TEXT_YPOS(tmi),
+ filename, tmi->font, tmi->chars, -1, tmi->lines, -1,
+ tmi->autowrap, tmi->centered, tmi->skip_comments);
+#else
DrawTextFile(sx, sy, filename, font_nr, max_chars_per_line, -1,
max_lines_per_screen, -1, tmi->autowrap, tmi->centered,
tmi->skip_comments);
+#endif
game_status = last_game_status; /* restore current game status */
}
{
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
void DrawInfoScreen_LevelSet()
{
struct TitleMessageInfo *tmi = &readme;
- int ystart1 = mSY - SY + 100;
- int ystart2 = mSY - SY + 150;
- int ybottom = mSY - SY + SYSIZE - 20;
char *filename = getLevelSetInfoFilename();
-#if 1
-#if 1
- int font_nr = tmi->font;
-#else
- int font_nr = FONT_INFO_LEVELSET;
-#endif
-#else
- int font_nr = FONT_LEVEL_NUMBER;
-#endif
-#if 0
- int font_width = getFontWidth(font_nr);
- int font_height = getFontHeight(font_nr);
-#endif
-#if 1
-#if 0
- int sx = mSX + ALIGNED_TEXT_XPOS(tmi);
- int sy = mSY + ALIGNED_TEXT_YPOS(tmi);
-#endif
-#if 0
- int width = tmi->width;
- int height = tmi->height;
-#endif
-#else
- int pad_x = 32;
- int pad_y = 150;
- int sx = mSX + pad_x;
- int sy = mSY + pad_y;
- int width = SXSIZE - 2 * pad_x;
- int height = SYSIZE - pad_y;
-#endif
-#if 1
-#if 0
- int max_chars = tmi->chars;
- int max_lines = tmi->lines;
-#endif
-#else
- int max_chars_per_line = width / font_width;
-#if 1
- int max_lines_per_screen = height / font_height;
-#else
- int max_lines_per_screen = height / font_height - 1; /* minus footer line */
-#endif
-#endif
/* if chars set to "-1", automatically determine by text and font width */
if (tmi->chars == -1)
- tmi->chars = tmi->width / getFontWidth(font_nr);
+ tmi->chars = tmi->width / getFontWidth(tmi->font);
else
- tmi->width = tmi->chars * getFontWidth(font_nr);
+ tmi->width = tmi->chars * getFontWidth(tmi->font);
/* if lines set to "-1", automatically determine by text and font height */
if (tmi->lines == -1)
- tmi->lines = tmi->height / getFontHeight(font_nr);
+ tmi->lines = tmi->height / getFontHeight(tmi->font);
else
- tmi->height = tmi->lines * getFontHeight(font_nr);
+ tmi->height = tmi->lines * getFontHeight(tmi->font);
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
ClearWindow();
DrawHeadline();
- DrawTextSCentered(ystart1, FONT_TEXT_1, "Level Set Information:");
-
- DrawTextSCentered(ybottom, FONT_TEXT_4,
- "Press any key or button for info menu");
+ DrawTextCentered(mSY + 100, FONT_TEXT_1, "Level Set Information:");
if (filename != NULL)
DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi),
- filename, font_nr, tmi->chars, -1, tmi->lines, -1,
+ filename, tmi->font, tmi->chars, -1, tmi->lines, -1,
tmi->autowrap, tmi->centered, tmi->skip_comments);
else
- DrawTextSCentered(ystart2, FONT_TEXT_2,
- "No information for this level set.");
+ DrawTextCentered(mSY + ALIGNED_TEXT_YPOS(tmi), FONT_TEXT_2,
+ "No information for this level set.");
+
+ DrawTextCentered(mSY + SYSIZE - 20, FONT_TEXT_4,
+ "Press any key or button for info menu");
FadeIn(REDRAW_FIELD);
}