X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=98b8375c478d79cce2130c2ea7a5fc7a69934f87;hb=f5665efaa42ea2570819237740046ff1360c4ef6;hp=97904719c9a2df1d74229853f6a667a834835a0e;hpb=adb5af2f532f105ee670e4805b47252eb5bcfdf1;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 97904719..98b8375c 100644 --- a/src/editor.c +++ b/src/editor.c @@ -499,37 +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_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_CUSTOM_EXPLODE_RESULT (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 31) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 32) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 33) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 34) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 35) +#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 + 36) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 37) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -699,36 +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_PASS_TO_WALKABLE 9 -#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 10 -#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 11 -#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 12 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 13 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 14 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 15 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 16 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 17 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 18 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 19 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 20 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 21 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT 22 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 23 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 24 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 25 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 26 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 27 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 28 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 29 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 30 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 31 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 32 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 33 - -#define ED_NUM_CHECKBUTTONS 34 +#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 @@ -1961,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, @@ -2219,7 +2228,7 @@ static struct /* ---------- amoeba content --------------------------------------------- */ { - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(3), 1, 1, GADGET_ID_AMOEBA_CONTENT, GADGET_ID_NONE, "content:", NULL, NULL @@ -5319,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; @@ -6945,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; @@ -6976,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; @@ -7017,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); @@ -7031,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;