X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=da3101233d7f2884aed22c27b1d34983281c9887;hb=8f9768f67f24a3279d812ee1760e8dc8e723145d;hp=2627994b80409a409999385f5578ba3d71cca085;hpb=7344cb1d0c4fb6c05604d93fc7e99bc678c1937e;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 2627994b..da310123 100644 --- a/src/editor.c +++ b/src/editor.c @@ -524,33 +524,34 @@ #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_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 10) -#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_CUSTOM_EXPLODE_RESULT (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 31) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 32) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 33) +#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) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 34) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 35) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -718,32 +719,33 @@ #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_CAN_FALL_INTO_ACID 8 -#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 9 -#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 10 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 11 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 12 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 13 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 14 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 15 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 16 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 17 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 18 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 19 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT 20 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 21 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 22 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 23 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 24 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 25 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 26 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 27 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 28 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 29 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 30 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 31 - -#define ED_NUM_CHECKBUTTONS 32 +#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_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED @@ -1269,6 +1271,9 @@ static struct ValueTextInfo options_move_stepsize[] = { 4, "normal" }, { 8, "fast" }, { 16, "very fast" }, +#if 1 + { 32, "even faster" }, +#endif { -1, NULL } }; @@ -1315,7 +1320,7 @@ static struct ValueTextInfo options_deadliness[] = static struct ValueTextInfo options_consistency[] = { { EP_CAN_EXPLODE_3X3, "can explode 3x3" }, - { EP_CAN_EXPLODE_DYNA, "can explode 3+3" }, + { EP_CAN_EXPLODE_CROSS, "can explode 3+3" }, { EP_CAN_EXPLODE_1X1, "can explode 1x1" }, { EP_INDESTRUCTIBLE, "indestructible" }, @@ -1957,6 +1962,13 @@ static struct NULL, "block last field when moving", "player blocks last field when moving" }, + { + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(2), + GADGET_ID_INSTANT_RELOCATION, GADGET_ID_NONE, + &level.instant_relocation, + NULL, + "no scrolling when relocating", "player gets relocated without delay" + }, { ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), GADGET_ID_CAN_FALL_INTO_ACID, GADGET_ID_NONE, @@ -5475,7 +5487,7 @@ static int setSelectboxValue(int selectbox_id, int new_value) static void copy_custom_element_settings(int element_from, int element_to) { -#if 1 +#if 0 struct ElementInfo ei_to_old = element_info[element_to]; struct ElementInfo *ei_from = &element_info[element_from]; struct ElementInfo *ei_to = &element_info[element_to]; @@ -5517,7 +5529,7 @@ static void copy_custom_element_settings(int element_from, int element_to) for (i = 0; i < MAX_ELEMENT_NAME_LEN + 1; i++) ei_to->description[i] = ei_from->description[i]; - /* ---------- copy element properties ---------- */ + /* ---------- copy element base properties ---------- */ Properties[element_to][EP_BITFIELD_BASE] = Properties[element_from][EP_BITFIELD_BASE]; @@ -5526,6 +5538,8 @@ static void copy_custom_element_settings(int element_from, int element_to) 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 = ei_from->collect_score; ei_to->collect_count = ei_from->collect_count; @@ -5538,49 +5552,33 @@ static void copy_custom_element_settings(int element_from, int element_to) 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[x][y] = ei_from->content[x][y]; - ei_to->num_change_pages = ei_from->num_change_pages; - setElementChangePages(ei_to, ei_to->num_change_pages); - - for (i=0; i < ei_to->num_change_pages; i++) - { - struct ElementChangeInfo *change_to = &ei_to->change_page[i]; - struct ElementChangeInfo *change_from = &ei_from->change_page[i]; + ei_to->explosion_delay = ei_from->explosion_delay; + ei_to->ignition_delay = ei_from->ignition_delay; - /* always start with reliable default values */ - setElementChangeInfoToDefaults(change_to); - - change_to->events = change_from->events; - - change_to->target_element = change_from->target_element; - - change_to->delay_fixed = change_from->delay_fixed; - change_to->delay_random = change_from->delay_random; - change_to->delay_frames = change_from->delay_frames; - - change_to->trigger_element = change_from->trigger_element; + /* ---------- reinitialize and copy change pages ---------- */ - change_to->explode = change_from->explode; - change_to->use_content = change_from->use_content; - change_to->only_if_complete = change_from->only_if_complete; - change_to->use_random_change = change_from->use_random_change; + ei_to->num_change_pages = ei_from->num_change_pages; + ei_to->current_change_page = ei_from->current_change_page; - change_to->random_percentage = change_from->random_percentage; - change_to->replace_when = change_from->replace_when; + setElementChangePages(ei_to, ei_to->num_change_pages); - for (y = 0; y < 3; y++) - for (x = 0; x < 3; x++) - change_to->target_content[x][y] = change_from->target_content[x][y]; + for (i=0; i < ei_to->num_change_pages; i++) + ei_to->change_page[i] = ei_from->change_page[i]; - change_to->can_change = change_from->can_change; + /* ---------- copy group element info ---------- */ + if (ei_from->group != NULL && ei_to->group != NULL) /* group or internal */ + *ei_to->group = *ei_from->group; - change_to->trigger_side = change_from->trigger_side; - } #endif /* mark this custom element as modified */ @@ -5787,13 +5785,13 @@ static void CopyCustomElementPropertiesToEditor(int element) (IS_INDESTRUCTIBLE(element) ? EP_INDESTRUCTIBLE : CAN_EXPLODE_1X1(element) ? EP_CAN_EXPLODE_1X1 : CAN_EXPLODE_3X3(element) ? EP_CAN_EXPLODE_3X3 : - CAN_EXPLODE_DYNA(element) ? EP_CAN_EXPLODE_DYNA : + CAN_EXPLODE_CROSS(element) ? EP_CAN_EXPLODE_CROSS : custom_element.consistency); custom_element_properties[EP_EXPLODE_RESULT] = (IS_INDESTRUCTIBLE(element) || CAN_EXPLODE_1X1(element) || CAN_EXPLODE_3X3(element) || - CAN_EXPLODE_DYNA(element)); + CAN_EXPLODE_CROSS(element)); /* special case: sub-settings dependent from main setting */ if (CAN_EXPLODE_BY_FIRE(element)) @@ -5949,7 +5947,7 @@ static void CopyCustomElementPropertiesToGame(int element) custom_element_properties[EP_INDESTRUCTIBLE] = FALSE; custom_element_properties[EP_CAN_EXPLODE_1X1] = FALSE; custom_element_properties[EP_CAN_EXPLODE_3X3] = FALSE; - custom_element_properties[EP_CAN_EXPLODE_DYNA] = FALSE; + custom_element_properties[EP_CAN_EXPLODE_CROSS] = FALSE; custom_element_properties[EP_CAN_EXPLODE_BY_FIRE] = FALSE; custom_element_properties[EP_CAN_EXPLODE_SMASHED] = FALSE; custom_element_properties[EP_CAN_EXPLODE_IMPACT] = FALSE; @@ -5959,7 +5957,7 @@ static void CopyCustomElementPropertiesToGame(int element) /* special case: sub-settings dependent from main setting */ if (custom_element_properties[EP_CAN_EXPLODE_1X1] || custom_element_properties[EP_CAN_EXPLODE_3X3] || - custom_element_properties[EP_CAN_EXPLODE_DYNA]) + custom_element_properties[EP_CAN_EXPLODE_CROSS]) { custom_element_properties[EP_CAN_EXPLODE_BY_FIRE] = custom_element.can_explode_by_fire; @@ -6959,6 +6957,7 @@ static void DrawPropertiesConfig() MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ? ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD : ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INSTANT_RELOCATION); } if (IS_GEM(properties_element))