X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Feditor.c;h=98b8375c478d79cce2130c2ea7a5fc7a69934f87;hb=68a9e44b8005d2f3d63d8fae23ad998ee995789d;hp=7852895b4d85797be41f155461ec36116a7c21ae;hpb=ed22fcb49eb39c34da82c51f44cbe64ca5b409c4;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 7852895b..98b8375c 100644 --- a/src/editor.c +++ b/src/editor.c @@ -84,9 +84,9 @@ #define ED_NUM_CTRL4_BUTTONS (ED_CTRL4_BUTTONS_HORIZ * ED_CTRL4_BUTTONS_VERT) #define ED_NUM_CTRL1_2_BUTTONS (ED_NUM_CTRL1_BUTTONS + ED_NUM_CTRL2_BUTTONS) #define ED_NUM_CTRL1_3_BUTTONS (ED_NUM_CTRL1_2_BUTTONS + ED_NUM_CTRL3_BUTTONS) -#define ED_NUM_CTRL_BUTTONS (ED_NUM_CTRL1_BUTTONS + \ - ED_NUM_CTRL2_BUTTONS + \ - ED_NUM_CTRL3_BUTTONS + \ +#define ED_NUM_CTRL_BUTTONS (ED_NUM_CTRL1_BUTTONS + \ + ED_NUM_CTRL2_BUTTONS + \ + ED_NUM_CTRL3_BUTTONS + \ ED_NUM_CTRL4_BUTTONS) /* values for the element list */ @@ -96,7 +96,7 @@ #define ED_ELEMENTLIST_YSIZE 20 #define ED_ELEMENTLIST_BUTTONS_HORIZ 4 #define ED_ELEMENTLIST_BUTTONS_VERT 11 -#define ED_NUM_ELEMENTLIST_BUTTONS (ED_ELEMENTLIST_BUTTONS_HORIZ * \ +#define ED_NUM_ELEMENTLIST_BUTTONS (ED_ELEMENTLIST_BUTTONS_HORIZ * \ ED_ELEMENTLIST_BUTTONS_VERT) /* standard distances */ @@ -106,22 +106,22 @@ #define ED_GADGET_DISTANCE 2 #define ED_GADGET_TEXT_DISTANCE (2 * ED_GADGET_DISTANCE) -#define ED_DRAWINGAREA_TEXT_DISTANCE (ED_GADGET_TEXT_DISTANCE + \ +#define ED_DRAWINGAREA_TEXT_DISTANCE (ED_GADGET_TEXT_DISTANCE + \ MINI_TILEX / 2) -/* values for the setting windows */ +/* values for the settings windows */ #define ED_SETTINGS_XSTART (3 * MINI_TILEX / 2) #define ED_SETTINGS_YSTART (MINI_TILEY * 10) -#define ED_XOFFSET_CHECKBOX (ED_CHECKBUTTON_XSIZE + \ +#define ED_XOFFSET_CHECKBOX (ED_CHECKBUTTON_XSIZE + \ 2 * ED_GADGET_DISTANCE) #define ED_SETTINGS_XOFFSET ED_XOFFSET_CHECKBOX #define ED_SETTINGS_YOFFSET (3 * MINI_TILEY / 2) -#define ED_SETTINGS_XPOS(n) (ED_SETTINGS_XSTART + \ +#define ED_SETTINGS_XPOS(n) (ED_SETTINGS_XSTART + \ (n) * ED_SETTINGS_XOFFSET) -#define ED_SETTINGS_YPOS(n) (ED_SETTINGS_YSTART + \ +#define ED_SETTINGS_YPOS(n) (ED_SETTINGS_YSTART + \ (n) * ED_SETTINGS_YOFFSET) #define ED_SETTINGS1_YPOS MINI_TILEY @@ -131,59 +131,26 @@ /* values for counter gadgets */ #define ED_COUNTER_YSTART (ED_SETTINGS1_YPOS + 2 * TILEY) #define ED_COUNTER_YDISTANCE (3 * MINI_TILEY) -#define ED_COUNTER_YPOS(n) (ED_COUNTER_YSTART + \ +#define ED_COUNTER_YPOS(n) (ED_COUNTER_YSTART + \ (n) * ED_COUNTER_YDISTANCE) -#define ED_COUNTER2_YPOS(n) (ED_COUNTER_YSTART + \ +#define ED_COUNTER2_YPOS(n) (ED_COUNTER_YSTART + \ (n) * ED_COUNTER_YDISTANCE - 2) /* values for element content drawing areas */ -/* amoeba content */ -#define ED_AREA_AMOEBA_CONTENT_XPOS ED_SETTINGS_XPOS(0) -#define ED_AREA_AMOEBA_CONTENT_YPOS (ED_SETTINGS_YPOS(2) + \ +#define ED_AREA_1X1_SETTINGS_XPOS(n) (ED_SETTINGS_XPOS(n)) +#define ED_AREA_1X1_SETTINGS_YPOS(n) (ED_SETTINGS_YPOS(n) + \ ED_GADGET_DISTANCE) +#define ED_AREA_3X3_SETTINGS_XPOS(n) (ED_SETTINGS_XPOS(n)) +#define ED_AREA_3X3_SETTINGS_YPOS(n) (ED_SETTINGS_YPOS(n) + \ + ED_GADGET_DISTANCE - MINI_TILEY) + /* yamyam content */ -#define ED_AREA_YAMYAM_CONTENT_XPOS(n) (2 * MINI_TILEX + \ +#define ED_AREA_YAMYAM_CONTENT_XPOS(n) (2 * MINI_TILEX + \ 5 * ((n) % 4) * MINI_TILEX) -#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (17 * MINI_TILEY + \ +#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (17 * MINI_TILEY + \ 6 * ((n) / 4) * MINI_TILEY) -/* custom change target */ -#define ED_AREA_ELEM_CONTENT2_YPOS (ED_SETTINGS_YPOS(1) + \ - ED_GADGET_DISTANCE) -/* optional custom graphic */ -#define ED_AREA_ELEM_CONTENT3_YPOS (ED_SETTINGS_YPOS(1) + \ - ED_GADGET_DISTANCE) -/* custom element content */ -#define ED_AREA_ELEM_CONTENT4_XPOS (29 * MINI_TILEX) -#define ED_AREA_ELEM_CONTENT4_YPOS (ED_SETTINGS_YPOS(2) + \ - ED_GADGET_DISTANCE - MINI_TILEY) -/* movement enter/leave element */ -#define ED_AREA_ELEM_CONTENT4a_XPOS (29 * MINI_TILEX) -#define ED_AREA_ELEM_CONTENT4a_YPOS (ED_SETTINGS_YPOS(11) + \ - ED_GADGET_DISTANCE) -#define ED_AREA_ELEM_CONTENT4b_XPOS (29 * MINI_TILEX) -#define ED_AREA_ELEM_CONTENT4b_YPOS (ED_SETTINGS_YPOS(11) + \ - ED_GADGET_DISTANCE) -/* custom change trigger element */ -#define ED_AREA_ELEM_CONTENT5_YPOS (ED_SETTINGS_YPOS(5) + \ - ED_GADGET_DISTANCE) -/* extended custom change target */ -#define ED_AREA_ELEM_CONTENT6_XPOS (29 * MINI_TILEX) -#define ED_AREA_ELEM_CONTENT6_YPOS (ED_SETTINGS_YPOS(10) + \ - ED_GADGET_DISTANCE - MINI_TILEY) -/* group element content */ -#define ED_AREA_GROUP_CONTENT_XPOS ED_SETTINGS_XPOS(0) -#if 1 -#define ED_AREA_GROUP_CONTENT_YPOS (ED_SETTINGS_YPOS(4) + \ - ED_GADGET_DISTANCE) -#else -#define ED_AREA_GROUP_CONTENT_YPOS (22 * MINI_TILEY) -#endif - -/* values for random placement background drawing area */ -#define ED_AREA_RANDOM_BACKGROUND_YPOS (31 * MINI_TILEY) - /* values for scrolling gadgets for drawing area */ #define ED_SCROLLBUTTON_XPOS 24 #define ED_SCROLLBUTTON_YPOS 0 @@ -201,12 +168,14 @@ #define ED_SCROLL_LEFT_YPOS (SYSIZE - 2 * ED_SCROLLBUTTON_YSIZE) #define ED_SCROLL_RIGHT_XPOS (SXSIZE - 2 * ED_SCROLLBUTTON_XSIZE) #define ED_SCROLL_RIGHT_YPOS ED_SCROLL_LEFT_YPOS -#define ED_SCROLL_HORIZONTAL_XPOS (ED_SCROLL_LEFT_XPOS + ED_SCROLLBUTTON_XSIZE) +#define ED_SCROLL_HORIZONTAL_XPOS (ED_SCROLL_LEFT_XPOS + \ + ED_SCROLLBUTTON_XSIZE) #define ED_SCROLL_HORIZONTAL_YPOS ED_SCROLL_LEFT_YPOS #define ED_SCROLL_HORIZONTAL_XSIZE (SXSIZE - 3 * ED_SCROLLBUTTON_XSIZE) #define ED_SCROLL_HORIZONTAL_YSIZE ED_SCROLLBUTTON_YSIZE #define ED_SCROLL_VERTICAL_XPOS ED_SCROLL_UP_XPOS -#define ED_SCROLL_VERTICAL_YPOS (ED_SCROLL_UP_YPOS + ED_SCROLLBUTTON_YSIZE) +#define ED_SCROLL_VERTICAL_YPOS (ED_SCROLL_UP_YPOS + \ + ED_SCROLLBUTTON_YSIZE) #define ED_SCROLL_VERTICAL_XSIZE ED_SCROLLBUTTON_XSIZE #define ED_SCROLL_VERTICAL_YSIZE (SYSIZE - 4 * ED_SCROLLBUTTON_YSIZE) @@ -222,16 +191,16 @@ #define ED_SCROLL2_UP_XPOS 85 #define ED_SCROLL2_UP_YPOS 30 #define ED_SCROLL2_DOWN_XPOS ED_SCROLL2_UP_XPOS -#define ED_SCROLL2_DOWN_YPOS (ED_SCROLL2_UP_YPOS + \ - ED_ELEMENTLIST_BUTTONS_VERT * \ - ED_ELEMENTLIST_YSIZE - \ +#define ED_SCROLL2_DOWN_YPOS (ED_SCROLL2_UP_YPOS + \ + ED_ELEMENTLIST_BUTTONS_VERT * \ + ED_ELEMENTLIST_YSIZE - \ ED_SCROLLBUTTON2_YSIZE) #define ED_SCROLL2_VERTICAL_XPOS ED_SCROLL2_UP_XPOS -#define ED_SCROLL2_VERTICAL_YPOS (ED_SCROLL2_UP_YPOS + \ +#define ED_SCROLL2_VERTICAL_YPOS (ED_SCROLL2_UP_YPOS + \ ED_SCROLLBUTTON2_YSIZE) #define ED_SCROLL2_VERTICAL_XSIZE ED_SCROLLBUTTON2_XSIZE -#define ED_SCROLL2_VERTICAL_YSIZE (ED_ELEMENTLIST_BUTTONS_VERT * \ - ED_ELEMENTLIST_YSIZE - \ +#define ED_SCROLL2_VERTICAL_YSIZE (ED_ELEMENTLIST_BUTTONS_VERT * \ + ED_ELEMENTLIST_YSIZE - \ 2 * ED_SCROLLBUTTON2_YSIZE) /* values for checkbutton gadgets */ @@ -266,14 +235,14 @@ #define ED_BUTTON_MINUS_YPOS ED_BUTTON_COUNT_YPOS #define ED_BUTTON_MINUS_XSIZE ED_BUTTON_COUNT_XSIZE #define ED_BUTTON_MINUS_YSIZE ED_BUTTON_COUNT_YSIZE -#define ED_BUTTON_PLUS_XPOS (ED_WIN_COUNT_XPOS + \ +#define ED_BUTTON_PLUS_XPOS (ED_WIN_COUNT_XPOS + \ ED_WIN_COUNT_XSIZE + 2) #define ED_BUTTON_PLUS_YPOS ED_BUTTON_COUNT_YPOS #define ED_BUTTON_PLUS_XSIZE ED_BUTTON_COUNT_XSIZE #define ED_BUTTON_PLUS_YSIZE ED_BUTTON_COUNT_YSIZE #define ED_SELECTBOX_XPOS ED_WIN_COUNT_XPOS -#define ED_SELECTBOX_YPOS (ED_WIN_COUNT_YPOS + \ +#define ED_SELECTBOX_YPOS (ED_WIN_COUNT_YPOS + \ 2 + ED_WIN_COUNT_YSIZE) #define ED_SELECTBOX_XSIZE ED_WIN_COUNT_XSIZE #define ED_SELECTBOX_YSIZE ED_WIN_COUNT_YSIZE @@ -281,14 +250,14 @@ #define ED_SELECTBOX_BUTTON_XSIZE 14 #define ED_TEXTBUTTON_XPOS ED_WIN_COUNT_XPOS -#define ED_TEXTBUTTON_YPOS (ED_WIN_COUNT_YPOS + \ +#define ED_TEXTBUTTON_YPOS (ED_WIN_COUNT_YPOS + \ 4 * (2 + ED_WIN_COUNT_YSIZE)) #define ED_TEXTBUTTON_INACTIVE_YPOS ED_TEXTBUTTON_YPOS #define ED_TEXTBUTTON_TAB_XPOS ED_WIN_COUNT_XPOS -#define ED_TEXTBUTTON_TAB_YPOS (ED_WIN_COUNT_YPOS + \ +#define ED_TEXTBUTTON_TAB_YPOS (ED_WIN_COUNT_YPOS + \ 2 * (2 + ED_WIN_COUNT_YSIZE)) -#define ED_TEXTBUTTON_TAB_INACTIVE_YPOS (ED_WIN_COUNT_YPOS + \ +#define ED_TEXTBUTTON_TAB_INACTIVE_YPOS (ED_WIN_COUNT_YPOS + \ 3 * (2 + ED_WIN_COUNT_YSIZE)) #define ED_TEXTBUTTON_XSIZE ED_WIN_COUNT_XSIZE @@ -530,36 +499,38 @@ #define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 5) #define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 6) #define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 7) -#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 8) -#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 9) -#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 10) -#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_CUSTOM_EXPLODE_RESULT (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 31) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 32) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 33) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 34) +#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 8) +#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 9) +#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 10) +#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 11) +#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 12) +#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 13) +#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 14) +#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 15) +#define GADGET_ID_CUSTOM_EXPLODE_RESULT (GADGET_ID_CHECKBUTTON_FIRST + 16) +#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 17) +#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 18) +#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 19) +#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 20) +#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 21) +#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 22) +#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 23) +#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 24) +#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 25) +#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 26) +#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 27) +#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 28) +#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 29) +#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 30) +#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 31) +#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 32) +#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 33) +#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 34) +#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 35) +#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 36) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 35) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 37) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -729,35 +700,37 @@ #define ED_CHECKBUTTON_ID_STICK_ELEMENT 3 #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 4 #define ED_CHECKBUTTON_ID_USE_SPRING_BUG 5 -#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 6 -#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 7 -#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 8 -#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 9 -#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 10 -#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 11 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 12 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 13 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 14 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 15 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 16 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 17 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 18 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 19 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 20 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT 21 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 22 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 23 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 24 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 25 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 26 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 27 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 28 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 29 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 30 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 31 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 32 - -#define ED_NUM_CHECKBUTTONS 33 +#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 6 +#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 7 +#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 8 +#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 9 +#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 10 +#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 11 +#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 12 +#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 13 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 14 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 15 +#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 16 +#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 17 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 18 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 19 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 20 +#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 21 +#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 22 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT 23 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 24 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 25 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 26 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 27 +#define ED_CHECKBUTTON_ID_CHANGE_DELAY 28 +#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 29 +#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 30 +#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 31 +#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 32 +#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 33 +#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 34 + +#define ED_NUM_CHECKBUTTONS 35 #define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED @@ -1990,6 +1963,13 @@ static struct NULL, "use spring pushing bug", "use odd spring pushing behaviour" }, + { + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), + GADGET_ID_GROW_INTO_DIGGABLE, GADGET_ID_NONE, + &level.grow_into_diggable, + NULL, + "can grow into anything diggable", "grow into more than just sand" + }, { ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(1), GADGET_ID_BLOCK_LAST_FIELD, GADGET_ID_NONE, @@ -2011,6 +1991,13 @@ static struct NULL, "no scrolling when relocating", "player gets relocated without delay" }, + { + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(3), + GADGET_ID_CAN_PASS_TO_WALKABLE, GADGET_ID_NONE, + &level.can_pass_to_walkable, + NULL, + "can pass to walkable element", "player can pass to empty or walkable" + }, { ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), GADGET_ID_CAN_FALL_INTO_ACID, GADGET_ID_NONE, @@ -2241,7 +2228,7 @@ static struct /* ---------- amoeba content --------------------------------------------- */ { - ED_AREA_AMOEBA_CONTENT_XPOS, ED_AREA_AMOEBA_CONTENT_YPOS, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(3), 1, 1, GADGET_ID_AMOEBA_CONTENT, GADGET_ID_NONE, "content:", NULL, NULL @@ -2250,7 +2237,7 @@ static struct /* ---------- custom graphic --------------------------------------------- */ { - -1, ED_AREA_ELEM_CONTENT3_YPOS, + -1, ED_AREA_1X1_SETTINGS_YPOS(1), 1, 1, GADGET_ID_CUSTOM_GRAPHIC, GADGET_ID_CUSTOM_USE_GRAPHIC, NULL, NULL, NULL @@ -2259,7 +2246,7 @@ static struct /* ---------- custom content (when exploding) ---------------------------- */ { - ED_AREA_ELEM_CONTENT4_XPOS, ED_AREA_ELEM_CONTENT4_YPOS, + -1, ED_AREA_3X3_SETTINGS_YPOS(2), 3, 3, GADGET_ID_CUSTOM_CONTENT, GADGET_ID_NONE, /* align three rows */ "content:", NULL, NULL @@ -2268,13 +2255,13 @@ static struct /* ---------- custom enter and leave element (when moving) --------------- */ { - ED_SETTINGS_XPOS(1), ED_AREA_ELEM_CONTENT4a_YPOS, + ED_AREA_1X1_SETTINGS_XPOS(1), ED_AREA_1X1_SETTINGS_YPOS(11), 1, 1, GADGET_ID_CUSTOM_MOVE_ENTER, GADGET_ID_NONE, "can dig:", " ", NULL }, { - -1, ED_AREA_ELEM_CONTENT4b_YPOS, + -1, ED_AREA_1X1_SETTINGS_YPOS(11), 1, 1, GADGET_ID_CUSTOM_MOVE_LEAVE, GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE, NULL, NULL, NULL @@ -2283,7 +2270,7 @@ static struct /* ---------- custom change target --------------------------------------- */ { - -1, ED_AREA_ELEM_CONTENT2_YPOS, + -1, ED_AREA_1X1_SETTINGS_YPOS(1), 1, 1, GADGET_ID_CUSTOM_CHANGE_TARGET, GADGET_ID_CUSTOM_CAN_CHANGE, NULL, "after/when:", NULL @@ -2292,7 +2279,7 @@ static struct /* ---------- custom change content (extended change target) ------------- */ { - ED_AREA_ELEM_CONTENT6_XPOS, ED_AREA_ELEM_CONTENT6_YPOS, + -1, ED_AREA_3X3_SETTINGS_YPOS(10), 3, 3, GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, /* align three rows */ NULL, NULL, NULL @@ -2301,7 +2288,7 @@ static struct /* ---------- custom change trigger (element causing change) ------------- */ { - -1, ED_AREA_ELEM_CONTENT5_YPOS, + -1, ED_AREA_1X1_SETTINGS_YPOS(5), 1, 1, GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION, NULL, NULL, NULL @@ -2310,7 +2297,7 @@ static struct /* ---------- group element content -------------------------------------- */ { - ED_AREA_GROUP_CONTENT_XPOS, ED_AREA_GROUP_CONTENT_YPOS, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(4), MAX_ELEMENTS_IN_GROUP, 1, GADGET_ID_GROUP_CONTENT, GADGET_ID_NONE, "content:", NULL, NULL @@ -2319,7 +2306,7 @@ static struct /* ---------- random background (for random painting) -------------------- */ { - -1, ED_AREA_RANDOM_BACKGROUND_YPOS, + -1, ED_SETTINGS_YPOS(14), 1, 1, GADGET_ID_RANDOM_BACKGROUND, GADGET_ID_RANDOM_RESTRICTED, NULL, NULL, NULL @@ -5341,9 +5328,8 @@ static void MapCheckbuttonGadget(int id) int x_right = gi->x + gi->width + xoffset_right; int y; /* set after gadget position was modified */ - /* set position for "stickybutton" and "can move into acid" gadgets */ - if (id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID) - ModifyGadget(gi, GDI_Y, SY + checkbutton_info[id].y, GDI_END); + /* set position for gadgets with dynamically determined vertical position */ + ModifyGadget(gi, GDI_Y, SY + checkbutton_info[id].y, GDI_END); y = gi->y + yoffset; @@ -6967,6 +6953,7 @@ static boolean checkPropertiesConfig(int element) IS_ENVELOPE(element) || ELEM_IS_PLAYER(element) || HAS_CONTENT(element) || + CAN_GROW(element) || COULD_MOVE_INTO_ACID(element) || MAYBE_DONT_COLLIDE_WITH(element)) return TRUE; @@ -6998,8 +6985,9 @@ static void DrawPropertiesConfig() counterbutton_info[counter_id].y = ED_SETTINGS_YPOS((HAS_CONTENT(properties_element) ? 1 : 0) + - (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0)+ - (COULD_MOVE_INTO_ACID(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)); counterbutton_info[counter_id].value = elements_with_counter[i].value; counterbutton_info[counter_id].text_right= elements_with_counter[i].text; @@ -7028,6 +7016,7 @@ static void DrawPropertiesConfig() ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD : ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INSTANT_RELOCATION); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE); } if (IS_GEM(properties_element)) @@ -7038,7 +7027,7 @@ static void DrawPropertiesConfig() (!IS_CUSTOM_ELEMENT(properties_element) || edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2)) { - /* set position for special checkbutton for "can move into acid" */ + /* set position for checkbutton for "can move into acid" */ checkbutton_info[ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID].y = ED_SETTINGS_YPOS(IS_CUSTOM_ELEMENT(properties_element) ? 6 : HAS_CONTENT(properties_element) ? 1 : 0); @@ -7052,6 +7041,14 @@ static void DrawPropertiesConfig() if (properties_element == EL_SPRING) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_SPRING_BUG); + if (CAN_GROW(properties_element)) + { + checkbutton_info[ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE].y = + ED_SETTINGS_YPOS(HAS_CONTENT(properties_element) ? 1 : 0); + + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE); + } + if (IS_ENVELOPE(properties_element)) { int counter1_id = ED_COUNTER_ID_ENVELOPE_XSIZE;