X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=af251d33341060df607549939c1b98f0e5dd9813;hb=57f6ae0759f8f895ad1fc88a4eb2279404a8bb2c;hp=18ef65c8ed4cc60720a155878bc95ff84859e0eb;hpb=3fd9eb037de275a9e65a712d7fbc0d95fe7b2747;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 18ef65c8..af251d33 100644 --- a/src/editor.c +++ b/src/editor.c @@ -439,31 +439,32 @@ /* selectbox identifiers */ #define GADGET_ID_SELECTBOX_FIRST (GADGET_ID_TEXT_AREA_FIRST + 1) -#define GADGET_ID_CUSTOM_WALK_TO_ACTION (GADGET_ID_SELECTBOX_FIRST + 0) -#define GADGET_ID_CUSTOM_CONSISTENCY (GADGET_ID_SELECTBOX_FIRST + 1) -#define GADGET_ID_CUSTOM_DEADLINESS (GADGET_ID_SELECTBOX_FIRST + 2) -#define GADGET_ID_CUSTOM_MOVE_PATTERN (GADGET_ID_SELECTBOX_FIRST + 3) -#define GADGET_ID_CUSTOM_MOVE_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 4) -#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 5) -#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 6) -#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 7) -#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 8) -#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 9) -#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 10) -#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 11) -#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 12) -#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 13) -#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 14) -#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 15) -#define GADGET_ID_CHANGE_SIDES (GADGET_ID_SELECTBOX_FIRST + 16) -#define GADGET_ID_CHANGE_PLAYERS (GADGET_ID_SELECTBOX_FIRST + 17) -#define GADGET_ID_CHANGE_PAGES (GADGET_ID_SELECTBOX_FIRST + 18) -#define GADGET_ID_CHANGE_POWER (GADGET_ID_SELECTBOX_FIRST + 19) -#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 20) -#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 21) +#define GADGET_ID_TIME_OR_STEPS (GADGET_ID_SELECTBOX_FIRST + 0) +#define GADGET_ID_CUSTOM_WALK_TO_ACTION (GADGET_ID_SELECTBOX_FIRST + 1) +#define GADGET_ID_CUSTOM_CONSISTENCY (GADGET_ID_SELECTBOX_FIRST + 2) +#define GADGET_ID_CUSTOM_DEADLINESS (GADGET_ID_SELECTBOX_FIRST + 3) +#define GADGET_ID_CUSTOM_MOVE_PATTERN (GADGET_ID_SELECTBOX_FIRST + 4) +#define GADGET_ID_CUSTOM_MOVE_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 5) +#define GADGET_ID_CUSTOM_MOVE_STEPSIZE (GADGET_ID_SELECTBOX_FIRST + 6) +#define GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE (GADGET_ID_SELECTBOX_FIRST + 7) +#define GADGET_ID_CUSTOM_SMASH_TARGETS (GADGET_ID_SELECTBOX_FIRST + 8) +#define GADGET_ID_CUSTOM_SLIPPERY_TYPE (GADGET_ID_SELECTBOX_FIRST + 9) +#define GADGET_ID_CUSTOM_ACCESS_TYPE (GADGET_ID_SELECTBOX_FIRST + 10) +#define GADGET_ID_CUSTOM_ACCESS_LAYER (GADGET_ID_SELECTBOX_FIRST + 11) +#define GADGET_ID_CUSTOM_ACCESS_PROTECTED (GADGET_ID_SELECTBOX_FIRST + 12) +#define GADGET_ID_CUSTOM_ACCESS_DIRECTION (GADGET_ID_SELECTBOX_FIRST + 13) +#define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 14) +#define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 15) +#define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 16) +#define GADGET_ID_CHANGE_SIDE (GADGET_ID_SELECTBOX_FIRST + 17) +#define GADGET_ID_CHANGE_PLAYER (GADGET_ID_SELECTBOX_FIRST + 18) +#define GADGET_ID_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 19) +#define GADGET_ID_CHANGE_POWER (GADGET_ID_SELECTBOX_FIRST + 20) +#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 21) +#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 22) /* textbutton identifiers */ -#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 22) +#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 23) #define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 0) #define GADGET_ID_PROPERTIES_CONFIG (GADGET_ID_TEXTBUTTON_FIRST + 1) @@ -510,31 +511,33 @@ #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_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 10) -#define GADGET_ID_CUSTOM_EXPLODE_RESULT (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 31) +#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) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 32) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 34) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -627,30 +630,34 @@ #define ED_TEXTAREA_ID_LEVEL_LAST ED_TEXTAREA_ID_ENVELOPE /* values for selectbox gadgets */ -#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 0 -#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 1 -#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED 2 -#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION 3 -#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION 4 -#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN 5 -#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION 6 -#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE 7 -#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 8 -#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS 9 -#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE 10 -#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS 11 -#define ED_SELECTBOX_ID_CUSTOM_CONSISTENCY 12 -#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 13 -#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION 14 -#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 15 -#define ED_SELECTBOX_ID_CHANGE_SIDES 16 -#define ED_SELECTBOX_ID_CHANGE_PLAYERS 17 -#define ED_SELECTBOX_ID_CHANGE_PAGES 18 -#define ED_SELECTBOX_ID_CHANGE_POWER 19 -#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 20 -#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 21 - -#define ED_NUM_SELECTBOX 22 +#define ED_SELECTBOX_ID_TIME_OR_STEPS 0 +#define ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE 1 +#define ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER 2 +#define ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED 3 +#define ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION 4 +#define ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION 5 +#define ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN 6 +#define ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION 7 +#define ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE 8 +#define ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE 9 +#define ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS 10 +#define ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE 11 +#define ED_SELECTBOX_ID_CUSTOM_DEADLINESS 12 +#define ED_SELECTBOX_ID_CUSTOM_CONSISTENCY 13 +#define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 14 +#define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION 15 +#define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 16 +#define ED_SELECTBOX_ID_CHANGE_SIDE 17 +#define ED_SELECTBOX_ID_CHANGE_PLAYER 18 +#define ED_SELECTBOX_ID_CHANGE_PAGE 19 +#define ED_SELECTBOX_ID_CHANGE_POWER 20 +#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 21 +#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 22 + +#define ED_NUM_SELECTBOX 23 + +#define ED_SELECTBOX_ID_LEVEL_FIRST ED_SELECTBOX_ID_TIME_OR_STEPS +#define ED_SELECTBOX_ID_LEVEL_LAST ED_SELECTBOX_ID_TIME_OR_STEPS #define ED_SELECTBOX_ID_CUSTOM1_FIRST ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE #define ED_SELECTBOX_ID_CUSTOM1_LAST ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE @@ -698,30 +705,32 @@ #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_MOVE_INTO_ACID 8 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 9 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 10 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 11 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 12 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 13 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 14 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 15 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 16 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 17 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_RESULT 18 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 19 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 20 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 21 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 22 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 23 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 24 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 25 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 26 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 27 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 28 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 29 - -#define ED_NUM_CHECKBUTTONS 30 +#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_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED @@ -913,7 +922,7 @@ static struct GADGET_ID_LEVEL_GEMSLIMIT_DOWN, GADGET_ID_LEVEL_GEMSLIMIT_UP, GADGET_ID_LEVEL_GEMSLIMIT_TEXT, GADGET_ID_NONE, &level.gems_needed, - "number of emeralds to collect:", NULL, NULL + "number of gems to collect:", NULL, NULL }, { ED_SETTINGS_XPOS(0), ED_COUNTER_YPOS(4), @@ -921,7 +930,7 @@ static struct GADGET_ID_LEVEL_TIMELIMIT_DOWN, GADGET_ID_LEVEL_TIMELIMIT_UP, GADGET_ID_LEVEL_TIMELIMIT_TEXT, GADGET_ID_NONE, &level.time, - "time available to solve level:", NULL, "(0 => no time limit)" + "time or step limit to solve level:", NULL, NULL }, { ED_SETTINGS_XPOS(0), ED_COUNTER_YPOS(5), @@ -929,7 +938,7 @@ static struct GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP, GADGET_ID_LEVEL_TIMESCORE_TEXT, GADGET_ID_NONE, &level.score[SC_TIME_BONUS], - "score for each 10 seconds left:", NULL, NULL + "score for each 10 sec/steps left:", NULL, NULL }, { ED_SETTINGS_XPOS(0), ED_COUNTER2_YPOS(8), @@ -1134,10 +1143,19 @@ static struct } }; +static struct ValueTextInfo options_time_or_steps[] = +{ + { 0, "seconds" }, + { 1, "steps" }, + + { -1, NULL } +}; + static struct ValueTextInfo options_access_type[] = { { EP_WALKABLE, "walkable" }, { EP_PASSABLE, "passable" }, + { -1, NULL } }; @@ -1146,6 +1164,7 @@ static struct ValueTextInfo options_access_layer[] = { EP_ACCESSIBLE_OVER, "over" }, { EP_ACCESSIBLE_INSIDE, "inside" }, { EP_ACCESSIBLE_UNDER, "under" }, + { -1, NULL } }; @@ -1153,6 +1172,7 @@ static struct ValueTextInfo options_access_protected[] = { { 0, "unprotected" }, { 1, "protected" }, + { -1, NULL } }; @@ -1173,6 +1193,7 @@ static struct ValueTextInfo options_access_direction[] = { MV_VERTICAL | MV_LEFT, "vertical + left" }, { MV_VERTICAL | MV_RIGHT, "vertical + right" }, { MV_ALL_DIRECTIONS, "all directions" }, + { -1, NULL } }; @@ -1182,6 +1203,7 @@ static struct ValueTextInfo options_walk_to_action[] = { EP_COLLECTIBLE_ONLY, "collectible" }, { EP_DROPPABLE, "collectible & droppable" }, { EP_PUSHABLE, "pushable" }, + { -1, NULL } }; @@ -1207,6 +1229,7 @@ static struct ValueTextInfo options_move_pattern[] = { MV_WHEN_DROPPED, "when dropped" }, { MV_MAZE_RUNNER, "maze runner style" }, { MV_MAZE_HUNTER, "maze hunter style" }, + { -1, NULL } }; @@ -1219,6 +1242,7 @@ static struct ValueTextInfo options_move_direction[] = { MV_START_DOWN, "down" }, { MV_START_RANDOM, "random" }, { MV_START_PREVIOUS, "previous" }, + { -1, NULL } }; @@ -1229,6 +1253,7 @@ static struct ValueTextInfo options_move_stepsize[] = { 4, "normal" }, { 8, "fast" }, { 16, "very fast" }, + { -1, NULL } }; @@ -1236,6 +1261,7 @@ static struct ValueTextInfo options_move_leave_type[] = { { LEAVE_TYPE_UNLIMITED, "leave behind" }, { LEAVE_TYPE_LIMITED, "change it to" }, + { -1, NULL } }; @@ -1246,6 +1272,7 @@ static struct ValueTextInfo options_smash_targets[] = { EP_CAN_SMASH_ENEMIES, "enemies" }, #endif { EP_CAN_SMASH_EVERYTHING, "everything" }, + { -1, NULL } }; @@ -1256,6 +1283,7 @@ static struct ValueTextInfo options_slippery_type[] = { SLIPPERY_ANY_RIGHT_LEFT, "right, left" }, { SLIPPERY_ONLY_LEFT, "only left" }, { SLIPPERY_ONLY_RIGHT, "only right" }, + { -1, NULL } }; @@ -1264,6 +1292,7 @@ static struct ValueTextInfo options_deadliness[] = { EP_DONT_RUN_INTO, "running into" }, { EP_DONT_COLLIDE_WITH, "colliding with" }, { EP_DONT_TOUCH, "touching" }, + { -1, NULL } }; @@ -1273,6 +1302,7 @@ static struct ValueTextInfo options_consistency[] = { EP_CAN_EXPLODE_DYNA, "can explode 3+3" }, { EP_CAN_EXPLODE_1X1, "can explode 1x1" }, { EP_INDESTRUCTIBLE, "indestructible" }, + { -1, NULL } }; @@ -1280,6 +1310,7 @@ static struct ValueTextInfo options_time_units[] = { { 1, "frames" }, { FRAMES_PER_SECOND, "seconds" }, + { -1, NULL } }; @@ -1300,6 +1331,7 @@ static struct ValueTextInfo options_change_direct_action[] = #endif { CE_IMPACT, "impact (on something)" }, { CE_SMASHED, "smashed (from above)" }, + { -1, NULL } }; @@ -1319,12 +1351,13 @@ static struct ValueTextInfo options_change_other_action[] = { CE_OTHER_GETS_HIT, "hit by ..." }, #endif { CE_OTHER_IS_SWITCHING, "switch of ..." }, - { CE_OTHER_IS_CHANGING, "change of" }, + { CE_OTHER_IS_CHANGING, "change by page of" }, { CE_OTHER_IS_EXPLODING, "explosion of" }, + { -1, NULL } }; -static struct ValueTextInfo options_change_sides[] = +static struct ValueTextInfo options_change_trigger_side[] = { { CH_SIDE_LEFT, "left" }, { CH_SIDE_RIGHT, "right" }, @@ -1333,54 +1366,57 @@ static struct ValueTextInfo options_change_sides[] = { CH_SIDE_LEFT_RIGHT, "left/right" }, { CH_SIDE_TOP_BOTTOM, "top/bottom" }, { CH_SIDE_ANY, "any" }, + { -1, NULL } }; static struct ValueTextInfo options_change_trigger_player[] = { - { 0, "any" }, - { 1, "1" }, - { 2, "2" }, - { 3, "3" }, - { 4, "4" }, + { CH_PLAYER_1, "1" }, + { CH_PLAYER_2, "2" }, + { CH_PLAYER_3, "3" }, + { CH_PLAYER_4, "4" }, + { CH_PLAYER_ANY, "any" }, + { -1, NULL } }; static struct ValueTextInfo options_change_trigger_page[] = { - { 0, "any" }, - { 1, "1" }, - { 2, "2" }, - { 3, "3" }, - { 4, "4" }, - { 5, "5" }, - { 6, "6" }, - { 7, "7" }, - { 8, "8" }, - { 9, "9" }, - { 10, "10" }, - { 11, "11" }, - { 12, "12" }, - { 13, "13" }, - { 14, "14" }, - { 15, "15" }, - { 16, "16" }, - { 17, "17" }, - { 18, "18" }, - { 19, "19" }, - { 20, "20" }, - { 21, "21" }, - { 22, "22" }, - { 23, "23" }, - { 24, "24" }, - { 25, "25" }, - { 26, "26" }, - { 27, "27" }, - { 28, "28" }, - { 29, "29" }, - { 30, "30" }, - { 31, "31" }, - { 32, "32" }, + { (1 << 0), "1" }, + { (1 << 1), "2" }, + { (1 << 2), "3" }, + { (1 << 3), "4" }, + { (1 << 4), "5" }, + { (1 << 5), "6" }, + { (1 << 6), "7" }, + { (1 << 7), "8" }, + { (1 << 8), "9" }, + { (1 << 9), "10" }, + { (1 << 10), "11" }, + { (1 << 11), "12" }, + { (1 << 12), "13" }, + { (1 << 13), "14" }, + { (1 << 14), "15" }, + { (1 << 15), "16" }, + { (1 << 16), "17" }, + { (1 << 17), "18" }, + { (1 << 18), "19" }, + { (1 << 19), "20" }, + { (1 << 20), "21" }, + { (1 << 21), "22" }, + { (1 << 22), "23" }, + { (1 << 23), "24" }, + { (1 << 24), "25" }, + { (1 << 25), "26" }, + { (1 << 26), "27" }, + { (1 << 27), "28" }, + { (1 << 28), "29" }, + { (1 << 29), "30" }, + { (1 << 30), "31" }, + { (1 << 31), "32" }, + { CH_PAGE_ANY, "any" }, + { -1, NULL } }; @@ -1389,6 +1425,7 @@ static struct ValueTextInfo options_change_power[] = { CP_NON_DESTRUCTIVE, "empty" }, { CP_HALF_DESTRUCTIVE, "diggable" }, { CP_FULL_DESTRUCTIVE, "destructible" }, + { -1, NULL } }; @@ -1405,6 +1442,7 @@ static struct ValueTextInfo options_group_choice_mode[] = { ANIM_LINEAR, "linear" }, { ANIM_PINGPONG, "pingpong" }, { ANIM_PINGPONG2, "pingpong 2" }, + { -1, NULL } }; @@ -1419,6 +1457,17 @@ static struct char *text_left, *text_right, *infotext; } selectbox_info[ED_NUM_SELECTBOX] = { + /* ---------- level and editor settings ---------------------------------- */ + + { + -1, ED_COUNTER_YPOS(4), + GADGET_ID_TIME_OR_STEPS, GADGET_ID_LEVEL_TIMELIMIT_UP, + -1, + options_time_or_steps, + &level.use_step_counter, + NULL, "(0 => no limit)", "time or step limit" + }, + /* ---------- element settings: configure 1 (custom elements) ----------- */ { @@ -1557,15 +1606,15 @@ static struct }, { ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(6), - GADGET_ID_CHANGE_SIDES, GADGET_ID_NONE, + GADGET_ID_CHANGE_SIDE, GADGET_ID_NONE, -1, - options_change_sides, - &custom_element_change.sides, + options_change_trigger_side, + &custom_element_change.trigger_side, "... at", "side", "element side that causes change" }, { ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(7), - GADGET_ID_CHANGE_PLAYERS, GADGET_ID_NONE, + GADGET_ID_CHANGE_PLAYER, GADGET_ID_NONE, -1, options_change_trigger_player, &custom_element_change.trigger_player, @@ -1573,7 +1622,7 @@ static struct }, { ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(7), - GADGET_ID_CHANGE_PAGES, GADGET_ID_CHANGE_PLAYERS, + GADGET_ID_CHANGE_PAGE, GADGET_ID_CHANGE_PLAYER, -1, options_change_trigger_page, &custom_element_change.trigger_page, @@ -1879,19 +1928,26 @@ static struct "use spring pushing bug", "use odd spring pushing behaviour" }, { - ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(1), GADGET_ID_BLOCK_LAST_FIELD, GADGET_ID_NONE, &level.block_last_field, NULL, "block last field when moving", "player blocks last field when moving" }, { - ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(1), GADGET_ID_SP_BLOCK_LAST_FIELD, GADGET_ID_NONE, &level.sp_block_last_field, NULL, "block last field when moving", "player blocks last field when moving" }, + { + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), + GADGET_ID_CAN_FALL_INTO_ACID, GADGET_ID_NONE, + &custom_element_properties[EP_CAN_MOVE_INTO_ACID], + NULL, + "can fall into acid (with gravity)","player can fall into acid pool" + }, { ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), GADGET_ID_CAN_MOVE_INTO_ACID, GADGET_ID_NONE, @@ -1899,6 +1955,13 @@ static struct NULL, "can move into acid", "element can move into acid pool" }, + { + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(1), + GADGET_ID_DONT_COLLIDE_WITH, GADGET_ID_NONE, + &custom_element_properties[EP_DONT_COLLIDE_WITH], + NULL, + "deadly when colliding with", "element is deadly when hitting player" + }, /* ---------- element settings: configure 1 (custom elements) ----------- */ @@ -5163,8 +5226,7 @@ static void MapCheckbuttonGadget(int id) int y; /* set after gadget position was modified */ /* set position for "stickybutton" and "can move into acid" gadgets */ - if (id == ED_CHECKBUTTON_ID_STICK_ELEMENT || - id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID) + if (id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID) ModifyGadget(gi, GDI_Y, SY + checkbutton_info[id].y, GDI_END); y = gi->y + yoffset; @@ -5479,7 +5541,7 @@ static void copy_custom_element_settings(int element_from, int element_to) change_to->can_change = change_from->can_change; - change_to->sides = change_from->sides; + change_to->trigger_side = change_from->trigger_side; } #endif @@ -5736,10 +5798,13 @@ static void CopyGroupElementPropertiesToEditor(int element) static void CopyClassicElementPropertiesToEditor(int element) { #if 1 - if (COULD_MOVE_INTO_ACID(element)) + if (ELEM_IS_PLAYER(element) || COULD_MOVE_INTO_ACID(element)) custom_element_properties[EP_CAN_MOVE_INTO_ACID] = getMoveIntoAcidProperty(&level, element); + if (MAYBE_DONT_COLLIDE_WITH(element)) + custom_element_properties[EP_DONT_COLLIDE_WITH] = + getDontCollideWithProperty(&level, element); #else if (COULD_MOVE_INTO_ACID(element)) @@ -5748,7 +5813,7 @@ static void CopyClassicElementPropertiesToEditor(int element) if (bit_nr > -1) custom_element_properties[EP_CAN_MOVE_INTO_ACID] = - ((level.can_move_into_acid & (1 << bit_nr)) != 0); + ((level.can_move_into_acid_bits & (1 << bit_nr)) != 0); } #endif } @@ -5912,10 +5977,13 @@ static void CopyGroupElementPropertiesToGame(int element) static void CopyClassicElementPropertiesToGame(int element) { #if 1 - if (COULD_MOVE_INTO_ACID(element)) + if (ELEM_IS_PLAYER(element) || COULD_MOVE_INTO_ACID(element)) setMoveIntoAcidProperty(&level, element, custom_element_properties[EP_CAN_MOVE_INTO_ACID]); + if (MAYBE_DONT_COLLIDE_WITH(element)) + setDontCollideWithProperty(&level, element, + custom_element_properties[EP_DONT_COLLIDE_WITH]); #else if (COULD_MOVE_INTO_ACID(element)) @@ -5924,10 +5992,10 @@ static void CopyClassicElementPropertiesToGame(int element) if (bit_nr > -1) { - level.can_move_into_acid &= ~(1 << bit_nr); + level.can_move_into_acid_bits &= ~(1 << bit_nr); if (custom_element_properties[EP_CAN_MOVE_INTO_ACID]) - level.can_move_into_acid |= (1 << bit_nr); + level.can_move_into_acid_bits |= (1 << bit_nr); } } #endif @@ -6237,6 +6305,10 @@ static void DrawLevelInfoWindow() for (i = ED_COUNTER_ID_LEVEL_FIRST; i <= ED_COUNTER_ID_LEVEL_LAST; i++) MapCounterButtons(i); + /* draw selectbox gadgets */ + for (i = ED_SELECTBOX_ID_LEVEL_FIRST; i <= ED_SELECTBOX_ID_LEVEL_LAST; i++) + MapSelectboxGadget(i); + /* draw checkbutton gadgets */ for (i=ED_CHECKBUTTON_ID_LEVEL_FIRST; i <= ED_CHECKBUTTON_ID_LEVEL_LAST; i++) MapCheckbuttonGadget(i); @@ -6778,7 +6850,7 @@ static boolean checkPropertiesConfig(int element) ELEM_IS_PLAYER(element) || HAS_CONTENT(element) || COULD_MOVE_INTO_ACID(element) || - element == EL_SPRING) + MAYBE_DONT_COLLIDE_WITH(element)) return TRUE; else for (i = 0; elements_with_counter[i].element != -1; i++) @@ -6808,6 +6880,7 @@ 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)); counterbutton_info[counter_id].value = elements_with_counter[i].value; @@ -6831,9 +6904,12 @@ static void DrawPropertiesConfig() } if (ELEM_IS_PLAYER(properties_element)) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID); MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ? ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD : ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD); + } if (IS_GEM(properties_element)) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS); @@ -6842,6 +6918,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" */ 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); @@ -6849,6 +6926,9 @@ static void DrawPropertiesConfig() MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID); } + if (MAYBE_DONT_COLLIDE_WITH(properties_element)) + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH); + if (properties_element == EL_SPRING) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_SPRING_BUG); @@ -6903,8 +6983,6 @@ static void DrawPropertiesConfig() } else if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2) { - /* set position for special checkbutton for "can move into acid" */ - /* draw checkbutton gadgets */ for (i = ED_CHECKBUTTON_ID_CUSTOM2_FIRST; i <= ED_CHECKBUTTON_ID_CUSTOM2_LAST; i++) @@ -8312,7 +8390,9 @@ static void HandleCheckbuttons(struct GadgetInfo *gi) *checkbutton_info[type_id].value ^= TRUE; - if (type_id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID || + if (type_id == ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID || + type_id == ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID || + type_id == ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH || (((type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST && type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST) || (type_id >= ED_CHECKBUTTON_ID_CHANGE_FIRST &&