X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=5c8baa818d64dc46dadc2dff2881631266a40bc2;hb=eb09b9aa5521e286723c668030825cd0e3470c3c;hp=5c194180bba5f7a2da759b2e5fa18cd2b54ce0fb;hpb=9f7cd608c28ded86b2c2e649c776220ae27df038;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 5c194180..5c8baa81 100644 --- a/src/screens.c +++ b/src/screens.c @@ -494,19 +494,104 @@ static struct TitleMessageInfo *getTitleMessageInfo(int nr, boolean initial) 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); + 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 getTitleMessageBackground(boolean initial) +static int getTitleSound(int nr, boolean initial, boolean is_image) { - return (initial ? IMG_BACKGROUND_MESSAGE_INITIAL : IMG_BACKGROUND_MESSAGE); + 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) @@ -946,7 +1031,7 @@ void DrawTitleScreenImage(int nr, boolean initial) dst_y = (WIN_YSIZE - height) / 2; SetDrawBackgroundMask(REDRAW_ALL); - SetWindowBackgroundImage(getTitleScreenBackground(initial)); + SetWindowBackgroundImage(getTitleBackground(nr, initial, TRUE)); ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); @@ -991,7 +1076,7 @@ void DrawTitleScreenMessage(int nr, boolean initial) if (filename == NULL) return; - /* force MESSAGE font on title message screen */ + /* force TITLE font on title message screen */ game_status = getTitleMessageGameMode(initial); /* if chars set to "-1", automatically determine by text and font width */ @@ -1007,7 +1092,7 @@ void DrawTitleScreenMessage(int nr, boolean initial) tmi->height = tmi->lines * getFontHeight(tmi->font); SetDrawBackgroundMask(REDRAW_ALL); - SetWindowBackgroundImage(getTitleMessageBackground(initial)); + SetWindowBackgroundImage(getTitleBackground(nr, initial, FALSE)); ClearRectangleOnBackground(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE); @@ -1307,6 +1392,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { 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 @@ -1315,15 +1401,21 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) 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(); @@ -1346,14 +1438,6 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) 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); @@ -1367,6 +1451,19 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) 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); @@ -1415,17 +1512,37 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) 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