/***********************************************************
* Rocks'n'Diamonds -- McDuffin Strikes Back! *
*----------------------------------------------------------*
-* (c) 1995-2002 Artsoft Entertainment *
+* (c) 1995-2006 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
#define GADGET_ID_BALL_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 36)
#define GADGET_ID_BALL_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 37)
#define GADGET_ID_BALL_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 38)
-#define GADGET_ID_ENVELOPE_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 39)
-#define GADGET_ID_ENVELOPE_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 40)
-#define GADGET_ID_ENVELOPE_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 41)
-#define GADGET_ID_ENVELOPE_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 42)
-#define GADGET_ID_ENVELOPE_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 43)
-#define GADGET_ID_ENVELOPE_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 44)
-#define GADGET_ID_CUSTOM_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 45)
-#define GADGET_ID_CUSTOM_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 46)
-#define GADGET_ID_CUSTOM_SCORE_UP (GADGET_ID_COUNTER_FIRST + 47)
-#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 48)
-#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 49)
-#define GADGET_ID_CUSTOM_GEMCOUNT_UP (GADGET_ID_COUNTER_FIRST + 50)
-#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 51)
-#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 52)
-#define GADGET_ID_CUSTOM_VALUE_FIX_UP (GADGET_ID_COUNTER_FIRST + 53)
-#define GADGET_ID_CUSTOM_VALUE_RND_DOWN (GADGET_ID_COUNTER_FIRST + 54)
-#define GADGET_ID_CUSTOM_VALUE_RND_TEXT (GADGET_ID_COUNTER_FIRST + 55)
-#define GADGET_ID_CUSTOM_VALUE_RND_UP (GADGET_ID_COUNTER_FIRST + 56)
-#define GADGET_ID_PUSH_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 57)
-#define GADGET_ID_PUSH_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 58)
-#define GADGET_ID_PUSH_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 59)
-#define GADGET_ID_PUSH_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 60)
-#define GADGET_ID_PUSH_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 61)
-#define GADGET_ID_PUSH_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 62)
-#define GADGET_ID_DROP_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 63)
-#define GADGET_ID_DROP_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 64)
-#define GADGET_ID_DROP_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 65)
-#define GADGET_ID_DROP_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 66)
-#define GADGET_ID_DROP_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 67)
-#define GADGET_ID_DROP_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 68)
-#define GADGET_ID_MOVE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 69)
-#define GADGET_ID_MOVE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 70)
-#define GADGET_ID_MOVE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 71)
-#define GADGET_ID_MOVE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 72)
-#define GADGET_ID_MOVE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 73)
-#define GADGET_ID_MOVE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 74)
-#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 75)
-#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 76)
-#define GADGET_ID_EXPLOSION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 77)
-#define GADGET_ID_IGNITION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 78)
-#define GADGET_ID_IGNITION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 79)
-#define GADGET_ID_IGNITION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 80)
-#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 81)
-#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 82)
-#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 83)
-#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 84)
-#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 85)
-#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 86)
-#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 87)
-#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 88)
-#define GADGET_ID_CHANGE_CONT_RND_UP (GADGET_ID_COUNTER_FIRST + 89)
-#define GADGET_ID_GROUP_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 90)
-#define GADGET_ID_GROUP_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 91)
-#define GADGET_ID_GROUP_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 92)
+#define GADGET_ID_ANDROID_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 39)
+#define GADGET_ID_ANDROID_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 40)
+#define GADGET_ID_ANDROID_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 41)
+#define GADGET_ID_ENVELOPE_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 42)
+#define GADGET_ID_ENVELOPE_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 43)
+#define GADGET_ID_ENVELOPE_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 44)
+#define GADGET_ID_ENVELOPE_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 45)
+#define GADGET_ID_ENVELOPE_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 46)
+#define GADGET_ID_ENVELOPE_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 47)
+#define GADGET_ID_CUSTOM_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 48)
+#define GADGET_ID_CUSTOM_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 49)
+#define GADGET_ID_CUSTOM_SCORE_UP (GADGET_ID_COUNTER_FIRST + 50)
+#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 51)
+#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 52)
+#define GADGET_ID_CUSTOM_GEMCOUNT_UP (GADGET_ID_COUNTER_FIRST + 53)
+#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 54)
+#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 55)
+#define GADGET_ID_CUSTOM_VALUE_FIX_UP (GADGET_ID_COUNTER_FIRST + 56)
+#define GADGET_ID_CUSTOM_VALUE_RND_DOWN (GADGET_ID_COUNTER_FIRST + 57)
+#define GADGET_ID_CUSTOM_VALUE_RND_TEXT (GADGET_ID_COUNTER_FIRST + 58)
+#define GADGET_ID_CUSTOM_VALUE_RND_UP (GADGET_ID_COUNTER_FIRST + 59)
+#define GADGET_ID_PUSH_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 60)
+#define GADGET_ID_PUSH_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 61)
+#define GADGET_ID_PUSH_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 62)
+#define GADGET_ID_PUSH_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 63)
+#define GADGET_ID_PUSH_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 64)
+#define GADGET_ID_PUSH_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 65)
+#define GADGET_ID_DROP_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 66)
+#define GADGET_ID_DROP_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 67)
+#define GADGET_ID_DROP_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 68)
+#define GADGET_ID_DROP_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 69)
+#define GADGET_ID_DROP_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 70)
+#define GADGET_ID_DROP_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 71)
+#define GADGET_ID_MOVE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 72)
+#define GADGET_ID_MOVE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 73)
+#define GADGET_ID_MOVE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 74)
+#define GADGET_ID_MOVE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 75)
+#define GADGET_ID_MOVE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 76)
+#define GADGET_ID_MOVE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 77)
+#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 78)
+#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 79)
+#define GADGET_ID_EXPLOSION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 80)
+#define GADGET_ID_IGNITION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 81)
+#define GADGET_ID_IGNITION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 82)
+#define GADGET_ID_IGNITION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 83)
+#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 84)
+#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 85)
+#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 86)
+#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 87)
+#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 88)
+#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 89)
+#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 90)
+#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 91)
+#define GADGET_ID_CHANGE_CONT_RND_UP (GADGET_ID_COUNTER_FIRST + 92)
+#define GADGET_ID_GROUP_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 93)
+#define GADGET_ID_GROUP_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 94)
+#define GADGET_ID_GROUP_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 95)
/* drawing area identifiers */
-#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 93)
+#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 96)
#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_MAGIC_BALL_CONTENT_5 (GADGET_ID_DRAWING_AREA_FIRST + 14)
#define GADGET_ID_MAGIC_BALL_CONTENT_6 (GADGET_ID_DRAWING_AREA_FIRST + 15)
#define GADGET_ID_MAGIC_BALL_CONTENT_7 (GADGET_ID_DRAWING_AREA_FIRST + 16)
-#define GADGET_ID_AMOEBA_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 17)
-#define GADGET_ID_START_ELEMENT (GADGET_ID_DRAWING_AREA_FIRST + 18)
-#define GADGET_ID_ARTWORK_ELEMENT (GADGET_ID_DRAWING_AREA_FIRST + 19)
-#define GADGET_ID_EXPLOSION_ELEMENT (GADGET_ID_DRAWING_AREA_FIRST + 20)
-#define GADGET_ID_CUSTOM_GRAPHIC (GADGET_ID_DRAWING_AREA_FIRST + 21)
-#define GADGET_ID_CUSTOM_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 22)
-#define GADGET_ID_CUSTOM_MOVE_ENTER (GADGET_ID_DRAWING_AREA_FIRST + 23)
-#define GADGET_ID_CUSTOM_MOVE_LEAVE (GADGET_ID_DRAWING_AREA_FIRST + 24)
-#define GADGET_ID_CUSTOM_CHANGE_TARGET (GADGET_ID_DRAWING_AREA_FIRST + 25)
-#define GADGET_ID_CUSTOM_CHANGE_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 26)
-#define GADGET_ID_CUSTOM_CHANGE_TRIGGER (GADGET_ID_DRAWING_AREA_FIRST + 27)
-#define GADGET_ID_GROUP_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 28)
-#define GADGET_ID_RANDOM_BACKGROUND (GADGET_ID_DRAWING_AREA_FIRST + 29)
+#define GADGET_ID_ANDROID_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 17)
+#define GADGET_ID_AMOEBA_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 18)
+#define GADGET_ID_START_ELEMENT (GADGET_ID_DRAWING_AREA_FIRST + 19)
+#define GADGET_ID_ARTWORK_ELEMENT (GADGET_ID_DRAWING_AREA_FIRST + 20)
+#define GADGET_ID_EXPLOSION_ELEMENT (GADGET_ID_DRAWING_AREA_FIRST + 21)
+#define GADGET_ID_CUSTOM_GRAPHIC (GADGET_ID_DRAWING_AREA_FIRST + 22)
+#define GADGET_ID_CUSTOM_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 23)
+#define GADGET_ID_CUSTOM_MOVE_ENTER (GADGET_ID_DRAWING_AREA_FIRST + 24)
+#define GADGET_ID_CUSTOM_MOVE_LEAVE (GADGET_ID_DRAWING_AREA_FIRST + 25)
+#define GADGET_ID_CUSTOM_CHANGE_TARGET (GADGET_ID_DRAWING_AREA_FIRST + 26)
+#define GADGET_ID_CUSTOM_CHANGE_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 27)
+#define GADGET_ID_CUSTOM_CHANGE_TRIGGER (GADGET_ID_DRAWING_AREA_FIRST + 28)
+#define GADGET_ID_GROUP_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 29)
+#define GADGET_ID_RANDOM_BACKGROUND (GADGET_ID_DRAWING_AREA_FIRST + 30)
/* text input identifiers */
-#define GADGET_ID_TEXT_INPUT_FIRST (GADGET_ID_DRAWING_AREA_FIRST + 30)
+#define GADGET_ID_TEXT_INPUT_FIRST (GADGET_ID_DRAWING_AREA_FIRST + 31)
#define GADGET_ID_LEVEL_NAME (GADGET_ID_TEXT_INPUT_FIRST + 0)
#define GADGET_ID_LEVEL_AUTHOR (GADGET_ID_TEXT_INPUT_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_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)
+#define GADGET_ID_PLAYER_SPEED (GADGET_ID_SELECTBOX_FIRST + 3)
+#define GADGET_ID_CUSTOM_WALK_TO_ACTION (GADGET_ID_SELECTBOX_FIRST + 4)
+#define GADGET_ID_CUSTOM_EXPLOSION_TYPE (GADGET_ID_SELECTBOX_FIRST + 5)
+#define GADGET_ID_CUSTOM_DEADLINESS (GADGET_ID_SELECTBOX_FIRST + 6)
+#define GADGET_ID_CUSTOM_MOVE_PATTERN (GADGET_ID_SELECTBOX_FIRST + 7)
+#define GADGET_ID_CUSTOM_MOVE_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 8)
+#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 9)
+#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 10)
+#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 11)
+#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 12)
+#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 13)
+#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 14)
+#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 15)
+#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 16)
+#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 17)
+#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 18)
+#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 19)
+#define GADGET_ID_CHANGE_SIDE (GADGET_ID_SELECTBOX_FIRST + 20)
+#define GADGET_ID_CHANGE_PLAYER (GADGET_ID_SELECTBOX_FIRST + 21)
+#define GADGET_ID_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 22)
+#define GADGET_ID_CHANGE_REPLACE_WHEN (GADGET_ID_SELECTBOX_FIRST + 23)
+#define GADGET_ID_ACTION_TYPE (GADGET_ID_SELECTBOX_FIRST + 24)
+#define GADGET_ID_ACTION_MODE (GADGET_ID_SELECTBOX_FIRST + 25)
+#define GADGET_ID_ACTION_ARG (GADGET_ID_SELECTBOX_FIRST + 26)
+#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 27)
+#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 28)
/* textbutton identifiers */
-#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 28)
+#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 29)
#define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 0)
#define GADGET_ID_PROPERTIES_CONFIG (GADGET_ID_TEXTBUTTON_FIRST + 1)
#define GADGET_ID_RANDOM_PERCENTAGE (GADGET_ID_CHECKBUTTON_FIRST + 0)
#define GADGET_ID_RANDOM_QUANTITY (GADGET_ID_CHECKBUTTON_FIRST + 1)
#define GADGET_ID_RANDOM_RESTRICTED (GADGET_ID_CHECKBUTTON_FIRST + 2)
-#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 3)
-#define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 4)
-#define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 5)
-#define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 6)
-#define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 7)
-#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 8)
-#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 9)
-#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 10)
-#define GADGET_ID_DOUBLE_SPEED (GADGET_ID_CHECKBUTTON_FIRST + 11)
-#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 12)
-#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 13)
-#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 14)
-#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 15)
-#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 16)
-#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 17)
-#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 18)
+#define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 3)
+#define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 4)
+#define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 5)
+#define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 6)
+#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 7)
+#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 8)
+#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 9)
+#define GADGET_ID_CONTINUOUS_SNAPPING (GADGET_ID_CHECKBUTTON_FIRST + 10)
+#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 11)
+#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 12)
+#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 13)
+#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 14)
+#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 15)
+#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 16)
+#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 17)
+#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 18)
#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 19)
#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 20)
#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 21)
#define ED_COUNTER_ID_ELEMENT_VALUE4 10
#define ED_COUNTER_ID_YAMYAM_CONTENT 11
#define ED_COUNTER_ID_BALL_CONTENT 12
-#define ED_COUNTER_ID_ENVELOPE_XSIZE 13
-#define ED_COUNTER_ID_ENVELOPE_YSIZE 14
-#define ED_COUNTER_ID_CUSTOM_SCORE 15
-#define ED_COUNTER_ID_CUSTOM_GEMCOUNT 16
-#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 17
-#define ED_COUNTER_ID_CUSTOM_VALUE_RND 18
-#define ED_COUNTER_ID_PUSH_DELAY_FIX 19
-#define ED_COUNTER_ID_PUSH_DELAY_RND 20
-#define ED_COUNTER_ID_DROP_DELAY_FIX 21
-#define ED_COUNTER_ID_DROP_DELAY_RND 22
-#define ED_COUNTER_ID_MOVE_DELAY_FIX 23
-#define ED_COUNTER_ID_MOVE_DELAY_RND 24
-#define ED_COUNTER_ID_EXPLOSION_DELAY 25
-#define ED_COUNTER_ID_IGNITION_DELAY 26
-#define ED_COUNTER_ID_GROUP_CONTENT 27
-#define ED_COUNTER_ID_CHANGE_DELAY_FIX 28
-#define ED_COUNTER_ID_CHANGE_DELAY_RND 29
-#define ED_COUNTER_ID_CHANGE_CONT_RND 30
-
-#define ED_NUM_COUNTERBUTTONS 31
+#define ED_COUNTER_ID_ANDROID_CONTENT 13
+#define ED_COUNTER_ID_ENVELOPE_XSIZE 14
+#define ED_COUNTER_ID_ENVELOPE_YSIZE 15
+#define ED_COUNTER_ID_CUSTOM_SCORE 16
+#define ED_COUNTER_ID_CUSTOM_GEMCOUNT 17
+#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 18
+#define ED_COUNTER_ID_CUSTOM_VALUE_RND 19
+#define ED_COUNTER_ID_PUSH_DELAY_FIX 20
+#define ED_COUNTER_ID_PUSH_DELAY_RND 21
+#define ED_COUNTER_ID_DROP_DELAY_FIX 22
+#define ED_COUNTER_ID_DROP_DELAY_RND 23
+#define ED_COUNTER_ID_MOVE_DELAY_FIX 24
+#define ED_COUNTER_ID_MOVE_DELAY_RND 25
+#define ED_COUNTER_ID_EXPLOSION_DELAY 26
+#define ED_COUNTER_ID_IGNITION_DELAY 27
+#define ED_COUNTER_ID_GROUP_CONTENT 28
+#define ED_COUNTER_ID_CHANGE_DELAY_FIX 29
+#define ED_COUNTER_ID_CHANGE_DELAY_RND 30
+#define ED_COUNTER_ID_CHANGE_CONT_RND 31
+
+#define ED_NUM_COUNTERBUTTONS 32
#define ED_COUNTER_ID_LEVEL_FIRST ED_COUNTER_ID_LEVEL_XSIZE
#define ED_COUNTER_ID_LEVEL_LAST ED_COUNTER_ID_LEVEL_RANDOM
#define ED_SELECTBOX_ID_TIME_OR_STEPS 0
#define ED_SELECTBOX_ID_GAME_ENGINE_TYPE 1
#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_PLAYER_SPEED 3
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 4
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 5
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED 6
+#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION 7
+#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION 8
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN 9
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION 10
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE 11
+#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 12
+#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS 13
+#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE 14
+#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS 15
+#define ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE 16
+#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 17
+#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION 18
+#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 19
+#define ED_SELECTBOX_ID_CHANGE_SIDE 20
+#define ED_SELECTBOX_ID_CHANGE_PLAYER 21
+#define ED_SELECTBOX_ID_CHANGE_PAGE 22
+#define ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN 23
+#define ED_SELECTBOX_ID_ACTION_TYPE 24
+#define ED_SELECTBOX_ID_ACTION_MODE 25
+#define ED_SELECTBOX_ID_ACTION_ARG 26
+#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 27
+#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 28
+
+#define ED_NUM_SELECTBOX 29
#define ED_SELECTBOX_ID_LEVEL_FIRST ED_SELECTBOX_ID_TIME_OR_STEPS
#define ED_SELECTBOX_ID_LEVEL_LAST ED_SELECTBOX_ID_WIND_DIRECTION
#define ED_GRAPHICBUTTON_ID_CHANGE_LAST ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE
/* values for checkbutton gadgets */
-#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 0
-#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 1
-#define ED_CHECKBUTTON_ID_STICK_ELEMENT 2
-#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 3
-#define ED_CHECKBUTTON_ID_USE_SPRING_BUG 4
-#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 5
-#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 6
-#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 7
-#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 8
-#define ED_CHECKBUTTON_ID_DOUBLE_SPEED 9
-#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 10
-#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 11
-#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 12
-#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 13
-#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 14
-#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 15
-#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 16
+#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 0
+#define ED_CHECKBUTTON_ID_STICK_ELEMENT 1
+#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 2
+#define ED_CHECKBUTTON_ID_USE_SPRING_BUG 3
+#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 4
+#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 5
+#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 6
+#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 7
+#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING 8
+#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 9
+#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 10
+#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 11
+#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 12
+#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 13
+#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 14
+#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 15
+#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 16
#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 17
#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 18
#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 19
#define ED_NUM_CHECKBUTTONS 46
-#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_INITIAL_GRAVITY
+#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
#define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
#define ED_CHECKBUTTON_ID_CUSTOM1_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
#define ED_DRAWING_ID_MAGIC_BALL_CONTENT_5 14
#define ED_DRAWING_ID_MAGIC_BALL_CONTENT_6 15
#define ED_DRAWING_ID_MAGIC_BALL_CONTENT_7 16
-#define ED_DRAWING_ID_AMOEBA_CONTENT 17
-#define ED_DRAWING_ID_START_ELEMENT 18
-#define ED_DRAWING_ID_ARTWORK_ELEMENT 19
-#define ED_DRAWING_ID_EXPLOSION_ELEMENT 20
-#define ED_DRAWING_ID_CUSTOM_GRAPHIC 21
-#define ED_DRAWING_ID_CUSTOM_CONTENT 22
-#define ED_DRAWING_ID_CUSTOM_MOVE_ENTER 23
-#define ED_DRAWING_ID_CUSTOM_MOVE_LEAVE 24
-#define ED_DRAWING_ID_CUSTOM_CHANGE_TARGET 25
-#define ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT 26
-#define ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER 27
-#define ED_DRAWING_ID_GROUP_CONTENT 28
-#define ED_DRAWING_ID_RANDOM_BACKGROUND 29
-
-#define ED_NUM_DRAWING_AREAS 30
+#define ED_DRAWING_ID_ANDROID_CONTENT 17
+#define ED_DRAWING_ID_AMOEBA_CONTENT 18
+#define ED_DRAWING_ID_START_ELEMENT 19
+#define ED_DRAWING_ID_ARTWORK_ELEMENT 20
+#define ED_DRAWING_ID_EXPLOSION_ELEMENT 21
+#define ED_DRAWING_ID_CUSTOM_GRAPHIC 22
+#define ED_DRAWING_ID_CUSTOM_CONTENT 23
+#define ED_DRAWING_ID_CUSTOM_MOVE_ENTER 24
+#define ED_DRAWING_ID_CUSTOM_MOVE_LEAVE 25
+#define ED_DRAWING_ID_CUSTOM_CHANGE_TARGET 26
+#define ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT 27
+#define ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER 28
+#define ED_DRAWING_ID_GROUP_CONTENT 29
+#define ED_DRAWING_ID_RANDOM_BACKGROUND 30
+
+#define ED_NUM_DRAWING_AREAS 31
/*
NULL, " ", "height",
},
{
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6),
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5),
0, 999,
GADGET_ID_LEVEL_GEMSLIMIT_DOWN, GADGET_ID_LEVEL_GEMSLIMIT_UP,
GADGET_ID_LEVEL_GEMSLIMIT_TEXT, GADGET_ID_NONE,
NULL, "number of gems to collect:", NULL
},
{
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8),
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7),
0, 9999,
GADGET_ID_LEVEL_TIMELIMIT_DOWN, GADGET_ID_LEVEL_TIMELIMIT_UP,
GADGET_ID_LEVEL_TIMELIMIT_TEXT, GADGET_ID_NONE,
"time or step limit to solve level:", NULL, NULL
},
{
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10),
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(9),
0, 255,
GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP,
GADGET_ID_LEVEL_TIMESCORE_TEXT, GADGET_ID_NONE,
&level.num_ball_contents,
NULL, NULL, "number of content areas"
},
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4),
+ MIN_ANDROID_ELEMENTS, MAX_ANDROID_ELEMENTS,
+ GADGET_ID_ANDROID_CONTENT_DOWN, GADGET_ID_ANDROID_CONTENT_UP,
+ GADGET_ID_ANDROID_CONTENT_TEXT, GADGET_ID_NONE,
+ &level.num_android_clone_elements,
+ NULL, NULL, "number of clonable elements"
+ },
{
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
MIN_ENVELOPE_XSIZE, MAX_ENVELOPE_XSIZE,
{ -1, NULL }
};
+static struct ValueTextInfo options_player_speed[] =
+{
+ { 0, "frozen" },
+ { 1, "very slow" },
+ { 2, "slow" },
+ { 4, "normal" },
+ { 8, "fast" },
+ { 16, "very fast" },
+ { 32, "ultrafast" },
+
+ { -1, NULL }
+};
+
static struct ValueTextInfo options_access_type[] =
{
{ EP_WALKABLE, "walkable" },
#endif
{ CE_IMPACT, "impact (on something)" },
{ CE_SMASHED, "smashed (from above)" },
+#if 0
+ { CE_VALUE_CHANGES, "CE value changes" },
+ { CE_SCORE_CHANGES, "CE score changes" },
+#endif
{ CE_VALUE_GETS_ZERO, "CE value gets 0" },
+ { CE_SCORE_GETS_ZERO, "CE score gets 0" },
{ -1, NULL }
};
{ CE_PLAYER_DROPS_X, "player drops/throws" },
{ CE_TOUCHING_X, "touching" },
{ CE_HITTING_X, "hitting" },
+ { CE_DIGGING_X, "digging" },
{ CE_HIT_BY_X, "hit by" },
{ CE_SWITCH_OF_X, "switch of" },
{ CE_CHANGE_OF_X, "change by page of" },
{ CE_EXPLOSION_OF_X, "explosion of" },
{ CE_MOVE_OF_X, "move of" },
+ { CE_CREATION_OF_X, "creation of" },
+ { CE_VALUE_CHANGES_OF_X, "CE value changes of" },
+ { CE_SCORE_CHANGES_OF_X, "CE score changes of" },
{ CE_VALUE_GETS_ZERO_OF_X, "CE value gets 0 of" },
+ { CE_SCORE_GETS_ZERO_OF_X, "CE score gets 0 of" },
{ -1, NULL }
};
{ CA_SET_LEVEL_TIME, "set time" },
{ CA_SET_LEVEL_SCORE, "set score" },
{ CA_SET_LEVEL_GEMS, "set needed gems" },
- { CA_SET_LEVEL_GRAVITY, "set gravity" },
{ CA_SET_LEVEL_WIND, "set wind dir." },
{ CA_UNDEFINED, " " },
{ CA_HEADLINE_PLAYER_ACTIONS, "[player actions]" },
{ CA_SET_PLAYER_KEYS, "set keys" },
{ CA_SET_PLAYER_SPEED, "set speed" },
{ CA_SET_PLAYER_SHIELD, "set shield" },
+ { CA_SET_PLAYER_GRAVITY, "set gravity" },
{ CA_SET_PLAYER_ARTWORK, "set artwork" },
{ CA_UNDEFINED, " " },
{ CA_HEADLINE_CE_ACTIONS, "[CE actions]" },
- { CA_SET_CE_SCORE, "set CE score" },
{ CA_SET_CE_VALUE, "set CE value" },
+ { CA_SET_CE_SCORE, "set CE score" },
+ { CA_UNDEFINED, " " },
+ { CA_HEADLINE_ENGINE_ACTIONS, "[engine actions]" },
+ { CA_SET_ENGINE_SCAN_MODE, "set scan mode" },
{ -1, NULL }
};
static struct ValueTextInfo options_action_mode_none[] =
{
- { CA_ARG_UNDEFINED, " " },
+ { CA_MODE_UNDEFINED, " " },
{ -1, NULL }
};
{ CA_ARG_UNDEFINED, " " },
{ CA_ARG_NUMBER_RESET, "reset" },
{ CA_ARG_UNDEFINED, " " },
- { CA_ARG_NUMBER_CE_DELAY, "CE delay" },
+ { CA_ARG_NUMBER_CE_VALUE, "CE value" },
{ CA_ARG_NUMBER_CE_SCORE, "CE score" },
+ { CA_ARG_NUMBER_CE_DELAY, "CE delay" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_NUMBER_LEVEL_TIME, "time" },
+ { CA_ARG_NUMBER_LEVEL_GEMS, "gems" },
+ { CA_ARG_NUMBER_LEVEL_SCORE, "score" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_ELEMENT_CV_HEADLINE, "[CE value]" },
+ { CA_ARG_ELEMENT_CV_TARGET, "target" },
+ { CA_ARG_ELEMENT_CV_TRIGGER, "trigger" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_ELEMENT_CS_HEADLINE, "[CE score]" },
+ { CA_ARG_ELEMENT_CS_TARGET, "target" },
+ { CA_ARG_ELEMENT_CS_TRIGGER, "trigger" },
+
+ { -1, NULL }
+};
+
+static struct ValueTextInfo options_action_arg_value[] =
+{
+ { CA_ARG_NUMBER_HEADLINE, "[number]" },
+ { CA_ARG_0, "0" },
+ { CA_ARG_1, "1" },
+ { CA_ARG_2, "2" },
+ { CA_ARG_3, "3" },
+ { CA_ARG_4, "4" },
+ { CA_ARG_5, "5" },
+ { CA_ARG_10, "10" },
+ { CA_ARG_100, "100" },
+ { CA_ARG_1000, "1000" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_NUMBER_MIN, "min" },
+ { CA_ARG_NUMBER_MAX, "max" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_NUMBER_RESET, "reset" },
+ { CA_ARG_UNDEFINED, " " },
{ CA_ARG_NUMBER_CE_VALUE, "CE value" },
+ { CA_ARG_NUMBER_CE_SCORE, "CE score" },
+ { CA_ARG_NUMBER_CE_DELAY, "CE delay" },
{ CA_ARG_UNDEFINED, " " },
{ CA_ARG_NUMBER_LEVEL_TIME, "time" },
{ CA_ARG_NUMBER_LEVEL_GEMS, "gems" },
{ CA_ARG_NUMBER_LEVEL_SCORE, "score" },
{ 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" },
+ { CA_ARG_ELEMENT_CV_HEADLINE, "[CE value]" },
+ { CA_ARG_ELEMENT_CV_TARGET, "target" },
+ { CA_ARG_ELEMENT_CV_TRIGGER, "trigger" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_ELEMENT_CS_HEADLINE, "[CE score]" },
+ { CA_ARG_ELEMENT_CS_TARGET, "target" },
+ { CA_ARG_ELEMENT_CS_TRIGGER, "trigger" },
+ { CA_ARG_UNDEFINED, " " },
+ { CA_ARG_ELEMENT_NR_HEADLINE, "[element]" },
+ { CA_ARG_ELEMENT_NR_TARGET, "target" },
+ { CA_ARG_ELEMENT_NR_TRIGGER, "trigger" },
{ -1, NULL }
};
{ -1, NULL }
};
+static struct ValueTextInfo options_action_arg_scan_mode[] =
+{
+ { CA_ARG_SCAN_MODE_HEADLINE, "[mode]" },
+ { CA_ARG_SCAN_MODE_NORMAL, "normal" },
+ { CA_ARG_SCAN_MODE_REVERSE, "reverse" },
+
+ { -1, NULL }
+};
+
static char options_change_page_strings[MAX_CHANGE_PAGES][10];
static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] =
{
{ CA_SET_LEVEL_TIME, 3, options_action_arg_number, },
{ CA_SET_LEVEL_GEMS, 3, options_action_arg_number, },
{ CA_SET_LEVEL_SCORE, 3, options_action_arg_number, },
- { CA_SET_LEVEL_GRAVITY, 1, options_action_arg_gravity, },
{ CA_SET_LEVEL_WIND, 1, options_action_arg_direction, },
{ CA_SET_PLAYER_KEYS, 2, options_action_arg_key, },
{ CA_SET_PLAYER_SPEED, 1, options_action_arg_speed, },
{ CA_SET_PLAYER_SHIELD, 1, options_action_arg_shield, },
+ { CA_SET_PLAYER_GRAVITY, 1, options_action_arg_gravity, },
{ CA_SET_PLAYER_ARTWORK, 1, options_action_arg_artwork, },
- { CA_SET_CE_SCORE, 3, options_action_arg_number, },
- { CA_SET_CE_VALUE, 3, options_action_arg_number, },
+ { CA_SET_CE_VALUE, 3, options_action_arg_value, },
+ { CA_SET_CE_SCORE, 3, options_action_arg_value, },
+ { CA_SET_ENGINE_SCAN_MODE, 1, options_action_arg_scan_mode, },
{ -1, FALSE, NULL }
};
/* ---------- level and editor settings ---------------------------------- */
{
- -1, ED_LEVEL_SETTINGS_YPOS(8),
+ -1, ED_LEVEL_SETTINGS_YPOS(7),
GADGET_ID_TIME_OR_STEPS, GADGET_ID_LEVEL_TIMELIMIT_UP,
-1,
options_time_or_steps,
NULL, "(0 => no limit)", "time or step limit"
},
{
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5),
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11),
GADGET_ID_GAME_ENGINE_TYPE, GADGET_ID_NONE,
-1,
options_game_engine_type,
"game engine:", NULL, "game engine"
},
{
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12),
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10),
GADGET_ID_WIND_DIRECTION, GADGET_ID_NONE,
-1,
options_wind_direction,
/* ---------- element settings: configure (several elements) ------------- */
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5),
+ GADGET_ID_PLAYER_SPEED, GADGET_ID_NONE,
+ -1,
+ options_player_speed,
+ &level.initial_player_stepsize[0],
+ "initial player speed:", NULL, "initial player speed"
+ },
+
/* ---------- element settings: configure 1 (custom elements) ------------ */
{
int gd_x, gd_y;
int x, y;
int width, height;
+ int wheel_x, wheel_y;
+ int wheel_width, wheel_height;
int type;
int gadget_id;
char *infotext;
ED_SCROLLBAR_XPOS, ED_SCROLLBAR_YPOS,
SX + ED_SCROLL_HORIZONTAL_XPOS, SY + ED_SCROLL_HORIZONTAL_YPOS,
ED_SCROLL_HORIZONTAL_XSIZE, ED_SCROLL_HORIZONTAL_YSIZE,
+ 0, 0,
+ SX + SXSIZE + SX, WIN_YSIZE,
GD_TYPE_SCROLLBAR_HORIZONTAL,
GADGET_ID_SCROLL_HORIZONTAL,
"scroll level editing area horizontally"
ED_SCROLLBAR_XPOS, ED_SCROLLBAR_YPOS,
SX + ED_SCROLL_VERTICAL_XPOS, SY + ED_SCROLL_VERTICAL_YPOS,
ED_SCROLL_VERTICAL_XSIZE, ED_SCROLL_VERTICAL_YSIZE,
+ 0, 0,
+ SX + SXSIZE + SX, WIN_YSIZE,
GD_TYPE_SCROLLBAR_VERTICAL,
GADGET_ID_SCROLL_VERTICAL,
"scroll level editing area vertically"
ED_SCROLLBAR2_XPOS, ED_SCROLLBAR2_YPOS,
DX + ED_SCROLL2_VERTICAL_XPOS, DY + ED_SCROLL2_VERTICAL_YPOS,
ED_SCROLL2_VERTICAL_XSIZE, ED_SCROLL2_VERTICAL_YSIZE,
+ SX + SXSIZE + SX, 0,
+ WIN_XSIZE - (SX + SXSIZE + SX), WIN_YSIZE,
GD_TYPE_SCROLLBAR_VERTICAL,
GADGET_ID_SCROLL_LIST_VERTICAL,
"scroll element list vertically"
{
/* ---------- level and editor settings ---------------------------------- */
- {
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11),
- GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE,
- &level.initial_gravity,
- NULL,
- "initial gravity", "set initial level gravity"
- },
{
ED_LEVEL_SETTINGS_XPOS(0), ED_COUNTER2_YPOS(9) - MINI_TILEY,
GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_NONE,
"slip down from certain flat walls","use EM style slipping behaviour"
},
{
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2),
GADGET_ID_USE_SPRING_BUG, GADGET_ID_NONE,
&level.use_spring_bug,
NULL,
"can grow into anything diggable", "grow into more than just sand"
},
{
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5),
- GADGET_ID_DOUBLE_SPEED, GADGET_ID_NONE,
- &level.double_speed,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(7),
+ GADGET_ID_CONTINUOUS_SNAPPING, GADGET_ID_NONE,
+ &level.continuous_snapping,
NULL,
- "double speed movement", "set initial movement speed of player"
+ "continuos snapping", "use snapping without releasing key"
},
{
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6),
"no scrolling when relocating", "player gets relocated without delay"
},
{
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(7),
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8),
GADGET_ID_USE_START_ELEMENT, GADGET_ID_NONE,
&level.use_start_element[0],
NULL,
"use level start element:", "start level at this element's position"
},
{
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8),
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9),
GADGET_ID_USE_ARTWORK_ELEMENT, GADGET_ID_NONE,
&level.use_artwork_element[0],
NULL,
"use artwork from element:", "use player artwork from other element"
},
{
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9),
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10),
GADGET_ID_USE_EXPLOSION_ELEMENT, GADGET_ID_NONE,
&level.use_explosion_element[0],
NULL,
"use explosion from element:", "use explosion properties from element"
},
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11),
+ GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE,
+ &level.initial_player_gravity[0],
+ NULL,
+ "use initial gravity", "set initial player gravity"
+ },
{
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4),
GADGET_ID_CAN_PASS_TO_WALKABLE, GADGET_ID_NONE,
NULL, NULL, "8", NULL
},
+ /* ---------- android content -------------------------------------------- */
+
+ {
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5),
+ GADGET_ID_ANDROID_CONTENT, GADGET_ID_NONE,
+ &level.android_clone_element[0], MAX_ANDROID_ELEMENTS, 1,
+ "elements:", NULL, NULL, "elements android can clone"
+ },
+
/* ---------- amoeba content --------------------------------------------- */
{
/* ---------- level start element ---------------------------------------- */
{
- -1, ED_AREA_1X1_SETTINGS_YPOS(7),
+ -1, ED_AREA_1X1_SETTINGS_YPOS(8),
GADGET_ID_START_ELEMENT, GADGET_ID_USE_START_ELEMENT,
&level.start_element[0], 1, 1,
NULL, NULL, NULL, "level start element"
/* ---------- player artwork element ------------------------------------- */
{
- -1, ED_AREA_1X1_SETTINGS_YPOS(8),
+ -1, ED_AREA_1X1_SETTINGS_YPOS(9),
GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_USE_ARTWORK_ELEMENT,
&level.artwork_element[0], 1, 1,
NULL, NULL, NULL, "element for player artwork"
/* ---------- player explosion element ----------------------------------- */
{
- -1, ED_AREA_1X1_SETTINGS_YPOS(9),
+ -1, ED_AREA_1X1_SETTINGS_YPOS(10),
GADGET_ID_EXPLOSION_ELEMENT, GADGET_ID_USE_EXPLOSION_ELEMENT,
&level.explosion_element[0], 1, 1,
NULL, NULL, NULL, "element for player explosion"
/* ---------- custom change content (extended change target) ------------- */
{
- -1, ED_AREA_3X3_SETTINGS_YPOS(10),
+ -1, ED_AREA_3X3_SETTINGS_YPOS(9),
GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, /* align three rows */
&custom_element_change.target_content.e[0][0], 3, 3,
NULL, NULL, NULL, "new extended elements after change"
static int element_shift = 0;
+static int editor_el_players[] =
+{
+ EL_PLAYER_1,
+ EL_PLAYER_2,
+ EL_PLAYER_3,
+ EL_PLAYER_4
+};
+static int *editor_el_players_ptr = editor_el_players;
+static int num_editor_el_players = SIZEOF_ARRAY_INT(editor_el_players);
+
static int editor_hl_boulderdash[] =
{
EL_INTERNAL_CASCADE_BD_ACTIVE,
EL_CHAR('B'),
EL_CHAR('D'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('B'),
- EL_CHAR('O'),
- EL_CHAR('U'),
- EL_CHAR('L'),
-
- EL_CHAR('-'),
- EL_CHAR('D'),
- EL_CHAR('E'),
- EL_CHAR('R'),
-
- EL_CHAR('D'),
- EL_CHAR('A'),
- EL_CHAR('S'),
- EL_CHAR('H'),
-#endif
};
static int editor_el_boulderdash[] =
{
- EL_PLAYER_1,
EL_EMPTY,
EL_SAND,
- EL_STEELWALL,
+ EL_BD_ROCK,
+ EL_BD_DIAMOND,
+ EL_STEELWALL,
EL_BD_WALL,
+ EL_BD_EXPANDABLE_WALL,
EL_BD_MAGIC_WALL,
- EL_EXIT_CLOSED,
- EL_EXIT_OPEN,
- EL_BD_DIAMOND,
+ EL_BD_AMOEBA,
EL_BD_BUTTERFLY_UP,
EL_BD_FIREFLY_UP,
- EL_BD_ROCK,
+ EL_EXIT_CLOSED,
EL_BD_BUTTERFLY_LEFT,
EL_BD_FIREFLY_LEFT,
EL_BD_BUTTERFLY_RIGHT,
EL_BD_FIREFLY_RIGHT,
- EL_BD_AMOEBA,
+ EL_EMPTY,
EL_BD_BUTTERFLY_DOWN,
EL_BD_FIREFLY_DOWN,
- EL_EMPTY,
+ EL_EXIT_OPEN,
};
static int *editor_hl_boulderdash_ptr = editor_hl_boulderdash;
static int *editor_el_boulderdash_ptr = editor_el_boulderdash;
EL_CHAR('E'),
EL_CHAR('M'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('E'),
- EL_CHAR('M'),
- EL_CHAR('E'),
- EL_CHAR('-'),
-
- EL_CHAR('R'),
- EL_CHAR('A'),
- EL_CHAR('L'),
- EL_CHAR('D'),
-
- EL_CHAR('M'),
- EL_CHAR('I'),
- EL_CHAR('N'),
- EL_CHAR('E'),
-#endif
};
static int editor_el_emerald_mine[] =
{
- EL_PLAYER_1,
- EL_PLAYER_2,
- EL_PLAYER_3,
- EL_PLAYER_4,
-
- EL_PLAYER_1,
- EL_EMPTY,
EL_SAND,
EL_ROCK,
+ EL_QUICKSAND_EMPTY,
+ EL_QUICKSAND_FULL,
EL_STEELWALL,
EL_WALL,
EL_WALL_EMERALD,
EL_WALL_DIAMOND,
- EL_QUICKSAND_EMPTY,
- EL_QUICKSAND_FULL,
-
EL_DYNAMITE,
EL_DYNAMITE_ACTIVE,
- EL_EXIT_CLOSED,
- EL_EXIT_OPEN,
EL_YAMYAM,
EL_BUG_UP,
EL_ACID_POOL_TOPLEFT,
EL_ACID,
EL_ACID_POOL_TOPRIGHT,
- EL_EMPTY,
+ EL_AMOEBA_DROP,
EL_ACID_POOL_BOTTOMLEFT,
EL_ACID_POOL_BOTTOM,
EL_ACID_POOL_BOTTOMRIGHT,
- EL_EMPTY,
-
- EL_AMOEBA_DROP,
- EL_AMOEBA_DEAD,
EL_AMOEBA_WET,
- EL_AMOEBA_DRY,
EL_EM_KEY_1,
EL_EM_KEY_2,
EL_CHAR('E'),
EL_CHAR('M'),
EL_CHAR('C'),
-
-#if 0
- EL_CHAR('E'),
- EL_CHAR('M'),
- EL_CHAR('E'),
- EL_CHAR('-'),
-
- EL_CHAR('R'),
- EL_CHAR('A'),
- EL_CHAR('L'),
- EL_CHAR('D'),
-
- EL_CHAR('M'),
- EL_CHAR('I'),
- EL_CHAR('N'),
- EL_CHAR('E'),
-
- EL_CHAR('C'),
- EL_CHAR('L'),
- EL_CHAR('U'),
- EL_CHAR('B'),
-#endif
};
static int editor_el_emerald_mine_club[] =
EL_EMC_WALL_11,
EL_EMC_WALL_12,
-#if RELEASE_3_1_2
- EL_EMPTY,
-#else
- EL_EMC_ANDROID,
-#endif
- EL_BALLOON,
- EL_BALLOON_SWITCH_ANY,
-#if RELEASE_3_1_2
- EL_EMPTY,
-#else
- EL_BALLOON_SWITCH_NONE,
-#endif
-
- EL_BALLOON_SWITCH_LEFT,
- EL_BALLOON_SWITCH_RIGHT,
- EL_BALLOON_SWITCH_UP,
- EL_BALLOON_SWITCH_DOWN,
-
EL_EMC_GRASS,
+ EL_EMC_FAKE_GRASS,
EL_EMC_PLANT,
-#if RELEASE_3_1_2
- EL_EMPTY,
- EL_EMPTY,
-#else
- EL_EMC_LENSES,
- EL_EMC_MAGNIFIER,
-#endif
+ EL_EMC_DRIPPER,
-#if RELEASE_3_1_2
- EL_EMPTY,
- EL_EMPTY,
-#else
EL_EMC_MAGIC_BALL,
EL_EMC_MAGIC_BALL_SWITCH,
-#endif
EL_SPRING,
-#if RELEASE_3_1_2
- EL_EMPTY,
-#else
EL_EMC_SPRING_BUMPER,
-#endif
-#if RELEASE_3_1_2
- EL_EMPTY,
-#else
+ EL_EMC_LENSES,
+ EL_EMC_MAGNIFIER,
+ EL_EM_DYNAMITE,
+ EL_EM_DYNAMITE_ACTIVE,
-#if 0
- EL_EMC_DRIPPER,
-#else
- EL_EMPTY,
-#endif
+ EL_BALLOON,
+ EL_YAMYAM_UP,
+ EL_BALLOON_SWITCH_UP,
+ EL_BALLOON_SWITCH_ANY,
-#endif
- EL_EMC_FAKE_GRASS,
- EL_EMPTY,
- EL_EMPTY,
+ EL_YAMYAM_LEFT,
+ EL_BALLOON_SWITCH_LEFT,
+ EL_YAMYAM_RIGHT,
+ EL_BALLOON_SWITCH_RIGHT,
+
+ EL_EMC_ANDROID,
+ EL_YAMYAM_DOWN,
+ EL_BALLOON_SWITCH_DOWN,
+ EL_BALLOON_SWITCH_NONE,
};
static int *editor_hl_emerald_mine_club_ptr = editor_hl_emerald_mine_club;
static int *editor_el_emerald_mine_club_ptr = editor_el_emerald_mine_club;
static int num_editor_hl_emerald_mine_club=SIZEOF_ARRAY_INT(editor_hl_emerald_mine_club);
static int num_editor_el_emerald_mine_club=SIZEOF_ARRAY_INT(editor_el_emerald_mine_club);
-static int editor_hl_more[] =
+static int editor_hl_rnd[] =
{
EL_INTERNAL_CASCADE_RND_ACTIVE,
EL_CHAR('R'),
EL_CHAR('N'),
EL_CHAR('D'),
-
-#if 0
- EL_CHAR('M'),
- EL_CHAR('O'),
- EL_CHAR('R'),
- EL_CHAR('E'),
-#endif
};
-static int editor_el_more[] =
+static int editor_el_rnd[] =
{
EL_KEY_1,
EL_KEY_2,
EL_ARROW_UP,
EL_ARROW_DOWN,
+ EL_AMOEBA_DEAD,
+ EL_AMOEBA_DRY,
EL_AMOEBA_FULL,
+ EL_GAME_OF_LIFE,
+
EL_EMERALD_YELLOW,
EL_EMERALD_RED,
EL_EMERALD_PURPLE,
+ EL_BIOMAZE,
- EL_WALL_BD_DIAMOND,
EL_WALL_EMERALD_YELLOW,
EL_WALL_EMERALD_RED,
EL_WALL_EMERALD_PURPLE,
+ EL_WALL_BD_DIAMOND,
- EL_GAME_OF_LIFE,
+ EL_SPEED_PILL,
EL_PACMAN_UP,
EL_TIME_ORB_FULL,
EL_TIME_ORB_EMPTY,
EL_PACMAN_LEFT,
EL_DARK_YAMYAM,
EL_PACMAN_RIGHT,
- EL_EXPANDABLE_WALL,
+ EL_EMPTY,
- EL_BIOMAZE,
+ EL_BLACK_ORB,
EL_PACMAN_DOWN,
EL_LAMP,
EL_LAMP_ACTIVE,
EL_BD_FIREFLY,
EL_MOLE_LEFT,
- EL_EMPTY,
+ EL_SATELLITE,
EL_MOLE_RIGHT,
EL_PACMAN,
EL_SPACESHIP,
EL_MOLE_DOWN,
- EL_EMPTY,
- EL_EMPTY,
+ EL_INVISIBLE_STEELWALL,
+ EL_INVISIBLE_WALL,
- EL_SATELLITE,
+ EL_EXPANDABLE_WALL,
EL_EXPANDABLE_WALL_HORIZONTAL,
EL_EXPANDABLE_WALL_VERTICAL,
EL_EXPANDABLE_WALL_ANY,
-
- EL_INVISIBLE_STEELWALL,
- EL_INVISIBLE_WALL,
- EL_SPEED_PILL,
- EL_BLACK_ORB,
};
-static int *editor_hl_more_ptr = editor_hl_more;
-static int *editor_el_more_ptr = editor_el_more;
-static int num_editor_hl_more = SIZEOF_ARRAY_INT(editor_hl_more);
-static int num_editor_el_more = SIZEOF_ARRAY_INT(editor_el_more);
+static int *editor_hl_rnd_ptr = editor_hl_rnd;
+static int *editor_el_rnd_ptr = editor_el_rnd;
+static int num_editor_hl_rnd = SIZEOF_ARRAY_INT(editor_hl_rnd);
+static int num_editor_el_rnd = SIZEOF_ARRAY_INT(editor_el_rnd);
static int editor_hl_sokoban[] =
{
EL_CHAR('S'),
EL_CHAR('B'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('S'),
- EL_CHAR('O'),
- EL_CHAR('K'),
- EL_CHAR('O'),
-
- EL_CHAR('-'),
- EL_CHAR('B'),
- EL_CHAR('A'),
- EL_CHAR('N'),
-#endif
};
static int editor_el_sokoban[] =
EL_CHAR('S'),
EL_CHAR('P'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('S'),
- EL_CHAR('U'),
- EL_CHAR('P'),
- EL_CHAR('A'),
-
- EL_CHAR('P'),
- EL_CHAR('L'),
- EL_CHAR('E'),
- EL_CHAR('X'),
-#endif
};
static int editor_el_supaplex[] =
{
-#if 1
+ EL_SP_MURPHY,
EL_EMPTY,
-#else
- EL_SP_EMPTY,
-#endif
- EL_SP_ZONK,
EL_SP_BASE,
- EL_SP_MURPHY,
+ EL_SP_BUGGY_BASE,
EL_SP_INFOTRON,
- EL_SP_CHIP_SINGLE,
- EL_SP_HARDWARE_GRAY,
- EL_SP_EXIT_CLOSED,
+ EL_SP_ZONK,
+ EL_SP_SNIKSNAK,
+ EL_SP_ELECTRON,
+ EL_SP_DISK_RED,
EL_SP_DISK_ORANGE,
- EL_SP_PORT_RIGHT,
- EL_SP_PORT_DOWN,
- EL_SP_PORT_LEFT,
-
- EL_SP_PORT_UP,
- EL_SP_GRAVITY_PORT_RIGHT,
- EL_SP_GRAVITY_PORT_DOWN,
- EL_SP_GRAVITY_PORT_LEFT,
-
- EL_SP_GRAVITY_PORT_UP,
- EL_SP_SNIKSNAK,
EL_SP_DISK_YELLOW,
EL_SP_TERMINAL,
- EL_SP_DISK_RED,
- EL_SP_PORT_VERTICAL,
+ EL_SP_EXIT_CLOSED,
EL_SP_PORT_HORIZONTAL,
+ EL_SP_PORT_VERTICAL,
EL_SP_PORT_ANY,
- EL_SP_ELECTRON,
- EL_SP_BUGGY_BASE,
- EL_SP_CHIP_LEFT,
- EL_SP_CHIP_RIGHT,
+ EL_SP_PORT_LEFT,
+ EL_SP_PORT_RIGHT,
+ EL_SP_PORT_UP,
+ EL_SP_PORT_DOWN,
- EL_SP_HARDWARE_BASE_1,
+ EL_SP_GRAVITY_PORT_LEFT,
+ EL_SP_GRAVITY_PORT_RIGHT,
+ EL_SP_GRAVITY_PORT_UP,
+ EL_SP_GRAVITY_PORT_DOWN,
+
+ EL_SP_HARDWARE_GRAY,
EL_SP_HARDWARE_GREEN,
EL_SP_HARDWARE_BLUE,
EL_SP_HARDWARE_RED,
- EL_SP_HARDWARE_YELLOW,
+ EL_SP_HARDWARE_BASE_1,
EL_SP_HARDWARE_BASE_2,
EL_SP_HARDWARE_BASE_3,
EL_SP_HARDWARE_BASE_4,
EL_SP_HARDWARE_BASE_5,
EL_SP_HARDWARE_BASE_6,
+ EL_SP_HARDWARE_YELLOW,
EL_SP_CHIP_TOP,
+
+ EL_SP_CHIP_SINGLE,
+ EL_SP_CHIP_LEFT,
+ EL_SP_CHIP_RIGHT,
EL_SP_CHIP_BOTTOM,
};
static int *editor_hl_supaplex_ptr = editor_hl_supaplex;
EL_CHAR('D'),
EL_CHAR('C'),
EL_CHAR('2'),
-
-#if 0
- EL_CHAR('D'),
- EL_CHAR('I'),
- EL_CHAR('A'),
- EL_CHAR('-'),
-
- EL_CHAR('M'),
- EL_CHAR('O'),
- EL_CHAR('N'),
- EL_CHAR('D'),
-
- EL_CHAR('C'),
- EL_CHAR('A'),
- EL_CHAR('V'),
- EL_CHAR('E'),
-
- EL_CHAR('S'),
- EL_CHAR(' '),
- EL_CHAR('I'),
- EL_CHAR('I'),
-#endif
};
static int editor_el_diamond_caves[] =
EL_CONVEYOR_BELT_3_SWITCH_RIGHT,
EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
- EL_SWITCHGATE_OPEN,
EL_SWITCHGATE_CLOSED,
+ EL_SWITCHGATE_OPEN,
EL_SWITCHGATE_SWITCH_UP,
- EL_EMPTY,
-
- EL_ENVELOPE_1,
- EL_ENVELOPE_2,
- EL_ENVELOPE_3,
- EL_ENVELOPE_4,
+ EL_SWITCHGATE_SWITCH_DOWN,
EL_TIMEGATE_CLOSED,
EL_TIMEGATE_OPEN,
EL_TIMEGATE_SWITCH,
EL_EMPTY,
- EL_LANDMINE,
- EL_INVISIBLE_SAND,
- EL_STEELWALL_SLIPPERY,
- EL_EMPTY,
-
EL_SIGN_EXCLAMATION,
EL_SIGN_STOP,
EL_LIGHT_SWITCH,
EL_LIGHT_SWITCH_ACTIVE,
+ EL_STEELWALL_SLIPPERY,
+ EL_INVISIBLE_SAND,
+ EL_LANDMINE,
+ EL_EMPTY,
+
EL_SHIELD_NORMAL,
EL_SHIELD_DEADLY,
EL_EXTRA_TIME,
EL_EMPTY,
+
+ EL_ENVELOPE_1,
+ EL_ENVELOPE_2,
+ EL_ENVELOPE_3,
+ EL_ENVELOPE_4,
};
static int *editor_hl_diamond_caves_ptr = editor_hl_diamond_caves;
static int *editor_el_diamond_caves_ptr = editor_el_diamond_caves;
EL_CHAR('D'),
EL_CHAR('X'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('D'),
- EL_CHAR('X'),
- EL_CHAR('-'),
- EL_CHAR(' '),
-
- EL_CHAR('B'),
- EL_CHAR('O'),
- EL_CHAR('U'),
- EL_CHAR('L'),
-
- EL_CHAR('-'),
- EL_CHAR('D'),
- EL_CHAR('E'),
- EL_CHAR('R'),
-
- EL_CHAR('D'),
- EL_CHAR('A'),
- EL_CHAR('S'),
- EL_CHAR('H'),
-#endif
};
static int editor_el_dx_boulderdash[] =
EL_CHAR('T'),
EL_CHAR('X'),
EL_CHAR('T'),
-
-#if 0
- EL_CHAR('T'),
- EL_CHAR('E'),
- EL_CHAR('X'),
- EL_CHAR('T'),
-#endif
};
static int editor_el_chars[] =
EL_CHAR('C'),
EL_CHAR('E'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('C'),
- EL_CHAR('U'),
- EL_CHAR('S'),
- EL_CHAR('-'),
-
- EL_CHAR('T'),
- EL_CHAR('O'),
- EL_CHAR('M'),
- EL_CHAR(' '),
-
- EL_CHAR('E'),
- EL_CHAR('L'),
- EL_CHAR('E'),
- EL_CHAR('M'),
-
- EL_CHAR('E'),
- EL_CHAR('N'),
- EL_CHAR('T'),
- EL_CHAR('S'),
-#endif
};
static int editor_el_custom[] =
EL_CUSTOM_START + 252,
EL_CUSTOM_START + 253,
EL_CUSTOM_START + 254,
- EL_CUSTOM_START + 255,
-
- EL_TRIGGER_ELEMENT,
- EL_TRIGGER_PLAYER,
- EL_EMPTY,
- EL_EMPTY
+ EL_CUSTOM_START + 255
};
static int *editor_hl_custom_ptr = editor_hl_custom;
static int *editor_el_custom_ptr = editor_el_custom;
EL_CHAR('G'),
EL_CHAR('E'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('G'),
- EL_CHAR('R'),
- EL_CHAR('O'),
- EL_CHAR('U'),
-
- EL_CHAR('P'),
- EL_CHAR(' '),
- EL_CHAR(' '),
- EL_CHAR(' '),
-
- EL_CHAR('E'),
- EL_CHAR('L'),
- EL_CHAR('E'),
- EL_CHAR('M'),
-
- EL_CHAR('E'),
- EL_CHAR('N'),
- EL_CHAR('T'),
- EL_CHAR('S'),
-#endif
};
static int editor_el_group[] =
EL_GROUP_START + 30,
EL_GROUP_START + 31
};
-static int *editor_hl_group_ptr = editor_hl_group;
-static int *editor_el_group_ptr = editor_el_group;
-static int num_editor_hl_group = SIZEOF_ARRAY_INT(editor_hl_group);
-static int num_editor_el_group = SIZEOF_ARRAY_INT(editor_el_group);
+static int *editor_hl_group_ptr = editor_hl_group;
+static int *editor_el_group_ptr = editor_el_group;
+static int num_editor_hl_group = SIZEOF_ARRAY_INT(editor_hl_group);
+static int num_editor_el_group = SIZEOF_ARRAY_INT(editor_el_group);
+
+static int editor_hl_reference[] =
+{
+ EL_INTERNAL_CASCADE_REF_ACTIVE,
+ EL_CHAR('R'),
+ EL_CHAR('E'),
+ EL_CHAR('F')
+};
+
+static int editor_el_reference[] =
+{
+ EL_TRIGGER_PLAYER,
+ EL_TRIGGER_ELEMENT,
+ EL_TRIGGER_CE_VALUE,
+ EL_TRIGGER_CE_SCORE,
+
+ EL_SELF,
+ EL_ANY_ELEMENT,
+ EL_CURRENT_CE_VALUE,
+ EL_CURRENT_CE_SCORE,
+
+ EL_LAST_CE_8,
+ EL_LAST_CE_7,
+ EL_LAST_CE_6,
+ EL_LAST_CE_5,
+
+ EL_LAST_CE_4,
+ EL_LAST_CE_3,
+ EL_LAST_CE_2,
+ EL_LAST_CE_1,
+
+ EL_NEXT_CE_1,
+ EL_NEXT_CE_2,
+ EL_NEXT_CE_3,
+ EL_NEXT_CE_4,
+
+ EL_NEXT_CE_5,
+ EL_NEXT_CE_6,
+ EL_NEXT_CE_7,
+ EL_NEXT_CE_8,
+};
+static int *editor_hl_reference_ptr = editor_hl_reference;
+static int *editor_el_reference_ptr = editor_el_reference;
+static int num_editor_hl_reference = SIZEOF_ARRAY_INT(editor_hl_reference);
+static int num_editor_el_reference = SIZEOF_ARRAY_INT(editor_el_reference);
static int editor_hl_user_defined[] =
{
EL_CHAR('M'),
EL_CHAR('Y'),
EL_EMPTY,
-
-#if 0
- EL_CHAR('U'),
- EL_CHAR('S'),
- EL_CHAR('E'),
- EL_CHAR('R'),
-
- EL_CHAR('D'),
- EL_CHAR('E'),
- EL_CHAR('F'),
- EL_CHAR('I'),
-
- EL_CHAR('-'),
- EL_CHAR('N'),
- EL_CHAR('E'),
- EL_CHAR('D'),
-#endif
};
static int *editor_hl_user_defined_ptr = editor_hl_user_defined;
static int *editor_elements = NULL; /* dynamically allocated */
static int num_editor_elements = 0; /* dynamically determined */
+static boolean setup_editor_show_always = TRUE;
+static boolean setup_editor_cascade_never = FALSE;
+
+static int editor_hl_unused[] = { EL_EMPTY };
+static int *editor_hl_unused_ptr = editor_hl_unused;
+static int num_editor_hl_unused = 0;
+
static struct
{
boolean *setup_value;
}
editor_elements_info[] =
{
+ {
+ &setup_editor_show_always,
+ &setup_editor_cascade_never,
+ &editor_hl_unused_ptr, &num_editor_hl_unused,
+ &editor_el_players_ptr, &num_editor_el_players
+ },
{
&setup.editor.el_boulderdash,
&setup.editor_cascade.el_bd,
{
&setup.editor.el_more,
&setup.editor_cascade.el_rnd,
- &editor_hl_more_ptr, &num_editor_hl_more,
- &editor_el_more_ptr, &num_editor_el_more
+ &editor_hl_rnd_ptr, &num_editor_hl_rnd,
+ &editor_el_rnd_ptr, &num_editor_el_rnd
},
{
&setup.editor.el_sokoban,
&editor_hl_group_ptr, &num_editor_hl_group,
&editor_el_group_ptr, &num_editor_el_group
},
+ {
+ &setup.editor.el_custom,
+ &setup.editor_cascade.el_ref,
+ &editor_hl_reference_ptr, &num_editor_hl_reference,
+ &editor_el_reference_ptr, &num_editor_el_reference
+ },
{
&setup.editor.el_user_defined,
&setup.editor_cascade.el_user,
{
char *info_text = NULL;
-#if 1
if (element < MAX_NUM_ELEMENTS)
-#else
- if (element < NUM_FILE_ELEMENTS)
-#endif
{
if (strlen(element_info[element].description) > 0)
info_text = element_info[element].description;
return info_text;
}
+char *getElementDescriptionFilename(int element)
+{
+ char *docs_dir = options.docs_directory;
+ char *elements_subdir = "elements";
+ static char *filename = NULL;
+ char basename[MAX_FILENAME_LEN];
+
+ checked_free(filename);
+
+ /* 1st try: look for element description file for exactly this element */
+ sprintf(basename, "%s.txt", element_info[element].token_name);
+ filename = getPath3(docs_dir, elements_subdir, basename);
+ if (fileExists(filename))
+ return filename;
+
+ free(filename);
+
+ /* 2nd try: look for element description file for this element's class */
+ sprintf(basename, "%s.txt", element_info[element].class_name);
+ filename = getPath3(docs_dir, elements_subdir, basename);
+ if (fileExists(filename))
+ return filename;
+
+ return NULL;
+}
+
static void InitDynamicEditorElementList(int **elements, int *num_elements)
{
boolean element_found[NUM_FILE_ELEMENTS];
if (element >= NUM_FILE_ELEMENTS)
Error(ERR_WARN, "editor element %d is runtime element", element);
- if (strcmp(getElementInfoText(element), INFOTEXT_UNKNOWN_ELEMENT) == 0)
+ if (strEqual(getElementInfoText(element), INFOTEXT_UNKNOWN_ELEMENT))
Error(ERR_WARN, "no element description for element %d", element);
}
}
}
}
- /* this function is also called before editor gadgets are initialized */
- if (level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL] != NULL)
- AdjustElementListScrollbar();
+ /* (this function is also called before editor gadgets are initialized!) */
+ AdjustElementListScrollbar();
}
void PrintEditorElementList()
GDI_SCROLLBAR_ITEMS_MAX, items_max,
GDI_SCROLLBAR_ITEMS_VISIBLE, items_visible,
GDI_SCROLLBAR_ITEM_POSITION, item_position,
+ GDI_WHEEL_AREA_X, scrollbar_info[i].wheel_x,
+ GDI_WHEEL_AREA_Y, scrollbar_info[i].wheel_y,
+ GDI_WHEEL_AREA_WIDTH, scrollbar_info[i].wheel_width,
+ GDI_WHEEL_AREA_HEIGHT, scrollbar_info[i].wheel_height,
GDI_STATE, GD_BUTTON_UNPRESSED,
GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y1,
GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2,
int i;
for (i = 0; i < NUM_EDITOR_GADGETS; i++)
+ {
FreeGadget(level_editor_gadget[i]);
+
+ level_editor_gadget[i] = NULL;
+ }
}
static void MapCounterButtons(int id)
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 */
{
struct ElementInfo *ei_from = &element_info[element_from];
struct ElementInfo *ei_to = &element_info[element_to];
- int i, x, y;
-
- /* ---------- copy element description ---------- */
- for (i = 0; i < MAX_ELEMENT_NAME_LEN + 1; i++)
- ei_to->description[i] = ei_from->description[i];
-
- /* ---------- copy element base properties ---------- */
- Properties[element_to][EP_BITFIELD_BASE] =
- Properties[element_from][EP_BITFIELD_BASE];
- /* ---------- copy custom property values ---------- */
-
- ei_to->use_gfx_element = ei_from->use_gfx_element;
- ei_to->gfx_element = ei_from->gfx_element;
-
- ei_to->access_direction = ei_from->access_direction;
-
- 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;
- ei_to->drop_delay_random = ei_from->drop_delay_random;
- ei_to->move_delay_fixed = ei_from->move_delay_fixed;
- ei_to->move_delay_random = ei_from->move_delay_random;
-
- ei_to->move_pattern = ei_from->move_pattern;
- ei_to->move_direction_initial = ei_from->move_direction_initial;
- ei_to->move_stepsize = ei_from->move_stepsize;
-
- ei_to->move_enter_element = ei_from->move_enter_element;
- ei_to->move_leave_element = ei_from->move_leave_element;
- ei_to->move_leave_type = ei_from->move_leave_type;
-
- ei_to->slippery_type = ei_from->slippery_type;
-
- for (y = 0; y < 3; y++)
- for (x = 0; x < 3; x++)
- ei_to->content.e[x][y] = ei_from->content.e[x][y];
-
- ei_to->explosion_type = ei_from->explosion_type;
- ei_to->explosion_delay = ei_from->explosion_delay;
- ei_to->ignition_delay = ei_from->ignition_delay;
-
- /* ---------- reinitialize and copy change pages ---------- */
-
- ei_to->num_change_pages = ei_from->num_change_pages;
- ei_to->current_change_page = ei_from->current_change_page;
-
- setElementChangePages(ei_to, ei_to->num_change_pages);
-
- for (i=0; i < ei_to->num_change_pages; i++)
- ei_to->change_page[i] = ei_from->change_page[i];
-
- /* ---------- copy group element info ---------- */
- if (ei_from->group != NULL && ei_to->group != NULL) /* group or internal */
- *ei_to->group = *ei_from->group;
-
- /* mark this custom element as modified */
- ei_to->modified_settings = TRUE;
+ copyElementInfo(ei_from, ei_to);
}
static void replace_custom_element_in_settings(int element_from,
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_VALUE_CHANGES) ? CE_VALUE_CHANGES :
+ HAS_CHANGE_EVENT(element, CE_SCORE_CHANGES) ? CE_SCORE_CHANGES :
HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO) ? CE_VALUE_GETS_ZERO :
+ HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO) ? CE_SCORE_GETS_ZERO :
custom_element_change.direct_action);
/* set "change by other element action" selectbox help value */
HAS_CHANGE_EVENT(element, CE_PLAYER_DROPS_X) ? CE_PLAYER_DROPS_X :
HAS_CHANGE_EVENT(element, CE_TOUCHING_X) ? CE_TOUCHING_X :
HAS_CHANGE_EVENT(element, CE_HITTING_X) ? CE_HITTING_X :
+ HAS_CHANGE_EVENT(element, CE_DIGGING_X) ? CE_DIGGING_X :
HAS_CHANGE_EVENT(element, CE_HIT_BY_X) ? CE_HIT_BY_X :
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_MOVE_OF_X) ? CE_MOVE_OF_X :
+ HAS_CHANGE_EVENT(element, CE_CREATION_OF_X) ? CE_CREATION_OF_X :
+ HAS_CHANGE_EVENT(element, CE_VALUE_CHANGES_OF_X) ? CE_VALUE_CHANGES_OF_X :
+ HAS_CHANGE_EVENT(element, CE_SCORE_CHANGES_OF_X) ? CE_SCORE_CHANGES_OF_X :
HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO_OF_X) ? CE_VALUE_GETS_ZERO_OF_X :
+ HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO_OF_X) ? CE_SCORE_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_VALUE_CHANGES] = FALSE;
+ custom_element_change_events[CE_SCORE_CHANGES] = FALSE;
custom_element_change_events[CE_VALUE_GETS_ZERO] = FALSE;
+ custom_element_change_events[CE_SCORE_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_PLAYER_DROPS_X] = FALSE;
custom_element_change_events[CE_TOUCHING_X] = FALSE;
custom_element_change_events[CE_HITTING_X] = FALSE;
+ custom_element_change_events[CE_DIGGING_X] = FALSE;
custom_element_change_events[CE_HIT_BY_X] = FALSE;
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_MOVE_OF_X] = FALSE;
+ custom_element_change_events[CE_CREATION_OF_X] = FALSE;
+ custom_element_change_events[CE_VALUE_CHANGES_OF_X] = FALSE;
+ custom_element_change_events[CE_SCORE_CHANGES_OF_X] = FALSE;
custom_element_change_events[CE_VALUE_GETS_ZERO_OF_X] = FALSE;
+ custom_element_change_events[CE_SCORE_GETS_ZERO_OF_X] = FALSE;
custom_element_change_events[custom_element_change.other_action] =
custom_element_change_events[CE_BY_OTHER_ACTION];
CopyClassicElementPropertiesToGame(element);
}
+void CheckElementDescriptions()
+{
+ int i;
+
+ for (i = 0; i < NUM_FILE_ELEMENTS; i++)
+ if (getElementDescriptionFilename(i) == NULL && !IS_OBSOLETE(i))
+ Error(ERR_WARN, "no element description for element '%s'", EL_NAME(i));
+}
+
void DrawLevelEd()
{
CloseDoor(DOOR_CLOSE_ALL);
OpenDoor(DOOR_OPEN_2 | DOOR_NO_DELAY);
+#if DEBUG
+ CheckElementDescriptions();
+#endif
+
if (level_editor_test_game)
{
CopyPlayfield(level.field, Feld);
DrawText(x, y + 2 * MINI_TILEY, "active", FONT_TEXT_1);
}
+static void DrawAndroidElementArea(int element)
+{
+ int num_elements = level.num_android_clone_elements;
+ int id = ED_DRAWING_ID_ANDROID_CONTENT;
+ int sx = SX + drawingarea_info[id].x - MINI_TILEX / 2;
+ int sy = SY + drawingarea_info[id].y - MINI_TILEY / 2;
+ int xsize = MAX_ANDROID_ELEMENTS;
+ int ysize = 1;
+
+ /* display counter to choose number of element areas */
+ MapCounterButtons(ED_COUNTER_ID_ANDROID_CONTENT);
+
+ if (drawingarea_info[id].text_left != NULL)
+ sx += getTextWidthForDrawingArea(drawingarea_info[id].text_left);
+
+ UnmapDrawingArea(id);
+
+ ModifyEditorDrawingArea(id, num_elements, 1);
+
+ /* delete content areas in case of reducing number of them */
+ DrawBackground(sx, sy, (xsize + 1) * MINI_TILEX, (ysize + 1) * MINI_TILEY);
+
+ MapDrawingArea(id);
+}
+
static void DrawGroupElementArea(int element)
{
int num_elements = group_element_info.num_elements;
DrawBackground(gi->x, gi->y, gi->width, gi->height);
if (envelope_nr != -1)
- textarea_info[id].value = level.envelope_text[envelope_nr];
+ textarea_info[id].value = level.envelope[envelope_nr].text;
ModifyGadget(gi, GDI_AREA_SIZE,
*counterbutton_info[ED_COUNTER_ID_ENVELOPE_XSIZE].value,
MapTextAreaGadget(ED_TEXTAREA_ID_ENVELOPE_INFO);
}
-char *getElementDescriptionFilename(int element)
-{
- char *docs_dir = options.docs_directory;
- char *elements_subdir = "elements";
- static char *filename = NULL;
- char basename[MAX_FILENAME_LEN];
-
- checked_free(filename);
-
- /* 1st try: look for element description file for exactly this element */
- sprintf(basename, "%s.txt", element_info[element].token_name);
- filename = getPath3(docs_dir, elements_subdir, basename);
- if (fileExists(filename))
- return filename;
-
- free(filename);
-
- /* 2nd try: look for element description file for this element's class */
- sprintf(basename, "%s.txt", element_info[element].class_name);
- filename = getPath3(docs_dir, elements_subdir, basename);
- if (fileExists(filename))
- return filename;
-
- return NULL;
-}
-
static boolean PrintInfoText(char *text, int font_nr, int start_line)
{
int font_height = getFontHeight(font_nr);
/* pre-defined properties */
{ EP_CAN_PASS_MAGIC_WALL, "- can pass magic walls" },
{ EP_SWITCHABLE, "- can be switched" },
- { EP_HAS_CONTENT, "- can contain other elements" },
+#if 0
+ { EP_HAS_EDITOR_CONTENT, "- can contain other elements" },
+#endif
{ -1, NULL }
};
int screen_line = 0;
int i, x, y;
-#if DEBUG
- if (IS_CUSTOM_ELEMENT(properties_element))
- {
- DrawTextF(pad_x, pad_y + screen_line++ * font2_height, FONT_TEXT_3,
- "[Custom Element %d]", properties_element - EL_CUSTOM_START + 1);
- screen_line++;
- }
- else if (IS_GROUP_ELEMENT(properties_element))
+ if (setup.editor.show_element_token)
{
DrawTextF(pad_x, pad_y + screen_line++ * font2_height, FONT_TEXT_3,
- "[Group Element %d]", properties_element - EL_GROUP_START + 1);
+ "[%s]", element_info[properties_element].token_name);
screen_line++;
}
-#endif
/* ----- print number of elements / percentage of this element in level */
#define TEXT_COLLECTING "Score for collecting"
#define TEXT_SMASHING "Score for smashing"
-#define TEXT_SLURPING "Score for slurping"
+#define TEXT_SLURPING "Score for slurping robot"
#define TEXT_CRACKING "Score for cracking"
#define TEXT_AMOEBA_SPEED "Speed of amoeba growth"
#define TEXT_DURATION "Duration when activated"
{ EL_BD_FIREFLY_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
{ EL_SP_SNIKSNAK, &level.score[SC_SPACESHIP], TEXT_SMASHING },
{ EL_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_LEFT, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_RIGHT, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_UP, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_DOWN, &level.score[SC_YAMYAM], TEXT_SMASHING },
{ EL_DARK_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
{ EL_ROBOT, &level.score[SC_ROBOT], TEXT_SMASHING },
{ EL_PACMAN, &level.score[SC_PACMAN], TEXT_SMASHING },
{ EL_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
{ EL_NUT, &level.score[SC_NUT], TEXT_CRACKING },
{ EL_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_EM_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
{ EL_DYNABOMB_INCREASE_NUMBER,&level.score[SC_DYNAMITE],TEXT_COLLECTING },
{ EL_DYNABOMB_INCREASE_SIZE, &level.score[SC_DYNAMITE],TEXT_COLLECTING },
{ EL_DYNABOMB_INCREASE_POWER, &level.score[SC_DYNAMITE],TEXT_COLLECTING },
{ EL_AMOEBA_DRY, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
{ EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
{ EL_BD_AMOEBA, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
+ { EL_EMC_DRIPPER, &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, &level.time_light, 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_BIOMAZE, &level.biomaze[1], TEXT_GAME_OF_LIFE_2 },
{ EL_BIOMAZE, &level.biomaze[2], TEXT_GAME_OF_LIFE_3 },
{ EL_BIOMAZE, &level.biomaze[3], TEXT_GAME_OF_LIFE_4 },
-#endif
-#if 1
{ EL_EMC_ANDROID, &level.android_move_time, TEXT_MOVE_SPEED },
{ EL_EMC_ANDROID, &level.android_clone_time, TEXT_CLONE_SPEED },
{ EL_EMC_MAGIC_BALL, &level.ball_time, TEXT_BALL_DELAY },
{ EL_EMC_LENSES, &level.lenses_score, TEXT_COLLECTING },
{ EL_EMC_MAGNIFIER, &level.magnify_score, TEXT_COLLECTING },
- { EL_ROBOT, &level.slurp_score, TEXT_SLURPING },
+ { EL_SPRING, &level.slurp_score, TEXT_SLURPING },
{ EL_EMC_LENSES, &level.lenses_time, TEXT_DURATION },
{ EL_EMC_MAGNIFIER, &level.magnify_time, TEXT_DURATION },
-#endif
{ -1, NULL, NULL }
};
IS_GROUP_ELEMENT(element) ||
IS_ENVELOPE(element) ||
ELEM_IS_PLAYER(element) ||
- HAS_CONTENT(element) ||
+ HAS_EDITOR_CONTENT(element) ||
CAN_GROW(element) ||
COULD_MOVE_INTO_ACID(element) ||
MAYBE_DONT_COLLIDE_WITH(element))
int counter_id = ED_COUNTER_ID_ELEMENT_VALUE1 + num_element_counters;
counterbutton_info[counter_id].y =
- ED_ELEMENT_SETTINGS_YPOS((HAS_CONTENT(properties_element) ? 1 : 0) +
- (CAN_GROW(properties_element) ? 1 : 0) +
- (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) +
- (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0)+
- (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) +
- num_element_counters);
+ ED_ELEMENT_SETTINGS_YPOS(
+ (HAS_EDITOR_CONTENT(properties_element) ? 1 : 0) +
+ (CAN_GROW(properties_element) ? 1 : 0) +
+ (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) +
+ (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0) +
+ (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) +
+ num_element_counters);
counterbutton_info[counter_id].value = elements_with_counter[i].value;
counterbutton_info[counter_id].text_right= elements_with_counter[i].text;
}
}
- if (HAS_CONTENT(properties_element))
+ if (HAS_EDITOR_CONTENT(properties_element))
{
/* draw stickybutton gadget */
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
if (IS_AMOEBOID(properties_element))
MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT);
- else if (properties_element == EL_YAMYAM)
+ else if (properties_element == EL_YAMYAM ||
+ properties_element == EL_YAMYAM_LEFT ||
+ properties_element == EL_YAMYAM_RIGHT ||
+ properties_element == EL_YAMYAM_UP ||
+ properties_element == EL_YAMYAM_DOWN)
DrawYamYamContentAreas();
else if (properties_element == EL_EMC_MAGIC_BALL)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_BALL_STATE);
}
+ else if (properties_element == EL_EMC_ANDROID)
+ DrawAndroidElementArea(properties_element);
}
if (ELEM_IS_PLAYER(properties_element))
int player_nr = GET_PLAYER_NR(properties_element);
/* these properties can be set for every player individually */
+
drawingarea_info[ED_DRAWING_ID_START_ELEMENT].value =
&level.start_element[player_nr];
drawingarea_info[ED_DRAWING_ID_ARTWORK_ELEMENT].value =
drawingarea_info[ED_DRAWING_ID_EXPLOSION_ELEMENT].value =
&level.explosion_element[player_nr];
- /* these properties can be set for every player individually */
checkbutton_info[ED_CHECKBUTTON_ID_USE_START_ELEMENT].value =
&level.use_start_element[player_nr];
checkbutton_info[ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT].value =
&level.use_artwork_element[player_nr];
checkbutton_info[ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT].value =
&level.use_explosion_element[player_nr];
+ checkbutton_info[ED_CHECKBUTTON_ID_INITIAL_GRAVITY].value =
+ &level.initial_player_gravity[player_nr];
+
+ selectbox_info[ED_SELECTBOX_ID_PLAYER_SPEED].value =
+ &level.initial_player_stepsize[player_nr];
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID);
MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ?
ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD :
ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INSTANT_RELOCATION);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_START_ELEMENT);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_GRAVITY);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE);
- MapCheckbuttonGadget(ED_CHECKBUTTON_ID_DOUBLE_SPEED);
MapDrawingArea(ED_DRAWING_ID_START_ELEMENT);
MapDrawingArea(ED_DRAWING_ID_ARTWORK_ELEMENT);
MapDrawingArea(ED_DRAWING_ID_EXPLOSION_ELEMENT);
+
+ MapSelectboxGadget(ED_SELECTBOX_ID_PLAYER_SPEED);
}
if (IS_GEM(properties_element))
ED_ELEMENT_SETTINGS_XPOS(IS_CUSTOM_ELEMENT(properties_element) ? 1 : 0);
checkbutton_info[ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID].y =
ED_ELEMENT_SETTINGS_YPOS(IS_CUSTOM_ELEMENT(properties_element) ? 6 :
- HAS_CONTENT(properties_element) ? 1 : 0);
+ HAS_EDITOR_CONTENT(properties_element) ? 1 : 0);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID);
}
if (properties_element == EL_TIME_ORB_FULL)
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_TIME_ORB_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 =
- ED_ELEMENT_SETTINGS_YPOS(HAS_CONTENT(properties_element) ? 1 : 0);
+ ED_ELEMENT_SETTINGS_YPOS(HAS_EDITOR_CONTENT(properties_element) ? 1 : 0);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE);
}
int counter2_id = ED_COUNTER_ID_ENVELOPE_YSIZE;
int envelope_nr = properties_element - EL_ENVELOPE_1;
- counterbutton_info[counter1_id].value = &level.envelope_xsize[envelope_nr];
- counterbutton_info[counter2_id].value = &level.envelope_ysize[envelope_nr];
+ counterbutton_info[counter1_id].value = &level.envelope[envelope_nr].xsize;
+ counterbutton_info[counter2_id].value = &level.envelope[envelope_nr].ysize;
/* display counter to choose size of envelope text area */
MapCounterButtons(ED_COUNTER_ID_ENVELOPE_XSIZE);
"Element Settings", FONT_TITLE_1);
#endif
-#if 1
FrameCounter = 0; /* restart animation frame counter */
-#endif
DrawElementBorder(SX + xstart * MINI_TILEX,
SY + ystart * MINI_TILEY + MINI_TILEY / 2,
TILEX, TILEY, FALSE);
-#if 1
+
DrawEditorElementAnimation(SX + xstart * MINI_TILEX,
SY + ystart * MINI_TILEY + MINI_TILEY / 2);
-#else
- DrawGraphicAnimationExt(drawto,
- SX + xstart * MINI_TILEX,
- SY + ystart * MINI_TILEY + MINI_TILEY / 2,
- el2img(properties_element), -1, NO_MASKING);
-#endif
-
-#if 0
- FrameCounter = 0; /* restart animation frame counter */
-#endif
DrawEditorElementName((xstart + 3) * MINI_TILEX + 1,
(ystart + 1) * MINI_TILEY + 1,
DrawAreaBorder(sx, sy, sx, sy);
}
+static void CheckLevelBorderElement(boolean redraw_playfield)
+{
+ int last_border_element = BorderElement;
+
+ SetBorderElement();
+
+ if (redraw_playfield && BorderElement != last_border_element)
+ DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+}
+
static void CopyLevelToUndoBuffer(int mode)
{
static boolean accumulated_undo = FALSE;
boolean new_undo_buffer_position = TRUE;
- int last_border_element;
int x, y;
switch (mode)
UndoBuffer[undo_buffer_position][x][y] = Feld[x][y];
/* check if drawing operation forces change of border style */
- last_border_element = BorderElement;
- SetBorderElement();
- if (BorderElement != last_border_element)
- DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+ CheckLevelBorderElement(TRUE);
level.changed = TRUE;
}
if (!started_inside_drawing_area)
return;
-#if 1
if (!IS_VALID_BUTTON(button))
return;
-#endif
if (!button && !button_release_event)
return;
DrawMagicBallContentAreas();
break;
+ case ED_COUNTER_ID_ANDROID_CONTENT:
+ DrawAndroidElementArea(properties_element);
+ break;
+
case ED_COUNTER_ID_GROUP_CONTENT:
DrawGroupElementArea(properties_element);
CopyGroupElementPropertiesToGame(properties_element);
{
/* when changing action type, also check action mode and action arg */
if (value_old != value_new)
- {
-#if 1
setSelectboxSpecialActionVariablesIfNeeded();
-#else
- custom_element_change.action_mode = -1;
- custom_element_change.action_arg = -1;
-#endif
- }
DrawPropertiesChange();
}
int new_element = BUTTON_ELEMENT(button);
int x, y;
-#if 0
- /* MAKES PROBLEMS WITH ELEMENT LIST SCROLLBAR AND IS PROBABLY NOT NEEDED */
- /* !!! CHECK WHAT HAPPENS WHEN MOUSE WHEEL IS USED OVER ELEMENT LIST !!! */
-
- if (!IS_VALID_BUTTON(button))
- return;
-#endif
-
if (edit_mode == ED_MODE_DRAWING && drawing_function == GADGET_ID_TEXT)
DrawLevelText(0, 0, 0, TEXT_END);
for (x = 0; x < lev_fieldx; x++)
for (y = 0; y < lev_fieldy; y++)
Feld[x][y] = UndoBuffer[undo_buffer_position][x][y];
- DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos,level_ypos);
+
+ /* check if undo operation forces change of border style */
+ CheckLevelBorderElement(FALSE);
+
+ DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
+
break;
case GADGET_ID_INFO:
}
else if (button_status == MB_RELEASED)
{
- int i, id = GADGET_ID_NONE;
+ int id = GADGET_ID_NONE;
+ int new_element_shift = element_shift;
+ int i;
switch (key)
{
button = MB_RIGHTBUTTON;
break;
+ case KSYM_Home:
+ case KSYM_End:
+ element_shift = (key == KSYM_Home ? 0 :
+ num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS);
+
+ ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL],
+ GDI_SCROLLBAR_ITEM_POSITION,
+ element_shift / ED_ELEMENTLIST_BUTTONS_HORIZ, GDI_END);
+
+ ModifyEditorElementList();
+
+ break;
+
+ case KSYM_Insert:
+ case KSYM_Delete:
+
+ /* this is needed to prevent interference with running "True X-Mouse" */
+ if (GetKeyModStateFromEvents() & KMOD_Control)
+ break;
+
+ /* check for last or next editor cascade block in element list */
+ for (i = 0; i < num_editor_elements; i++)
+ {
+ if ((key == KSYM_Insert && i == element_shift) ||
+ (key == KSYM_Delete && new_element_shift > element_shift))
+ break;
+
+ /* jump to next cascade block (or to start of element list) */
+ if (i == 0 || IS_EDITOR_CASCADE(editor_elements[i]))
+ new_element_shift = i;
+ }
+
+ if (i < num_editor_elements)
+ element_shift = new_element_shift;
+
+ if (element_shift > num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS)
+ element_shift = num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS;
+
+ ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL],
+ GDI_SCROLLBAR_ITEM_POSITION,
+ element_shift / ED_ELEMENTLIST_BUTTONS_HORIZ, GDI_END);
+
+ ModifyEditorElementList();
+
+ break;
+
case KSYM_Escape:
if (edit_mode == ED_MODE_DRAWING)
{
- RequestExitLevelEditor(setup.ask_on_escape);
+ RequestExitLevelEditor(setup.ask_on_escape_editor);
}
else if (edit_mode == ED_MODE_INFO)
{
DrawDrawingWindow();
edit_mode = ED_MODE_DRAWING;
}
+
break;
default:
if (!DelayReached(&action_delay, action_delay_value))
return;
-#if 1
DrawEditorElementAnimation(SX + xpos * TILEX,
SY + ypos * TILEY + MINI_TILEY / 2);
-#else
- DrawGraphicAnimationExt(drawto,
- SX + xpos * TILEX,
- SY + ypos * TILEY + MINI_TILEY / 2,
- el2img(properties_element), -1, NO_MASKING);
-#endif
MarkTileDirty(xpos, ypos);
MarkTileDirty(xpos, ypos + 1);
void HandleEditorGadgetInfoText(void *ptr)
{
struct GadgetInfo *gi = (struct GadgetInfo *)ptr;
-#if 0
- char infotext[MAX_OUTPUT_LINESIZE + 1];
- char shortcut[MAX_OUTPUT_LINESIZE + 1];
- int max_infotext_len = getMaxInfoTextLength();
-#endif
if (game_status != GAME_MODE_EDITOR)
return;
if (edit_mode == ED_MODE_DRAWING && draw_with_brush)
DeleteBrushFromCursor();
-#if 1
PrintEditorGadgetInfoText(gi);
-#else
- if (gi == NULL || gi->info_text == NULL)
- return;
-
- strncpy(infotext, gi->info_text, max_infotext_len);
- infotext[max_infotext_len] = '\0';
-
- if (gi->custom_id < ED_NUM_CTRL_BUTTONS)
- {
- int key = control_info[gi->custom_id].shortcut;
-
- if (key)
- {
- if (gi->custom_id == GADGET_ID_SINGLE_ITEMS) /* special case 1 */
- sprintf(shortcut, " ('.' or '%c')", key);
- else if (gi->custom_id == GADGET_ID_PICK_ELEMENT) /* special case 2 */
- sprintf(shortcut, " ('%c' or 'Ctrl')", key);
- else if (gi->custom_id == GADGET_ID_TEST) /* special case 3 */
- sprintf(shortcut, " ('Enter' or 'Shift-%c')", key);
- else /* normal case */
- sprintf(shortcut, " ('%s%c')",
- (key >= 'A' && key <= 'Z' ? "Shift-" : ""), key);
-
- if (strlen(infotext) + strlen(shortcut) <= max_infotext_len)
- strcat(infotext, shortcut);
- }
- }
-
- DrawText(INFOTEXT_XPOS, INFOTEXT_YPOS, infotext, FONT_TEXT_2);
-#endif
}
static void HandleDrawingAreaInfo(struct GadgetInfo *gi)
id <= GADGET_ID_MAGIC_BALL_CONTENT_7)
sprintf(infotext, "content area %d position: %d, %d",
id - GADGET_ID_MAGIC_BALL_CONTENT_0 + 1, sx, sy);
+ else if (id == GADGET_ID_ANDROID_CONTENT)
+ sprintf(infotext, "android element position: %d", sx + 1);
else if (drawingarea_info[type_id].infotext != NULL)
strcpy(infotext, drawingarea_info[type_id].infotext);
}
Request("Level has changed ! Exit without saving ?",
REQ_ASK | REQ_STAY_OPEN))
{
-#if 1
CloseDoor(DOOR_CLOSE_1);
SetDoorState(DOOR_CLOSE_2);
-#else
- CloseDoor(DOOR_CLOSE_ALL);
-#endif
game_status = GAME_MODE_MAIN;
DrawMainMenu();
}