+
+ /* set properties derived from other properties */
+ for (i=0; i<MAX_NUM_ELEMENTS; i++)
+ {
+ if (IS_WALKABLE_OVER(i) || IS_WALKABLE_THROUGH(i) || IS_WALKABLE_UNDER(i))
+ SET_PROPERTY(i, EP_WALKABLE, TRUE);
+
+ if (IS_PASSABLE_OVER(i) || IS_PASSABLE_THROUGH(i) || IS_PASSABLE_UNDER(i))
+ SET_PROPERTY(i, EP_PASSABLE, TRUE);
+
+ if (IS_WALKABLE_OVER(i) || IS_PASSABLE_OVER(i))
+ SET_PROPERTY(i, EP_PLAYER_OVER, TRUE);
+
+ if (IS_WALKABLE_THROUGH(i) || IS_PASSABLE_THROUGH(i))
+ SET_PROPERTY(i, EP_PLAYER_INSIDE, TRUE);
+
+ if (IS_WALKABLE_UNDER(i) || IS_PASSABLE_UNDER(i))
+ SET_PROPERTY(i, EP_PLAYER_UNDER, TRUE);
+ }
+
+#if 0
+ /* determine inactive elements (used for engine main loop optimization) */
+ for (i=0; i < MAX_NUM_ELEMENTS; i++)
+ {
+ boolean active = FALSE;
+
+ for (j=0; i < NUM_ELEMENT_PROPERTIES; j++)
+ {
+ if (HAS_PROPERTY(i, j))
+ active = TRUE;
+ }
+
+#if 0
+ if (!active)
+ SET_PROPERTY(i, EP_INACTIVE, TRUE);
+#endif
+ }
+#endif
+
+#if 0
+ for (i=0; i < MAX_NUM_ELEMENTS; i++)
+ {
+ boolean element_is_solid = TRUE;
+
+ if (IS_DIGGABLE(i) ||
+ IS_COLLECTIBLE(i) ||
+ CAN_FALL(i) ||
+ CAN_MOVE(i) ||
+ IS_PUSHABLE(i))
+ element_is_solid = FALSE;
+
+ if (IS_INDESTRUCTIBLE(i))
+ element_is_solid = TRUE;
+
+ if (element_is_solid != HAS_PROPERTY(i, EP_SOLID))
+ printf("::: '%s' should %s solid\n", element_info[i].token_name,
+ (HAS_PROPERTY(i, EP_SOLID) ? "NOT be" : "be"));