X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftools.c;h=30df9f7cafa12b121a177f0cbd1221e6bc8e7280;hb=5cdf02eb2a6d9627f7461ab9d386698cb7596096;hp=ef61869106a2e681607cdaf56ac031aec3508488;hpb=59ee473b86e7cbc1d9b09a3c22b0bbd3a410f16f;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index ef618691..30df9f7c 100644 --- a/src/tools.c +++ b/src/tools.c @@ -349,6 +349,10 @@ void BackToFront() if (redraw_mask & REDRAW_FIELD) { +#if 0 + printf("::: REDRAW_FIELD\n"); +#endif + if (game_status != GAME_MODE_PLAYING || redraw_mask & REDRAW_FROM_BACKBUFFER) { @@ -431,6 +435,10 @@ void BackToFront() if (redraw_mask & REDRAW_TILES) { +#if 0 + printf("::: REDRAW_TILES\n"); +#endif + for (x = 0; x < SCR_FIELDX; x++) for (y = 0 ; y < SCR_FIELDY; y++) if (redraw[redraw_x1 + x][redraw_y1 + y]) @@ -8078,22 +8086,85 @@ void ToggleFullscreenIfNeeded() } } -void ChangeScreenModeIfNeeded() +void ChangeViewportPropertiesIfNeeded() { - if (global.screen.width == WIN_XSIZE && - global.screen.height == WIN_YSIZE) - return; - - WIN_XSIZE = global.screen.width; - WIN_YSIZE = global.screen.height; + if (viewport.window.width != WIN_XSIZE || + viewport.window.height != WIN_YSIZE) + { + WIN_XSIZE = viewport.window.width; + WIN_YSIZE = viewport.window.height; - InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen); - InitGfxBuffers(); + InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen); + InitGfxBuffers(); #if 1 - SetDrawDeactivationMask(REDRAW_NONE); - SetDrawBackgroundMask(REDRAW_FIELD); + SetDrawDeactivationMask(REDRAW_NONE); + SetDrawBackgroundMask(REDRAW_FIELD); - // RedrawBackground(); + // RedrawBackground(); #endif + } + + if (game_status == GAME_MODE_PLAYING) + { + 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; + + 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; + + 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(); + } + } + 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) + { + 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(); + } + } }