#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 45)
#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 46)
#define GADGET_ID_CUSTOM_GEMCOUNT_UP (GADGET_ID_COUNTER_FIRST + 47)
-#define GADGET_ID_PUSH_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 48)
-#define GADGET_ID_PUSH_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 49)
-#define GADGET_ID_PUSH_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 50)
-#define GADGET_ID_PUSH_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 51)
-#define GADGET_ID_PUSH_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 52)
-#define GADGET_ID_PUSH_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 53)
-#define GADGET_ID_DROP_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 54)
-#define GADGET_ID_DROP_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 55)
-#define GADGET_ID_DROP_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 56)
-#define GADGET_ID_DROP_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 57)
-#define GADGET_ID_DROP_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 58)
-#define GADGET_ID_DROP_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 59)
-#define GADGET_ID_MOVE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 60)
-#define GADGET_ID_MOVE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 61)
-#define GADGET_ID_MOVE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 62)
-#define GADGET_ID_MOVE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 63)
-#define GADGET_ID_MOVE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 64)
-#define GADGET_ID_MOVE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 65)
-#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 66)
-#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 67)
-#define GADGET_ID_EXPLOSION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 68)
-#define GADGET_ID_IGNITION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 69)
-#define GADGET_ID_IGNITION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 70)
-#define GADGET_ID_IGNITION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 71)
-#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 72)
-#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 73)
-#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 74)
-#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 75)
-#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 76)
-#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 77)
-#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 78)
-#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 79)
-#define GADGET_ID_CHANGE_CONT_RND_UP (GADGET_ID_COUNTER_FIRST + 80)
-#define GADGET_ID_GROUP_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 81)
-#define GADGET_ID_GROUP_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 82)
-#define GADGET_ID_GROUP_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 83)
+#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 48)
+#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 49)
+#define GADGET_ID_CUSTOM_VALUE_FIX_UP (GADGET_ID_COUNTER_FIRST + 50)
+#define GADGET_ID_CUSTOM_VALUE_RND_DOWN (GADGET_ID_COUNTER_FIRST + 51)
+#define GADGET_ID_CUSTOM_VALUE_RND_TEXT (GADGET_ID_COUNTER_FIRST + 52)
+#define GADGET_ID_CUSTOM_VALUE_RND_UP (GADGET_ID_COUNTER_FIRST + 53)
+#define GADGET_ID_PUSH_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 54)
+#define GADGET_ID_PUSH_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 55)
+#define GADGET_ID_PUSH_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 56)
+#define GADGET_ID_PUSH_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 57)
+#define GADGET_ID_PUSH_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 58)
+#define GADGET_ID_PUSH_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 59)
+#define GADGET_ID_DROP_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 60)
+#define GADGET_ID_DROP_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 61)
+#define GADGET_ID_DROP_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 62)
+#define GADGET_ID_DROP_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 63)
+#define GADGET_ID_DROP_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 64)
+#define GADGET_ID_DROP_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 65)
+#define GADGET_ID_MOVE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 66)
+#define GADGET_ID_MOVE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 67)
+#define GADGET_ID_MOVE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 68)
+#define GADGET_ID_MOVE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 69)
+#define GADGET_ID_MOVE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 70)
+#define GADGET_ID_MOVE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 71)
+#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 72)
+#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 73)
+#define GADGET_ID_EXPLOSION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 74)
+#define GADGET_ID_IGNITION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 75)
+#define GADGET_ID_IGNITION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 76)
+#define GADGET_ID_IGNITION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 77)
+#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 78)
+#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 79)
+#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 80)
+#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 81)
+#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 82)
+#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 83)
+#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 84)
+#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 85)
+#define GADGET_ID_CHANGE_CONT_RND_UP (GADGET_ID_COUNTER_FIRST + 86)
+#define GADGET_ID_GROUP_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 87)
+#define GADGET_ID_GROUP_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 88)
+#define GADGET_ID_GROUP_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 89)
/* drawing area identifiers */
-#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 84)
+#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 90)
#define GADGET_ID_DRAWING_LEVEL (GADGET_ID_DRAWING_AREA_FIRST + 0)
#define GADGET_ID_YAMYAM_CONTENT_0 (GADGET_ID_DRAWING_AREA_FIRST + 1)
#define GADGET_ID_TIME_OR_STEPS (GADGET_ID_SELECTBOX_FIRST + 0)
#define GADGET_ID_GAME_ENGINE_TYPE (GADGET_ID_SELECTBOX_FIRST + 1)
-#define GADGET_ID_CUSTOM_WALK_TO_ACTION (GADGET_ID_SELECTBOX_FIRST + 2)
-#define GADGET_ID_CUSTOM_EXPLOSION_TYPE (GADGET_ID_SELECTBOX_FIRST + 3)
-#define GADGET_ID_CUSTOM_DEADLINESS (GADGET_ID_SELECTBOX_FIRST + 4)
-#define GADGET_ID_CUSTOM_MOVE_PATTERN (GADGET_ID_SELECTBOX_FIRST + 5)
-#define GADGET_ID_CUSTOM_MOVE_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 6)
-#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 7)
-#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 8)
-#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 9)
-#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 10)
-#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 11)
-#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 12)
-#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 13)
-#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 14)
-#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 15)
-#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 16)
-#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 17)
-#define GADGET_ID_CHANGE_SIDE (GADGET_ID_SELECTBOX_FIRST + 18)
-#define GADGET_ID_CHANGE_PLAYER (GADGET_ID_SELECTBOX_FIRST + 19)
-#define GADGET_ID_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 20)
-#define GADGET_ID_CHANGE_REPLACE_WHEN (GADGET_ID_SELECTBOX_FIRST + 21)
-#define GADGET_ID_ACTION_TYPE (GADGET_ID_SELECTBOX_FIRST + 22)
-#define GADGET_ID_ACTION_MODE (GADGET_ID_SELECTBOX_FIRST + 23)
-#define GADGET_ID_ACTION_ARG (GADGET_ID_SELECTBOX_FIRST + 24)
-#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 25)
-#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 26)
+#define GADGET_ID_WIND_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 2)
+#define GADGET_ID_CUSTOM_WALK_TO_ACTION (GADGET_ID_SELECTBOX_FIRST + 3)
+#define GADGET_ID_CUSTOM_EXPLOSION_TYPE (GADGET_ID_SELECTBOX_FIRST + 4)
+#define GADGET_ID_CUSTOM_DEADLINESS (GADGET_ID_SELECTBOX_FIRST + 5)
+#define GADGET_ID_CUSTOM_MOVE_PATTERN (GADGET_ID_SELECTBOX_FIRST + 6)
+#define GADGET_ID_CUSTOM_MOVE_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 7)
+#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 8)
+#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 9)
+#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 10)
+#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 11)
+#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 12)
+#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 13)
+#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 14)
+#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 15)
+#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 16)
+#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 17)
+#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 18)
+#define GADGET_ID_CHANGE_SIDE (GADGET_ID_SELECTBOX_FIRST + 19)
+#define GADGET_ID_CHANGE_PLAYER (GADGET_ID_SELECTBOX_FIRST + 20)
+#define GADGET_ID_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 21)
+#define GADGET_ID_CHANGE_REPLACE_WHEN (GADGET_ID_SELECTBOX_FIRST + 22)
+#define GADGET_ID_ACTION_TYPE (GADGET_ID_SELECTBOX_FIRST + 23)
+#define GADGET_ID_ACTION_MODE (GADGET_ID_SELECTBOX_FIRST + 24)
+#define GADGET_ID_ACTION_ARG (GADGET_ID_SELECTBOX_FIRST + 25)
+#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 26)
+#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 27)
/* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 27)
+#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 28)
#define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 0)
#define GADGET_ID_PROPERTIES_CONFIG (GADGET_ID_TEXTBUTTON_FIRST + 1)
#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 26)
#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 27)
#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 28)
-#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 29)
-#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 30)
-#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 31)
-#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 32)
-#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 33)
-#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 34)
-#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 35)
-#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 36)
-#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 37)
-#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 38)
-#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 39)
+#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 29)
+#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 30)
+#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 31)
+#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 32)
+#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 33)
+#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 34)
+#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 35)
+#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 36)
+#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 37)
+#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 38)
+#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 39)
+#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 40)
/* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 40)
+#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 41)
#define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \
ED_NUM_ELEMENTLIST_BUTTONS - 1)
#define ED_COUNTER_ID_ENVELOPE_YSIZE 13
#define ED_COUNTER_ID_CUSTOM_SCORE 14
#define ED_COUNTER_ID_CUSTOM_GEMCOUNT 15
-#define ED_COUNTER_ID_PUSH_DELAY_FIX 16
-#define ED_COUNTER_ID_PUSH_DELAY_RND 17
-#define ED_COUNTER_ID_DROP_DELAY_FIX 18
-#define ED_COUNTER_ID_DROP_DELAY_RND 19
-#define ED_COUNTER_ID_MOVE_DELAY_FIX 20
-#define ED_COUNTER_ID_MOVE_DELAY_RND 21
-#define ED_COUNTER_ID_EXPLOSION_DELAY 22
-#define ED_COUNTER_ID_IGNITION_DELAY 23
-#define ED_COUNTER_ID_GROUP_CONTENT 24
-#define ED_COUNTER_ID_CHANGE_DELAY_FIX 25
-#define ED_COUNTER_ID_CHANGE_DELAY_RND 26
-#define ED_COUNTER_ID_CHANGE_CONT_RND 27
-
-#define ED_NUM_COUNTERBUTTONS 28
+#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 16
+#define ED_COUNTER_ID_CUSTOM_VALUE_RND 17
+#define ED_COUNTER_ID_PUSH_DELAY_FIX 18
+#define ED_COUNTER_ID_PUSH_DELAY_RND 19
+#define ED_COUNTER_ID_DROP_DELAY_FIX 20
+#define ED_COUNTER_ID_DROP_DELAY_RND 21
+#define ED_COUNTER_ID_MOVE_DELAY_FIX 22
+#define ED_COUNTER_ID_MOVE_DELAY_RND 23
+#define ED_COUNTER_ID_EXPLOSION_DELAY 24
+#define ED_COUNTER_ID_IGNITION_DELAY 25
+#define ED_COUNTER_ID_GROUP_CONTENT 26
+#define ED_COUNTER_ID_CHANGE_DELAY_FIX 27
+#define ED_COUNTER_ID_CHANGE_DELAY_RND 28
+#define ED_COUNTER_ID_CHANGE_CONT_RND 29
+
+#define ED_NUM_COUNTERBUTTONS 30
#define ED_COUNTER_ID_LEVEL_FIRST ED_COUNTER_ID_LEVEL_XSIZE
#define ED_COUNTER_ID_LEVEL_LAST ED_COUNTER_ID_LEVEL_RANDOM
/* values for selectbox gadgets */
#define ED_SELECTBOX_ID_TIME_OR_STEPS 0
#define ED_SELECTBOX_ID_GAME_ENGINE_TYPE 1
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 2
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 3
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED 4
-#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION 5
-#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION 6
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN 7
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION 8
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE 9
-#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 10
-#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS 11
-#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE 12
-#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS 13
-#define ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE 14
-#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 15
-#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION 16
-#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 17
-#define ED_SELECTBOX_ID_CHANGE_SIDE 18
-#define ED_SELECTBOX_ID_CHANGE_PLAYER 19
-#define ED_SELECTBOX_ID_CHANGE_PAGE 20
-#define ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN 21
-#define ED_SELECTBOX_ID_ACTION_TYPE 22
-#define ED_SELECTBOX_ID_ACTION_MODE 23
-#define ED_SELECTBOX_ID_ACTION_ARG 24
-#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 25
-#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 26
-
-#define ED_NUM_SELECTBOX 27
+#define ED_SELECTBOX_ID_WIND_DIRECTION 2
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 3
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 4
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED 5
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION 6
+#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION 7
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN 8
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION 9
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE 10
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 11
+#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS 12
+#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE 13
+#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS 14
+#define ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE 15
+#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 16
+#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION 17
+#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 18
+#define ED_SELECTBOX_ID_CHANGE_SIDE 19
+#define ED_SELECTBOX_ID_CHANGE_PLAYER 20
+#define ED_SELECTBOX_ID_CHANGE_PAGE 21
+#define ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN 22
+#define ED_SELECTBOX_ID_ACTION_TYPE 23
+#define ED_SELECTBOX_ID_ACTION_MODE 24
+#define ED_SELECTBOX_ID_ACTION_ARG 25
+#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 26
+#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 27
+
+#define ED_NUM_SELECTBOX 28
#define ED_SELECTBOX_ID_LEVEL_FIRST ED_SELECTBOX_ID_TIME_OR_STEPS
-#define ED_SELECTBOX_ID_LEVEL_LAST ED_SELECTBOX_ID_GAME_ENGINE_TYPE
+#define ED_SELECTBOX_ID_LEVEL_LAST ED_SELECTBOX_ID_WIND_DIRECTION
#define ED_SELECTBOX_ID_CUSTOM1_FIRST ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE
#define ED_SELECTBOX_ID_CUSTOM1_LAST ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION
#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 15
#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 16
#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 17
-#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 18
-#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 19
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 20
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 21
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 22
-#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 23
-#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 24
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 25
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 26
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 27
-#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 28
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 29
-#define ED_CHECKBUTTON_ID_CHANGE_DELAY 30
-#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 31
-#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 32
-#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 33
-#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 34
-#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 35
-#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 36
-#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 37
-
-#define ED_NUM_CHECKBUTTONS 38
+#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 18
+#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 19
+#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 20
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 21
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 22
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 23
+#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 24
+#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 25
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 26
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 27
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 28
+#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 29
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 30
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY 31
+#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 32
+#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 33
+#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 34
+#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 35
+#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 36
+#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 37
+#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 38
+
+#define ED_NUM_CHECKBUTTONS 39
#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_INITIAL_GRAVITY
#define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
GADGET_ID_CUSTOM_SCORE_DOWN, GADGET_ID_CUSTOM_SCORE_UP,
GADGET_ID_CUSTOM_SCORE_TEXT, GADGET_ID_NONE,
&custom_element.collect_score_initial,
- NULL, "score", " "
+ NULL, "CE score", " "
},
{
-1, ED_ELEMENT_SETTINGS_YPOS(6),
GADGET_ID_CUSTOM_GEMCOUNT_DOWN, GADGET_ID_CUSTOM_GEMCOUNT_UP,
GADGET_ID_CUSTOM_GEMCOUNT_TEXT, GADGET_ID_CUSTOM_SCORE_UP,
&custom_element.collect_count_initial,
- NULL, "count", NULL
+ NULL, "CE count", NULL
+ },
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(12),
+ 0, 9999,
+ GADGET_ID_CUSTOM_VALUE_FIX_DOWN, GADGET_ID_CUSTOM_VALUE_FIX_UP,
+ GADGET_ID_CUSTOM_VALUE_FIX_TEXT, GADGET_ID_NONE,
+ &custom_element.ce_value_fixed_initial,
+ NULL, "CE value", NULL
+ },
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(12),
+ 0, 9999,
+ GADGET_ID_CUSTOM_VALUE_RND_DOWN, GADGET_ID_CUSTOM_VALUE_RND_UP,
+ GADGET_ID_CUSTOM_VALUE_RND_TEXT, GADGET_ID_CUSTOM_VALUE_FIX_UP,
+ &custom_element.ce_value_random_initial,
+ NULL, "+random", NULL
},
{
ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(7),
GADGET_ID_CHANGE_DELAY_FIX_DOWN, GADGET_ID_CHANGE_DELAY_FIX_UP,
GADGET_ID_CHANGE_DELAY_FIX_TEXT, GADGET_ID_NONE,
&custom_element_change.delay_fixed,
- NULL, "delay", NULL,
+ NULL, "CE delay", NULL,
},
{
-1, ED_ELEMENT_SETTINGS_YPOS(2),
{ -1, NULL }
};
+static struct ValueTextInfo options_wind_direction[] =
+{
+ { MV_START_NONE, "none" },
+ { MV_START_LEFT, "left" },
+ { MV_START_RIGHT, "right" },
+ { MV_START_UP, "up" },
+ { MV_START_DOWN, "down" },
+
+ { -1, NULL }
+};
+
static struct ValueTextInfo options_access_type[] =
{
{ EP_WALKABLE, "walkable" },
static struct ValueTextInfo options_access_direction[] =
{
- { MV_NO_DIRECTIONS, "no direction" },
+ { MV_NO_DIRECTION, "no direction" },
{ MV_LEFT, "left" },
{ MV_RIGHT, "right" },
{ MV_UP, "up" },
{ MV_HORIZONTAL, "horizontal" },
{ MV_VERTICAL, "vertical" },
{ MV_ALL_DIRECTIONS, "all directions" },
+ { MV_WIND_DIRECTION, "wind direction" },
{ MV_TOWARDS_PLAYER, "towards player" },
{ MV_AWAY_FROM_PLAYER, "away from player" },
{ MV_ALONG_LEFT_SIDE, "along left side" },
#endif
{ CE_IMPACT, "impact (on something)" },
{ CE_SMASHED, "smashed (from above)" },
- { CE_COUNT_AT_ZERO, "CE count at zero" },
+ { CE_VALUE_GETS_ZERO, "CE value gets 0" },
{ -1, NULL }
};
{ CE_SWITCH_OF_X, "switch of" },
{ CE_CHANGE_OF_X, "change by page of" },
{ CE_EXPLOSION_OF_X, "explosion of" },
- { CE_COUNT_AT_ZERO_OF_X, "CE count at zero of" },
+ { CE_VALUE_GETS_ZERO_OF_X, "CE value gets 0 of" },
{ -1, NULL }
};
{ CA_RESTART_LEVEL, "restart level" },
{ CA_SHOW_ENVELOPE, "show envelope" },
{ CA_ADD_KEY, "add key" },
- { CA_DEL_KEY, "remove key" },
+ { CA_REMOVE_KEY, "remove key" },
{ CA_SET_PLAYER_SPEED, "set player speed" },
- { CA_SET_GEMS, "set gems" },
- { CA_SET_TIME, "set time" },
- { CA_SET_SCORE, "set score" },
+ { CA_SET_PLAYER_GRAVITY, "set gravity" },
+ { CA_SET_WIND_DIRECTION, "set wind dir." },
+ { CA_SET_LEVEL_GEMS, "set needed gems" },
+ { CA_SET_LEVEL_TIME, "set level time" },
+ { CA_SET_LEVEL_SCORE, "set level score" },
{ CA_SET_CE_SCORE, "set CE score" },
- { CA_SET_CE_COUNT, "set CE count" },
+ { CA_SET_CE_VALUE, "set CE value" },
#if 0
{ CA_SET_DYNABOMB_NUMBER, "set bomb number" },
{ CA_SET_DYNABOMB_SIZE, "set bomb size" },
{ CA_SET_DYNABOMB_POWER, "set bomb power" },
#endif
- { CA_TOGGLE_PLAYER_GRAVITY, "toggle gravity" },
- { CA_ENABLE_PLAYER_GRAVITY, "enable gravity" },
- { CA_DISABLE_PLAYER_GRAVITY, "disable gravity" },
{ -1, NULL }
};
-static struct ValueTextInfo options_action_mode[] =
+static struct ValueTextInfo options_action_mode_none[] =
+{
+ { CA_ARG_UNDEFINED, " " },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_mode_set[] =
+{
+ { CA_MODE_SET, "=" },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_mode_calc[] =
{
- { CA_MODE_UNDEFINED, " " },
{ CA_MODE_SET, "=" },
{ CA_MODE_ADD, "+" },
{ CA_MODE_SUBTRACT, "-" },
{ -1, NULL }
};
-static struct ValueTextInfo options_action_arg[] =
+static struct ValueTextInfo options_action_arg_none[] =
+{
+ { CA_ARG_UNDEFINED, " " },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_player[] =
{
{ CA_ARG_PLAYER_HEADLINE, "[player]" },
{ CA_ARG_PLAYER_1, "1" },
{ CA_ARG_PLAYER_4, "4" },
{ CA_ARG_PLAYER_ANY, "any" },
{ CA_ARG_PLAYER_TRIGGER, "trigger" },
- { CA_ARG_UNDEFINED, " " },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_number[] =
+{
{ CA_ARG_NUMBER_HEADLINE, "[number]" },
{ CA_ARG_0, "0" },
{ CA_ARG_1, "1" },
{ CA_ARG_UNDEFINED, " " },
{ CA_ARG_NUMBER_MIN, "min" },
{ CA_ARG_NUMBER_MAX, "max" },
- { CA_ARG_NUMBER_NORMAL, "normal" },
+ { CA_ARG_UNDEFINED, " " },
{ CA_ARG_NUMBER_RESET, "reset" },
- { CA_ARG_NUMBER_CE_SCORE, "CE score" },
- { CA_ARG_NUMBER_CE_COUNT, "CE count" },
+ { CA_ARG_UNDEFINED, " " },
{ CA_ARG_NUMBER_CE_DELAY, "CE delay" },
+ { CA_ARG_NUMBER_CE_SCORE, "CE score" },
+ { CA_ARG_NUMBER_CE_VALUE, "CE value" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_ELEMENT_HEADLINE, "[CE value" },
+ { CA_ARG_ELEMENT_HEADLINE, " of" },
+ { CA_ARG_ELEMENT_HEADLINE, " element]" },
+ { CA_ARG_ELEMENT_TARGET, "target" },
+ { CA_ARG_ELEMENT_TRIGGER, "trigger" },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_key[] =
+{
+ { CA_ARG_NUMBER_HEADLINE, "[number]" },
+ { CA_ARG_1, "1" },
+ { CA_ARG_2, "2" },
+ { CA_ARG_3, "3" },
+ { CA_ARG_4, "4" },
+ { CA_ARG_5, "5" },
+ { CA_ARG_6, "6" },
+ { CA_ARG_7, "7" },
+ { CA_ARG_8, "8" },
{ CA_ARG_UNDEFINED, " " },
{ CA_ARG_ELEMENT_HEADLINE, "[element]" },
{ CA_ARG_ELEMENT_TARGET, "target" },
{ -1, NULL }
};
+static struct ValueTextInfo options_action_arg_envelope[] =
+{
+ { CA_ARG_NUMBER_HEADLINE, "[number]" },
+ { CA_ARG_1, "1" },
+ { CA_ARG_2, "2" },
+ { CA_ARG_3, "3" },
+ { CA_ARG_4, "4" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_ELEMENT_HEADLINE, "[element]" },
+ { CA_ARG_ELEMENT_TARGET, "target" },
+ { CA_ARG_ELEMENT_TRIGGER, "trigger" },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_speed[] =
+{
+ { CA_ARG_SPEED_HEADLINE, "[speed]" },
+ { CA_ARG_SPEED_VERY_SLOW, "very slow" },
+ { CA_ARG_SPEED_SLOW, "slow" },
+ { CA_ARG_SPEED_NORMAL, "normal" },
+ { CA_ARG_SPEED_FAST, "fast" },
+ { CA_ARG_SPEED_VERY_FAST, "very fast" },
+ { CA_ARG_SPEED_EVEN_FASTER, "ultrafast" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_SPEED_SLOWER, "slower" },
+ { CA_ARG_SPEED_FASTER, "faster" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_SPEED_RESET, "reset" },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_gravity[] =
+{
+ { CA_ARG_GRAVITY_HEADLINE, "[gravity]" },
+ { CA_ARG_GRAVITY_ON, "on" },
+ { CA_ARG_GRAVITY_OFF, "off" },
+ { CA_ARG_GRAVITY_TOGGLE, "toggle" },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_direction[] =
+{
+ { CA_ARG_DIRECTION_HEADLINE, "[dir.]" },
+ { CA_ARG_DIRECTION_NONE, "none" },
+ { CA_ARG_DIRECTION_LEFT, "left" },
+ { CA_ARG_DIRECTION_RIGHT, "right" },
+ { CA_ARG_DIRECTION_UP, "up" },
+ { CA_ARG_DIRECTION_DOWN, "down" },
+ { CA_ARG_DIRECTION_TRIGGER, "trigger" },
+
+ { -1, NULL }
+};
+
static char options_change_page_strings[MAX_CHANGE_PAGES][10];
static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] =
{
{ -1, NULL }
};
+static struct ValueTextInfo *action_arg_modes[] =
+{
+ options_action_mode_none,
+ options_action_mode_set,
+ options_action_mode_calc,
+};
+
+static struct
+{
+ int value;
+ int mode;
+ struct ValueTextInfo *options;
+}
+action_arg_options[] =
+{
+ { CA_NO_ACTION, 0, options_action_arg_none, },
+ { CA_EXIT_PLAYER, 0, options_action_arg_player, },
+ { CA_KILL_PLAYER, 0, options_action_arg_player, },
+ { CA_RESTART_LEVEL, 0, options_action_arg_none, },
+ { CA_SHOW_ENVELOPE, 0, options_action_arg_envelope, },
+ { CA_ADD_KEY, 0, options_action_arg_key, },
+ { CA_REMOVE_KEY, 0, options_action_arg_key, },
+ { CA_SET_PLAYER_SPEED, 1, options_action_arg_speed, },
+ { CA_SET_LEVEL_GEMS, 2, options_action_arg_number, },
+ { CA_SET_LEVEL_TIME, 2, options_action_arg_number, },
+ { CA_SET_LEVEL_SCORE, 2, options_action_arg_number, },
+ { CA_SET_CE_SCORE, 2, options_action_arg_number, },
+ { CA_SET_CE_VALUE, 2, options_action_arg_number, },
+ { CA_SET_PLAYER_GRAVITY, 1, options_action_arg_gravity, },
+ { CA_SET_WIND_DIRECTION, 1, options_action_arg_direction, },
+
+ { -1, FALSE, NULL }
+};
+
static struct
{
int x, y;
&level.game_engine_type,
"game engine:", NULL, "game engine"
},
+ {
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12),
+ GADGET_ID_WIND_DIRECTION, GADGET_ID_NONE,
+ -1,
+ options_wind_direction,
+ &level.wind_direction_initial,
+ "initial wind direction:", NULL, "initial wind direction"
+ },
- /* ---------- element settings: configure 1 (custom elements) ----------- */
+ /* ---------- element settings: configure (several elements) ------------- */
+
+ /* ---------- element settings: configure 1 (custom elements) ------------ */
{
ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(3),
NULL, NULL, "diggable/collectible/pushable"
},
- /* ---------- element settings: configure 2 (custom elements) ----------- */
+ /* ---------- element settings: configure 2 (custom elements) ------------ */
{
ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(1),
-1, ED_ELEMENT_SETTINGS_YPOS(13),
GADGET_ID_ACTION_MODE, GADGET_ID_ACTION_TYPE,
-1,
- options_action_mode,
+ options_action_mode_none,
&custom_element_change.action_mode,
NULL, NULL, "action operator"
},
-1, ED_ELEMENT_SETTINGS_YPOS(13),
GADGET_ID_ACTION_ARG, GADGET_ID_ACTION_MODE,
-1,
- options_action_arg,
+ options_action_arg_none,
&custom_element_change.action_arg,
NULL, NULL, "action parameter"
},
&custom_element_properties[EP_GRAVITY_REACHABLE],
NULL, "reachable despite gravity", "player can walk/dig despite gravity"
},
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(13),
+ GADGET_ID_CUSTOM_USE_LAST_VALUE, GADGET_ID_NONE,
+ &custom_element.use_last_ce_value,
+ NULL, "use last CE value after change", "use last CE value after change"
+ },
{
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5),
GADGET_ID_CUSTOM_WALK_TO_OBJECT, GADGET_ID_NONE,
#define BUTTON_STEPSIZE(button) ((button) == 1 ? 1 : (button) == 2 ? 5 : 10)
/* forward declaration for internal use */
-static void ModifyEditorCounter(int, int);
+static void ModifyEditorCounterValue(int, int);
static void ModifyEditorCounterLimits(int, int, int);
-static void ModifyEditorSelectbox(int, int);
+static void ModifyEditorSelectboxValue(int, int);
+static void ModifyEditorSelectboxOptions(int, struct ValueTextInfo *);
static void ModifyEditorDrawingArea(int, int, int);
static void ModifyEditorElementList();
static void RedrawDrawingElements();
int yoffset_above = MINI_TILEX + ED_GADGET_DISTANCE;
int yoffset = ED_BORDER_SIZE;
int x_left = gi_down->x - xoffset_left;
+#if 1
+ int x_right; /* set after gadget position was modified */
+#else
int x_right = gi_up->x + gi_up->width + xoffset_right;
+#endif
int y_above = gi_down->y - yoffset_above;
int x = gi_down->x;
int y; /* set after gadget position was modified */
+ /* counter limits must be changed first to prevent value truncation */
+ ModifyEditorCounterLimits(id, counterbutton_info[id].min_value,
+ counterbutton_info[id].max_value);
+
+ /* right text position might have changed after setting position above */
+ x_right = gi_up->x + gi_up->width + xoffset_right;
+
+ ModifyEditorCounterValue(id, *counterbutton_info[id].value);
+
/* set position for "value[1,2,3,4]" counter gadgets (score in most cases) */
if (id >= ED_COUNTER_ID_ELEMENT_VALUE1 &&
id <= ED_COUNTER_ID_ELEMENT_VALUE4)
ModifyGadget(gi_up, GDI_Y, SY + counterbutton_info[id].y, GDI_END);
}
+ /* vertical position might have changed after setting position above */
y = gi_up->y + yoffset;
if (counterbutton_info[id].text_above)
if (counterbutton_info[id].text_right)
DrawText(x_right, y, counterbutton_info[id].text_right, FONT_TEXT_1);
- ModifyEditorCounter(id, *counterbutton_info[id].value);
- ModifyEditorCounterLimits(id, counterbutton_info[id].min_value,
- counterbutton_info[id].max_value);
MapGadget(gi_down);
MapGadget(gi_text);
MapGadget(gi_up);
if (selectbox_info[id].text_right)
DrawText(x_right, y, selectbox_info[id].text_right, FONT_TEXT_1);
- ModifyEditorSelectbox(id, *selectbox_info[id].value);
+ ModifyEditorSelectboxValue(id, *selectbox_info[id].value);
MapGadget(gi);
}
return new_index_value;
}
+static void setSelectboxSpecialActionOptions()
+{
+ int i;
+
+ /* change action mode and arg selectbox according to action type selectbox */
+ for (i = 0; action_arg_options[i].value != -1; i++)
+ {
+ if (action_arg_options[i].value == custom_element_change.action_type)
+ {
+ int mode = action_arg_options[i].mode;
+
+ ModifyEditorSelectboxOptions(ED_SELECTBOX_ID_ACTION_MODE,
+ action_arg_modes[mode]);
+ ModifyEditorSelectboxValue(ED_SELECTBOX_ID_ACTION_MODE,
+ custom_element_change.action_mode);
+
+ ModifyEditorSelectboxOptions(ED_SELECTBOX_ID_ACTION_ARG,
+ action_arg_options[i].options);
+ ModifyEditorSelectboxValue(ED_SELECTBOX_ID_ACTION_ARG,
+ custom_element_change.action_arg);
+ }
+ }
+}
+
static void copy_custom_element_settings(int element_from, int element_to)
{
struct ElementInfo *ei_from = &element_info[element_from];
ei_to->collect_score_initial = ei_from->collect_score_initial;
ei_to->collect_count_initial = ei_from->collect_count_initial;
+ ei_to->ce_value_fixed_initial = ei_from->ce_value_fixed_initial;
+ ei_to->ce_value_random_initial = ei_from->ce_value_random_initial;
+ ei_to->use_last_ce_value = ei_from->use_last_ce_value;
+
ei_to->push_delay_fixed = ei_from->push_delay_fixed;
ei_to->push_delay_random = ei_from->push_delay_random;
ei_to->drop_delay_fixed = ei_from->drop_delay_fixed;
custom_element = element_info[element];
custom_element_change = *element_info[element].change;
+ /* needed to initially set selectbox options for special action options */
+ setSelectboxSpecialActionOptions();
+
/* needed to initially set selectbox value variables to reliable defaults */
for (i = 0; i < ED_NUM_SELECTBOX; i++)
setSelectboxValue(i, *selectbox_info[i].value);
HAS_CHANGE_EVENT(element, CE_BLOCKED) ? CE_BLOCKED :
HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED :
- HAS_CHANGE_EVENT(element, CE_COUNT_AT_ZERO) ? CE_COUNT_AT_ZERO :
+ HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO) ? CE_VALUE_GETS_ZERO :
custom_element_change.direct_action);
/* set "change by other element action" selectbox help value */
HAS_CHANGE_EVENT(element, CE_SWITCH_OF_X) ? CE_SWITCH_OF_X :
HAS_CHANGE_EVENT(element, CE_CHANGE_OF_X) ? CE_CHANGE_OF_X :
HAS_CHANGE_EVENT(element, CE_EXPLOSION_OF_X) ? CE_EXPLOSION_OF_X :
- HAS_CHANGE_EVENT(element, CE_COUNT_AT_ZERO_OF_X) ? CE_COUNT_AT_ZERO_OF_X :
+ HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO_OF_X) ? CE_VALUE_GETS_ZERO_OF_X :
custom_element_change.other_action);
}
custom_element_change_events[CE_BLOCKED] = FALSE;
custom_element_change_events[CE_IMPACT] = FALSE;
custom_element_change_events[CE_SMASHED] = FALSE;
- custom_element_change_events[CE_COUNT_AT_ZERO] = FALSE;
+ custom_element_change_events[CE_VALUE_GETS_ZERO] = FALSE;
custom_element_change_events[custom_element_change.direct_action] =
custom_element_change_events[CE_BY_DIRECT_ACTION];
custom_element_change_events[CE_SWITCH_OF_X] = FALSE;
custom_element_change_events[CE_CHANGE_OF_X] = FALSE;
custom_element_change_events[CE_EXPLOSION_OF_X] = FALSE;
- custom_element_change_events[CE_COUNT_AT_ZERO_OF_X] = FALSE;
+ custom_element_change_events[CE_VALUE_GETS_ZERO_OF_X] = FALSE;
custom_element_change_events[custom_element_change.other_action] =
custom_element_change_events[CE_BY_OTHER_ACTION];
GDI_SCROLLBAR_ITEM_POSITION, item_position, GDI_END);
}
-static void ModifyEditorCounter(int counter_id, int new_value)
+static void ModifyEditorCounterValue(int counter_id, int new_value)
{
int *counter_value = counterbutton_info[counter_id].value;
int gadget_id = counterbutton_info[counter_id].gadget_id_text;
struct GadgetInfo *gi = level_editor_gadget[gadget_id];
ModifyGadget(gi, GDI_NUMBER_MIN, min, GDI_NUMBER_MAX, max, GDI_END);
+
+ if (counter_id >= ED_COUNTER_ID_ELEMENT_VALUE1 &&
+ counter_id <= ED_COUNTER_ID_ELEMENT_VALUE4)
+ {
+ int gadget_id_up = counterbutton_info[counter_id].gadget_id_up;
+ struct GadgetInfo *gi_up = level_editor_gadget[gadget_id_up];
+
+ ModifyGadget(gi, GDI_TEXT_SIZE, (max < 10 ? 1 : 3), GDI_END);
+ ModifyGadget(gi_up, GDI_X, gi->x + gi->width + ED_GADGET_DISTANCE,GDI_END);
+ }
}
-static void ModifyEditorSelectbox(int selectbox_id, int new_value)
+static void ModifyEditorSelectboxValue(int selectbox_id, int new_value)
{
int gadget_id = selectbox_info[selectbox_id].gadget_id;
struct GadgetInfo *gi = level_editor_gadget[gadget_id];
ModifyGadget(gi, GDI_SELECTBOX_INDEX, new_index_value, GDI_END);
}
+static void ModifyEditorSelectboxOptions(int selectbox_id,
+ struct ValueTextInfo *options)
+{
+ int gadget_id = selectbox_info[selectbox_id].gadget_id;
+ struct GadgetInfo *gi = level_editor_gadget[gadget_id];
+
+ selectbox_info[selectbox_id].options = options;
+
+ /* set index to zero -- list may be shorter now (correct later, if needed) */
+ ModifyGadget(gi, GDI_SELECTBOX_INDEX, 0,
+ GDI_SELECTBOX_OPTIONS, options, GDI_END);
+}
+
static void ModifyEditorDrawingArea(int drawingarea_id, int xsize, int ysize)
{
int gadget_id = drawingarea_info[drawingarea_id].gadget_id;
#define TEXT_GAME_OF_LIFE_2 "Max neighbours to survive"
#define TEXT_GAME_OF_LIFE_3 "Min neighbours to create"
#define TEXT_GAME_OF_LIFE_4 "Max neighbours to create"
+#define TEXT_TIME_BONUS "Extra time to solve level"
static struct
{
{ EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
{ EL_BD_AMOEBA, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
{ EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
{ EL_ROBOT_WHEEL, &level.time_wheel, TEXT_DURATION },
#if 1
+ { EL_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
+ { EL_LIGHT_SWITCH_ACTIVE, &level.time_light, TEXT_DURATION },
+ { EL_SHIELD_NORMAL, &level.shield_normal_time, TEXT_DURATION },
+ { EL_SHIELD_DEADLY, &level.shield_deadly_time, TEXT_DURATION },
+ { EL_EXTRA_TIME, &level.extra_time, TEXT_TIME_BONUS },
+ { EL_TIME_ORB_FULL, &level.time_orb_time, TEXT_TIME_BONUS },
{ EL_GAME_OF_LIFE, &level.game_of_life[0], TEXT_GAME_OF_LIFE_1 },
{ EL_GAME_OF_LIFE, &level.game_of_life[1], TEXT_GAME_OF_LIFE_2 },
{ EL_GAME_OF_LIFE, &level.game_of_life[2], TEXT_GAME_OF_LIFE_3 },
if (properties_element == EL_SPRING)
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_SPRING_BUG);
+#if 0
+ if (properties_element == EL_BALLOON)
+ MapSelectboxGadget(ED_SELECTBOX_ID_WIND_DIRECTION);
+#endif
+
if (CAN_GROW(properties_element))
{
checkbutton_info[ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE].y =
{
int i;
+ /* needed to initially set selectbox options for special action options */
+ setSelectboxSpecialActionOptions();
+
/* draw stickybutton gadget */
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
REQ_ASK))
{
if (gadget_id == counterbutton_info[counter_id].gadget_id_text)
- ModifyEditorCounter(counter_id, *counter_value);
+ ModifyEditorCounterValue(counter_id, *counter_value);
return;
}
if (gadget_id == counterbutton_info[counter_id].gadget_id_text)
*counter_value = gi->textinput.number_value;
else
- ModifyEditorCounter(counter_id, *counter_value + step);
+ ModifyEditorCounterValue(counter_id, *counter_value + step);
if (counter_id == ED_COUNTER_ID_SELECT_LEVEL)
{
static void HandleSelectboxGadgets(struct GadgetInfo *gi)
{
int type_id = gi->custom_type_id;
+ int value_old = *selectbox_info[type_id].value;
+ int value_new = selectbox_info[type_id].options[gi->selectbox.index].value;
- *selectbox_info[type_id].value =
- selectbox_info[type_id].options[gi->selectbox.index].value;
+ *selectbox_info[type_id].value = value_new;
if (type_id == ED_SELECTBOX_ID_SELECT_CHANGE_PAGE)
{
type_id <= ED_SELECTBOX_ID_CHANGE_LAST) ||
(type_id == ED_SELECTBOX_ID_GROUP_CHOICE_MODE))
{
+ if (type_id == ED_SELECTBOX_ID_ACTION_TYPE)
+ {
+ /* when changing action type, reset action mode and action arg */
+ if (value_old != value_new)
+ {
+ custom_element_change.action_mode = -1;
+ custom_element_change.action_arg = -1;
+ }
+
+ DrawPropertiesChange();
+ }
+
CopyElementPropertiesToGame(properties_element);
level.changed = TRUE;