void DrawMaskedBorder(int redraw_mask)
{
/* do not draw masked screen borders when displaying title screens */
- if (effectiveGameStatus() == GAME_MODE_TITLE ||
- effectiveGameStatus() == GAME_MODE_MESSAGE)
+ if (effectiveGameStatus() == GAME_MODE_TITLE)
return;
if (redraw_mask & REDRAW_ALL)
void FadeExt(int fade_mask, int fade_mode)
{
+ static int fade_mode_skip = FADE_MODE_NONE;
void (*draw_border_function)(void) = NULL;
Bitmap *bitmap = (fade_mode == FADE_MODE_CROSSFADE ? bitmap_db_cross : NULL);
int x, y, width, height;
int fade_delay, post_delay;
+ redraw_mask |= fade_mask;
+
+ if (fade_mode & FADE_TYPE_SKIP)
+ {
+ fade_mode_skip = fade_mode;
+
+ return;
+ }
+
+ if (fade_mode_skip & FADE_TYPE_SKIP)
+ {
+#if 0
+ printf("::: skipping %d ... [%d]\n", fade_mode, fade_mode_skip);
+#endif
+
+ /* skip all fade operations until specified fade operation */
+ if (fade_mode & fade_mode_skip)
+ fade_mode_skip = FADE_MODE_NONE;
+
+ return;
+ }
+
+#if 1
+ if (fading.fade_mode == FADE_MODE_NONE)
+ return;
+#endif
+
if (fade_mask & REDRAW_FIELD)
{
x = REAL_SX;
width = FULL_SXSIZE;
height = FULL_SYSIZE;
- fade_delay = menu.fade_delay;
- post_delay = (fade_mode == FADE_MODE_FADE_OUT ? menu.post_delay : 0);
+ fade_delay = fading.fade_delay;
+ post_delay = (fade_mode == FADE_MODE_FADE_OUT ? fading.post_delay : 0);
draw_border_function = DrawMaskedBorder_FIELD;
}
width = WIN_XSIZE;
height = WIN_YSIZE;
- fade_delay = title.fade_delay_final;
- post_delay = (fade_mode == FADE_MODE_FADE_OUT ? title.post_delay_final : 0);
+ fade_delay = fading.fade_delay;
+ post_delay = (fade_mode == FADE_MODE_FADE_OUT ? fading.post_delay : 0);
}
- redraw_mask |= fade_mask;
-
+#if 1
if (!setup.fade_screens || fade_delay == 0)
+#else
+ if (!setup.fade_screens || fade_delay == 0 || fading.anim_mode == ANIM_NONE)
+#endif
{
if (fade_mode == FADE_MODE_FADE_OUT)
ClearRectangle(backbuffer, x, y, width, height);
void FadeIn(int fade_mask)
{
+#if 1
+ if (fading.fade_mode == FADE_MODE_CROSSFADE)
+ FadeExt(fade_mask, FADE_MODE_CROSSFADE);
+ else
+ FadeExt(fade_mask, FADE_MODE_FADE_IN);
+#else
FadeExt(fade_mask, FADE_MODE_FADE_IN);
+#endif
}
void FadeOut(int fade_mask)
{
+#if 1
+ if (fading.fade_mode == FADE_MODE_CROSSFADE)
+ FadeCrossSaveBackbuffer();
+ else
+ FadeExt(fade_mask, FADE_MODE_FADE_OUT);
+#else
FadeExt(fade_mask, FADE_MODE_FADE_OUT);
+#endif
}
void FadeCross(int fade_mask)
BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
}
+void FadeSetEnterMenu()
+{
+ fading = menu.enter_menu;
+}
+
+void FadeSetLeaveMenu()
+{
+ fading = menu.leave_menu;
+}
+
+void FadeSetStartItem()
+{
+ fading = menu.start_item;
+}
+
+void FadeSetFromType(int type)
+{
+ if (type & TYPE_ENTER_SCREEN)
+ FadeSetStartItem();
+ else if (type & TYPE_ENTER)
+ FadeSetEnterMenu();
+ else if (type & TYPE_LEAVE)
+ FadeSetLeaveMenu();
+}
+
+void FadeSetDisabled()
+{
+ static struct TitleFadingInfo fading_none = { FADE_MODE_NONE, -1, -1, -1 };
+
+ fading = fading_none;
+}
+
+void FadeSkipNextFadeIn()
+{
+ FadeExt(0, FADE_MODE_SKIP_FADE_IN);
+}
+
+void FadeSkipNextFadeOut()
+{
+ FadeExt(0, FADE_MODE_SKIP_FADE_OUT);
+}
+
void SetWindowBackgroundImageIfDefined(int graphic)
{
if (graphic_info[graphic].bitmap)
int real_preview_xsize = MIN(level_xsize, preview.xsize);
int real_preview_ysize = MIN(level_ysize, preview.ysize);
int dst_x = SX + ALIGNED_XPOS(preview.x, preview_width, preview.align);
- int dst_y = SY + preview.y;
+ int dst_y = SY + ALIGNED_YPOS(preview.y, preview_height, preview.valign);
int x, y;
DrawBackground(dst_x, dst_y, preview_width, preview_height);
struct TextPosInfo *pos = &menu.main.text.level_info_2;
char label_text[MAX_OUTPUT_LINESIZE + 1];
int max_len_label_text;
+#if 1
+ int font_nr = pos->font;
+ int i;
+
+ if (mode == MICROLABEL_LEVEL_AUTHOR_HEAD ||
+ mode == MICROLABEL_IMPORTED_FROM_HEAD ||
+ mode == MICROLABEL_IMPORTED_BY_HEAD)
+ font_nr = pos->font_alt;
+#else
int font_nr = FONT_TEXT_2;
int i;
mode == MICROLABEL_IMPORTED_FROM_HEAD ||
mode == MICROLABEL_IMPORTED_BY_HEAD)
font_nr = FONT_TEXT_3;
+#endif
#if 1
max_len_label_text = getMaxTextLength(pos, font_nr);
int level_ysize = lev_fieldy + (show_level_border ? 2 : 0);
int last_game_status = game_status; /* save current game status */
+#if 0
/* force PREVIEW font on preview level */
game_status = GAME_MODE_PSEUDO_PREVIEW;
+#endif
if (restart)
{
{
struct TextPosInfo *pos = &menu.main.text.level_info_1;
char label_text[MAX_OUTPUT_LINESIZE + 1];
+#if 1
+ int font_nr = pos->font;
+#else
int font_nr = FONT_TEXT_1;
+#endif
#if 1
int max_len_label_text = getMaxTextLength(pos, font_nr);
#else
/* clear door drawing field */
DrawBackground(DX, DY, DXSIZE, DYSIZE);
- /* force DOOR font on preview level */
+ /* force DOOR font inside door area */
game_status = GAME_MODE_PSEUDO_DOOR;
/* write text for request */
if (setup.quick_doors)
{
- stepsize = 20; /* must be choosen to always draw last frame */
+ stepsize = 20; /* must be chosen to always draw last frame */
door_delay_value = 0;
}
#endif
}
-void PlayMenuSound()
+void PlayMenuSoundExt(int sound)
{
- int sound = menu.sound[game_status];
-
if (sound == SND_UNDEFINED)
return;
PlaySound(sound);
}
+void PlayMenuSound()
+{
+ PlayMenuSoundExt(menu.sound[game_status]);
+}
+
void PlayMenuSoundStereo(int sound, int stereo_position)
{
if (sound == SND_UNDEFINED)
PlaySoundStereo(sound, stereo_position);
}
-void PlayMenuSoundIfLoop()
+void PlayMenuSoundIfLoopExt(int sound)
{
- int sound = menu.sound[game_status];
-
if (sound == SND_UNDEFINED)
return;
PlaySoundLoop(sound);
}
-void PlayMenuMusic()
+void PlayMenuSoundIfLoop()
{
- int music = menu.music[game_status];
+ PlayMenuSoundIfLoopExt(menu.sound[game_status]);
+}
+void PlayMenuMusicExt(int music)
+{
if (music == MUS_UNDEFINED)
return;
PlayMusic(music);
}
+void PlayMenuMusic()
+{
+ PlayMenuMusicExt(menu.music[game_status]);
+}
+
void PlaySoundActivating()
{
#if 0