+/* -------------------------------------------------------------------------
+ definition of elements that automatically change to other elements after
+ a specified time, eventually calling a function when changing
+ ------------------------------------------------------------------------- */
+
+/* forward declaration for changer functions */
+static void InitBuggyBase(int x, int y);
+static void WarnBuggyBase(int x, int y);
+
+static void InitTrap(int x, int y);
+static void ActivateTrap(int x, int y);
+static void ChangeActiveTrap(int x, int y);
+
+static void InitRobotWheel(int x, int y);
+static void RunRobotWheel(int x, int y);
+static void StopRobotWheel(int x, int y);
+
+static void InitTimegateWheel(int x, int y);
+static void RunTimegateWheel(int x, int y);
+
+struct ChangingElementInfo
+{
+ int base_element;
+ int next_element;
+ int change_delay;
+ void (*pre_change_function)(int x, int y);
+ void (*change_function)(int x, int y);
+ void (*post_change_function)(int x, int y);
+};
+
+static struct ChangingElementInfo changing_element_list[] =
+{
+ { EL_NUT_CRACKING, EL_EMERALD, 6, NULL, NULL, NULL },
+ { EL_PEARL_BREAKING, EL_EMPTY, 8, NULL, NULL, NULL },
+ { EL_EXIT_OPENING, EL_EXIT_OPEN, 29, NULL, NULL, NULL },
+
+ { EL_SWITCHGATE_OPENING, EL_SWITCHGATE_OPEN, 29, NULL, NULL, NULL },
+ { EL_SWITCHGATE_CLOSING, EL_SWITCHGATE_CLOSED, 29, NULL, NULL, NULL },
+
+ { EL_TIMEGATE_OPENING, EL_TIMEGATE_OPEN, 29, NULL, NULL, NULL },
+ { EL_TIMEGATE_CLOSING, EL_TIMEGATE_CLOSED, 29, NULL, NULL, NULL },
+
+ { EL_SP_BUGGY_BASE, EL_SP_BUGGY_BASE_ACTIVATING, 0,
+ InitBuggyBase, NULL, NULL },
+ { EL_SP_BUGGY_BASE_ACTIVATING,EL_SP_BUGGY_BASE_ACTIVE, 0,
+ InitBuggyBase, NULL, NULL },
+ { EL_SP_BUGGY_BASE_ACTIVE, EL_SP_BUGGY_BASE, 0,
+ InitBuggyBase, WarnBuggyBase, NULL },
+
+ { EL_TRAP, EL_TRAP_ACTIVE, 0,
+ InitTrap, NULL, ActivateTrap },
+ { EL_TRAP_ACTIVE, EL_TRAP, 32,
+ NULL, ChangeActiveTrap, NULL },
+
+ { EL_ROBOT_WHEEL_ACTIVE, EL_ROBOT_WHEEL, 0,
+ InitRobotWheel, RunRobotWheel, StopRobotWheel },
+
+ { EL_TIMEGATE_SWITCH_ACTIVE, EL_TIMEGATE_SWITCH, 0,
+ InitTimegateWheel, RunTimegateWheel, NULL },
+
+ { EL_UNDEFINED, EL_UNDEFINED, -1, NULL }
+};
+
+static struct ChangingElementInfo changing_element[MAX_NUM_ELEMENTS];
+
+#define IS_AUTO_CHANGING(e) (changing_element[e].base_element != EL_UNDEFINED)
+
+
+