+ /* set properties derived from other properties */
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ {
+ if (IS_WALKABLE_OVER(i) || IS_WALKABLE_INSIDE(i) || IS_WALKABLE_UNDER(i))
+ SET_PROPERTY(i, EP_WALKABLE, TRUE);
+
+ if (IS_PASSABLE_OVER(i) || IS_PASSABLE_INSIDE(i) || IS_PASSABLE_UNDER(i))
+ SET_PROPERTY(i, EP_PASSABLE, TRUE);
+
+ if (IS_WALKABLE_OVER(i) || IS_PASSABLE_OVER(i))
+ SET_PROPERTY(i, EP_ACCESSIBLE_OVER, TRUE);
+
+ if (IS_WALKABLE_INSIDE(i) || IS_PASSABLE_INSIDE(i))
+ SET_PROPERTY(i, EP_ACCESSIBLE_INSIDE, TRUE);
+
+ if (IS_WALKABLE_UNDER(i) || IS_PASSABLE_UNDER(i))
+ SET_PROPERTY(i, EP_ACCESSIBLE_UNDER, TRUE);
+
+ if (IS_WALKABLE(i) || IS_PASSABLE(i))
+ SET_PROPERTY(i, EP_ACCESSIBLE, TRUE);
+ }
+
+ /* dynamically determine wall-like elements */
+ for (i=0; i < MAX_NUM_ELEMENTS; i++)
+ {
+ /* default: element is wall-like */
+ SET_PROPERTY(i, EP_WALL, TRUE);
+
+ for (j=0; no_wall_properties[j] != -1; j++)
+ if (HAS_PROPERTY(i, no_wall_properties[j]) ||
+ i >= EL_FIRST_RUNTIME_UNREAL)
+ SET_PROPERTY(i, EP_WALL, FALSE);
+
+ if (IS_HISTORIC_WALL(i))
+ SET_PROPERTY(i, EP_WALL, TRUE);
+
+#if 0
+ printf("::: %d: %s '%s'\n",
+ i,
+ (IS_WALL(i) ? "IS A WALL: " : "IS NOT A WALL:"),
+ element_info[i].token_name);
+#endif
+ }
+