#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)
#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
{ 4, "normal" },
{ 8, "fast" },
{ 16, "very fast" },
+#if 1
+ { 32, "even faster" },
+#endif
{ -1, NULL }
};
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" },
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,
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];
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];
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;
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 */
(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))
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;
/* 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;
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))