void ChangeViewportPropertiesIfNeeded()
{
+ int *door_1_x = &DX;
+ int *door_1_y = &DY;
+ int *door_2_x = (game_status == GAME_MODE_EDITOR ? &EX : &VX);
+ int *door_2_y = (game_status == GAME_MODE_EDITOR ? &EY : &VY);
+ int gfx_game_mode = (game_status == GAME_MODE_PLAYING ||
+ game_status == GAME_MODE_EDITOR ? game_status :
+ GAME_MODE_MAIN);
+ struct RectWithBorder *vp_playfield = &viewport.playfield[gfx_game_mode];
+ struct RectWithBorder *vp_door_1 = &viewport.door_1[gfx_game_mode];
+ struct RectWithBorder *vp_door_2 = &viewport.door_2[gfx_game_mode];
+ int border_size = vp_playfield->border_size;
+ int new_sx = vp_playfield->x + border_size;
+ int new_sy = vp_playfield->y + border_size;
+ int new_scr_fieldx = (vp_playfield->width - 2 * border_size) / TILESIZE;
+ int new_scr_fieldy = (vp_playfield->height - 2 * border_size) / TILESIZE;
+
if (viewport.window.width != WIN_XSIZE ||
viewport.window.height != WIN_YSIZE)
{
#endif
}
- if (game_status == GAME_MODE_PLAYING)
+ if (new_scr_fieldx != SCR_FIELDX ||
+ new_scr_fieldy != SCR_FIELDY ||
+ new_sx != SX ||
+ new_sy != SY ||
+ vp_playfield->x != REAL_SX ||
+ vp_playfield->y != REAL_SY ||
+ vp_door_1->x != *door_1_x ||
+ vp_door_1->y != *door_1_y ||
+ vp_door_2->x != *door_2_x ||
+ vp_door_2->y != *door_2_y)
{
- if (viewport.playfield.game.width != SCR_FIELDX ||
- viewport.playfield.game.height != SCR_FIELDY ||
- viewport.door_1.game.x != DX ||
- viewport.door_1.game.y != DY ||
- viewport.door_2.game.x != VX ||
- viewport.door_2.game.y != VY)
- {
- SCR_FIELDX = viewport.playfield.game.width;
- SCR_FIELDY = viewport.playfield.game.height;
-
- DX = viewport.door_1.game.x;
- DY = viewport.door_1.game.y;
- VX = viewport.door_2.game.x;
- VY = viewport.door_2.game.y;
+ SCR_FIELDX = new_scr_fieldx;
+ SCR_FIELDY = new_scr_fieldy;
+ SX = new_sx;
+ SY = new_sy;
+ REAL_SX = vp_playfield->x;
+ REAL_SY = vp_playfield->y;
- InitGfxBuffers();
- }
- }
- else if (game_status == GAME_MODE_EDITOR)
- {
- if (viewport.playfield.editor.width != SCR_FIELDX ||
- viewport.playfield.editor.height != SCR_FIELDY ||
- viewport.door_1.editor.x != DX ||
- viewport.door_1.editor.y != DY ||
- viewport.door_2.editor.x != EX ||
- viewport.door_2.editor.y != EY)
- {
- SCR_FIELDX = viewport.playfield.editor.width;
- SCR_FIELDY = viewport.playfield.editor.height;
+ *door_1_x = vp_door_1->x;
+ *door_1_y = vp_door_1->y;
+ *door_2_x = vp_door_2->x;
+ *door_2_y = vp_door_2->y;
- DX = viewport.door_1.editor.x;
- DY = viewport.door_1.editor.y;
- EX = viewport.door_2.editor.x;
- EY = viewport.door_2.editor.y;
+ InitGfxBuffers();
- InitGfxBuffers();
- }
- }
- else /* any menu screen */
- {
- if (viewport.playfield.menu.width != SCR_FIELDX ||
- viewport.playfield.menu.height != SCR_FIELDY ||
- viewport.door_1.menu.x != DX ||
- viewport.door_1.menu.y != DY ||
- viewport.door_2.menu.x != VX ||
- viewport.door_2.menu.y != VY)
+ if (gfx_game_mode == GAME_MODE_MAIN)
{
- SCR_FIELDX = viewport.playfield.menu.width;
- SCR_FIELDY = viewport.playfield.menu.height;
-
- DX = viewport.door_1.menu.x;
- DY = viewport.door_1.menu.y;
- VX = viewport.door_2.menu.x;
- VY = viewport.door_2.menu.y;
-
- InitGfxBuffers();
InitGadgets();
InitToons();
}