#include "init.h"
#include "game.h"
#include "events.h"
-#include "cartoons.h"
+#include "anim.h"
#include "network.h"
#include "tape.h"
#include "screens.h"
{
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_1,
+ IMG_GFX_DOOR_1_PART_1,
&door_1.part_1
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_2,
+ IMG_GFX_DOOR_1_PART_2,
&door_1.part_2
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_3,
+ IMG_GFX_DOOR_1_PART_3,
&door_1.part_3
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_4,
+ IMG_GFX_DOOR_1_PART_4,
&door_1.part_4
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_5,
+ IMG_GFX_DOOR_1_PART_5,
&door_1.part_5
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_6,
+ IMG_GFX_DOOR_1_PART_6,
&door_1.part_6
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_7,
+ IMG_GFX_DOOR_1_PART_7,
&door_1.part_7
},
{
DOOR_1,
- IMG_DOOR_1_GFX_PART_8,
+ IMG_GFX_DOOR_1_PART_8,
&door_1.part_8
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_1,
+ IMG_GFX_DOOR_2_PART_1,
&door_2.part_1
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_2,
+ IMG_GFX_DOOR_2_PART_2,
&door_2.part_2
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_3,
+ IMG_GFX_DOOR_2_PART_3,
&door_2.part_3
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_4,
+ IMG_GFX_DOOR_2_PART_4,
&door_2.part_4
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_5,
+ IMG_GFX_DOOR_2_PART_5,
&door_2.part_5
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_6,
+ IMG_GFX_DOOR_2_PART_6,
&door_2.part_6
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_7,
+ IMG_GFX_DOOR_2_PART_7,
&door_2.part_7
},
{
DOOR_2,
- IMG_DOOR_2_GFX_PART_8,
+ IMG_GFX_DOOR_2_PART_8,
&door_2.part_8
},
static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS];
static int request_gadget_id = -1;
-static unsigned int sync_frame_delay = 0;
-static unsigned int sync_frame_delay_value = GAME_FRAME_DELAY;
-
static char *print_if_not_empty(int element)
{
static char *s = NULL;
void SetDrawtoField(int mode)
{
- if (mode == DRAW_FIELDBUFFER)
+ if (mode == DRAW_TO_FIELDBUFFER)
{
FX = 2 * TILEX_VAR;
FY = 2 * TILEY_VAR;
drawto_field = fieldbuffer;
}
- else /* DRAW_BACKBUFFER */
+ else /* DRAW_TO_BACKBUFFER */
{
FX = SX;
FY = SY;
}
static void DrawMaskedBorderExt_Rect(int x, int y, int width, int height,
- boolean blit_to_screen)
+ int draw_target)
{
- Bitmap *bitmap = getGlobalBorderBitmapFromGameStatus();
+ Bitmap *src_bitmap = getGlobalBorderBitmapFromStatus(global.border_status);
+ Bitmap *dst_bitmap = gfx.masked_border_bitmap_ptr;
if (x == -1 && y == -1)
return;
- if (blit_to_screen)
- BlitToScreenMasked(bitmap, x, y, width, height, x, y);
+ if (draw_target == DRAW_TO_SCREEN)
+ BlitToScreenMasked(src_bitmap, x, y, width, height, x, y);
else
- BlitBitmapMasked(bitmap, backbuffer, x, y, width, height, x, y);
+ BlitBitmapMasked(src_bitmap, dst_bitmap, x, y, width, height, x, y);
}
-static void DrawMaskedBorderExt_FIELD(boolean blit_to_screen)
+static void DrawMaskedBorderExt_FIELD(int draw_target)
{
- if (global.border_status >= GAME_MODE_TITLE &&
+ if (global.border_status >= GAME_MODE_MAIN &&
global.border_status <= GAME_MODE_PLAYING &&
border.draw_masked[global.border_status])
DrawMaskedBorderExt_Rect(REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
- blit_to_screen);
+ draw_target);
}
-static void DrawMaskedBorderExt_DOOR_1(boolean blit_to_screen)
+static void DrawMaskedBorderExt_DOOR_1(int draw_target)
{
- // only draw border over closed doors when drawing to backbuffer
- if (!blit_to_screen && (GetDoorState() & DOOR_OPEN_1))
+ // when drawing to backbuffer, never draw border over open doors
+ if (draw_target == DRAW_TO_BACKBUFFER &&
+ (GetDoorState() & DOOR_OPEN_1))
return;
if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] &&
(global.border_status != GAME_MODE_EDITOR ||
border.draw_masked[GFX_SPECIAL_ARG_EDITOR]))
- DrawMaskedBorderExt_Rect(DX, DY, DXSIZE, DYSIZE, blit_to_screen);
+ DrawMaskedBorderExt_Rect(DX, DY, DXSIZE, DYSIZE, draw_target);
}
-static void DrawMaskedBorderExt_DOOR_2(boolean blit_to_screen)
+static void DrawMaskedBorderExt_DOOR_2(int draw_target)
{
- // only draw border over closed doors when drawing to backbuffer
- if (!blit_to_screen && (GetDoorState() & DOOR_OPEN_2))
+ // when drawing to backbuffer, never draw border over open doors
+ if (draw_target == DRAW_TO_BACKBUFFER &&
+ (GetDoorState() & DOOR_OPEN_2))
return;
if (border.draw_masked[GFX_SPECIAL_ARG_DOOR] &&
global.border_status != GAME_MODE_EDITOR)
- DrawMaskedBorderExt_Rect(VX, VY, VXSIZE, VYSIZE, blit_to_screen);
+ DrawMaskedBorderExt_Rect(VX, VY, VXSIZE, VYSIZE, draw_target);
}
-static void DrawMaskedBorderExt_DOOR_3(boolean blit_to_screen)
+static void DrawMaskedBorderExt_DOOR_3(int draw_target)
{
/* currently not available */
}
-static void DrawMaskedBorderExt_ALL(boolean blit_to_screen)
+static void DrawMaskedBorderExt_ALL(int draw_target)
{
- DrawMaskedBorderExt_FIELD(blit_to_screen);
- DrawMaskedBorderExt_DOOR_1(blit_to_screen);
- DrawMaskedBorderExt_DOOR_2(blit_to_screen);
- DrawMaskedBorderExt_DOOR_3(blit_to_screen);
+ DrawMaskedBorderExt_FIELD(draw_target);
+ DrawMaskedBorderExt_DOOR_1(draw_target);
+ DrawMaskedBorderExt_DOOR_2(draw_target);
+ DrawMaskedBorderExt_DOOR_3(draw_target);
}
-static void DrawMaskedBorderExt(int redraw_mask, boolean blit_to_screen)
+static void DrawMaskedBorderExt(int redraw_mask, int draw_target)
{
/* never draw masked screen borders on borderless screens */
- if (game_status == GAME_MODE_LOADING ||
- game_status == GAME_MODE_TITLE)
+ if (global.border_status == GAME_MODE_LOADING ||
+ global.border_status == GAME_MODE_TITLE)
return;
if (redraw_mask & REDRAW_ALL)
- DrawMaskedBorderExt_ALL(blit_to_screen);
+ DrawMaskedBorderExt_ALL(draw_target);
else
{
if (redraw_mask & REDRAW_FIELD)
- DrawMaskedBorderExt_FIELD(blit_to_screen);
+ DrawMaskedBorderExt_FIELD(draw_target);
if (redraw_mask & REDRAW_DOOR_1)
- DrawMaskedBorderExt_DOOR_1(blit_to_screen);
+ DrawMaskedBorderExt_DOOR_1(draw_target);
if (redraw_mask & REDRAW_DOOR_2)
- DrawMaskedBorderExt_DOOR_2(blit_to_screen);
+ DrawMaskedBorderExt_DOOR_2(draw_target);
if (redraw_mask & REDRAW_DOOR_3)
- DrawMaskedBorderExt_DOOR_3(blit_to_screen);
+ DrawMaskedBorderExt_DOOR_3(draw_target);
}
}
void DrawMaskedBorder_FIELD()
{
- DrawMaskedBorderExt_FIELD(FALSE);
+ DrawMaskedBorderExt_FIELD(DRAW_TO_BACKBUFFER);
}
void DrawMaskedBorder(int redraw_mask)
{
- DrawMaskedBorderExt(redraw_mask, FALSE);
+ DrawMaskedBorderExt(redraw_mask, DRAW_TO_BACKBUFFER);
}
-void DrawMaskedBorderToScreen(int redraw_mask)
+void DrawMaskedBorderToTarget(int draw_target)
{
- DrawMaskedBorderExt(redraw_mask, TRUE);
+ if (draw_target == DRAW_TO_BACKBUFFER ||
+ draw_target == DRAW_TO_SCREEN)
+ {
+ DrawMaskedBorderExt(REDRAW_ALL, draw_target);
+ }
+ else
+ {
+ int last_border_status = global.border_status;
+
+ if (draw_target == DRAW_TO_FADE_SOURCE)
+ {
+ global.border_status = gfx.fade_border_source_status;
+ gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_source;
+ }
+ else if (draw_target == DRAW_TO_FADE_TARGET)
+ {
+ global.border_status = gfx.fade_border_target_status;
+ gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_target;
+ }
+
+ DrawMaskedBorderExt(REDRAW_ALL, draw_target);
+
+ global.border_status = last_border_status;
+ gfx.masked_border_bitmap_ptr = backbuffer;
+ }
}
void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
void BackToFront()
{
+ static int last_redraw_mask = REDRAW_NONE;
+
+ // force screen redraw in every frame to continue drawing global animations
+ // (but always use the last redraw mask to prevent unwanted side effects)
if (redraw_mask == REDRAW_NONE)
- return;
+ redraw_mask = last_redraw_mask;
+
+ last_redraw_mask = redraw_mask;
#if 1
// masked border now drawn immediately when blitting backbuffer to window
redraw_mask = REDRAW_NONE;
- // force screen redraw in every frame to continue drawing global animations
- redraw_mask = REDRAW_FIELD;
-
#if DEBUG_FRAME_TIME
PrintFrameTimeDebugging();
#endif
}
+void BackToFront_WithFrameDelay(unsigned int frame_delay_value)
+{
+ unsigned int frame_delay_value_old = GetVideoFrameDelay();
+
+ SetVideoFrameDelay(frame_delay_value);
+
+ BackToFront();
+
+ SetVideoFrameDelay(frame_delay_value_old);
+}
+
static void FadeCrossSaveBackbuffer()
{
BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
redraw_mask &= ~fade_mask;
}
-static void SetAnimStatus_BeforeFadingOut()
+static void SetScreenStates_BeforeFadingIn()
{
- global.anim_status = GAME_MODE_PSEUDO_FADING;
}
-static void SetAnimStatus_AfterFadingIn()
+static void SetScreenStates_AfterFadingIn()
{
+ // store new source screen (to use correct masked border for fading)
+ gfx.fade_border_source_status = global.border_status;
+
global.anim_status = global.anim_status_next;
// force update of global animation status in case of rapid screen changes
BackToFront();
}
+static void SetScreenStates_BeforeFadingOut()
+{
+ // store new target screen (to use correct masked border for fading)
+ gfx.fade_border_target_status = game_status;
+
+ global.anim_status = GAME_MODE_PSEUDO_FADING;
+}
+
+static void SetScreenStates_AfterFadingOut()
+{
+ global.border_status = game_status;
+}
+
void FadeIn(int fade_mask)
{
+ SetScreenStates_BeforeFadingIn();
+
#if 1
DrawMaskedBorder(REDRAW_ALL);
#endif
FADE_SXSIZE = FULL_SXSIZE;
FADE_SYSIZE = FULL_SYSIZE;
- SetAnimStatus_AfterFadingIn();
+ SetScreenStates_AfterFadingIn();
}
void FadeOut(int fade_mask)
{
- SetAnimStatus_BeforeFadingOut();
+ SetScreenStates_BeforeFadingOut();
#if 0
DrawMaskedBorder(REDRAW_ALL);
else
FadeExt(fade_mask, FADE_MODE_FADE_OUT, FADE_TYPE_FADE_OUT);
- global.border_status = game_status;
+ SetScreenStates_AfterFadingOut();
}
static void FadeSetLeaveNext(struct TitleFadingInfo fading_leave, boolean set)
return getBitmapFromGraphicOrDefault(graphic, IMG_GLOBAL_BORDER);
}
-Bitmap *getGlobalBorderBitmapFromGameStatus()
+Bitmap *getGlobalBorderBitmapFromStatus(int status)
{
int graphic =
- (game_status == GAME_MODE_MAIN ||
- game_status == GAME_MODE_PSEUDO_TYPENAME ? IMG_GLOBAL_BORDER_MAIN :
- game_status == GAME_MODE_SCORES ? IMG_GLOBAL_BORDER_SCORES :
- game_status == GAME_MODE_EDITOR ? IMG_GLOBAL_BORDER_EDITOR :
- game_status == GAME_MODE_PLAYING ? IMG_GLOBAL_BORDER_PLAYING :
+ (status == GAME_MODE_MAIN ||
+ status == GAME_MODE_PSEUDO_TYPENAME ? IMG_GLOBAL_BORDER_MAIN :
+ status == GAME_MODE_SCORES ? IMG_GLOBAL_BORDER_SCORES :
+ status == GAME_MODE_EDITOR ? IMG_GLOBAL_BORDER_EDITOR :
+ status == GAME_MODE_PLAYING ? IMG_GLOBAL_BORDER_PLAYING :
IMG_GLOBAL_BORDER);
return getGlobalBorderBitmap(graphic);
return FALSE;
// determine and store new global border bitmap for current game status
- global_border_bitmap = getGlobalBorderBitmapFromGameStatus();
+ global_border_bitmap = getGlobalBorderBitmapFromStatus(game_status);
return (global_border_bitmap_last != global_border_bitmap);
}
void RedrawGlobalBorder()
{
- Bitmap *bitmap = getGlobalBorderBitmapFromGameStatus();
+ Bitmap *bitmap = getGlobalBorderBitmapFromStatus(game_status);
RedrawGlobalBorderFromBitmap(bitmap);
if (game_status == GAME_MODE_PLAYING)
{
ClearRectangle(fieldbuffer, 0, 0, FXSIZE, FYSIZE);
- SetDrawtoField(DRAW_FIELDBUFFER);
+ SetDrawtoField(DRAW_TO_FIELDBUFFER);
}
else
{
- SetDrawtoField(DRAW_BACKBUFFER);
+ SetDrawtoField(DRAW_TO_BACKBUFFER);
}
}
int sy = SY + (SYSIZE - ysize * font_height) / 2;
int xx, yy;
- SetDrawtoField(DRAW_FIELDBUFFER);
+ SetDrawtoField(DRAW_TO_FIELDBUFFER);
BlitScreenToBitmap(backbuffer);
- SetDrawtoField(DRAW_BACKBUFFER);
+ SetDrawtoField(DRAW_TO_BACKBUFFER);
for (yy = 0; yy < ysize; yy++)
for (xx = 0; xx < xsize; xx++)
game.envelope_active = FALSE;
- SetDrawtoField(DRAW_FIELDBUFFER);
+ SetDrawtoField(DRAW_TO_FIELDBUFFER);
redraw_mask |= REDRAW_FIELD;
BackToFront();
void DrawEnvelopeRequest(char *text)
{
- int last_game_status = game_status; /* save current game status */
char *text_final = text;
char *text_door_style = NULL;
int graphic = IMG_BACKGROUND_REQUEST;
tile_size, tile_size);
/* force DOOR font inside door area */
- SetGameStatus(GAME_MODE_PSEUDO_DOOR);
+ SetFontStatus(GAME_MODE_PSEUDO_DOOR);
DrawTextBuffer(sx + sx_offset, sy + sy_offset, text_final, font_nr,
line_length, -1, max_lines, line_spacing, mask_mode,
request.autowrap, request.centered, FALSE);
- SetGameStatus(last_game_status); /* restore current game status */
+ ResetFontStatus();
for (i = 0; i < NUM_TOOL_BUTTONS; i++)
RedrawGadget(tool_gadget[i]);
redraw_mask |= REDRAW_FIELD;
- DoAnimation();
BackToFront();
SkipUntilDelayReached(&anim_delay, anim_delay_value, &i, last_frame);
if (game_status == GAME_MODE_PLAYING)
BlitScreenToBitmap(backbuffer);
- SetDrawtoField(DRAW_BACKBUFFER);
+ SetDrawtoField(DRAW_TO_BACKBUFFER);
// SetDrawBackgroundMask(REDRAW_NONE);
}
DrawEnvelopeRequest(text);
-
- if (game_status != GAME_MODE_MAIN)
- InitAnimation();
}
game.envelope_active = TRUE; /* needed for RedrawPlayfield() events */
game.envelope_active = FALSE;
if (action == ACTION_CLOSING)
- {
- if (game_status != GAME_MODE_MAIN)
- StopAnimation();
-
BlitBitmap(bitmap_db_store, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
- }
// SetDrawBackgroundMask(last_draw_background_mask);
redraw_mask |= REDRAW_FIELD;
- if (game_status == GAME_MODE_MAIN)
- DoAnimation();
-
BackToFront();
if (action == ACTION_CLOSING &&
game_status == GAME_MODE_PLAYING &&
level.game_engine_type == GAME_ENGINE_TYPE_RND)
- SetDrawtoField(DRAW_FIELDBUFFER);
+ SetDrawtoField(DRAW_TO_FIELDBUFFER);
}
void DrawPreviewElement(int dst_x, int dst_y, int element, int tilesize)
boolean show_level_border = (BorderElement != EL_EMPTY);
int level_xsize = lev_fieldx + (show_level_border ? 2 : 0);
int level_ysize = lev_fieldy + (show_level_border ? 2 : 0);
- int last_game_status = game_status; /* save current game status */
if (restart)
{
DrawTextSAligned(pos->x, pos->y, label_text, font_nr, pos->align);
}
- SetGameStatus(last_game_status); /* restore current game status */
-
return;
}
DrawPreviewLevelLabelExt(label_state);
}
-
- SetGameStatus(last_game_status); /* restore current game status */
}
void DrawPreviewLevelInitial()
still_wait = FALSE;
}
- DoAnimation();
-
- WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
+ BackToFront();
}
}
{
if (level_solved)
{
- SetDrawtoField(DRAW_FIELDBUFFER);
+ SetDrawtoField(DRAW_TO_FIELDBUFFER);
HandleGameActions();
- SetDrawtoField(DRAW_BACKBUFFER);
+ SetDrawtoField(DRAW_TO_BACKBUFFER);
if (global.use_envelope_request)
{
BlitBitmap(drawto, bitmap_db_cross, sx, sy, width, height, sx, sy);
}
}
- else
- {
- DoAnimation();
- }
BackToFront();
-
- WaitUntilDelayReached(&sync_frame_delay, sync_frame_delay_value);
}
return result;
static boolean RequestDoor(char *text, unsigned int req_state)
{
unsigned int old_door_state;
- int last_game_status = game_status; /* save current game status */
int max_request_line_len = MAX_REQUEST_LINE_FONT1_LEN;
int font_nr = FONT_TEXT_2;
char *text_ptr;
DrawBackground(DX, DY, DXSIZE, DYSIZE);
/* force DOOR font inside door area */
- SetGameStatus(GAME_MODE_PSEUDO_DOOR);
+ SetFontStatus(GAME_MODE_PSEUDO_DOOR);
/* write text for request */
for (text_ptr = text, ty = 0; ty < MAX_REQUEST_LINES; ty++)
// text_ptr += tl + (tc == ' ' || tc == '?' || tc == '!' ? 1 : 0);
}
- SetGameStatus(last_game_status); /* restore current game status */
+ ResetFontStatus();
if (req_state & REQ_ASK)
{
return FALSE;
}
- if (game_status != GAME_MODE_MAIN)
- InitAnimation();
-
SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
// ---------- handle request buttons ----------
result = RequestHandleEvents(req_state);
- if (game_status != GAME_MODE_MAIN)
- StopAnimation();
-
UnmapToolButtons();
if (!(req_state & REQ_STAY_OPEN))
// ---------- handle request buttons ----------
result = RequestHandleEvents(req_state);
- if (game_status != GAME_MODE_MAIN)
- StopAnimation();
-
UnmapToolButtons();
ShowEnvelopeRequest(text, req_state, ACTION_CLOSING);
}
doors[] =
{
- { DOOR_1, IMG_DOOR_1_GFX_PART_1, IMG_DOOR_1_GFX_PART_8, &door_1 },
- { DOOR_2, IMG_DOOR_2_GFX_PART_1, IMG_DOOR_2_GFX_PART_8, &door_2 },
+ { DOOR_1, IMG_GFX_DOOR_1_PART_1, IMG_GFX_DOOR_1_PART_8, &door_1 },
+ { DOOR_2, IMG_GFX_DOOR_2_PART_1, IMG_GFX_DOOR_2_PART_8, &door_2 },
{ -1, -1, -1, NULL }
};
{
BackToFront();
- if (game_status == GAME_MODE_MAIN)
- DoAnimation();
-
SkipUntilDelayReached(&door_delay, door_delay_value, &k, last_frame);
current_move_delay += max_step_delay;
} toolbutton_info[NUM_TOOL_BUTTONS] =
{
{
- IMG_REQUEST_BUTTON_GFX_YES, &request.button.yes,
+ IMG_GFX_REQUEST_BUTTON_YES, &request.button.yes,
TOOL_CTRL_ID_YES, "yes"
},
{
- IMG_REQUEST_BUTTON_GFX_NO, &request.button.no,
+ IMG_GFX_REQUEST_BUTTON_NO, &request.button.no,
TOOL_CTRL_ID_NO, "no"
},
{
- IMG_REQUEST_BUTTON_GFX_CONFIRM, &request.button.confirm,
+ IMG_GFX_REQUEST_BUTTON_CONFIRM, &request.button.confirm,
TOOL_CTRL_ID_CONFIRM, "confirm"
},
{
- IMG_REQUEST_BUTTON_GFX_PLAYER_1, &request.button.player_1,
+ IMG_GFX_REQUEST_BUTTON_PLAYER_1, &request.button.player_1,
TOOL_CTRL_ID_PLAYER_1, "player 1"
},
{
- IMG_REQUEST_BUTTON_GFX_PLAYER_2, &request.button.player_2,
+ IMG_GFX_REQUEST_BUTTON_PLAYER_2, &request.button.player_2,
TOOL_CTRL_ID_PLAYER_2, "player 2"
},
{
- IMG_REQUEST_BUTTON_GFX_PLAYER_3, &request.button.player_3,
+ IMG_GFX_REQUEST_BUTTON_PLAYER_3, &request.button.player_3,
TOOL_CTRL_ID_PLAYER_3, "player 3"
},
{
- IMG_REQUEST_BUTTON_GFX_PLAYER_4, &request.button.player_4,
+ IMG_GFX_REQUEST_BUTTON_PLAYER_4, &request.button.player_4,
TOOL_CTRL_ID_PLAYER_4, "player 4"
}
};
{
boolean change_fullscreen = (setup.fullscreen !=
video.fullscreen_enabled);
- boolean change_fullscreen_mode = (video.fullscreen_enabled &&
- !strEqual(setup.fullscreen_mode,
- video.fullscreen_mode_current));
boolean change_window_scaling_percent = (!video.fullscreen_enabled &&
setup.window_scaling_percent !=
video.window_scaling_percent);
#endif
if (change_fullscreen ||
- change_fullscreen_mode ||
change_window_scaling_percent)
{
Bitmap *tmp_backbuffer = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH);
/* save backbuffer content which gets lost when toggling fullscreen mode */
BlitBitmap(backbuffer, tmp_backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
- if (change_fullscreen_mode)
- {
- /* keep fullscreen, but change fullscreen mode (screen resolution) */
- video.fullscreen_enabled = FALSE; /* force new fullscreen mode */
- }
-
if (change_window_scaling_percent)
{
/* keep window mode, but change window scaling */
*height = MAX(*height, height2);
}
+void SetAnimStatus(int anim_status_new)
+{
+ if (anim_status_new == GAME_MODE_MAIN)
+ anim_status_new = GAME_MODE_PSEUDO_MAINONLY;
+
+ global.anim_status_next = anim_status_new;
+
+ // directly set screen modes that are entered without fading
+ if ((global.anim_status == GAME_MODE_PSEUDO_MAINONLY &&
+ global.anim_status_next == GAME_MODE_PSEUDO_TYPENAME) ||
+ (global.anim_status == GAME_MODE_PSEUDO_TYPENAME &&
+ global.anim_status_next == GAME_MODE_PSEUDO_MAINONLY))
+ global.anim_status = global.anim_status_next;
+}
+
void SetGameStatus(int game_status_new)
{
game_status = game_status_new;
- global.anim_status_next = game_status;
+ SetAnimStatus(game_status_new);
+}
+
+void SetFontStatus(int game_status_new)
+{
+ static int last_game_status = -1;
+
+ if (game_status_new != -1)
+ {
+ // set game status for font use after storing last game status
+ last_game_status = game_status;
+ game_status = game_status_new;
+ }
+ else
+ {
+ // reset game status after font use from last stored game status
+ game_status = last_game_status;
+ }
+}
+
+void ResetFontStatus()
+{
+ SetFontStatus(-1);
}
void ChangeViewportPropertiesIfNeeded()
int new_scr_fieldy_buffers = new_sysize / new_tilesize_var;
boolean init_gfx_buffers = FALSE;
boolean init_video_buffer = FALSE;
- boolean init_gadgets_and_toons = FALSE;
+ boolean init_gadgets_and_anims = FALSE;
boolean init_em_graphics = FALSE;
if (new_win_xsize != WIN_XSIZE ||
init_video_buffer = TRUE;
init_gfx_buffers = TRUE;
- init_gadgets_and_toons = TRUE;
+ init_gadgets_and_anims = TRUE;
// printf("::: video: init_video_buffer, init_gfx_buffers\n");
}
TILESIZE_VAR = new_tilesize_var;
init_gfx_buffers = TRUE;
- init_gadgets_and_toons = TRUE;
+ init_gadgets_and_anims = TRUE;
// printf("::: viewports: init_gfx_buffers\n");
- // printf("::: viewports: init_gadgets_and_toons\n");
+ // printf("::: viewports: init_gadgets_and_anims\n");
}
if (init_gfx_buffers)
InitImageTextures();
}
- if (init_gadgets_and_toons)
+ if (init_gadgets_and_anims)
{
- // printf("::: init_gadgets_and_toons\n");
+ // printf("::: init_gadgets_and_anims\n");
InitGadgets();
- InitToons();
InitGlobalAnimations();
}