X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=633a5586256d065d67ddffdf4e666e20eda4c762;hb=29fc833ae1b5e46a429a9fa82098e8ad94f6f400;hp=15a3b692ddc8b9464bdf84bf3417a1f9ec8b0385;hpb=5f926b2dd808d7336f7ec63499fb0776e8513e97;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 15a3b692..633a5586 100644 --- a/src/editor.c +++ b/src/editor.c @@ -292,11 +292,14 @@ #define GADGET_ID_EM_SLIPPERY_GEMS 77 #define GADGET_ID_CUSTOM_INDESTRUCTIBLE 78 #define GADGET_ID_CUSTOM_CAN_FALL 79 -#define GADGET_ID_CUSTOM_SLIPPERY 80 +#define GADGET_ID_CUSTOM_CAN_SMASH 80 +#define GADGET_ID_CUSTOM_PUSHABLE 81 +#define GADGET_ID_CUSTOM_SLIPPERY 82 /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST 81 -#define GADGET_ID_ELEMENTLIST_LAST (81 + ED_NUM_ELEMENTLIST_BUTTONS - 1) +#define GADGET_ID_ELEMENTLIST_FIRST 83 +#define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ + ED_NUM_ELEMENTLIST_BUTTONS - 1) #define NUM_EDITOR_GADGETS (GADGET_ID_ELEMENTLIST_LAST + 1) @@ -361,13 +364,18 @@ #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 4 #define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 5 #define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 6 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 7 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 7 +#define ED_CHECKBUTTON_ID_CUSTOM_PUSHABLE 8 +#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 9 -#define ED_NUM_CHECKBUTTONS 8 +#define ED_NUM_CHECKBUTTONS 10 #define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED +#define ED_CHECKBUTTON_ID_CUSTOM_FIRST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE +#define ED_CHECKBUTTON_ID_CUSTOM_LAST ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY + /* values for radiobutton gadgets */ #define ED_RADIOBUTTON_ID_PERCENTAGE 0 #define ED_RADIOBUTTON_ID_QUANTITY 1 @@ -432,6 +440,8 @@ static struct { boolean indestructible; boolean can_fall; + boolean can_smash; + boolean pushable; boolean slippery; } custom_element_properties[NUM_CUSTOM_ELEMENTS]; @@ -704,6 +714,18 @@ static struct }, { ED_SETTINGS_XPOS, ED_COUNTER_YPOS(6), + GADGET_ID_CUSTOM_CAN_SMASH, + &custom_element_properties[0].can_smash, + "can smash", "element can smash other elements" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(7), + GADGET_ID_CUSTOM_PUSHABLE, + &custom_element_properties[0].pushable, + "pushable", "element can be pushed" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(8), GADGET_ID_CUSTOM_SLIPPERY, &custom_element_properties[0].slippery, "slippery", "other elements can fall down from it" @@ -2449,6 +2471,79 @@ static boolean LevelContainsPlayer() return player_found; } +static void CopyPlayfield(short src[MAX_LEV_FIELDX][MAX_LEV_FIELDY], + short dst[MAX_LEV_FIELDX][MAX_LEV_FIELDY]) +{ + int x, y; + + for(x=0; xcustom_type_id].value ^= TRUE; + int type_id = gi->custom_type_id; + + *checkbutton_info[type_id].value ^= TRUE; + + if (type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST && + type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST) + CopyCustomElementPropertiesToGame(); } static void HandleControlButtons(struct GadgetInfo *gi) @@ -4255,9 +4375,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) { if (Request("Save this level and kill the old ?", REQ_ASK)) { - for(x=0; x