static void CheckGravityMovement(struct PlayerInfo *);
static void KillHeroUnlessProtected(int, int);
+static void CheckTriggeredElementChange(int, int);
static void ChangeElementDoIt(int, int, int);
static void PlaySoundLevel(int, int, int);
Explode(x, y, EX_PHASE_START, EX_NORMAL);
break;
}
+
+ CheckTriggeredElementChange(element, CE_OTHER_EXPLODING);
}
void SplashAcid(int x, int y)
DrawLevelFieldCrumbledSand(x, y);
}
-static void ChangeElementDoIt(int x, int y, int element)
+static void ChangeElementDoIt(int x, int y, int element_new)
{
+ CheckTriggeredElementChange(Feld[x][y], CE_OTHER_CHANGING);
+
RemoveField(x, y);
- Feld[x][y] = element;
+ Feld[x][y] = element_new;
ResetGfxAnimation(x, y);
ResetRandomAnimationValue(x, y);
switch (element)
{
+#if 0
case EL_EMPTY:
+ PlaySoundLevelElementAction(x, y, player->element_nr, ACTION_MOVING);
+ break;
+#endif
+
+#if 0
case EL_SAND:
case EL_INVISIBLE_SAND:
case EL_INVISIBLE_SAND_ACTIVE:
case EL_SP_BUGGY_BASE:
case EL_SP_BUGGY_BASE_ACTIVATING:
RemoveField(x, y);
-#if 1
+
if (mode != DF_SNAP && element != EL_EMPTY)
{
GfxElement[x][y] = (CAN_BE_CRUMBLED(element) ? EL_SAND : element);
player->is_digging = TRUE;
}
-#endif
+
PlaySoundLevelElementAction(x, y, element, ACTION_DIGGING);
break;
+#endif
case EL_EMERALD:
case EL_BD_DIAMOND:
case EL_PEARL:
case EL_CRYSTAL:
RemoveField(x, y);
-#if 1
+
if (mode != DF_SNAP)
{
GfxElement[x][y] = element;
player->is_collecting = TRUE;
}
-#endif
+
local_player->gems_still_needed -= (element == EL_DIAMOND ? 3 :
element == EL_PEARL ? 5 :
element == EL_CRYSTAL ? 8 : 1);
CheckTriggeredElementChange(element, CE_OTHER_COLLECTING);
break;
+#if 0
case EL_ENVELOPE:
Feld[x][y] = EL_EMPTY;
#if 1
#endif
CheckTriggeredElementChange(element, CE_OTHER_COLLECTING);
break;
+#endif
case EL_EXTRA_TIME:
RemoveField(x, y);
DrawLevelField(x + dx, y + dy);
PlaySoundLevelElementAction(x, y, element, ACTION_PUSHING);
+
+ CheckTriggeredElementChange(element, CE_OTHER_PUSHING);
+
break;
case EL_GATE_1:
return MF_ACTION;
break;
+#if 0
case EL_SOKOBAN_FIELD_EMPTY:
break;
+#endif
case EL_SOKOBAN_OBJECT:
case EL_SOKOBAN_FIELD_FULL:
PlaySoundLevel(x, y, SND_GAME_SOKOBAN_SOLVING);
}
+ CheckTriggeredElementChange(element, CE_OTHER_PUSHING);
+
break;
case EL_PENGUIN:
if (IS_WALKABLE(element))
{
+ PlaySoundLevelElementAction(x, y, player->element_nr, ACTION_MOVING);
break;
}
else if (IS_DIGGABLE(element))
{
RemoveField(x, y);
-#if 1
+
if (mode != DF_SNAP)
{
GfxElement[x][y] =
(CAN_BE_CRUMBLED(element) ? EL_SAND : GFX_ELEMENT(element));
player->is_digging = TRUE;
}
-#endif
+
PlaySoundLevelElementAction(x, y, element, ACTION_DIGGING);
break;
else if (IS_COLLECTIBLE(element))
{
RemoveField(x, y);
-#if 1
+
if (mode != DF_SNAP)
{
GfxElement[x][y] = element;
player->is_collecting = TRUE;
}
-#endif
+
PlaySoundLevelElementAction(x, y, element, ACTION_COLLECTING);
CheckTriggeredElementChange(element, CE_OTHER_COLLECTING);
DrawLevelField(x + dx, y + dy);
PlaySoundLevelElementAction(x, y, element, ACTION_PUSHING);
+ CheckTriggeredElementChange(element, CE_OTHER_PUSHING);
+
break;
}