#include <math.h>
-long mScrollX, mScrollY;
-long mScrollX_last, mScrollY_last;
+int mScrollX, mScrollY;
+int mScrollX_last, mScrollY_last;
#if 1
-long ScreenBuffer[2 + MAX_PLAYFIELD_WIDTH + 2][2 + MAX_PLAYFIELD_HEIGHT + 2];
+int ScreenBuffer[2 + MAX_PLAYFIELD_WIDTH + 2][2 + MAX_PLAYFIELD_HEIGHT + 2];
boolean redraw[2 + MAX_PLAYFIELD_WIDTH + 2][2 + MAX_PLAYFIELD_HEIGHT + 2];
#else
-long ScreenBuffer[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+int ScreenBuffer[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
#endif
int y2 = mScrollY_last / TILEY + (SCR_FIELDY - 1) + 2;
int x, y;
+#if NEW_TILESIZE
+ BlitBitmap(bitmap_db_field_sp, bitmap_db_field_sp,
+ TILEX_VAR * (dx == -1),
+ TILEY_VAR * (dy == -1),
+ (MAX_BUF_XSIZE * TILEX_VAR) - TILEX_VAR * (dx != 0),
+ (MAX_BUF_YSIZE * TILEY_VAR) - TILEY_VAR * (dy != 0),
+ TILEX_VAR * (dx == 1),
+ TILEY_VAR * (dy == 1));
+#else
BlitBitmap(bitmap_db_field_sp, bitmap_db_field_sp,
TILEX * (dx == -1),
TILEY * (dy == -1),
(MAX_BUF_YSIZE * TILEY) - TILEY * (dy != 0),
TILEX * (dx == 1),
TILEY * (dy == 1));
+#endif
/* when scrolling the whole playfield, do not redraw single tiles */
#if 1
int sx = x - x1;
int sy = y - y1;
int tsi = GetSI(x, y);
- long id = ((PlayField16[tsi]) |
- (PlayField8[tsi] << 16) |
- (DisPlayField[tsi] << 24));
+ int id = ((PlayField16[tsi]) |
+ (PlayField8[tsi] << 16) |
+ (DisPlayField[tsi] << 24));
if ((dx == -1 && x == x2) ||
(dx == +1 && x == x1) ||
int xsize = SXSIZE;
int ysize = SYSIZE;
+#if NEW_TILESIZE
+ int full_xsize = (FieldWidth - (menBorder ? 0 : 1)) * TILEX_VAR;
+ int full_ysize = (FieldHeight - (menBorder ? 0 : 1)) * TILEY_VAR;
+#else
int full_xsize = (FieldWidth - (menBorder ? 0 : 1)) * TILEX;
int full_ysize = (FieldHeight - (menBorder ? 0 : 1)) * TILEY;
+#endif
+
+#if NEW_TILESIZE
+
+#endif
sxsize = (full_xsize < xsize ? full_xsize : xsize);
sysize = (full_ysize < ysize ? full_ysize : ysize);
}
#endif
+#if NEW_TILESIZE
+ px = px * TILESIZE_VAR / TILESIZE;
+ py = py * TILESIZE_VAR / TILESIZE;
+#endif
+
+#if 0
+ printf("::: (%d, %d) (%d, %d) (%d, %d) [%d / %d]\n",
+ px, py, sxsize, sysize, sx, sy,
+ FieldHeight, menBorder);
+#endif
+
+#if 0
+ printf("::: (%d, %d)\n",
+ bitmap_db_field_sp->width, bitmap_db_field_sp->height);
+#endif
+
BlitBitmap(bitmap_db_field_sp, target_bitmap, px, py, sxsize, sysize, sx, sy);
}
SyncDisplay();
- if (redraw_tiles > REDRAWTILES_THRESHOLD || scrolling || scrolling_last ||
+ if (0 ||
+ redraw_tiles > REDRAWTILES_THRESHOLD || scrolling || scrolling_last ||
ExplosionShakeMurphy != 0 || ExplosionShakeMurphy_last != 0)
{
BlitScreenToBitmap_SP(window);
int scroll_yoffset = mScrollY - mScrollY_last + game_sp.scroll_yoffset;
int x1 = 0, x2 = SCR_FIELDX - (scroll_xoffset != 0 ? 0 : 1);
int y1 = 0, y2 = SCR_FIELDY - (scroll_yoffset != 0 ? 0 : 1);
+#if NEW_TILESIZE
+ int full_xsize = (FieldWidth - (menBorder ? 0 : 1)) * TILEX_VAR;
+ int full_ysize = (FieldHeight - (menBorder ? 0 : 1)) * TILEY_VAR;
+#else
int full_xsize = (FieldWidth - (menBorder ? 0 : 1)) * TILEX;
int full_ysize = (FieldHeight - (menBorder ? 0 : 1)) * TILEY;
+#endif
+#if 1
+ int xsize = SXSIZE;
+ int ysize = SYSIZE;
+ int sxsize = (full_xsize < xsize ? full_xsize : xsize);
+ int sysize = (full_ysize < ysize ? full_ysize : ysize);
+ int sx = SX + (full_xsize < xsize ? (xsize - full_xsize) / 2 : 0);
+ int sy = SY + (full_ysize < ysize ? (ysize - full_ysize) / 2 : 0);
+#else
int sx = SX + (full_xsize < SXSIZE ? (SXSIZE - full_xsize) / 2 : 0);
int sy = SY + (full_ysize < SYSIZE ? (SYSIZE - full_ysize) / 2 : 0);
+#endif
+#if 1
+ InitGfxClipRegion(TRUE, sx, sy, sxsize, sysize);
+#else
InitGfxClipRegion(TRUE, SX, SY, SXSIZE, SYSIZE);
+#endif
+
+#if NEW_TILESIZE
+ scroll_xoffset = scroll_xoffset * TILESIZE_VAR / TILESIZE;
+ scroll_yoffset = scroll_yoffset * TILESIZE_VAR / TILESIZE;
+#endif
for (x = x1; x <= x2; x++)
{
int xx = 2 + x;
int yy = 2 + y;
+#if NEW_TILESIZE
+ if (redraw[xx][yy])
+ BlitBitmap(bitmap_db_field_sp, window,
+ xx * TILEX_VAR, yy * TILEY_VAR, TILEX_VAR, TILEY_VAR,
+ sx + x * TILEX_VAR - scroll_xoffset,
+ sy + y * TILEY_VAR - scroll_yoffset);
+#else
if (redraw[xx][yy])
BlitBitmap(bitmap_db_field_sp, window,
xx * TILEX, yy * TILEY, TILEX, TILEY,
sx + x * TILEX - scroll_xoffset,
sy + y * TILEY - scroll_yoffset);
+#endif
}
}
ScrollPlayfieldIfNeeded();
}
-void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS)
+void DDScrollBuffer_SoftScrollTo(int X, int Y, int TimeMS, int FPS)
{
double dx, dY;
- long dT, StepCount;
+ int dT, StepCount;
double T, tStep;
- long oldX, oldY, maxD;
+ int oldX, oldY, maxD;
static boolean AlreadyRunning = False;
if (NoDisplayFlag)