rnd-20091124-2-src
[rocksndiamonds.git] / src / game_sp / DDSpriteBuffer.c
index 7572c919d2e415d6d8e0aecd4c89ba21af02da79..872ded6f1a27b736c23d074c79b8520ba0109cbe 100644 (file)
@@ -177,18 +177,37 @@ static void Blt(int pX, int pY, int SpriteX, int SpriteY)
   long Tmp;
 #endif
 
+#if 1
+
+  int scx = (mScrollX_last < 0 ? 0 : mScrollX_last);
+  int scy = (mScrollY_last < 0 ? 0 : mScrollY_last);
+  int sx1 = scx - 2 * TILEX;
+  int sy1 = scy - 2 * TILEY;
+  int sx2 = scx + SXSIZE + 1 * TILEX;
+  int sy2 = scy + SYSIZE + 1 * TILEY;
+
+  int sx = pX - sx1;
+  int sy = pY - sy1;
+
+#else
+
   int sx1 = mScrollX - TILEX;
   int sy1 = mScrollY - TILEY;
   int sx2 = mScrollX + SXSIZE + TILEX;
   int sy2 = mScrollY + SYSIZE + TILEY;
   int x1 = sx1 / TILEX;
   int y1 = sy1 / TILEY;
+
+#if 0
   int x2 = sx2 / TILEX;
   int y2 = sy2 / TILEY;
+#endif
 
   int sx = pX - x1 * TILEX;
   int sy = pY - y1 * TILEY;
 
+#endif
+
 #if 0
   printf(":1: DDSpriteBuffer.c: Blt(): %d, %d [%ld, %ld]\n",
         pX, pY, mScrollX, mScrollY);
@@ -197,8 +216,20 @@ static void Blt(int pX, int pY, int SpriteX, int SpriteY)
   if (NoDisplayFlag)
     return;
 
+#if 0
+  if (TEST_flag)
+  {
+    if (pX < sx1 || pX > sx2 || pY < sy1 || pY > sy2)
+      printf("::: DDSpriteBuffer.c: Blt(): %d, %d [%d..%d, %d..%d] (%ld, %ld) (%ld, %ld) [SKIPPED]\n",
+            pX, pY, sx1, sx2, sy1, sy2, mScrollX, mScrollY, mScrollX_last, mScrollY_last);
+    else
+      printf("::: DDSpriteBuffer.c: Blt(): %d, %d [%d..%d, %d..%d] (%ld, %ld) (%ld, %ld)\n",
+            pX, pY, sx1, sx2, sy1, sy2, mScrollX, mScrollY, mScrollX_last, mScrollY_last);
+  }
+#endif
+
   /* do not draw fields that are outside the visible screen area */
-  if (pX < sx1 || pX >= sx2 || pY < sy1 || pY >= sy2)
+  if (pX < sx1 || pX > sx2 || pY < sy1 || pY > sy2)
     return;
 
 #if 0
@@ -249,6 +280,8 @@ static void Blt(int pX, int pY, int SpriteX, int SpriteY)
 #endif
 }
 
+#if 0
+
 static void OLD_Blt(int pX, int pY, int SpriteX, int SpriteY)
 {
   RECT DR, SR;
@@ -323,6 +356,8 @@ static void OLD_Blt(int pX, int pY, int SpriteX, int SpriteY)
 #endif
 }
 
+#endif
+
 void DDSpriteBuffer_BltEx(int pX, int pY, int SpritePos)
 {
   int XPos, YPos;
@@ -333,6 +368,12 @@ void DDSpriteBuffer_BltEx(int pX, int pY, int SpritePos)
   XPos = (SpritePos % mXSpriteCount) + 1;
   YPos = (SpritePos / mXSpriteCount) + 1;
 
+#if 0
+  if (TEST_flag)
+    printf("::: DDSpriteBuffer_BltEx(): %d, %d [%d]\n",
+          pX, pY, SpritePos);
+#endif
+
   Blt(pX, pY, XPos, YPos);
 }