RemoveMovingField(x, y);
}
-#if 1
if ((IS_INDESTRUCTIBLE(element) &&
(game.engine_version < VERSION_IDENT(2,2,0) ||
(!IS_WALKABLE_OVER(element) && !IS_WALKABLE_UNDER(element)))) ||
element == EL_FLAMES)
continue;
-#else
- if (IS_INDESTRUCTIBLE(element) || element == EL_FLAMES)
- continue;
-#endif
if (IS_PLAYER(x, y) && SHIELD_ON(PLAYERINFO(x, y)))
{
continue;
}
-#if 1
/* save walkable background elements while explosion on same tile */
if (IS_INDESTRUCTIBLE(element))
Back[x][y] = element;
-#endif
/* ignite explodable elements reached by other explosion */
if (element == EL_EXPLOSION)
element = Store2[x][y];
-#if 0
- else if (IS_INDESTRUCTIBLE(Store2[x][y])) /* hard element under bomb */
- element = Store2[x][y];
-#endif
-
-#if 0
- else if (IS_INDESTRUCTIBLE(Store[x][y])) /* hard element under bomb */
- element = Store[x][y];
-#endif
-
if (IS_PLAYER(ex, ey) && !PLAYER_PROTECTED(ex, ey))
{
switch(StorePlayer[ex][ey])
if (game.emulation == EMU_SUPAPLEX)
Store[x][y] = EL_EMPTY;
}
-#if 0
- else if (IS_INDESTRUCTIBLE(Store[x][y]))
- ;
-#endif
-#if 0
- else if (IS_INDESTRUCTIBLE(element))
- Store[x][y] = element;
-#endif
-#if 0
- else if (IS_INDESTRUCTIBLE(element) && IS_ACCESSIBLE(element))
- Store[x][y] = element;
-#endif
else if (center_element == EL_MOLE)
Store[x][y] = EL_EMERALD_RED;
else if (center_element == EL_PENGUIN)
Store[x][y] = EL_PEARL;
else if (element == EL_WALL_CRYSTAL)
Store[x][y] = EL_CRYSTAL;
-#if 1
-#if 0
-#if 0
- else if (IS_INDESTRUCTIBLE(element) && IS_ACCESSIBLE(element))
- Store[x][y] = element;
-#else
- else if (IS_INDESTRUCTIBLE(element))
- Store[x][y] = element;
-#endif
-#endif
else
Store[x][y] = EL_EMPTY;
-#else
-
-#if 0
- else if (IS_PFORTE(element))
- Store[x][y] = element;
- else
- Store[x][y] = EL_EMPTY;
-#else
- else if (!IS_PFORTE(Store[x][y]))
- Store[x][y] = EL_EMPTY;
-#endif
-
-#endif
if (x != ex || y != ey ||
center_element == EL_AMOEBA_TO_DIAMOND || mode == EX_BORDER)
element = Feld[x][y] = Store[x][y];
Store[x][y] = Store2[x][y] = 0;
-#if 1
if (Back[x][y] && IS_INDESTRUCTIBLE(Back[x][y]))
element = Feld[x][y] = Back[x][y];
Back[x][y] = 0;
-#endif
MovDir[x][y] = MovPos[x][y] = MovDelay[x][y] = 0;
InitField(x, y, FALSE);
if (phase == delay)
DrawLevelFieldCrumbledSand(x, y);
-#if 1
if (IS_WALKABLE_OVER(Back[x][y]))
{
DrawLevelElement(x, y, Back[x][y]);
}
else if (!IS_WALKABLE_INSIDE(Back[x][y]))
DrawGraphic(SCREENX(x), SCREENY(y), graphic, frame);
-#else
- if (IS_PFORTE(Store[x][y]))
- {
- DrawLevelElement(x, y, Store[x][y]);
- DrawGraphicThruMask(SCREENX(x), SCREENY(y), graphic, frame);
- }
- else
- DrawGraphic(SCREENX(x), SCREENY(y), graphic, frame);
-#endif
}
}
}
}
+static int ChangeElementOnPlayfield(int element_old, int element_new)
+{
+ int x, y;
+ int num_changes = 0;
+
+ for(y=0; y<lev_fieldy; y++)
+ {
+ for(x=0; x<lev_fieldx; x++)
+ {
+ if (Feld[x][y] == element_old)
+ {
+ Feld[x][y] = element_new;
+ num_changes++;
+ }
+ }
+ }
+
+ return num_changes;
+}
+
static void InitBeltMovement()
{
static int belt_base_element[4] =
element == EL_TIMEGATE_CLOSING)
{
Feld[xx][yy] = EL_TIMEGATE_OPENING;
+#if 1
+ PlaySoundLevelElementAction(xx, yy, Feld[xx][yy], ACTION_OPENING);
+#else
PlaySoundLevel(xx, yy, SND_TIMEGATE_OPENING);
+#endif
}
/*
if (!player->active)
return;
-#if 1
/* remove accessible field at the player's position */
Feld[jx][jy] = EL_EMPTY;
-#else
- if (IS_PFORTE(Feld[jx][jy]))
- Feld[jx][jy] = EL_EMPTY;
-#endif
/* deactivate shield (else Bang()/Explode() would not work right) */
player->shield_normal_time_left = 0;
{
int key_nr = element - EL_KEY_1;
int graphic = el2edimg(element);
+ int element_old, element_new;
+ int num_changes;
RemoveField(x, y);
player->key[key_nr] = TRUE;
DrawMiniGraphicExt(window, DX_KEYS + key_nr * MINI_TILEX, DY_KEYS,
graphic);
PlaySoundLevel(x, y, SND_CLASS_KEY_COLLECTING);
+
+ element_old = EL_GATE_1_CLOSED + key_nr;
+ element_new = EL_GATE_1_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+
+ element_old = EL_GATE_1_GRAY_CLOSED + key_nr;
+ element_new = EL_GATE_1_GRAY_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+
+ if (game.engine_version < VERSION_IDENT(2,2,0))
+ {
+ element_old = EL_EM_GATE_1_CLOSED + key_nr;
+ element_new = EL_EM_GATE_1_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+
+ element_old = EL_EM_GATE_1_GRAY_CLOSED + key_nr;
+ element_new = EL_EM_GATE_1_GRAY_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+ }
+
break;
}
{
int key_nr = element - EL_EM_KEY_1;
int graphic = el2edimg(EL_KEY_1 + key_nr);
+ int element_old, element_new;
+ int num_changes;
RemoveField(x, y);
player->key[key_nr] = TRUE;
DrawMiniGraphicExt(window, DX_KEYS + key_nr * MINI_TILEX, DY_KEYS,
graphic);
PlaySoundLevel(x, y, SND_CLASS_KEY_COLLECTING);
+
+ element_old = EL_EM_GATE_1_CLOSED + key_nr;
+ element_new = EL_EM_GATE_1_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+
+ element_old = EL_EM_GATE_1_GRAY_CLOSED + key_nr;
+ element_new = EL_EM_GATE_1_GRAY_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+
+ if (game.engine_version < VERSION_IDENT(2,2,0))
+ {
+ element_old = EL_GATE_1_CLOSED + key_nr;
+ element_new = EL_GATE_1_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+
+ element_old = EL_GATE_1_GRAY_CLOSED + key_nr;
+ element_new = EL_GATE_1_GRAY_OPEN + key_nr;
+ num_changes = ChangeElementOnPlayfield(element_old, element_new);
+ if (num_changes > 0)
+ PlaySoundLevelElementAction(x, y, element_old, ACTION_OPENING);
+ }
+
break;
}
PlaySoundLevelElementAction(x, y, element, ACTION_PUSHING);
break;
- case EL_GATE_1:
- case EL_GATE_2:
- case EL_GATE_3:
- case EL_GATE_4:
+ case EL_GATE_1_OPEN:
+ case EL_GATE_2_OPEN:
+ case EL_GATE_3_OPEN:
+ case EL_GATE_4_OPEN:
+#if 0
if (!player->key[element - EL_GATE_1])
return MF_NO_ACTION;
+#endif
break;
- case EL_GATE_1_GRAY:
- case EL_GATE_2_GRAY:
- case EL_GATE_3_GRAY:
- case EL_GATE_4_GRAY:
+ case EL_GATE_1_GRAY_OPEN:
+ case EL_GATE_2_GRAY_OPEN:
+ case EL_GATE_3_GRAY_OPEN:
+ case EL_GATE_4_GRAY_OPEN:
+#if 0
if (!player->key[element - EL_GATE_1_GRAY])
return MF_NO_ACTION;
+#endif
break;
- case EL_EM_GATE_1:
- case EL_EM_GATE_2:
- case EL_EM_GATE_3:
- case EL_EM_GATE_4:
+ case EL_EM_GATE_1_OPEN:
+ case EL_EM_GATE_2_OPEN:
+ case EL_EM_GATE_3_OPEN:
+ case EL_EM_GATE_4_OPEN:
+#if 0
if (!player->key[element - EL_EM_GATE_1])
return MF_NO_ACTION;
+#endif
if (!IN_LEV_FIELD(x + dx, y + dy) || !IS_FREE(x + dx, y + dy))
return MF_NO_ACTION;
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
+#if 1
+ PlaySoundLevelAction(x, y, ACTION_PASSING);
+#else
PlaySoundLevel(x, y, SND_CLASS_GATE_PASSING);
+#endif
break;
- case EL_EM_GATE_1_GRAY:
- case EL_EM_GATE_2_GRAY:
- case EL_EM_GATE_3_GRAY:
- case EL_EM_GATE_4_GRAY:
+ case EL_EM_GATE_1_GRAY_OPEN:
+ case EL_EM_GATE_2_GRAY_OPEN:
+ case EL_EM_GATE_3_GRAY_OPEN:
+ case EL_EM_GATE_4_GRAY_OPEN:
+#if 0
if (!player->key[element - EL_EM_GATE_1_GRAY])
return MF_NO_ACTION;
+#endif
if (!IN_LEV_FIELD(x + dx, y + dy) || !IS_FREE(x + dx, y + dy))
return MF_NO_ACTION;