X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=2d59752b4d554be69669e7530f2986651c8d99dd;hb=9f4e306d9d5c5a7f9c8a3aa0a92e206ad3bc05a2;hp=9fa295648f06bf90b40fee431eaf6e43273eaffd;hpb=9c299f0c6d66d7d0a246bbecdf2669fe5db25547;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 9fa29564..2d59752b 100644 --- a/src/tools.c +++ b/src/tools.c @@ -407,16 +407,110 @@ void BackToFront() int dx = (ScreenMovDir & (MV_LEFT | MV_RIGHT) ? ScreenGfxPos : 0); int dy = (ScreenMovDir & (MV_UP | MV_DOWN) ? ScreenGfxPos : 0); - fx += dx * TILESIZE_VAR / TILESIZE; - fy += dy * TILESIZE_VAR / TILESIZE; + int bx1, bx2, ffx, ffy; + + // fx += dx * TILESIZE_VAR / TILESIZE; + // fy += dy * TILESIZE_VAR / TILESIZE; #else fx += (ScreenMovDir & (MV_LEFT | MV_RIGHT) ? ScreenGfxPos : 0); fy += (ScreenMovDir & (MV_UP | MV_DOWN) ? ScreenGfxPos : 0); #endif +#if 1 + +#if 0 + bx1 = SBX_Left * TILEX_VAR + TILEX_VAR / 2; + // bx1 = SBX_Left * TILEX_VAR; + bx2 = SBX_Right * TILEX_VAR - TILEX_VAR / 2; + ffx = scroll_x * TILEX_VAR + dx * TILESIZE_VAR / TILESIZE; + + if (ffx > bx1) // && ffx < bx2) + fx += dx * TILESIZE_VAR / TILESIZE; + + // fx += TILEX_VAR - (ffx - bx1) % TILEX_VAR; + + printf("::: %d (%d, %d) (%d)\n", ffx, bx1, bx2, dx); + +#if 0 + if (ffx > SBX_Left * TILEX_VAR) + fx -= MIN(ffx, TILEX_VAR / 2); + if (ffx > SBX_Left * TILEX_VAR && ffx < (SBX_Right + 1) * TILEX_VAR) + fx -= MIN(ffx, TILEX_VAR / 2); +#endif + +#else + +#if 0 + ffx = (scroll_x - SBX_Left) * TILEX_VAR + dx * TILESIZE_VAR / TILESIZE; + + if (EVEN(SCR_FIELDX)) + { + if (ffx < SBX_Right * TILEX_VAR + TILEX_VAR / 2) + fx = fx + dx * TILESIZE_VAR / TILESIZE - MIN(ffx, TILEX_VAR / 2); + else + fx = fx - (dx <= 0 ? TILEX_VAR : 0); + + printf("::: %d (%d, %d) [%d] [%d] => %d\n", + ffx, SBX_Left * TILEX_VAR, SBX_Right * TILEX_VAR, dx, FX, fx); + } +#else + +#if 0 + ffx = (scroll_x - SBX_Left) * TILEX_VAR + dx * TILESIZE_VAR / TILESIZE; + + if (EVEN(SCR_FIELDX)) + { + if (ffx < SBX_Right * TILEX_VAR + TILEX_VAR / 2 + 0 * TILEX_VAR / 2) + { + fx = fx + dx * TILESIZE_VAR / TILESIZE - MIN(ffx, TILEX_VAR / 2) + + 1 * TILEX_VAR; + } + else + { + fx = fx - (dx <= 0 ? TILEX_VAR : 0) + 1 * TILEX_VAR; + + printf("::: STOPPED\n"); + } + + printf("::: %d (%d, %d) [%d] [%d] => %d\n", + ffx, SBX_Left * TILEX_VAR, SBX_Right * TILEX_VAR, dx, FX, fx); + } +#else + /* !!! THIS WORKS !!! */ + + ffx = (scroll_x - SBX_Left) * TILEX_VAR + dx * TILESIZE_VAR / TILESIZE; + + if (EVEN(SCR_FIELDX)) + { + if (ffx < SBX_Right * TILEX_VAR + TILEX_VAR / 2 + 2 * TILEX_VAR / 2) + { + fx = fx + dx * TILESIZE_VAR / TILESIZE - MIN(ffx, TILEX_VAR / 2) + + 1 * TILEX_VAR; + } + else + { + fx = fx - (dx <= 0 ? TILEX_VAR : 0) + 1 * TILEX_VAR; + + printf("::: STOPPED\n"); + } + + printf("::: %d (%d, %d) [%d] [%d] => %d\n", + ffx, SBX_Left * TILEX_VAR, SBX_Right * TILEX_VAR, dx, FX, fx); + } +#endif + +#endif + +#endif + #if 0 - printf("::: %d, %d [%d, %d] [%d, %d]\n", - fx, fy, FX, FY, ScreenMovDir, ScreenGfxPos); + printf("::: %d, %d [%d, %d] [%d, %d] [%d, %d] [%d] [%d, %d]\n", + fx, fy, FX, FY, ScreenMovDir, ScreenGfxPos, + scroll_x, scroll_y, + ffx, + SBX_Left, SBX_Right); +#endif + #endif #if 0