rnd-20100416-1-src
[rocksndiamonds.git] / src / tools.c
index ef61869106a2e681607cdaf56ac031aec3508488..2ec7c9ee816cbb412912f2b96394c136e448f8b2 100644 (file)
@@ -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,54 @@ void ToggleFullscreenIfNeeded()
   }
 }
 
-void ChangeScreenModeIfNeeded()
+void ChangeViewportPropertiesIfNeeded()
 {
-  if (global.screen.width  == WIN_XSIZE &&
-      global.screen.height == WIN_YSIZE)
-    return;
+  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);
 
-  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 (viewport.playfield[gfx_game_mode].width  != SCR_FIELDX ||
+      viewport.playfield[gfx_game_mode].height != SCR_FIELDY ||
+      viewport.door_1[gfx_game_mode].x != *door_1_x ||
+      viewport.door_1[gfx_game_mode].y != *door_1_y ||
+      viewport.door_2[gfx_game_mode].x != *door_2_x ||
+      viewport.door_2[gfx_game_mode].y != *door_2_y)
+  {
+    SCR_FIELDX = viewport.playfield[gfx_game_mode].width;
+    SCR_FIELDY = viewport.playfield[gfx_game_mode].height;
+
+    *door_1_x = viewport.door_1[gfx_game_mode].x;
+    *door_1_y = viewport.door_1[gfx_game_mode].y;
+    *door_2_x = viewport.door_2[gfx_game_mode].x;
+    *door_2_y = viewport.door_2[gfx_game_mode].y;
+
+    InitGfxBuffers();
+
+    if (gfx_game_mode == GAME_MODE_MAIN)
+    {
+      InitGadgets();
+      InitToons();
+    }
+  }
 }