X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_sp%2FDDSpriteBuffer.c;h=872ded6f1a27b736c23d074c79b8520ba0109cbe;hb=df8f020b9c0aad57e1f2e790c771550232fb6ce8;hp=95ac25a3ad90f25882d2e3929e4d02f50e6ed665;hpb=66815b1b9363de7741defc14e5f7f0dc2183781a;p=rocksndiamonds.git diff --git a/src/game_sp/DDSpriteBuffer.c b/src/game_sp/DDSpriteBuffer.c index 95ac25a3..872ded6f 100644 --- a/src/game_sp/DDSpriteBuffer.c +++ b/src/game_sp/DDSpriteBuffer.c @@ -177,12 +177,27 @@ 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; @@ -191,6 +206,8 @@ static void Blt(int pX, int pY, int SpriteX, int SpriteY) 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); @@ -199,20 +216,20 @@ static void Blt(int pX, int pY, int SpriteX, int SpriteY) if (NoDisplayFlag) return; -#if 1 +#if 0 if (TEST_flag) { - if (pX < sx1 || pX >= sx2 || pY < sy1 || pY >= sy2) - printf("::: DDSpriteBuffer.c: Blt(): %d, %d [%d..%d, %d..%d] (%d, %d) [SKIPPED]\n", - pX, pY, sx1, sx2, sy1, sy2, mScrollX, mScrollY); + 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] (%d, %d)\n", - pX, pY, sx1, sx2, sy1, sy2, mScrollX, mScrollY); + 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