X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_mm%2Fmm_game.c;h=c89a900830fa5f97adcf6228d5bd3982645a6e9c;hb=ad6c6f3b18cab93a4e4ce5a9dc7e462cef9ce405;hp=09c693c8ca75280e1428ccee923b7aa0bed4fe70;hpb=c1bebce92a744849cbd314ab5ec3dc751614cb9e;p=rocksndiamonds.git diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index 09c693c8..c89a9008 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -139,10 +139,11 @@ 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_RECTANGLE 8 -#define MM_MASK_CIRCLE 9 +#define MM_MASK_GRID_CLOSED 8 +#define MM_MASK_RECTANGLE 9 +#define MM_MASK_CIRCLE 10 -#define NUM_MM_MASKS 10 +#define NUM_MM_MASKS 11 // element masks for scanning pixels of MM elements static const char mm_masks[NUM_MM_MASKS][16][16 + 1] = @@ -291,6 +292,24 @@ 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", @@ -828,12 +847,11 @@ static void GameOver_MM(int game_over_cause) 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); + int full_sxsize = MAX(FULL_SXSIZE, lev_fieldx * TILEX); + int full_sysize = MAX(FULL_SYSIZE, lev_fieldy * TILEY); - if (clx < -2 || cly < -2 || clx >= sxsize + 2 || cly >= sysize + 2) + if (cSX + lx < REAL_SX || cSX + lx >= REAL_SX + full_sxsize || + cSY + ly < REAL_SY || cSY + ly >= REAL_SY + full_sysize) { Warn("AddLaserEdge: out of bounds: %d, %d", lx, ly); @@ -881,11 +899,13 @@ static boolean StepBehind(void) static int getMaskFromElement(int element) { - if (IS_GRID(element)) - return MM_MASK_GRID_1 + get_element_phase(element); - else if (IS_MCDUFFIN(element)) + if (IS_MCDUFFIN(element)) return MM_MASK_MCDUFFIN_RIGHT + get_element_phase(element); - else if (IS_RECTANGLE(element) || IS_DF_GRID(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; + else if (IS_RECTANGLE(element)) return MM_MASK_RECTANGLE; else return MM_MASK_CIRCLE; @@ -3276,7 +3296,11 @@ static void AutoRotateMirrors(void) IS_GRID_WOOD_AUTO(element) || IS_GRID_STEEL_AUTO(element) || element == EL_REFRACTOR) + { RotateMirror(x, y, MB_RIGHTBUTTON); + + laser.redraw = TRUE; + } } } }