fixed tile selection cursor position for levels smaller than the playfield 4.1.0.0
authorHolger Schemel <info@artsoft.org>
Tue, 10 Apr 2018 19:44:08 +0000 (21:44 +0200)
committerHolger Schemel <info@artsoft.org>
Tue, 10 Apr 2018 19:44:08 +0000 (21:44 +0200)
For centered levels that are smaller than the playfield (MM engine),
the tile selection cursor position was not shifted like the level,
but was still inside the top/left aligned grid as if the level was
not centered.

This fix also centers the tile selection cursor position accordingly.

src/game_mm/mm_tools.c
src/libgame/system.c
src/libgame/system.h

index 1a27d91aa95c3b9f9db41ea3788b6253579790e6..a5cd79da35f90ab3ae9a0eeaa33597df57982459 100644 (file)
@@ -37,6 +37,8 @@ void SetDrawtoField_MM(int mode)
     cFX = FX + dSX;
     cFY = FY + dSY;
   }
+
+  SetTileCursorSXSY(cSX, cSY);
 }
 
 void ClearWindow()
index a35f91d6827b3ffd7d6a772614519c31c350c8d4..139ee57a562d6c2a046d7397c9df6e4d6c445e0e 100644 (file)
@@ -318,6 +318,9 @@ void InitTileCursorInfo()
   tile_cursor.y = 0;
   tile_cursor.target_x = 0;
   tile_cursor.target_y = 0;
+
+  tile_cursor.sx = 0;
+  tile_cursor.sy = 0;
 }
 
 void InitOverlayInfo()
@@ -348,8 +351,8 @@ void SetTileCursorTargetXY(int x, int y)
 
   tile_cursor.xpos = x;
   tile_cursor.ypos = y;
-  tile_cursor.target_x = gfx.sx + x * gfx.game_tile_size;
-  tile_cursor.target_y = gfx.sy + y * gfx.game_tile_size;
+  tile_cursor.target_x = tile_cursor.sx + x * gfx.game_tile_size;
+  tile_cursor.target_y = tile_cursor.sy + y * gfx.game_tile_size;
 
   tile_cursor.moving = TRUE;
 }
@@ -366,6 +369,12 @@ void SetTileCursorXY(int x, int y)
   tile_cursor.moving = FALSE;
 }
 
+void SetTileCursorSXSY(int sx, int sy)
+{
+  tile_cursor.sx = sx;
+  tile_cursor.sy = sy;
+}
+
 void SetOverlayEnabled(boolean enabled)
 {
   overlay.enabled = enabled;
index 7f8d23416dafce3e8407ada7911844ae5787b2fc..f3da4ad15bf6d0b5a771638b78b0785a88578c86 100644 (file)
@@ -963,6 +963,8 @@ struct TileCursorInfo
   int xpos, ypos;              /* tile cursor level playfield position */
   int x, y;                    /* tile cursor current screen position */
   int target_x, target_y;      /* tile cursor target screen position */
+
+  int sx, sy;                  /* tile cursor screen start position */
 };
 
 struct OverlayInfo
@@ -1534,6 +1536,7 @@ void SetTileCursorEnabled(boolean);
 void SetTileCursorActive(boolean);
 void SetTileCursorTargetXY(int, int);
 void SetTileCursorXY(int, int);
+void SetTileCursorSXSY(int, int);
 void SetOverlayEnabled(boolean);
 void SetOverlayActive(boolean);
 boolean GetOverlayActive();