X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_mm%2Fmm_game.c;h=486395cda52f5fcf99f7fd69deb5d721196fb930;hb=dcfdc42ed1d7bc931b62ee9639af893858889219;hp=652f05a43f281770666dd6b63b7c4c7fb2246c42;hpb=2b9849f490f48a8e2e5dd5aaeadf920827127d78;p=rocksndiamonds.git diff --git a/src/game_mm/mm_game.c b/src/game_mm/mm_game.c index 652f05a4..486395cd 100644 --- a/src/game_mm/mm_game.c +++ b/src/game_mm/mm_game.c @@ -99,6 +99,22 @@ static void InitMovingField_MM(int, int, int); static void ContinueMoving_MM(int, int); static void Moving2Blocked_MM(int, int, int *, int *); +static void AddLaserEdge(int, int); +static void ScanLaser(void); +static void DrawLaser(int, int); +static boolean HitElement(int, int); +static boolean HitOnlyAnEdge(int); +static boolean HitPolarizer(int, int); +static boolean HitBlock(int, int); +static boolean HitLaserSource(int, int); +static boolean HitLaserDestination(int, int); +static boolean HitReflectingWalls(int, int); +static boolean HitAbsorbingWalls(int, int); +static void RotateMirror(int, int, int); +static boolean ObjHit(int, int, int); +static void DeletePacMan(int, int); +static void MovePacMen(void); + // bitmap for laser beam detection static Bitmap *laser_bitmap = NULL; @@ -805,7 +821,7 @@ static void GameOver_MM(int game_over_cause) SetTileCursorActive(FALSE); } -void AddLaserEdge(int lx, int ly) +static void AddLaserEdge(int lx, int ly) { int clx = dSX + lx; int cly = dSY + ly; @@ -824,7 +840,7 @@ void AddLaserEdge(int lx, int ly) laser.redraw = TRUE; } -void AddDamagedField(int ex, int ey) +static void AddDamagedField(int ex, int ey) { // prevent adding the same field position again if (laser.num_damages > 0 && @@ -969,7 +985,7 @@ static void DeactivateLaserTargetElement(void) } } -void ScanLaser(void) +static void ScanLaser(void) { int element = EL_EMPTY; int last_element = EL_EMPTY; @@ -1485,7 +1501,7 @@ void DrawLaser_MM(void) DrawLaser(0, game_mm.laser_enabled); } -boolean HitElement(int element, int hit_mask) +static boolean HitElement(int element, int hit_mask) { if (HitOnlyAnEdge(hit_mask)) return FALSE; @@ -1833,7 +1849,7 @@ boolean HitElement(int element, int hit_mask) return TRUE; } -boolean HitOnlyAnEdge(int hit_mask) +static boolean HitOnlyAnEdge(int hit_mask) { // check if the laser hit only the edge of an element and, if so, go on @@ -1890,7 +1906,7 @@ boolean HitOnlyAnEdge(int hit_mask) return FALSE; } -boolean HitPolarizer(int element, int hit_mask) +static boolean HitPolarizer(int element, int hit_mask) { if (HitOnlyAnEdge(hit_mask)) return FALSE; @@ -1967,7 +1983,7 @@ boolean HitPolarizer(int element, int hit_mask) return TRUE; } -boolean HitBlock(int element, int hit_mask) +static boolean HitBlock(int element, int hit_mask) { boolean check = FALSE; @@ -2088,7 +2104,7 @@ boolean HitBlock(int element, int hit_mask) return TRUE; } -boolean HitLaserSource(int element, int hit_mask) +static boolean HitLaserSource(int element, int hit_mask) { if (HitOnlyAnEdge(hit_mask)) return FALSE; @@ -2100,7 +2116,7 @@ boolean HitLaserSource(int element, int hit_mask) return TRUE; } -boolean HitLaserDestination(int element, int hit_mask) +static boolean HitLaserDestination(int element, int hit_mask) { if (HitOnlyAnEdge(hit_mask)) return FALSE; @@ -2146,7 +2162,7 @@ boolean HitLaserDestination(int element, int hit_mask) return TRUE; } -boolean HitReflectingWalls(int element, int hit_mask) +static boolean HitReflectingWalls(int element, int hit_mask) { // check if laser hits side of a wall with an angle that is not 90° if (!IS_90_ANGLE(laser.current_angle) && (hit_mask == HIT_MASK_TOP || @@ -2348,7 +2364,7 @@ boolean HitReflectingWalls(int element, int hit_mask) return FALSE; } -boolean HitAbsorbingWalls(int element, int hit_mask) +static boolean HitAbsorbingWalls(int element, int hit_mask) { if (HitOnlyAnEdge(hit_mask)) return FALSE; @@ -2442,7 +2458,7 @@ boolean HitAbsorbingWalls(int element, int hit_mask) if (IS_90_ANGLE(laser.current_angle)) mask += mask * (2 + IS_HORIZ_ANGLE(laser.current_angle) * 2); - laser.dest_element = element2 | EL_WALL_AMOEBA; + laser.dest_element = element2 | EL_WALL_AMOEBA_BASE; laser.wall_mask = mask; } @@ -2589,7 +2605,7 @@ static void MeltIce(int x, int y) { int phase; int wall_mask = Store2[x][y]; - int real_element = Tile[x][y] - EL_WALL_CHANGING + EL_WALL_ICE; + int real_element = Tile[x][y] - EL_WALL_CHANGING_BASE + EL_WALL_ICE_BASE; MovDelay[x][y]--; phase = frames - MovDelay[x][y] / delay - 1; @@ -2601,7 +2617,7 @@ static void MeltIce(int x, int y) DrawWalls_MM(x, y, Tile[x][y]); - if (Tile[x][y] == EL_WALL_ICE) + if (Tile[x][y] == EL_WALL_ICE_BASE) Tile[x][y] = EL_EMPTY; ScanLaser_FromLastMirror(); @@ -2627,7 +2643,7 @@ static void GrowAmoeba(int x, int y) { int phase; int wall_mask = Store2[x][y]; - int real_element = Tile[x][y] - EL_WALL_CHANGING + EL_WALL_AMOEBA; + int real_element = Tile[x][y] - EL_WALL_CHANGING_BASE + EL_WALL_AMOEBA_BASE; MovDelay[x][y]--; phase = MovDelay[x][y] / delay; @@ -2790,7 +2806,7 @@ static void Bang_MM(int x, int y) Explode_MM(x, y, EX_PHASE_START, EX_TYPE_NORMAL); } -void TurnRound(int x, int y) +static void TurnRound(int x, int y) { static struct { @@ -3073,7 +3089,7 @@ boolean ClickElement(int x, int y, int button) return element_clicked; } -void RotateMirror(int x, int y, int button) +static void RotateMirror(int x, int y, int button) { if (button == MB_RELEASED) { @@ -3195,7 +3211,7 @@ static void AutoRotateMirrors(void) } } -boolean ObjHit(int obx, int oby, int bits) +static boolean ObjHit(int obx, int oby, int bits) { int i; @@ -3228,7 +3244,7 @@ boolean ObjHit(int obx, int oby, int bits) return FALSE; } -void DeletePacMan(int px, int py) +static void DeletePacMan(int px, int py) { int i, j; @@ -3280,9 +3296,9 @@ static void GameActions_MM_Ext(void) OpenGrayBall(x, y); else if (IS_ENVELOPE_OPENING(element)) OpenEnvelope(x, y); - else if (IS_WALL_CHANGING(element) && Store[x][y] == EL_WALL_ICE) + else if (IS_WALL_CHANGING(element) && Store[x][y] == EL_WALL_ICE_BASE) MeltIce(x, y); - else if (IS_WALL_CHANGING(element) && Store[x][y] == EL_WALL_AMOEBA) + else if (IS_WALL_CHANGING(element) && Store[x][y] == EL_WALL_AMOEBA_BASE) GrowAmoeba(x, y); else if (IS_MIRROR(element) || IS_MIRROR_FIXED(element) || @@ -3458,12 +3474,12 @@ static void GameActions_MM_Ext(void) game_mm.ball_choice_pos++; int new_element = native_mm_level.ball_content[element_pos]; - int new_element_unmapped = unmap_element(new_element); + int new_element_base = map_wall_to_base_element(new_element); - if (IS_WALL(new_element_unmapped)) + if (IS_WALL(new_element_base)) { // always use completely filled wall element - new_element = new_element_unmapped | 0x000f; + new_element = new_element_base | 0x000f; } else if (native_mm_level.rotate_ball_content && get_num_elements(new_element) > 1) @@ -3487,8 +3503,8 @@ static void GameActions_MM_Ext(void) { PlayLevelSound_MM(ELX, ELY, element, MM_ACTION_SHRINKING); - Tile[ELX][ELY] = Tile[ELX][ELY] - EL_WALL_ICE + EL_WALL_CHANGING; - Store[ELX][ELY] = EL_WALL_ICE; + Tile[ELX][ELY] = Tile[ELX][ELY] - EL_WALL_ICE_BASE + EL_WALL_CHANGING_BASE; + Store[ELX][ELY] = EL_WALL_ICE_BASE; Store2[ELX][ELY] = laser.wall_mask; laser.dest_element = Tile[ELX][ELY]; @@ -3577,8 +3593,8 @@ static void GameActions_MM_Ext(void) PlayLevelSound_MM(x, y, element, MM_ACTION_GROWING); - Tile[x][y] = Tile[x][y] - EL_WALL_AMOEBA + EL_WALL_CHANGING; - Store[x][y] = EL_WALL_AMOEBA; + Tile[x][y] = Tile[x][y] - EL_WALL_AMOEBA_BASE + EL_WALL_CHANGING_BASE; + Store[x][y] = EL_WALL_AMOEBA_BASE; Store2[x][y] = wall_mask; return; @@ -3683,7 +3699,7 @@ void GameActions_MM(struct MouseActionInfo action) CheckSingleStepMode_MM(element_clicked, button_released); } -void MovePacMen(void) +static void MovePacMen(void) { int mx, my, ox, oy, nx, ny; int element;