return;
}
- if (Feld[x][y] == EL_BLOCKED && Feld[oldx][oldy] == EL_QUICKSAND_EMPTYING)
- {
- Feld[oldx][oldy] = EL_MORAST_LEER;
+ if (Feld[x][y] == EL_BLOCKED &&
+ (Feld[oldx][oldy] == EL_QUICKSAND_EMPTYING ||
+ Feld[oldx][oldy] == EL_MAGIC_WALL_EMPTYING ||
+ Feld[oldx][oldy] == EL_MAGIC_WALL_BD_EMPTYING))
+ {
+ Feld[oldx][oldy] = (Feld[oldx][oldy] == EL_QUICKSAND_EMPTYING ?
+ EL_MORAST_LEER :
+ Feld[oldx][oldy] == EL_MAGIC_WALL_EMPTYING ?
+ EL_MAGIC_WALL_EMPTY :
+ Feld[oldx][oldy] == EL_MAGIC_WALL_BD_EMPTYING ?
+ EL_MAGIC_WALL_BD_EMPTY : 0);
Store[oldx][oldy] = Store2[oldx][oldy] = 0;
}
else if (Feld[x][y] == EL_BLOCKED &&
- (Store[oldx][oldy] == EL_MAGIC_WALL_EMPTY ||
- Store[oldx][oldy] == EL_MAGIC_WALL_BD_EMPTY ||
- Store[oldx][oldy] == EL_AMOEBE_NASS))
+ Store[oldx][oldy] == EL_AMOEBE_NASS)
{
Feld[oldx][oldy] = Store[oldx][oldy];
Store[oldx][oldy] = Store2[oldx][oldy] = 0;
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
- Feld[x][y] = EL_CHANGED(Store2[x][y]);
- Store[x][y] = EL_MAGIC_WALL_EMPTY;
+ Feld[x][y] = EL_MAGIC_WALL_EMPTYING;
+ Store[x][y] = EL_CHANGED(Store[x][y]);
}
else if (Feld[x][y+1] == EL_MAGIC_WALL_EMPTY)
{
Feld[x][y] = EL_MAGIC_WALL_EMPTY;
Feld[x][y+1] = EL_MAGIC_WALL_FULL;
- Store2[x][y+1] = EL_CHANGED(Store2[x][y]);
- Store2[x][y] = 0;
+ Store[x][y+1] = EL_CHANGED(Store[x][y]);
+ Store[x][y] = 0;
}
}
else if (element == EL_MAGIC_WALL_BD_FULL)
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
- Feld[x][y] = EL_CHANGED2(Store2[x][y]);
- Store[x][y] = EL_MAGIC_WALL_BD_EMPTY;
+ Feld[x][y] = EL_MAGIC_WALL_BD_EMPTYING;
+ Store[x][y] = EL_CHANGED2(Store[x][y]);
}
else if (Feld[x][y+1] == EL_MAGIC_WALL_BD_EMPTY)
{
Feld[x][y] = EL_MAGIC_WALL_BD_EMPTY;
Feld[x][y+1] = EL_MAGIC_WALL_BD_FULL;
- Store2[x][y+1] = EL_CHANGED2(Store2[x][y]);
- Store2[x][y] = 0;
+ Store[x][y+1] = EL_CHANGED2(Store[x][y]);
+ Store[x][y] = 0;
}
}
else if (CAN_CHANGE(element) &&
Feld[x][y+1] == EL_MAGIC_WALL_BD_EMPTY))
{
InitMovingField(x, y, MV_DOWN);
- Store[x][y] =
- (Feld[x][y+1] == EL_MAGIC_WALL_EMPTY ? EL_MAGIC_WALL_FULL :
- EL_MAGIC_WALL_BD_FULL);
- Store2[x][y+1] = element;
+ Feld[x][y] =
+ (Feld[x][y+1] == EL_MAGIC_WALL_EMPTY ? EL_MAGIC_WALL_FILLING :
+ EL_MAGIC_WALL_BD_FILLING);
+ Store[x][y] = element;
}
else if (CAN_SMASH(element) && Feld[x][y+1] == EL_SALZSAEURE)
{
if (element == EL_TROPFEN)
step /= 2;
- else if (element == EL_QUICKSAND_FILLING || element == EL_QUICKSAND_EMPTYING)
+ else if (element == EL_QUICKSAND_FILLING ||
+ element == EL_QUICKSAND_EMPTYING)
step /= 4;
+ else if (element == EL_MAGIC_WALL_FILLING ||
+ element == EL_MAGIC_WALL_BD_FILLING ||
+ element == EL_MAGIC_WALL_EMPTYING ||
+ element == EL_MAGIC_WALL_BD_EMPTYING)
+ step /= 2;
else if (CAN_FALL(element) && horiz_move &&
y < lev_fieldy-1 && IS_BELT(Feld[x][y+1]))
step /= 2;
element = Feld[newx][newy] = Store[x][y];
Store[x][y] = 0;
}
- else if (Store[x][y] == EL_MAGIC_WALL_FULL)
+ else if (element == EL_MAGIC_WALL_FILLING)
{
- Store[x][y] = 0;
element = Feld[newx][newy] =
(game.magic_wall_active ? EL_MAGIC_WALL_FULL : EL_MAGIC_WALL_DEAD);
+ Store[newx][newy] = Store[x][y];
+ Store[x][y] = 0;
}
- else if (Store[x][y] == EL_MAGIC_WALL_EMPTY)
+ else if (element == EL_MAGIC_WALL_EMPTYING)
{
- Store[x][y] = Store2[x][y] = 0;
Feld[x][y] = (game.magic_wall_active ? EL_MAGIC_WALL_EMPTY :
EL_MAGIC_WALL_DEAD);
+ element = Feld[newx][newy] = Store[x][y];
+ Store[x][y] = 0;
}
- else if (Store[x][y] == EL_MAGIC_WALL_BD_FULL)
+ else if (element == EL_MAGIC_WALL_BD_FILLING)
{
- Store[x][y] = 0;
element = Feld[newx][newy] =
(game.magic_wall_active ? EL_MAGIC_WALL_BD_FULL :
EL_MAGIC_WALL_BD_DEAD);
+ Store[newx][newy] = Store[x][y];
+ Store[x][y] = 0;
}
- else if (Store[x][y] == EL_MAGIC_WALL_BD_EMPTY)
+ else if (element == EL_MAGIC_WALL_BD_EMPTYING)
{
- Store[x][y] = Store2[x][y] = 0;
Feld[x][y] = (game.magic_wall_active ? EL_MAGIC_WALL_BD_EMPTY :
EL_MAGIC_WALL_BD_DEAD);
+ element = Feld[newx][newy] = Store[x][y];
+ Store[x][y] = 0;
}
else if (Store[x][y] == EL_SALZSAEURE)
{
boolean sieb = FALSE;
int jx = local_player->jx, jy = local_player->jy;
- if (element == EL_MAGIC_WALL_EMPTY || element == EL_MAGIC_WALL_FULL ||
- Store[x][y] == EL_MAGIC_WALL_EMPTY)
+ if (element == EL_MAGIC_WALL_FULL ||
+ element == EL_MAGIC_WALL_EMPTY ||
+ element == EL_MAGIC_WALL_EMPTYING)
{
SiebAktivieren(x, y, 1);
sieb = TRUE;
}
- else if (element == EL_MAGIC_WALL_BD_EMPTY ||
- element == EL_MAGIC_WALL_BD_FULL ||
- Store[x][y] == EL_MAGIC_WALL_BD_EMPTY)
+ else if (element == EL_MAGIC_WALL_BD_FULL ||
+ element == EL_MAGIC_WALL_BD_EMPTY ||
+ element == EL_MAGIC_WALL_BD_EMPTYING)
{
SiebAktivieren(x, y, 2);
sieb = TRUE;
{
element = Feld[x][y];
- if (element == EL_MAGIC_WALL_EMPTY || element == EL_MAGIC_WALL_FULL)
+ if (element == EL_MAGIC_WALL_EMPTY ||
+ element == EL_MAGIC_WALL_FULL)
{
Feld[x][y] = EL_MAGIC_WALL_DEAD;
DrawLevelField(x, y);
}
}
else if (element == EL_MAGIC_WALL_EMPTY ||
+ element == EL_MAGIC_WALL_EMPTYING ||
element == EL_MAGIC_WALL_BD_EMPTY ||
+ element == EL_MAGIC_WALL_BD_EMPTYING ||
element == EL_MAGIC_WALL_FULL ||
element == EL_MAGIC_WALL_BD_FULL)
{
boolean cut_mode = NO_CUTTING;
if (element == EL_QUICKSAND_EMPTYING ||
- content == EL_MAGIC_WALL_EMPTY ||
- content == EL_MAGIC_WALL_BD_EMPTY ||
+ element == EL_MAGIC_WALL_EMPTYING ||
+ element == EL_MAGIC_WALL_BD_EMPTYING ||
content == EL_AMOEBE_NASS)
cut_mode = CUT_ABOVE;
else if (element == EL_QUICKSAND_FILLING ||
- content == EL_MAGIC_WALL_FULL ||
- content == EL_MAGIC_WALL_BD_FULL)
+ element == EL_MAGIC_WALL_FILLING ||
+ element == EL_MAGIC_WALL_BD_FILLING)
cut_mode = CUT_BELOW;
if (cut_mode == CUT_ABOVE)
{
- if (element == EL_QUICKSAND_EMPTYING)
+ if (element == EL_QUICKSAND_EMPTYING ||
+ element == EL_MAGIC_WALL_EMPTYING ||
+ element == EL_MAGIC_WALL_BD_EMPTYING)
DrawScreenElementShifted(x, y, 0, 0, element, NO_CUTTING);
else
DrawScreenElementShifted(x, y, 0, 0, content, NO_CUTTING);
DrawScreenElementShifted(x, y, MovPos[ux][uy], 0, element, NO_CUTTING);
else
{
- if (element == EL_QUICKSAND_FILLING || element == EL_QUICKSAND_EMPTYING)
+ if (element == EL_QUICKSAND_EMPTYING ||
+ element == EL_MAGIC_WALL_EMPTYING ||
+ element == EL_MAGIC_WALL_BD_EMPTYING ||
+ element == EL_QUICKSAND_FILLING ||
+ element == EL_MAGIC_WALL_FILLING ||
+ element == EL_MAGIC_WALL_BD_FILLING)
DrawScreenElementShifted(x, y, 0, MovPos[ux][uy], content, cut_mode);
else
DrawScreenElementShifted(x, y, 0, MovPos[ux][uy], element, cut_mode);
content_old = Store[oldx][oldy];
if (element_old == EL_QUICKSAND_EMPTYING ||
- content_old == EL_MAGIC_WALL_EMPTY ||
- content_old == EL_MAGIC_WALL_BD_EMPTY ||
+ element_old == EL_MAGIC_WALL_EMPTYING ||
+ element_old == EL_MAGIC_WALL_BD_EMPTYING ||
content_old == EL_AMOEBE_NASS)
cut_mode = CUT_ABOVE;
NO_CUTTING);
else
{
- if (element_old == EL_QUICKSAND_EMPTYING)
+ if (element_old == EL_QUICKSAND_EMPTYING ||
+ element_old == EL_MAGIC_WALL_EMPTYING ||
+ element_old == EL_MAGIC_WALL_BD_EMPTYING)
DrawScreenElementShifted(sx, sy, 0, MovPos[oldx][oldy], content_old,
cut_mode);
else
case EL_BOMBE: return GFX_BOMBE;
case EL_MAGIC_WALL_OFF: return GFX_MAGIC_WALL_OFF;
case EL_MAGIC_WALL_EMPTY: return GFX_MAGIC_WALL_EMPTY;
+ case EL_MAGIC_WALL_EMPTYING:return GFX_MAGIC_WALL_EMPTY;
case EL_MAGIC_WALL_FULL: return GFX_MAGIC_WALL_FULL;
case EL_MAGIC_WALL_DEAD: return GFX_MAGIC_WALL_DEAD;
case EL_SALZSAEURE: return GFX_SALZSAEURE;
case EL_MAMPFER2: return GFX_MAMPFER2;
case EL_MAGIC_WALL_BD_OFF: return GFX_MAGIC_WALL_BD_OFF;
case EL_MAGIC_WALL_BD_EMPTY:return GFX_MAGIC_WALL_BD_EMPTY;
+ case EL_MAGIC_WALL_BD_EMPTYING:return GFX_MAGIC_WALL_BD_EMPTY;
case EL_MAGIC_WALL_BD_FULL: return GFX_MAGIC_WALL_BD_FULL;
case EL_MAGIC_WALL_BD_DEAD: return GFX_MAGIC_WALL_BD_DEAD;
case EL_DYNABOMB_ACTIVE_1: return GFX_DYNABOMB;