X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=5ae63dadb26b462a20d6526db4e8dfe3f04dd793;hb=c6bdf2fa014d0a3dd50260a409704e487e73e572;hp=5c194180bba5f7a2da759b2e5fa18cd2b54ce0fb;hpb=9f7cd608c28ded86b2c2e649c776220ae27df038;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 5c194180..5ae63dad 100644 --- a/src/screens.c +++ b/src/screens.c @@ -494,6 +494,13 @@ 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); @@ -509,6 +516,62 @@ 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; @@ -1307,6 +1370,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 +1379,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 +1416,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 +1429,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 +1490,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