X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_mm%2Fmm_game.c;h=be1bfad64051591d5fc725f781c1064269ef04b6;hb=07a0f43d96ff82b3254cfe4c6fcec5fe769d6e20;hp=09fa1d04a5a58fa162d416b330fc0d96f6b4f422;hpb=dea6197b6bd9678dbe2f1acc0fd2611d4f41c7ae;p=rocksndiamonds.git diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index 09fa1d04..be1bfad6 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -139,11 +139,10 @@ static DelayCounter overload_delay = { 0 }; #define MM_MASK_GRID_2 5 #define MM_MASK_GRID_3 6 #define MM_MASK_GRID_4 7 -#define MM_MASK_GRID_CLOSED 8 -#define MM_MASK_RECTANGLE 9 -#define MM_MASK_CIRCLE 10 +#define MM_MASK_RECTANGLE 8 +#define MM_MASK_CIRCLE 9 -#define NUM_MM_MASKS 11 +#define NUM_MM_MASKS 10 // element masks for scanning pixels of MM elements static const char mm_masks[NUM_MM_MASKS][16][16 + 1] = @@ -292,24 +291,6 @@ static const char mm_masks[NUM_MM_MASKS][16][16 + 1] = " XXX XXXX ", " XX XXXXX ", }, - { - " XXXXXX XXXXXX ", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - " XXXXXXXXXXXXXX ", - " XXXXXXXXXXXXXX ", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - "XXXXXXXXXXXXXXXX", - " XXXXXX XXXXXX ", - }, { "XXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXX", @@ -905,7 +886,7 @@ static int getMaskFromElement(int element) else if (IS_GRID(element)) return MM_MASK_GRID_1 + get_element_phase(element); else if (IS_DF_GRID(element)) - return MM_MASK_GRID_CLOSED; + return MM_MASK_RECTANGLE; else if (IS_RECTANGLE(element)) return MM_MASK_RECTANGLE; else @@ -1092,9 +1073,13 @@ static void ScanLaser(void) if (!IN_LEV_FIELD(ELX, ELY)) { - // check if laser is still inside visible playfield area - if (cSX + LX >= REAL_SX && cSX + LX < REAL_SX + FULL_SXSIZE && - cSY + LY >= REAL_SY && cSY + LY < REAL_SY + FULL_SYSIZE) + // laser next step position + int x = cSX + LX + XS; + int y = cSY + LY + YS; + + // check if next step of laser is still inside visible playfield area + if (x >= REAL_SX && x < REAL_SX + FULL_SXSIZE && + y >= REAL_SY && y < REAL_SY + FULL_SYSIZE) { // go on with another step LX += XS; @@ -1707,6 +1692,7 @@ static boolean HitElement(int element, int hit_mask) IS_POLAR_CROSS(element) || IS_DF_MIRROR(element) || IS_DF_MIRROR_AUTO(element) || + IS_DF_MIRROR_FIXED(element) || element == EL_PRISM || element == EL_REFRACTOR) { @@ -1725,7 +1711,8 @@ static boolean HitElement(int element, int hit_mask) if (IS_MIRROR(element) || IS_MIRROR_FIXED(element) || IS_DF_MIRROR(element) || - IS_DF_MIRROR_AUTO(element)) + IS_DF_MIRROR_AUTO(element) || + IS_DF_MIRROR_FIXED(element)) laser.current_angle = get_mirrored_angle(laser.current_angle, get_element_angle(element));