X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=5ae63dadb26b462a20d6526db4e8dfe3f04dd793;hb=c6bdf2fa014d0a3dd50260a409704e487e73e572;hp=51a30367e49f618bb741edd3413f628119e1bbe0;hpb=04cfb5daeff6cbceef152fc01ad5852407c0c918;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 51a30367..5ae63dad 100644 --- a/src/screens.c +++ b/src/screens.c @@ -494,6 +494,84 @@ 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); +} + +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; @@ -926,11 +1004,12 @@ void DrawTitleScreenImage(int nr, boolean initial) 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); @@ -959,6 +1038,7 @@ void DrawTitleScreenMessage(int nr, boolean initial) { 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; @@ -968,27 +1048,48 @@ void DrawTitleScreenMessage(int nr, boolean initial) 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 */ } @@ -1269,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 @@ -1277,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(); @@ -1308,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); @@ -1329,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); @@ -1377,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 @@ -3096,65 +3229,19 @@ void HandleInfoScreen_Version(int button) 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); @@ -3163,18 +3250,18 @@ void DrawInfoScreen_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); }