properties[] =
{
/* configurable properties */
- { EP_INDESTRUCTIBLE, "- undestructible" },
- { EP_SLIPPERY, "- slippery for falling objects" },
- { EP_EM_SLIPPERY_WALL, "- slippery for some gems (EM style)" },
+
+ { EP_WALKABLE_OVER, "- player can walk over it" },
+ { EP_WALKABLE_INSIDE, "- player can walk inside it" },
+ { EP_WALKABLE_UNDER, "- player can walk under it" },
+ { EP_PASSABLE_OVER, "- player can pass over it" },
+ { EP_PASSABLE_INSIDE, "- player can pass through it" },
+ { EP_PASSABLE_UNDER, "- player can pass under it" },
{ EP_DIGGABLE, "- diggable" },
{ EP_COLLECTIBLE, "- collectible" },
{ EP_CAN_MOVE, "- can move" },
{ EP_CAN_FALL, "- can fall" },
-#if 0
- { EP_CAN_SMASH, "- can smash" },
-#endif
+
{ EP_CAN_SMASH_PLAYER, "- can smash player" },
+#if 0
{ EP_CAN_SMASH_ENEMIES, "- can smash good and bad guys" },
+#endif
{ EP_CAN_SMASH_EVERYTHING, "- can smash everything smashable" },
- { EP_CAN_EXPLODE, "- can explode" },
- { EP_CAN_EXPLODE_BY_FIRE, " - by fire or explosions" },
- { EP_CAN_EXPLODE_SMASHED, " - when smashed" },
- { EP_CAN_EXPLODE_IMPACT, " - on impact" },
+
+ { EP_SLIPPERY, "- slippery for falling objects" },
+ { EP_EM_SLIPPERY_WALL, "- slippery for some gems (EM style)" },
{ EP_DONT_RUN_INTO, "- deadly when running into" },
{ EP_DONT_COLLIDE_WITH, "- deadly when colliding with" },
{ EP_DONT_TOUCH, "- deadly when touching" },
- { EP_WALKABLE_OVER, "- player can walk over it" },
- { EP_WALKABLE_INSIDE, "- player can walk inside it" },
- { EP_WALKABLE_UNDER, "- player can walk under it" },
- { EP_PASSABLE_OVER, "- player can pass over it" },
- { EP_PASSABLE_INSIDE, "- player can pass through it" },
- { EP_PASSABLE_UNDER, "- player can pass under it" },
+ { EP_INDESTRUCTIBLE, "- undestructible" },
+
+ { EP_CAN_EXPLODE_BY_FIRE, "- can explode by fire or explosions" },
+ { EP_CAN_EXPLODE_SMASHED, "- can explode when smashed" },
+ { EP_CAN_EXPLODE_IMPACT, "- can explode on impact" },
+
+ { EP_CAN_CHANGE, "- can change to other element" },
/* pre-defined properties */
{ EP_CAN_PASS_MAGIC_WALL, "- can pass magic walls" },
PlaySoundLevelAction(ex, ey, ACTION_EXPLODING);
/* remove things displayed in background while burning dynamite */
- if (!IS_INDESTRUCTIBLE(Back[ex][ey]))
+ if (Back[ex][ey] != EL_EMPTY && !IS_INDESTRUCTIBLE(Back[ex][ey]))
Back[ex][ey] = 0;
if (IS_MOVING(ex, ey) || IS_BLOCKED(ex, ey))
#if 1
-#if 1
+#if 0
if (IS_EXPLOSION_PROOF(element))
continue;
#else
}
/* save walkable background elements while explosion on same tile */
-#if 1
+#if 0
if (IS_INDESTRUCTIBLE(element))
Back[x][y] = element;
#else
- if (IS_INDESTRUCTIBLE(element) && IS_WALKABLE(element))
+ if (IS_WALKABLE(element) && IS_INDESTRUCTIBLE(element))
Back[x][y] = element;
#endif
InitMovDir(x, y);
DrawLevelField(x, y);
+ if (CAN_BE_CRUMBLED(element))
+ DrawLevelFieldCrumbledSandNeighbours(x, y);
+
if (IS_PLAYER(x, y) && !PLAYERINFO(x,y)->present)
StorePlayer[x][y] = 0;
}
TurnRound(x, y);
#if 1
- DrawLevelElementAnimation(x, y, element);
+ if (GFX_ELEMENT(element) != EL_SAND)
+ DrawLevelElementAnimation(x, y, element);
#else
if (element == EL_BUG ||
element == EL_SPACESHIP ||
if (!IN_LEV_FIELD(x, y))
return;
- element = (GfxElement[x][y] != EL_UNDEFINED ? GfxElement[x][y] : Feld[x][y]);
+ element = (GfxElement[x][y] != EL_UNDEFINED && Feld[x][y] != EL_EXPLOSION ?
+ GfxElement[x][y] : Feld[x][y]);
/* crumble field itself */
if (CAN_BE_CRUMBLED(element) && !IS_MOVING(x, y))
if (CAN_BE_CRUMBLED(element) && !IS_MOVING(xx, yy))
continue;
+#if 0
+ if (Feld[x][y] == EL_CUSTOM_START + 123)
+ printf("::: crumble [%d] THE CHAOS ENGINE (%d, %d): %d, %d\n",
+ i, Feld[x][y], element,
+ CAN_BE_CRUMBLED(element), IS_MOVING(x, y));
+#endif
+
if (i == 1 || i == 2)
{
width = snip;