+void AusgangstuerBlinken(int x, int y)
+{
+ CheckExploding = TRUE;
+
+ if (!MovDelay[x][y]) /* neue Phase / noch nicht gewartet */
+ MovDelay[x][y] = 16;
+
+ if (MovDelay[x][y]) /* neue Phase / in Wartezustand */
+ {
+ int phase;
+
+ MovDelay[x][y]--;
+ phase = (MovDelay[x][y] % 16)/2;
+ if (phase>3)
+ phase = 7-phase;
+ if (!(MovDelay[x][y]%2) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
+ DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_AUSGANG_AUF+phase);
+ }
+}
+
+void EdelsteinFunkeln(int x, int y)
+{
+ int speed = 2;
+
+ CheckExploding = TRUE;
+
+ if (IS_MOVING(x,y))
+ return;
+
+ if (!MovDelay[x][y]) /* neue Phase / noch nicht gewartet */
+ MovDelay[x][y] = 4*speed;
+
+ if (MovDelay[x][y]) /* neue Phase / in Wartezustand */
+ {
+ int phase;
+
+ MovDelay[x][y]--;
+ phase = MovDelay[x][y]/speed;
+ if (!(MovDelay[x][y]%speed) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
+ DrawGraphic(SCROLLX(x),SCROLLY(y),GFX_EDELSTEIN2-phase);
+ }
+}
+
+void MauerWaechst(int x, int y)
+{
+ int speed = 3;
+
+ CheckExploding = TRUE;
+
+ if (!MovDelay[x][y]) /* neue Phase / noch nicht gewartet */
+ MovDelay[x][y] = 3*speed;
+
+ if (MovDelay[x][y]) /* neue Phase / in Wartezustand */
+ {
+ int phase;
+
+ MovDelay[x][y]--;
+ phase = 2-MovDelay[x][y]/speed;
+ if (!(MovDelay[x][y]%speed) && IN_SCR_FIELD(SCROLLX(x),SCROLLY(y)))
+ DrawGraphic(SCROLLX(x),SCROLLY(y),
+ (Store[x][y]==MV_LEFT ? GFX_MAUER_L1 : GFX_MAUER_R1)+phase);
+
+ if (!MovDelay[x][y])
+ {
+ if (Store[x][y]==MV_LEFT)
+ {
+ if (IN_LEV_FIELD(x-1,y) && IS_MAUER(Feld[x-1][y]))
+ DrawLevelField(x-1,y);
+ }
+ else
+ {
+ if (IN_LEV_FIELD(x+1,y) && IS_MAUER(Feld[x+1][y]))
+ DrawLevelField(x+1,y);
+ }
+
+ Feld[x][y] = EL_MAUER_LEBT;
+ Store[x][y] = 0;
+ DrawLevelField(x,y);
+ }
+ }
+}
+
+void MauerAbleger(int ax, int ay)
+{
+ BOOL links_frei = FALSE, rechts_frei = FALSE;
+ BOOL links_massiv = FALSE, rechts_massiv = FALSE;
+
+ CheckExploding = TRUE;
+
+ if (!MovDelay[ax][ay]) /* neue Mauer / noch nicht gewartet */
+ MovDelay[ax][ay] = 3;
+
+ if (MovDelay[ax][ay]) /* neue Mauer / in Wartezustand */
+ {
+ MovDelay[ax][ay]--;
+ if (MovDelay[ax][ay])
+ return;
+ }
+
+ if (IN_LEV_FIELD(ax-1,ay) && IS_FREE(ax-1,ay))
+ links_frei = TRUE;
+ if (IN_LEV_FIELD(ax+1,ay) && IS_FREE(ax+1,ay))
+ rechts_frei = TRUE;
+
+ if (links_frei)
+ {
+ Feld[ax-1][ay] = EL_MAUERND;
+ Store[ax-1][ay] = MV_LEFT;
+ if (IN_SCR_FIELD(SCROLLX(ax-1),SCROLLY(ay)))
+ DrawGraphic(SCROLLX(ax-1),SCROLLY(ay),GFX_MAUER_L1);
+ }
+ if (rechts_frei)
+ {
+ Feld[ax+1][ay] = EL_MAUERND;
+ Store[ax+1][ay] = MV_RIGHT;
+ if (IN_SCR_FIELD(SCROLLX(ax+1),SCROLLY(ay)))
+ DrawGraphic(SCROLLX(ax+1),SCROLLY(ay),GFX_MAUER_R1);
+ }
+
+ if (links_frei || rechts_frei)
+ DrawLevelField(ax,ay);
+
+ if (!IN_LEV_FIELD(ax-1,ay) || IS_MAUER(Feld[ax-1][ay]))
+ links_massiv = TRUE;
+ if (!IN_LEV_FIELD(ax+1,ay) || IS_MAUER(Feld[ax+1][ay]))
+ rechts_massiv = TRUE;
+
+ if (links_massiv && rechts_massiv)
+ Feld[ax][ay] = EL_MAUERWERK;
+}
+