X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Feditor.c;h=fba668d1ccc2eded15fc8841fe96f0f184f92af9;hp=df592b1f528f39ff055a4add1f0623c4c4503711;hb=310781167f731177d6d46b15093dc32606eeac4e;hpb=e23e181a31fd4ff25df5b7a7407990ddc7cf042b diff --git a/src/editor.c b/src/editor.c index df592b1f..fba668d1 100644 --- a/src/editor.c +++ b/src/editor.c @@ -640,72 +640,74 @@ #define GADGET_ID_CHECKBUTTON_FIRST (GADGET_ID_SCROLLING_LIST_FIRST + 3) #define GADGET_ID_AUTO_COUNT_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 0) -#define GADGET_ID_RANDOM_PERCENTAGE (GADGET_ID_CHECKBUTTON_FIRST + 1) -#define GADGET_ID_RANDOM_QUANTITY (GADGET_ID_CHECKBUTTON_FIRST + 2) -#define GADGET_ID_RANDOM_RESTRICTED (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_EM_EXPLODES_BY_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 6) -#define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 7) -#define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 8) -#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 9) -#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 10) -#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_AUTO_EXIT_SOKOBAN (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_CONTINUOUS_SNAPPING (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_SHIFTED_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_LAZY_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_USE_INITIAL_INVENTORY (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_ENVELOPE_AUTOWRAP (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_ENVELOPE_CENTERED (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_MM_LASER_RED (GADGET_ID_CHECKBUTTON_FIRST + 31) -#define GADGET_ID_MM_LASER_GREEN (GADGET_ID_CHECKBUTTON_FIRST + 32) -#define GADGET_ID_MM_LASER_BLUE (GADGET_ID_CHECKBUTTON_FIRST + 33) -#define GADGET_ID_DF_LASER_RED (GADGET_ID_CHECKBUTTON_FIRST + 34) -#define GADGET_ID_DF_LASER_GREEN (GADGET_ID_CHECKBUTTON_FIRST + 35) -#define GADGET_ID_DF_LASER_BLUE (GADGET_ID_CHECKBUTTON_FIRST + 36) -#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 37) -#define GADGET_ID_CUSTOM_CAN_EXPLODE (GADGET_ID_CHECKBUTTON_FIRST + 38) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 39) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 40) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 41) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 42) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 43) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 44) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 45) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 46) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 47) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 48) -#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 49) -#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 50) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 51) -#define GADGET_ID_CUSTOM_USE_TEMPLATE_1 (GADGET_ID_CHECKBUTTON_FIRST + 52) -#define GADGET_ID_CUSTOM_USE_TEMPLATE_2 (GADGET_ID_CHECKBUTTON_FIRST + 53) -#define GADGET_ID_CUSTOM_USE_TEMPLATE_3 (GADGET_ID_CHECKBUTTON_FIRST + 54) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 55) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 56) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 57) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 58) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 59) -#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 60) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 61) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 62) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 63) +#define GADGET_ID_USE_LEVELSET_ARTWORK (GADGET_ID_CHECKBUTTON_FIRST + 1) +#define GADGET_ID_COPY_LEVEL_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 2) +#define GADGET_ID_RANDOM_PERCENTAGE (GADGET_ID_CHECKBUTTON_FIRST + 3) +#define GADGET_ID_RANDOM_QUANTITY (GADGET_ID_CHECKBUTTON_FIRST + 4) +#define GADGET_ID_RANDOM_RESTRICTED (GADGET_ID_CHECKBUTTON_FIRST + 5) +#define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 6) +#define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 7) +#define GADGET_ID_EM_EXPLODES_BY_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 8) +#define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 9) +#define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 10) +#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 11) +#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 12) +#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 13) +#define GADGET_ID_AUTO_EXIT_SOKOBAN (GADGET_ID_CHECKBUTTON_FIRST + 14) +#define GADGET_ID_CONTINUOUS_SNAPPING (GADGET_ID_CHECKBUTTON_FIRST + 15) +#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 16) +#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 17) +#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 18) +#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 19) +#define GADGET_ID_SHIFTED_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 20) +#define GADGET_ID_LAZY_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 21) +#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 22) +#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 23) +#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 24) +#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 25) +#define GADGET_ID_USE_INITIAL_INVENTORY (GADGET_ID_CHECKBUTTON_FIRST + 26) +#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 27) +#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 28) +#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 29) +#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 30) +#define GADGET_ID_ENVELOPE_AUTOWRAP (GADGET_ID_CHECKBUTTON_FIRST + 31) +#define GADGET_ID_ENVELOPE_CENTERED (GADGET_ID_CHECKBUTTON_FIRST + 32) +#define GADGET_ID_MM_LASER_RED (GADGET_ID_CHECKBUTTON_FIRST + 33) +#define GADGET_ID_MM_LASER_GREEN (GADGET_ID_CHECKBUTTON_FIRST + 34) +#define GADGET_ID_MM_LASER_BLUE (GADGET_ID_CHECKBUTTON_FIRST + 35) +#define GADGET_ID_DF_LASER_RED (GADGET_ID_CHECKBUTTON_FIRST + 36) +#define GADGET_ID_DF_LASER_GREEN (GADGET_ID_CHECKBUTTON_FIRST + 37) +#define GADGET_ID_DF_LASER_BLUE (GADGET_ID_CHECKBUTTON_FIRST + 38) +#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 39) +#define GADGET_ID_CUSTOM_CAN_EXPLODE (GADGET_ID_CHECKBUTTON_FIRST + 40) +#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 41) +#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 42) +#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 43) +#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 44) +#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 45) +#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 46) +#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 47) +#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 48) +#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 49) +#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 50) +#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 51) +#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 52) +#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 53) +#define GADGET_ID_CUSTOM_USE_TEMPLATE_1 (GADGET_ID_CHECKBUTTON_FIRST + 54) +#define GADGET_ID_CUSTOM_USE_TEMPLATE_2 (GADGET_ID_CHECKBUTTON_FIRST + 55) +#define GADGET_ID_CUSTOM_USE_TEMPLATE_3 (GADGET_ID_CHECKBUTTON_FIRST + 56) +#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 57) +#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 58) +#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 59) +#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 60) +#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 61) +#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 62) +#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 63) +#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 64) +#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 65) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 64) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 66) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -907,73 +909,78 @@ /* values for checkbutton gadgets */ #define ED_CHECKBUTTON_ID_AUTO_COUNT_GEMS 0 -#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 1 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_3 2 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2 3 -#define ED_CHECKBUTTON_ID_STICK_ELEMENT 4 -#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 5 -#define ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE 6 -#define ED_CHECKBUTTON_ID_USE_SPRING_BUG 7 -#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 8 -#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 9 -#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 10 -#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 11 -#define ED_CHECKBUTTON_ID_AUTO_EXIT_SOKOBAN 12 -#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING 13 -#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 14 -#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 15 -#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 16 -#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 17 -#define ED_CHECKBUTTON_ID_SHIFTED_RELOCATION 18 -#define ED_CHECKBUTTON_ID_LAZY_RELOCATION 19 -#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 20 -#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 21 -#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 22 -#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 23 -#define ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY 24 -#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 25 -#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 26 -#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 27 -#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 28 -#define ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP 29 -#define ED_CHECKBUTTON_ID_ENVELOPE_CENTERED 30 -#define ED_CHECKBUTTON_ID_MM_LASER_RED 31 -#define ED_CHECKBUTTON_ID_MM_LASER_GREEN 32 -#define ED_CHECKBUTTON_ID_MM_LASER_BLUE 33 -#define ED_CHECKBUTTON_ID_DF_LASER_RED 34 -#define ED_CHECKBUTTON_ID_DF_LASER_GREEN 35 -#define ED_CHECKBUTTON_ID_DF_LASER_BLUE 36 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 37 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_1 38 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 39 -#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 40 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 41 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 42 -#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 43 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 44 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 45 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 46 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 47 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 48 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 49 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 50 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 51 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 52 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 53 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 54 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 55 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 56 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 57 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 58 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 59 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 60 -#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 61 - -#define ED_NUM_CHECKBUTTONS 62 +#define ED_CHECKBUTTON_ID_USE_LEVELSET_ARTWORK 1 +#define ED_CHECKBUTTON_ID_COPY_LEVEL_TEMPLATE 2 +#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 3 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_3 4 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2 5 +#define ED_CHECKBUTTON_ID_STICK_ELEMENT 6 +#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 7 +#define ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE 8 +#define ED_CHECKBUTTON_ID_USE_SPRING_BUG 9 +#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 10 +#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 11 +#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 12 +#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 13 +#define ED_CHECKBUTTON_ID_AUTO_EXIT_SOKOBAN 14 +#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING 15 +#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 16 +#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 17 +#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 18 +#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 19 +#define ED_CHECKBUTTON_ID_SHIFTED_RELOCATION 20 +#define ED_CHECKBUTTON_ID_LAZY_RELOCATION 21 +#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 22 +#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 23 +#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 24 +#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 25 +#define ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY 26 +#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 27 +#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 28 +#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 29 +#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 30 +#define ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP 31 +#define ED_CHECKBUTTON_ID_ENVELOPE_CENTERED 32 +#define ED_CHECKBUTTON_ID_MM_LASER_RED 33 +#define ED_CHECKBUTTON_ID_MM_LASER_GREEN 34 +#define ED_CHECKBUTTON_ID_MM_LASER_BLUE 35 +#define ED_CHECKBUTTON_ID_DF_LASER_RED 36 +#define ED_CHECKBUTTON_ID_DF_LASER_GREEN 37 +#define ED_CHECKBUTTON_ID_DF_LASER_BLUE 38 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 39 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_1 40 +#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 41 +#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 42 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 43 +#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 44 +#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 45 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 46 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 47 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 48 +#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 49 +#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 50 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 51 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 52 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 53 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 54 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 55 +#define ED_CHECKBUTTON_ID_CHANGE_DELAY 56 +#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 57 +#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 58 +#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 59 +#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 60 +#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 61 +#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 62 +#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 63 + +#define ED_NUM_CHECKBUTTONS 64 #define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_AUTO_COUNT_GEMS #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_AUTO_COUNT_GEMS +#define ED_CHECKBUTTON_ID_LEVELSET_FIRST ED_CHECKBUTTON_ID_USE_LEVELSET_ARTWORK +#define ED_CHECKBUTTON_ID_LEVELSET_LAST ED_CHECKBUTTON_ID_COPY_LEVEL_TEMPLATE + #define ED_CHECKBUTTON_ID_EDITOR_FIRST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED #define ED_CHECKBUTTON_ID_EDITOR_LAST ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2 @@ -1302,6 +1309,8 @@ static struct ElementInfo custom_element; static char levelset_name[MAX_LEVEL_NAME_LEN + 1]; static char levelset_author[MAX_LEVEL_AUTHOR_LEN + 1]; static int levelset_num_levels = 100; +static boolean levelset_use_levelset_artwork = FALSE; +static boolean levelset_copy_level_template = FALSE; static int levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE; static struct @@ -2422,7 +2431,7 @@ static struct NULL, "game engine:", NULL, "game engine" }, { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(9), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), GADGET_ID_LEVELSET_SAVE_MODE, GADGET_ID_NONE, -1, options_levelset_save_mode, @@ -2732,7 +2741,7 @@ static struct /* ---------- level and editor settings (buttons) ------------------------ */ { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(9), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), GADGET_ID_SAVE_LEVELSET, GADGET_ID_LEVELSET_SAVE_MODE, -1, "Save", NULL, NULL, NULL, "Update or create level set" @@ -2929,6 +2938,20 @@ static struct NULL, NULL, "automatically count gems needed", "set counter to number of gems" }, + { + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), + GADGET_ID_USE_LEVELSET_ARTWORK, GADGET_ID_NONE, + &levelset_use_levelset_artwork, + NULL, NULL, + "use current custom artwork", "use custom artwork of this level set" + }, + { + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), + GADGET_ID_COPY_LEVEL_TEMPLATE, GADGET_ID_NONE, + &levelset_copy_level_template, + NULL, NULL, + "copy current level template", "copy level template of this level set" + }, { ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(1), GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_NONE, @@ -3692,6 +3715,7 @@ static int level_xpos = -1, level_ypos = -1; /* actual tile size used to display playfield drawing area */ static int ed_tilesize = DEFAULT_EDITOR_TILESIZE; +static int ed_tilesize_default = DEFAULT_EDITOR_TILESIZE; #define IN_ED_FIELD(x,y) IN_FIELD(x, y, ed_fieldx, ed_fieldy) @@ -3725,7 +3749,6 @@ static void AdjustElementListScrollbar(); static void RedrawDrawingElements(); static void DrawDrawingWindowExt(boolean); static void DrawDrawingWindow(); -static void DrawDrawingWindow_PlayfieldOnly(); static void DrawLevelInfoWindow(); static void DrawPropertiesWindow(); static void DrawPaletteWindow(); @@ -3850,12 +3873,12 @@ static int editor_el_emerald_mine[] = EL_NUT, EL_BOMB, - EL_WALL_EMERALD, - EL_WALL_DIAMOND, - EL_DYNAMITE, - EL_DYNAMITE_ACTIVE, + EL_EM_DYNAMITE, + EL_EM_DYNAMITE_ACTIVE, + EL_EM_EXIT_CLOSED, + EL_EM_EXIT_OPEN, - EL_YAMYAM, + EL_YAMYAM_UP, EL_BUG_UP, EL_SPACESHIP_UP, EL_ROBOT, @@ -3894,11 +3917,6 @@ static int editor_el_emerald_mine[] = EL_EM_GATE_2_GRAY, EL_EM_GATE_3_GRAY, EL_EM_GATE_4_GRAY, - - EL_EM_EXIT_CLOSED, - EL_EM_EXIT_OPEN, - EL_EM_STEEL_EXIT_CLOSED, - EL_EM_STEEL_EXIT_OPEN, }; static int *editor_hl_emerald_mine_ptr = editor_hl_emerald_mine; static int *editor_el_emerald_mine_ptr = editor_el_emerald_mine; @@ -3972,8 +3990,8 @@ static int editor_el_emerald_mine_club[] = EL_EMC_LENSES, EL_EMC_MAGNIFIER, - EL_EM_DYNAMITE, - EL_EM_DYNAMITE_ACTIVE, + EL_EMPTY, + EL_EMPTY, EL_BALLOON, EL_YAMYAM_UP, @@ -4005,6 +4023,11 @@ static int editor_hl_rnd[] = static int editor_el_rnd[] = { + EL_DYNAMITE, /* RND */ + EL_DYNAMITE_ACTIVE, /* RND */ + EL_EMPTY, + EL_EMPTY, + EL_KEY_1, EL_KEY_2, EL_KEY_3, @@ -4048,7 +4071,7 @@ static int editor_el_rnd[] = EL_PACMAN_LEFT, EL_DARK_YAMYAM, EL_PACMAN_RIGHT, - EL_EMPTY, + EL_YAMYAM, /* RND */ EL_BLACK_ORB, EL_PACMAN_DOWN, @@ -4195,6 +4218,11 @@ static int editor_hl_diamond_caves[] = static int editor_el_diamond_caves[] = { + EL_EM_STEEL_EXIT_CLOSED, /* DC2 */ + EL_EM_STEEL_EXIT_OPEN, /* DC2 */ + EL_WALL_EMERALD, /* DC2 */ + EL_WALL_DIAMOND, /* DC2 */ + EL_PEARL, EL_CRYSTAL, EL_WALL_PEARL, @@ -4394,13 +4422,13 @@ static int editor_el_mirror_magic[] = EL_MM_MIRROR_START, EL_MM_MIRROR_FIXED_START, - EL_MM_POLARISATOR_START, - EL_MM_POLARISATOR_CROSS_START, + EL_MM_POLARIZER_START, + EL_MM_POLARIZER_CROSS_START, - EL_MM_BEAMER_RED_START, - EL_MM_BEAMER_YELLOW_START, - EL_MM_BEAMER_GREEN_START, - EL_MM_BEAMER_BLUE_START, + EL_MM_TELEPORTER_RED_START, + EL_MM_TELEPORTER_YELLOW_START, + EL_MM_TELEPORTER_GREEN_START, + EL_MM_TELEPORTER_BLUE_START, EL_MM_PRISM, EL_MM_FUSE_ACTIVE, @@ -7535,10 +7563,13 @@ static void ResetUndoBuffer() level.changed = FALSE; } -static void DrawEditModeWindow() +static void DrawEditModeWindowExt(boolean remap_toolbox_gadgets) { - ModifyEditorElementList(); - RedrawDrawingElements(); + if (remap_toolbox_gadgets) + { + ModifyEditorElementList(); + RedrawDrawingElements(); + } if (edit_mode == ED_MODE_INFO) DrawLevelInfoWindow(); @@ -7547,7 +7578,17 @@ static void DrawEditModeWindow() else if (edit_mode == ED_MODE_PALETTE) DrawPaletteWindow(); else /* edit_mode == ED_MODE_DRAWING */ - DrawDrawingWindow(); + DrawDrawingWindowExt(remap_toolbox_gadgets); +} + +static void DrawEditModeWindow() +{ + DrawEditModeWindowExt(TRUE); +} + +static void DrawEditModeWindow_PlayfieldOnly() +{ + DrawEditModeWindowExt(FALSE); } static void ChangeEditModeWindow(int new_edit_mode) @@ -8278,14 +8319,22 @@ static int getMaxEdFieldY(boolean has_scrollbar) void InitZoomLevelSettings(int zoom_tilesize) { - if (zoom_tilesize == -1) + static int last_game_engine_type = GAME_ENGINE_TYPE_UNKNOWN; + + if (zoom_tilesize == -1 && level.game_engine_type != last_game_engine_type) { ed_tilesize = setup.auto_setup.editor_zoom_tilesize; + ed_tilesize_default = DEFAULT_EDITOR_TILESIZE; if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + { ed_tilesize = DEFAULT_EDITOR_TILESIZE_MM; + ed_tilesize_default = DEFAULT_EDITOR_TILESIZE_MM; + } } + last_game_engine_type = level.game_engine_type; + // limit zoom tilesize by upper and lower bound ed_tilesize = MIN(MAX(MICRO_TILESIZE, ed_tilesize), TILESIZE); @@ -8297,6 +8346,35 @@ void InitZoomLevelSettings(int zoom_tilesize) MAX_ED_FIELDY = getMaxEdFieldY(FALSE); } +static void InitDrawingElements() +{ + static int game_engine_type_last = GAME_ENGINE_TYPE_UNKNOWN; + + if (level.game_engine_type == game_engine_type_last) + return; + + if (level.game_engine_type == GAME_ENGINE_TYPE_SP) + { + new_element1 = EL_SP_CHIP_SINGLE; + new_element2 = EL_EMPTY; + new_element3 = EL_SP_BASE; + } + else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + { + new_element1 = EL_MM_MIRROR_START; + new_element2 = EL_EMPTY; + new_element3 = EL_MM_WOODEN_WALL; + } + else + { + new_element1 = EL_WALL; + new_element2 = EL_EMPTY; + new_element3 = EL_SAND; + } + + game_engine_type_last = level.game_engine_type; +} + static void InitLevelSetInfo() { snprintf(levelset_name, MAX_LEVEL_NAME_LEN + 1, @@ -8306,6 +8384,9 @@ static void InitLevelSetInfo() levelset_num_levels = leveldir_current->levels; + levelset_use_levelset_artwork = FALSE; + levelset_copy_level_template = FALSE; + levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE; } @@ -8398,6 +8479,7 @@ void DrawLevelEd() ClearField(); InitZoomLevelSettings(-1); + InitDrawingElements(); InitLevelSetInfo(); #if DEBUG @@ -8435,7 +8517,7 @@ void DrawLevelEd() UnmapAllGadgets(); - DrawDrawingWindow_PlayfieldOnly(); + DrawEditModeWindow_PlayfieldOnly(); DrawMaskedBorder(fade_mask); @@ -8782,11 +8864,6 @@ static void DrawDrawingWindow() DrawDrawingWindowExt(TRUE); } -static void DrawDrawingWindow_PlayfieldOnly() -{ - DrawDrawingWindowExt(FALSE); -} - static int getTabulatorBarWidth() { struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_PROPERTIES_INFO]; @@ -8957,12 +9034,25 @@ static void DrawLevelInfoLevelSet_DirectoryInfo() static void DrawLevelInfoLevelSet() { + boolean artwork_exists = checkIfCustomArtworkExistsForCurrentLevelSet(); + boolean template_exists = fileExists(getLocalLevelTemplateFilename()); int i; /* draw counter gadgets */ for (i = ED_COUNTER_ID_LEVELSET_FIRST; i <= ED_COUNTER_ID_LEVELSET_LAST; i++) MapCounterButtons(i); + /* draw checkbutton gadgets */ + for (i = ED_CHECKBUTTON_ID_LEVELSET_FIRST; i <= ED_CHECKBUTTON_ID_LEVELSET_LAST; i++) + { + if (levelset_save_mode == LEVELSET_SAVE_MODE_UPDATE || + (i == ED_CHECKBUTTON_ID_USE_LEVELSET_ARTWORK && !artwork_exists) || + (i == ED_CHECKBUTTON_ID_COPY_LEVEL_TEMPLATE && !template_exists)) + continue; + + MapCheckbuttonGadget(i); + } + /* draw selectbox gadgets */ for (i = ED_SELECTBOX_ID_LEVELSET_FIRST; i <= ED_SELECTBOX_ID_LEVELSET_LAST; i++) MapSelectboxGadget(i); @@ -11111,10 +11201,10 @@ static void SetElementIntelliDraw(int x, int y, int new_element, EL_MM_WOODEN_GRID_FIXED_3 }, { - EL_MM_POLARISATOR_CROSS_1, - EL_MM_POLARISATOR_CROSS_4, - EL_MM_POLARISATOR_CROSS_3, - EL_MM_POLARISATOR_CROSS_2 + EL_MM_POLARIZER_CROSS_1, + EL_MM_POLARIZER_CROSS_4, + EL_MM_POLARIZER_CROSS_3, + EL_MM_POLARIZER_CROSS_2 }, { EL_MM_PACMAN_UP, @@ -11207,112 +11297,112 @@ static void SetElementIntelliDraw(int x, int y, int new_element, EL_MM_MIRROR_2 }, { - EL_MM_BEAMER_5, - EL_MM_BEAMER_4, - EL_MM_BEAMER_3, - EL_MM_BEAMER_2, - EL_MM_BEAMER_1, - EL_MM_BEAMER_16, - EL_MM_BEAMER_15, - EL_MM_BEAMER_14, - EL_MM_BEAMER_13, - EL_MM_BEAMER_12, - EL_MM_BEAMER_11, - EL_MM_BEAMER_10, - EL_MM_BEAMER_9, - EL_MM_BEAMER_8, - EL_MM_BEAMER_7, - EL_MM_BEAMER_6 + EL_MM_TELEPORTER_5, + EL_MM_TELEPORTER_4, + EL_MM_TELEPORTER_3, + EL_MM_TELEPORTER_2, + EL_MM_TELEPORTER_1, + EL_MM_TELEPORTER_16, + EL_MM_TELEPORTER_15, + EL_MM_TELEPORTER_14, + EL_MM_TELEPORTER_13, + EL_MM_TELEPORTER_12, + EL_MM_TELEPORTER_11, + EL_MM_TELEPORTER_10, + EL_MM_TELEPORTER_9, + EL_MM_TELEPORTER_8, + EL_MM_TELEPORTER_7, + EL_MM_TELEPORTER_6 }, { - EL_MM_BEAMER_RED_5, - EL_MM_BEAMER_RED_4, - EL_MM_BEAMER_RED_3, - EL_MM_BEAMER_RED_2, - EL_MM_BEAMER_RED_1, - EL_MM_BEAMER_RED_16, - EL_MM_BEAMER_RED_15, - EL_MM_BEAMER_RED_14, - EL_MM_BEAMER_RED_13, - EL_MM_BEAMER_RED_12, - EL_MM_BEAMER_RED_11, - EL_MM_BEAMER_RED_10, - EL_MM_BEAMER_RED_9, - EL_MM_BEAMER_RED_8, - EL_MM_BEAMER_RED_7, - EL_MM_BEAMER_RED_6 + EL_MM_TELEPORTER_RED_5, + EL_MM_TELEPORTER_RED_4, + EL_MM_TELEPORTER_RED_3, + EL_MM_TELEPORTER_RED_2, + EL_MM_TELEPORTER_RED_1, + EL_MM_TELEPORTER_RED_16, + EL_MM_TELEPORTER_RED_15, + EL_MM_TELEPORTER_RED_14, + EL_MM_TELEPORTER_RED_13, + EL_MM_TELEPORTER_RED_12, + EL_MM_TELEPORTER_RED_11, + EL_MM_TELEPORTER_RED_10, + EL_MM_TELEPORTER_RED_9, + EL_MM_TELEPORTER_RED_8, + EL_MM_TELEPORTER_RED_7, + EL_MM_TELEPORTER_RED_6 }, { - EL_MM_BEAMER_YELLOW_5, - EL_MM_BEAMER_YELLOW_4, - EL_MM_BEAMER_YELLOW_3, - EL_MM_BEAMER_YELLOW_2, - EL_MM_BEAMER_YELLOW_1, - EL_MM_BEAMER_YELLOW_16, - EL_MM_BEAMER_YELLOW_15, - EL_MM_BEAMER_YELLOW_14, - EL_MM_BEAMER_YELLOW_13, - EL_MM_BEAMER_YELLOW_12, - EL_MM_BEAMER_YELLOW_11, - EL_MM_BEAMER_YELLOW_10, - EL_MM_BEAMER_YELLOW_9, - EL_MM_BEAMER_YELLOW_8, - EL_MM_BEAMER_YELLOW_7, - EL_MM_BEAMER_YELLOW_6 + EL_MM_TELEPORTER_YELLOW_5, + EL_MM_TELEPORTER_YELLOW_4, + EL_MM_TELEPORTER_YELLOW_3, + EL_MM_TELEPORTER_YELLOW_2, + EL_MM_TELEPORTER_YELLOW_1, + EL_MM_TELEPORTER_YELLOW_16, + EL_MM_TELEPORTER_YELLOW_15, + EL_MM_TELEPORTER_YELLOW_14, + EL_MM_TELEPORTER_YELLOW_13, + EL_MM_TELEPORTER_YELLOW_12, + EL_MM_TELEPORTER_YELLOW_11, + EL_MM_TELEPORTER_YELLOW_10, + EL_MM_TELEPORTER_YELLOW_9, + EL_MM_TELEPORTER_YELLOW_8, + EL_MM_TELEPORTER_YELLOW_7, + EL_MM_TELEPORTER_YELLOW_6 }, { - EL_MM_BEAMER_GREEN_5, - EL_MM_BEAMER_GREEN_4, - EL_MM_BEAMER_GREEN_3, - EL_MM_BEAMER_GREEN_2, - EL_MM_BEAMER_GREEN_1, - EL_MM_BEAMER_GREEN_16, - EL_MM_BEAMER_GREEN_15, - EL_MM_BEAMER_GREEN_14, - EL_MM_BEAMER_GREEN_13, - EL_MM_BEAMER_GREEN_12, - EL_MM_BEAMER_GREEN_11, - EL_MM_BEAMER_GREEN_10, - EL_MM_BEAMER_GREEN_9, - EL_MM_BEAMER_GREEN_8, - EL_MM_BEAMER_GREEN_7, - EL_MM_BEAMER_GREEN_6 + EL_MM_TELEPORTER_GREEN_5, + EL_MM_TELEPORTER_GREEN_4, + EL_MM_TELEPORTER_GREEN_3, + EL_MM_TELEPORTER_GREEN_2, + EL_MM_TELEPORTER_GREEN_1, + EL_MM_TELEPORTER_GREEN_16, + EL_MM_TELEPORTER_GREEN_15, + EL_MM_TELEPORTER_GREEN_14, + EL_MM_TELEPORTER_GREEN_13, + EL_MM_TELEPORTER_GREEN_12, + EL_MM_TELEPORTER_GREEN_11, + EL_MM_TELEPORTER_GREEN_10, + EL_MM_TELEPORTER_GREEN_9, + EL_MM_TELEPORTER_GREEN_8, + EL_MM_TELEPORTER_GREEN_7, + EL_MM_TELEPORTER_GREEN_6 }, { - EL_MM_BEAMER_BLUE_5, - EL_MM_BEAMER_BLUE_4, - EL_MM_BEAMER_BLUE_3, - EL_MM_BEAMER_BLUE_2, - EL_MM_BEAMER_BLUE_1, - EL_MM_BEAMER_BLUE_16, - EL_MM_BEAMER_BLUE_15, - EL_MM_BEAMER_BLUE_14, - EL_MM_BEAMER_BLUE_13, - EL_MM_BEAMER_BLUE_12, - EL_MM_BEAMER_BLUE_11, - EL_MM_BEAMER_BLUE_10, - EL_MM_BEAMER_BLUE_9, - EL_MM_BEAMER_BLUE_8, - EL_MM_BEAMER_BLUE_7, - EL_MM_BEAMER_BLUE_6 + EL_MM_TELEPORTER_BLUE_5, + EL_MM_TELEPORTER_BLUE_4, + EL_MM_TELEPORTER_BLUE_3, + EL_MM_TELEPORTER_BLUE_2, + EL_MM_TELEPORTER_BLUE_1, + EL_MM_TELEPORTER_BLUE_16, + EL_MM_TELEPORTER_BLUE_15, + EL_MM_TELEPORTER_BLUE_14, + EL_MM_TELEPORTER_BLUE_13, + EL_MM_TELEPORTER_BLUE_12, + EL_MM_TELEPORTER_BLUE_11, + EL_MM_TELEPORTER_BLUE_10, + EL_MM_TELEPORTER_BLUE_9, + EL_MM_TELEPORTER_BLUE_8, + EL_MM_TELEPORTER_BLUE_7, + EL_MM_TELEPORTER_BLUE_6 }, { - EL_MM_POLARISATOR_1, - EL_MM_POLARISATOR_16, - EL_MM_POLARISATOR_15, - EL_MM_POLARISATOR_14, - EL_MM_POLARISATOR_13, - EL_MM_POLARISATOR_12, - EL_MM_POLARISATOR_11, - EL_MM_POLARISATOR_10, - EL_MM_POLARISATOR_9, - EL_MM_POLARISATOR_8, - EL_MM_POLARISATOR_7, - EL_MM_POLARISATOR_6, - EL_MM_POLARISATOR_5, - EL_MM_POLARISATOR_4, - EL_MM_POLARISATOR_3, - EL_MM_POLARISATOR_2 + EL_MM_POLARIZER_1, + EL_MM_POLARIZER_16, + EL_MM_POLARIZER_15, + EL_MM_POLARIZER_14, + EL_MM_POLARIZER_13, + EL_MM_POLARIZER_12, + EL_MM_POLARIZER_11, + EL_MM_POLARIZER_10, + EL_MM_POLARIZER_9, + EL_MM_POLARIZER_8, + EL_MM_POLARIZER_7, + EL_MM_POLARIZER_6, + EL_MM_POLARIZER_5, + EL_MM_POLARIZER_4, + EL_MM_POLARIZER_3, + EL_MM_POLARIZER_2 }, { EL_DF_MIRROR_1, @@ -12191,6 +12281,18 @@ void WrapLevel(int dx, int dy) CopyLevelToUndoBuffer(UNDO_ACCUMULATE); } +static void CopyLevelTemplateToUserLevelSet(char *levelset_subdir) +{ + char *template_filename_old = getLocalLevelTemplateFilename(); + char *template_filename_new = + getPath2(getUserLevelDir(levelset_subdir), LEVELTEMPLATE_FILENAME); + + if (copyFile(template_filename_old, template_filename_new) != 0) + Request("Cannot copy level template!", REQ_CONFIRM); + + free(template_filename_new); +} + static void HandleDrawingAreas(struct GadgetInfo *gi) { static boolean started_inside_drawing_area = FALSE; @@ -12795,13 +12897,21 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi) Request("Updating level set failed!", REQ_CONFIRM); } } - else + else if (levelset_save_mode == LEVELSET_SAVE_MODE_CREATE) { + if (level.changed && !Request("Level has changed! Discard changes?", + REQ_ASK)) + return; + if (CreateUserLevelSet(levelset_subdir, levelset_name, levelset_author, - levelset_num_levels)) + levelset_num_levels, + levelset_use_levelset_artwork)) { + if (levelset_copy_level_template) + CopyLevelTemplateToUserLevelSet(levelset_subdir); + Request("New level set created!", REQ_CONFIRM); AddUserLevelSetToLevelInfo(levelset_subdir); @@ -13022,7 +13132,9 @@ static void HandleCheckbuttons(struct GadgetInfo *gi) } /* do not mark level as modified for certain non-level-changing gadgets */ - if ((type_id >= ED_CHECKBUTTON_ID_EDITOR_FIRST && + if ((type_id >= ED_CHECKBUTTON_ID_LEVELSET_FIRST && + type_id <= ED_CHECKBUTTON_ID_LEVELSET_LAST) || + (type_id >= ED_CHECKBUTTON_ID_EDITOR_FIRST && type_id <= ED_CHECKBUTTON_ID_EDITOR_LAST) || type_id == ED_CHECKBUTTON_ID_STICK_ELEMENT) return; @@ -13271,7 +13383,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) case GADGET_ID_ZOOM: // zoom level editor tile size in or out (or reset to default size) ed_tilesize = (button == 1 ? ed_tilesize * 2 : - button == 2 ? DEFAULT_EDITOR_TILESIZE : + button == 2 ? ed_tilesize_default : button == 3 ? ed_tilesize / 2 : ed_tilesize); // limit zoom level by upper and lower bound