- if (((stop_top && stop_bottom) ||
- element == EL_EXPANDABLE_WALL_HORIZONTAL ||
- element == EL_EXPANDABLE_WALL) &&
- ((stop_left && stop_right) ||
- element == EL_EXPANDABLE_WALL_VERTICAL))
- Tile[ax][ay] = EL_WALL;
-
- if (new_wall)
- PlayLevelSoundAction(ax, ay, ACTION_GROWING);
-}
-
-static void CheckSteelWallGrowing(int ax, int ay)
-{
- int element = Tile[ax][ay];
- int graphic = el2img(element);
- boolean free_top = FALSE;
- boolean free_bottom = FALSE;
- boolean free_left = FALSE;
- boolean free_right = FALSE;
- boolean stop_top = FALSE;
- boolean stop_bottom = FALSE;
- boolean stop_left = FALSE;
- boolean stop_right = FALSE;
- boolean new_wall = FALSE;
-
- if (IS_ANIMATED(graphic))
- DrawLevelGraphicAnimationIfNeeded(ax, ay, graphic);
-
- if (!MovDelay[ax][ay]) // start building new wall
- MovDelay[ax][ay] = 6;
-
- if (MovDelay[ax][ay]) // wait some time before building new wall
- {
- MovDelay[ax][ay]--;
- if (MovDelay[ax][ay])
- return;
- }
-
- if (IN_LEV_FIELD(ax, ay - 1) && IS_FREE(ax, ay - 1))
- free_top = TRUE;
- if (IN_LEV_FIELD(ax, ay + 1) && IS_FREE(ax, ay + 1))
- free_bottom = TRUE;
- if (IN_LEV_FIELD(ax - 1, ay) && IS_FREE(ax - 1, ay))
- free_left = TRUE;
- if (IN_LEV_FIELD(ax + 1, ay) && IS_FREE(ax + 1, ay))
- free_right = TRUE;
-
- if (element == EL_EXPANDABLE_STEELWALL_VERTICAL ||
- element == EL_EXPANDABLE_STEELWALL_ANY)
- {
- if (free_top)
- {
- Tile[ax][ay - 1] = EL_EXPANDABLE_STEELWALL_GROWING;
- Store[ax][ay - 1] = element;
- GfxDir[ax][ay - 1] = MovDir[ax][ay - 1] = MV_UP;
-
- if (IN_SCR_FIELD(SCREENX(ax), SCREENY(ay - 1)))
- DrawLevelGraphic(ax, ay - 1, IMG_EXPANDABLE_STEELWALL_GROWING_UP, 0);
-
- new_wall = TRUE;
- }
-
- if (free_bottom)
- {
- Tile[ax][ay + 1] = EL_EXPANDABLE_STEELWALL_GROWING;
- Store[ax][ay + 1] = element;
- GfxDir[ax][ay + 1] = MovDir[ax][ay + 1] = MV_DOWN;
-
- if (IN_SCR_FIELD(SCREENX(ax), SCREENY(ay + 1)))
- DrawLevelGraphic(ax, ay + 1, IMG_EXPANDABLE_STEELWALL_GROWING_DOWN, 0);
-
- new_wall = TRUE;
- }
- }
-
- if (element == EL_EXPANDABLE_STEELWALL_HORIZONTAL ||
- element == EL_EXPANDABLE_STEELWALL_ANY)
- {
- if (free_left)
- {
- Tile[ax - 1][ay] = EL_EXPANDABLE_STEELWALL_GROWING;
- Store[ax - 1][ay] = element;
- GfxDir[ax - 1][ay] = MovDir[ax - 1][ay] = MV_LEFT;
-
- if (IN_SCR_FIELD(SCREENX(ax - 1), SCREENY(ay)))
- DrawLevelGraphic(ax - 1, ay, IMG_EXPANDABLE_STEELWALL_GROWING_LEFT, 0);
-
- new_wall = TRUE;
- }
-
- if (free_right)
- {
- Tile[ax + 1][ay] = EL_EXPANDABLE_STEELWALL_GROWING;
- Store[ax + 1][ay] = element;
- GfxDir[ax + 1][ay] = MovDir[ax + 1][ay] = MV_RIGHT;
-
- if (IN_SCR_FIELD(SCREENX(ax + 1), SCREENY(ay)))
- DrawLevelGraphic(ax + 1, ay, IMG_EXPANDABLE_STEELWALL_GROWING_RIGHT, 0);
-
- new_wall = TRUE;
- }
- }
-
- if (!IN_LEV_FIELD(ax, ay - 1) || IS_WALL(Tile[ax][ay - 1]))
- stop_top = TRUE;
- if (!IN_LEV_FIELD(ax, ay + 1) || IS_WALL(Tile[ax][ay + 1]))
- stop_bottom = TRUE;
- if (!IN_LEV_FIELD(ax - 1, ay) || IS_WALL(Tile[ax - 1][ay]))
- stop_left = TRUE;
- if (!IN_LEV_FIELD(ax + 1, ay) || IS_WALL(Tile[ax + 1][ay]))
- stop_right = TRUE;
-
- if (((stop_top && stop_bottom) ||
- element == EL_EXPANDABLE_STEELWALL_HORIZONTAL) &&
- ((stop_left && stop_right) ||
- element == EL_EXPANDABLE_STEELWALL_VERTICAL))
- Tile[ax][ay] = EL_STEELWALL;