From c1bebce92a744849cbd314ab5ec3dc751614cb9e Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sat, 1 Apr 2023 02:38:04 +0200 Subject: [PATCH] added support for levels larger than visible playfield in MM engine --- src/game_mm/mm_game.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index 496cc916..09c693c8 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -830,8 +830,10 @@ static void AddLaserEdge(int lx, int ly) { int clx = dSX + lx; int cly = dSY + ly; + int sxsize = MAX(SXSIZE, lev_fieldx * TILEX); + int sysize = MAX(SYSIZE, lev_fieldy * TILEY); - if (clx < -2 || cly < -2 || clx >= SXSIZE + 2 || cly >= SYSIZE + 2) + if (clx < -2 || cly < -2 || clx >= sxsize + 2 || cly >= sysize + 2) { Warn("AddLaserEdge: out of bounds: %d, %d", lx, ly); @@ -1058,15 +1060,15 @@ static void ScanLaser(void) #endif // hit something -- check out what it was - ELX = (LX + XS) / TILEX; - ELY = (LY + YS) / TILEY; + ELX = (LX + XS + TILEX) / TILEX - 1; // ...+TILEX...-1 to get correct + ELY = (LY + YS + TILEY) / TILEY - 1; // negative values! #if 0 Debug("game:mm:ScanLaser", "hit_mask (1) == '%x' (%d, %d) (%d, %d)", hit_mask, LX, LY, ELX, ELY); #endif - if (!IN_LEV_FIELD(ELX, ELY) || !IN_PIX_FIELD(LX, LY)) + if (!IN_LEV_FIELD(ELX, ELY)) { element = EL_EMPTY; laser.dest_element = element; -- 2.34.1