X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=cee0cd43918f6df4893d245f1a354154fcab4acd;hb=33cf8c53fa267584efab93b15a99fbf78f9fb0c1;hp=269f21dcc5d82cb1fcf6fb2250f86528028e8eff;hpb=db89d31c2a430be3b7c3eb19b779c9347efa9ba5;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 269f21dc..cee0cd43 100644 --- a/src/editor.c +++ b/src/editor.c @@ -547,22 +547,22 @@ #define GADGET_ID_RANDOM_PERCENTAGE (GADGET_ID_CHECKBUTTON_FIRST + 0) #define GADGET_ID_RANDOM_QUANTITY (GADGET_ID_CHECKBUTTON_FIRST + 1) #define GADGET_ID_RANDOM_RESTRICTED (GADGET_ID_CHECKBUTTON_FIRST + 2) -#define GADGET_ID_INITIAL_GRAVITY (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_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 6) -#define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 7) -#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 8) -#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 9) -#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 10) -#define GADGET_ID_CONTINUOUS_SNAPPING (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 18) +#define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 3) +#define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 4) +#define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 5) +#define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 6) +#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 7) +#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 8) +#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 9) +#define GADGET_ID_CONTINUOUS_SNAPPING (GADGET_ID_CHECKBUTTON_FIRST + 10) +#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 11) +#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 12) +#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 13) +#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 14) +#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 15) +#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 16) +#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 17) +#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 18) #define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 19) #define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 20) #define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 21) @@ -771,23 +771,23 @@ #define ED_GRAPHICBUTTON_ID_CHANGE_LAST ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE /* values for checkbutton gadgets */ -#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 0 -#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 1 -#define ED_CHECKBUTTON_ID_STICK_ELEMENT 2 -#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 3 -#define ED_CHECKBUTTON_ID_USE_SPRING_BUG 4 -#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 5 -#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 6 -#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 7 -#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 8 -#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING 9 -#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 10 -#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 11 -#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 12 -#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 13 -#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 14 -#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 15 -#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 16 +#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 0 +#define ED_CHECKBUTTON_ID_STICK_ELEMENT 1 +#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 2 +#define ED_CHECKBUTTON_ID_USE_SPRING_BUG 3 +#define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 4 +#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 5 +#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 6 +#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 7 +#define ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING 8 +#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 9 +#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 10 +#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 11 +#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 12 +#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 13 +#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 14 +#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 15 +#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 16 #define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 17 #define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 18 #define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 19 @@ -820,7 +820,7 @@ #define ED_NUM_CHECKBUTTONS 46 -#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_INITIAL_GRAVITY +#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC @@ -1026,7 +1026,7 @@ static struct NULL, " ", "height", }, { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), 0, 999, GADGET_ID_LEVEL_GEMSLIMIT_DOWN, GADGET_ID_LEVEL_GEMSLIMIT_UP, GADGET_ID_LEVEL_GEMSLIMIT_TEXT, GADGET_ID_NONE, @@ -1034,7 +1034,7 @@ static struct NULL, "number of gems to collect:", NULL }, { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), 0, 9999, GADGET_ID_LEVEL_TIMELIMIT_DOWN, GADGET_ID_LEVEL_TIMELIMIT_UP, GADGET_ID_LEVEL_TIMELIMIT_TEXT, GADGET_ID_NONE, @@ -1042,7 +1042,7 @@ static struct "time or step limit to solve level:", NULL, NULL }, { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(9), 0, 255, GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP, GADGET_ID_LEVEL_TIMESCORE_TEXT, GADGET_ID_NONE, @@ -1549,6 +1549,10 @@ static struct ValueTextInfo options_change_direct_action[] = #endif { CE_IMPACT, "impact (on something)" }, { CE_SMASHED, "smashed (from above)" }, +#if 0 + { CE_VALUE_CHANGES, "CE value changes" }, + { CE_SCORE_CHANGES, "CE score changes" }, +#endif { CE_VALUE_GETS_ZERO, "CE value gets 0" }, { CE_SCORE_GETS_ZERO, "CE score gets 0" }, @@ -1576,6 +1580,8 @@ static struct ValueTextInfo options_change_other_action[] = { CE_EXPLOSION_OF_X, "explosion of" }, { CE_MOVE_OF_X, "move of" }, { CE_CREATION_OF_X, "creation of" }, + { CE_VALUE_CHANGES_OF_X, "CE value changes of" }, + { CE_SCORE_CHANGES_OF_X, "CE score changes of" }, { CE_VALUE_GETS_ZERO_OF_X, "CE value gets 0 of" }, { CE_SCORE_GETS_ZERO_OF_X, "CE score gets 0 of" }, @@ -1667,7 +1673,6 @@ static struct ValueTextInfo options_action_type[] = { CA_SET_LEVEL_TIME, "set time" }, { CA_SET_LEVEL_SCORE, "set score" }, { CA_SET_LEVEL_GEMS, "set needed gems" }, - { CA_SET_LEVEL_GRAVITY, "set gravity" }, { CA_SET_LEVEL_WIND, "set wind dir." }, { CA_UNDEFINED, " " }, { CA_HEADLINE_PLAYER_ACTIONS, "[player actions]" }, @@ -1677,11 +1682,12 @@ static struct ValueTextInfo options_action_type[] = { CA_SET_PLAYER_KEYS, "set keys" }, { CA_SET_PLAYER_SPEED, "set speed" }, { CA_SET_PLAYER_SHIELD, "set shield" }, + { CA_SET_PLAYER_GRAVITY, "set gravity" }, { CA_SET_PLAYER_ARTWORK, "set artwork" }, { CA_UNDEFINED, " " }, { CA_HEADLINE_CE_ACTIONS, "[CE actions]" }, - { CA_SET_CE_SCORE, "set CE score" }, { CA_SET_CE_VALUE, "set CE value" }, + { CA_SET_CE_SCORE, "set CE score" }, { CA_UNDEFINED, " " }, { CA_HEADLINE_ENGINE_ACTIONS, "[engine actions]" }, { CA_SET_ENGINE_SCAN_MODE, "set scan mode" }, @@ -1761,9 +1767,9 @@ static struct ValueTextInfo options_action_arg_number[] = { CA_ARG_UNDEFINED, " " }, { CA_ARG_NUMBER_RESET, "reset" }, { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, - { CA_ARG_NUMBER_CE_SCORE, "CE score" }, { CA_ARG_NUMBER_CE_VALUE, "CE value" }, + { CA_ARG_NUMBER_CE_SCORE, "CE score" }, + { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, { CA_ARG_UNDEFINED, " " }, { CA_ARG_NUMBER_LEVEL_TIME, "time" }, { CA_ARG_NUMBER_LEVEL_GEMS, "gems" }, @@ -1798,9 +1804,9 @@ static struct ValueTextInfo options_action_arg_value[] = { CA_ARG_UNDEFINED, " " }, { CA_ARG_NUMBER_RESET, "reset" }, { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, - { CA_ARG_NUMBER_CE_SCORE, "CE score" }, { CA_ARG_NUMBER_CE_VALUE, "CE value" }, + { CA_ARG_NUMBER_CE_SCORE, "CE score" }, + { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, { CA_ARG_UNDEFINED, " " }, { CA_ARG_NUMBER_LEVEL_TIME, "time" }, { CA_ARG_NUMBER_LEVEL_GEMS, "gems" }, @@ -1970,14 +1976,14 @@ action_arg_options[] = { CA_SET_LEVEL_TIME, 3, options_action_arg_number, }, { CA_SET_LEVEL_GEMS, 3, options_action_arg_number, }, { CA_SET_LEVEL_SCORE, 3, options_action_arg_number, }, - { CA_SET_LEVEL_GRAVITY, 1, options_action_arg_gravity, }, { CA_SET_LEVEL_WIND, 1, options_action_arg_direction, }, { CA_SET_PLAYER_KEYS, 2, options_action_arg_key, }, { CA_SET_PLAYER_SPEED, 1, options_action_arg_speed, }, { CA_SET_PLAYER_SHIELD, 1, options_action_arg_shield, }, + { CA_SET_PLAYER_GRAVITY, 1, options_action_arg_gravity, }, { CA_SET_PLAYER_ARTWORK, 1, options_action_arg_artwork, }, - { CA_SET_CE_SCORE, 3, options_action_arg_value, }, { CA_SET_CE_VALUE, 3, options_action_arg_value, }, + { CA_SET_CE_SCORE, 3, options_action_arg_value, }, { CA_SET_ENGINE_SCAN_MODE, 1, options_action_arg_scan_mode, }, { -1, FALSE, NULL } @@ -1997,7 +2003,7 @@ static struct /* ---------- level and editor settings ---------------------------------- */ { - -1, ED_LEVEL_SETTINGS_YPOS(8), + -1, ED_LEVEL_SETTINGS_YPOS(7), GADGET_ID_TIME_OR_STEPS, GADGET_ID_LEVEL_TIMELIMIT_UP, -1, options_time_or_steps, @@ -2005,7 +2011,7 @@ static struct NULL, "(0 => no limit)", "time or step limit" }, { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11), GADGET_ID_GAME_ENGINE_TYPE, GADGET_ID_NONE, -1, options_game_engine_type, @@ -2013,7 +2019,7 @@ static struct "game engine:", NULL, "game engine" }, { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), GADGET_ID_WIND_DIRECTION, GADGET_ID_NONE, -1, options_wind_direction, @@ -2028,7 +2034,7 @@ static struct GADGET_ID_PLAYER_SPEED, GADGET_ID_NONE, -1, options_player_speed, - &level.initial_player_stepsize, + &level.initial_player_stepsize[0], "initial player speed:", NULL, "initial player speed" }, @@ -2396,6 +2402,8 @@ static struct int gd_x, gd_y; int x, y; int width, height; + int wheel_x, wheel_y; + int wheel_width, wheel_height; int type; int gadget_id; char *infotext; @@ -2405,6 +2413,8 @@ static struct ED_SCROLLBAR_XPOS, ED_SCROLLBAR_YPOS, SX + ED_SCROLL_HORIZONTAL_XPOS, SY + ED_SCROLL_HORIZONTAL_YPOS, ED_SCROLL_HORIZONTAL_XSIZE, ED_SCROLL_HORIZONTAL_YSIZE, + 0, 0, + SX + SXSIZE + SX, WIN_YSIZE, GD_TYPE_SCROLLBAR_HORIZONTAL, GADGET_ID_SCROLL_HORIZONTAL, "scroll level editing area horizontally" @@ -2413,6 +2423,8 @@ static struct ED_SCROLLBAR_XPOS, ED_SCROLLBAR_YPOS, SX + ED_SCROLL_VERTICAL_XPOS, SY + ED_SCROLL_VERTICAL_YPOS, ED_SCROLL_VERTICAL_XSIZE, ED_SCROLL_VERTICAL_YSIZE, + 0, 0, + SX + SXSIZE + SX, WIN_YSIZE, GD_TYPE_SCROLLBAR_VERTICAL, GADGET_ID_SCROLL_VERTICAL, "scroll level editing area vertically" @@ -2421,6 +2433,8 @@ static struct ED_SCROLLBAR2_XPOS, ED_SCROLLBAR2_YPOS, DX + ED_SCROLL2_VERTICAL_XPOS, DY + ED_SCROLL2_VERTICAL_YPOS, ED_SCROLL2_VERTICAL_XSIZE, ED_SCROLL2_VERTICAL_YSIZE, + SX + SXSIZE + SX, 0, + WIN_XSIZE - (SX + SXSIZE + SX), WIN_YSIZE, GD_TYPE_SCROLLBAR_VERTICAL, GADGET_ID_SCROLL_LIST_VERTICAL, "scroll element list vertically" @@ -2465,13 +2479,6 @@ static struct { /* ---------- level and editor settings ---------------------------------- */ - { - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11), - GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE, - &level.initial_gravity, - NULL, - "initial gravity", "set initial level gravity" - }, { ED_LEVEL_SETTINGS_XPOS(0), ED_COUNTER2_YPOS(9) - MINI_TILEY, GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_NONE, @@ -2587,6 +2594,13 @@ static struct NULL, "use explosion from element:", "use explosion properties from element" }, + { + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), + GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE, + &level.initial_player_gravity[0], + NULL, + "use initial gravity", "set initial player gravity" + }, { ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), GADGET_ID_CAN_PASS_TO_WALKABLE, GADGET_ID_NONE, @@ -2999,7 +3013,7 @@ static struct /* ---------- custom change content (extended change target) ------------- */ { - -1, ED_AREA_3X3_SETTINGS_YPOS(10), + -1, ED_AREA_3X3_SETTINGS_YPOS(9), GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, /* align three rows */ &custom_element_change.target_content.e[0][0], 3, 3, NULL, NULL, NULL, "new extended elements after change" @@ -3105,6 +3119,16 @@ static int edit_mode_properties; static int element_shift = 0; +static int editor_el_players[] = +{ + EL_PLAYER_1, + EL_PLAYER_2, + EL_PLAYER_3, + EL_PLAYER_4 +}; +static int *editor_el_players_ptr = editor_el_players; +static int num_editor_el_players = SIZEOF_ARRAY_INT(editor_el_players); + static int editor_hl_boulderdash[] = { EL_INTERNAL_CASCADE_BD_ACTIVE, @@ -3132,6 +3156,34 @@ static int editor_hl_boulderdash[] = static int editor_el_boulderdash[] = { +#if 1 + EL_EMPTY, + EL_SAND, + EL_BD_ROCK, + EL_BD_DIAMOND, + + EL_STEELWALL, + EL_BD_WALL, + EL_BD_EXPANDABLE_WALL, + EL_BD_MAGIC_WALL, + + EL_BD_AMOEBA, + EL_BD_BUTTERFLY_UP, + EL_BD_FIREFLY_UP, + EL_EXIT_CLOSED, + + EL_BD_BUTTERFLY_LEFT, + EL_BD_FIREFLY_LEFT, + EL_BD_BUTTERFLY_RIGHT, + EL_BD_FIREFLY_RIGHT, + + EL_EMPTY, + EL_BD_BUTTERFLY_DOWN, + EL_BD_FIREFLY_DOWN, + EL_EXIT_OPEN, + +#else + EL_PLAYER_1, EL_EMPTY, EL_SAND, @@ -3155,7 +3207,8 @@ static int editor_el_boulderdash[] = EL_BD_AMOEBA, EL_BD_BUTTERFLY_DOWN, EL_BD_FIREFLY_DOWN, - EL_EMPTY, + EL_BD_EXPANDABLE_WALL, +#endif }; static int *editor_hl_boulderdash_ptr = editor_hl_boulderdash; static int *editor_el_boulderdash_ptr = editor_el_boulderdash; @@ -3189,13 +3242,71 @@ static int editor_hl_emerald_mine[] = static int editor_el_emerald_mine[] = { - EL_PLAYER_1, - EL_PLAYER_2, - EL_PLAYER_3, - EL_PLAYER_4, +#if 1 + EL_SAND, + EL_ROCK, + EL_QUICKSAND_EMPTY, + EL_QUICKSAND_FULL, + + EL_STEELWALL, + EL_WALL, + EL_WALL_SLIPPERY, + EL_MAGIC_WALL, + + EL_EMERALD, + EL_DIAMOND, + EL_NUT, + EL_BOMB, + + EL_WALL_EMERALD, + EL_WALL_DIAMOND, + EL_DYNAMITE, + EL_DYNAMITE_ACTIVE, + + EL_YAMYAM, + EL_BUG_UP, + EL_SPACESHIP_UP, + EL_ROBOT, + + EL_BUG_LEFT, + EL_SPACESHIP_LEFT, + EL_BUG_RIGHT, + EL_SPACESHIP_RIGHT, + + EL_ROBOT_WHEEL, + EL_BUG_DOWN, + EL_SPACESHIP_DOWN, + EL_INVISIBLE_WALL, + + EL_ACID_POOL_TOPLEFT, + EL_ACID, + EL_ACID_POOL_TOPRIGHT, + EL_AMOEBA_DROP, + + EL_ACID_POOL_BOTTOMLEFT, + EL_ACID_POOL_BOTTOM, + EL_ACID_POOL_BOTTOMRIGHT, + EL_AMOEBA_WET, + + EL_EM_KEY_1, + EL_EM_KEY_2, + EL_EM_KEY_3, + EL_EM_KEY_4, + + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + + EL_EM_GATE_1_GRAY, + EL_EM_GATE_2_GRAY, + EL_EM_GATE_3_GRAY, + EL_EM_GATE_4_GRAY, + +#else EL_PLAYER_1, - EL_EMPTY, + EL_PLAYER_2, EL_SAND, EL_ROCK, @@ -3263,6 +3374,7 @@ static int editor_el_emerald_mine[] = EL_EM_GATE_2_GRAY, EL_EM_GATE_3_GRAY, EL_EM_GATE_4_GRAY, +#endif }; static int *editor_hl_emerald_mine_ptr = editor_hl_emerald_mine; static int *editor_el_emerald_mine_ptr = editor_el_emerald_mine; @@ -3301,6 +3413,84 @@ static int editor_hl_emerald_mine_club[] = static int editor_el_emerald_mine_club[] = { +#if 1 + EL_EMC_KEY_5, + EL_EMC_KEY_6, + EL_EMC_KEY_7, + EL_EMC_KEY_8, + + EL_EMC_GATE_5, + EL_EMC_GATE_6, + EL_EMC_GATE_7, + EL_EMC_GATE_8, + + EL_EMC_GATE_5_GRAY, + EL_EMC_GATE_6_GRAY, + EL_EMC_GATE_7_GRAY, + EL_EMC_GATE_8_GRAY, + + EL_EMC_STEELWALL_1, + EL_EMC_STEELWALL_2, + EL_EMC_STEELWALL_3, + EL_EMC_STEELWALL_4, + + EL_EMC_WALL_13, + EL_EMC_WALL_14, + EL_EMC_WALL_15, + EL_EMC_WALL_16, + + EL_EMC_WALL_SLIPPERY_1, + EL_EMC_WALL_SLIPPERY_2, + EL_EMC_WALL_SLIPPERY_3, + EL_EMC_WALL_SLIPPERY_4, + + EL_EMC_WALL_1, + EL_EMC_WALL_2, + EL_EMC_WALL_3, + EL_EMC_WALL_4, + + EL_EMC_WALL_5, + EL_EMC_WALL_6, + EL_EMC_WALL_7, + EL_EMC_WALL_8, + + EL_EMC_WALL_9, + EL_EMC_WALL_10, + EL_EMC_WALL_11, + EL_EMC_WALL_12, + + EL_EMC_GRASS, + EL_EMC_FAKE_GRASS, + EL_EMC_PLANT, + EL_EMC_DRIPPER, + + EL_EMC_MAGIC_BALL, + EL_EMC_MAGIC_BALL_SWITCH, + EL_SPRING, + EL_EMC_SPRING_BUMPER, + + EL_EMC_LENSES, + EL_EMC_MAGNIFIER, + EL_EM_DYNAMITE, + EL_EM_DYNAMITE_ACTIVE, + + EL_BALLOON, + EL_YAMYAM_UP, + EL_BALLOON_SWITCH_UP, + EL_BALLOON_SWITCH_ANY, + + EL_YAMYAM_LEFT, + EL_BALLOON_SWITCH_LEFT, + EL_YAMYAM_RIGHT, + EL_BALLOON_SWITCH_RIGHT, + + EL_EMC_ANDROID, + EL_YAMYAM_DOWN, + EL_BALLOON_SWITCH_DOWN, + EL_BALLOON_SWITCH_NONE, + +#else + EL_EMC_KEY_5, EL_EMC_KEY_6, EL_EMC_KEY_7, @@ -3380,13 +3570,14 @@ static int editor_el_emerald_mine_club[] = EL_YAMYAM_RIGHT, EL_YAMYAM_UP, EL_YAMYAM_DOWN, +#endif }; static int *editor_hl_emerald_mine_club_ptr = editor_hl_emerald_mine_club; static int *editor_el_emerald_mine_club_ptr = editor_el_emerald_mine_club; static int num_editor_hl_emerald_mine_club=SIZEOF_ARRAY_INT(editor_hl_emerald_mine_club); static int num_editor_el_emerald_mine_club=SIZEOF_ARRAY_INT(editor_el_emerald_mine_club); -static int editor_hl_more[] = +static int editor_hl_rnd[] = { EL_INTERNAL_CASCADE_RND_ACTIVE, EL_CHAR('R'), @@ -3401,8 +3592,91 @@ static int editor_hl_more[] = #endif }; -static int editor_el_more[] = +static int editor_el_rnd[] = { +#if 1 + EL_KEY_1, + EL_KEY_2, + EL_KEY_3, + EL_KEY_4, + + EL_GATE_1, + EL_GATE_2, + EL_GATE_3, + EL_GATE_4, + + EL_GATE_1_GRAY, + EL_GATE_2_GRAY, + EL_GATE_3_GRAY, + EL_GATE_4_GRAY, + + EL_ARROW_LEFT, + EL_ARROW_RIGHT, + EL_ARROW_UP, + EL_ARROW_DOWN, + + EL_AMOEBA_DEAD, + EL_AMOEBA_DRY, + EL_AMOEBA_FULL, + EL_GAME_OF_LIFE, + + EL_EMERALD_YELLOW, + EL_EMERALD_RED, + EL_EMERALD_PURPLE, + EL_BIOMAZE, + + EL_WALL_EMERALD_YELLOW, + EL_WALL_EMERALD_RED, + EL_WALL_EMERALD_PURPLE, + EL_WALL_BD_DIAMOND, + + EL_SPEED_PILL, + EL_PACMAN_UP, + EL_TIME_ORB_FULL, + EL_TIME_ORB_EMPTY, + + EL_PACMAN_LEFT, + EL_DARK_YAMYAM, + EL_PACMAN_RIGHT, + EL_EMPTY, + + EL_BLACK_ORB, + EL_PACMAN_DOWN, + EL_LAMP, + EL_LAMP_ACTIVE, + + EL_DYNABOMB_INCREASE_NUMBER, + EL_DYNABOMB_INCREASE_SIZE, + EL_DYNABOMB_INCREASE_POWER, + EL_STONEBLOCK, + + EL_MOLE, + EL_PENGUIN, + EL_PIG, + EL_DRAGON, + + EL_BUG, + EL_MOLE_UP, + EL_BD_BUTTERFLY, + EL_BD_FIREFLY, + + EL_MOLE_LEFT, + EL_SATELLITE, + EL_MOLE_RIGHT, + EL_PACMAN, + + EL_SPACESHIP, + EL_MOLE_DOWN, + EL_INVISIBLE_STEELWALL, + EL_INVISIBLE_WALL, + + EL_EXPANDABLE_WALL, + EL_EXPANDABLE_WALL_HORIZONTAL, + EL_EXPANDABLE_WALL_VERTICAL, + EL_EXPANDABLE_WALL_ANY, + +#else + EL_KEY_1, EL_KEY_2, EL_KEY_3, @@ -3423,7 +3697,12 @@ static int editor_el_more[] = EL_ARROW_UP, EL_ARROW_DOWN, + EL_AMOEBA_DEAD, + EL_AMOEBA_DRY, EL_AMOEBA_FULL, + EL_EMPTY, + + EL_EMPTY, EL_EMERALD_YELLOW, EL_EMERALD_RED, EL_EMERALD_PURPLE, @@ -3482,11 +3761,12 @@ static int editor_el_more[] = EL_INVISIBLE_WALL, EL_SPEED_PILL, EL_BLACK_ORB, +#endif }; -static int *editor_hl_more_ptr = editor_hl_more; -static int *editor_el_more_ptr = editor_el_more; -static int num_editor_hl_more = SIZEOF_ARRAY_INT(editor_hl_more); -static int num_editor_el_more = SIZEOF_ARRAY_INT(editor_el_more); +static int *editor_hl_rnd_ptr = editor_hl_rnd; +static int *editor_el_rnd_ptr = editor_el_rnd; +static int num_editor_hl_rnd = SIZEOF_ARRAY_INT(editor_hl_rnd); +static int num_editor_el_rnd = SIZEOF_ARRAY_INT(editor_el_rnd); static int editor_hl_sokoban[] = { @@ -3542,6 +3822,59 @@ static int editor_hl_supaplex[] = static int editor_el_supaplex[] = { +#if 1 + EL_SP_MURPHY, + EL_EMPTY, + EL_SP_BASE, + EL_SP_BUGGY_BASE, + + EL_SP_INFOTRON, + EL_SP_ZONK, + EL_SP_SNIKSNAK, + EL_SP_ELECTRON, + + EL_SP_DISK_RED, + EL_SP_DISK_ORANGE, + EL_SP_DISK_YELLOW, + EL_SP_TERMINAL, + + EL_SP_EXIT_CLOSED, + EL_SP_PORT_HORIZONTAL, + EL_SP_PORT_VERTICAL, + EL_SP_PORT_ANY, + + EL_SP_PORT_LEFT, + EL_SP_PORT_RIGHT, + EL_SP_PORT_UP, + EL_SP_PORT_DOWN, + + EL_SP_GRAVITY_PORT_LEFT, + EL_SP_GRAVITY_PORT_RIGHT, + EL_SP_GRAVITY_PORT_UP, + EL_SP_GRAVITY_PORT_DOWN, + + EL_SP_HARDWARE_GRAY, + EL_SP_HARDWARE_GREEN, + EL_SP_HARDWARE_BLUE, + EL_SP_HARDWARE_RED, + + EL_SP_HARDWARE_BASE_1, + EL_SP_HARDWARE_BASE_2, + EL_SP_HARDWARE_BASE_3, + EL_SP_HARDWARE_BASE_4, + + EL_SP_HARDWARE_BASE_5, + EL_SP_HARDWARE_BASE_6, + EL_SP_HARDWARE_YELLOW, + EL_SP_CHIP_TOP, + + EL_SP_CHIP_SINGLE, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + EL_SP_CHIP_BOTTOM, + +#else + #if 1 EL_EMPTY, #else @@ -3595,6 +3928,7 @@ static int editor_el_supaplex[] = EL_SP_HARDWARE_BASE_6, EL_SP_CHIP_TOP, EL_SP_CHIP_BOTTOM, +#endif }; static int *editor_hl_supaplex_ptr = editor_hl_supaplex; static int *editor_el_supaplex_ptr = editor_el_supaplex; @@ -3633,6 +3967,74 @@ static int editor_hl_diamond_caves[] = static int editor_el_diamond_caves[] = { +#if 1 + EL_PEARL, + EL_CRYSTAL, + EL_WALL_PEARL, + EL_WALL_CRYSTAL, + + EL_CONVEYOR_BELT_1_LEFT, + EL_CONVEYOR_BELT_1_MIDDLE, + EL_CONVEYOR_BELT_1_RIGHT, + EL_CONVEYOR_BELT_1_SWITCH_MIDDLE, + + EL_CONVEYOR_BELT_2_LEFT, + EL_CONVEYOR_BELT_2_MIDDLE, + EL_CONVEYOR_BELT_2_RIGHT, + EL_CONVEYOR_BELT_2_SWITCH_MIDDLE, + + EL_CONVEYOR_BELT_3_LEFT, + EL_CONVEYOR_BELT_3_MIDDLE, + EL_CONVEYOR_BELT_3_RIGHT, + EL_CONVEYOR_BELT_3_SWITCH_MIDDLE, + + EL_CONVEYOR_BELT_4_LEFT, + EL_CONVEYOR_BELT_4_MIDDLE, + EL_CONVEYOR_BELT_4_RIGHT, + EL_CONVEYOR_BELT_4_SWITCH_MIDDLE, + + EL_CONVEYOR_BELT_1_SWITCH_LEFT, + EL_CONVEYOR_BELT_2_SWITCH_LEFT, + EL_CONVEYOR_BELT_3_SWITCH_LEFT, + EL_CONVEYOR_BELT_4_SWITCH_LEFT, + + EL_CONVEYOR_BELT_1_SWITCH_RIGHT, + EL_CONVEYOR_BELT_2_SWITCH_RIGHT, + EL_CONVEYOR_BELT_3_SWITCH_RIGHT, + EL_CONVEYOR_BELT_4_SWITCH_RIGHT, + + EL_SWITCHGATE_CLOSED, + EL_SWITCHGATE_OPEN, + EL_SWITCHGATE_SWITCH_UP, + EL_SWITCHGATE_SWITCH_DOWN, + + EL_TIMEGATE_CLOSED, + EL_TIMEGATE_OPEN, + EL_TIMEGATE_SWITCH, + EL_EMPTY, + + EL_SIGN_EXCLAMATION, + EL_SIGN_STOP, + EL_LIGHT_SWITCH, + EL_LIGHT_SWITCH_ACTIVE, + + EL_STEELWALL_SLIPPERY, + EL_INVISIBLE_SAND, + EL_LANDMINE, + EL_EMPTY, + + EL_SHIELD_NORMAL, + EL_SHIELD_DEADLY, + EL_EXTRA_TIME, + EL_EMPTY, + + EL_ENVELOPE_1, + EL_ENVELOPE_2, + EL_ENVELOPE_3, + EL_ENVELOPE_4, + +#else + EL_PEARL, EL_CRYSTAL, EL_WALL_PEARL, @@ -3697,6 +4099,8 @@ static int editor_el_diamond_caves[] = EL_SHIELD_DEADLY, EL_EXTRA_TIME, EL_EMPTY, + +#endif }; static int *editor_hl_diamond_caves_ptr = editor_hl_diamond_caves; static int *editor_el_diamond_caves_ptr = editor_el_diamond_caves; @@ -4222,8 +4626,23 @@ static int editor_el_custom[] = EL_CUSTOM_START + 252, EL_CUSTOM_START + 253, EL_CUSTOM_START + 254, - EL_CUSTOM_START + 255, + EL_CUSTOM_START + 255 +}; +static int *editor_hl_custom_ptr = editor_hl_custom; +static int *editor_el_custom_ptr = editor_el_custom; +static int num_editor_hl_custom = SIZEOF_ARRAY_INT(editor_hl_custom); +static int num_editor_el_custom = SIZEOF_ARRAY_INT(editor_el_custom); + +static int editor_hl_reference[] = +{ + EL_INTERNAL_CASCADE_REF_ACTIVE, + EL_CHAR('R'), + EL_CHAR('E'), + EL_CHAR('F') +}; +static int editor_el_reference[] = +{ EL_TRIGGER_PLAYER, EL_TRIGGER_ELEMENT, EL_TRIGGER_CE_VALUE, @@ -4234,10 +4653,10 @@ static int editor_el_custom[] = EL_CURRENT_CE_VALUE, EL_CURRENT_CE_SCORE }; -static int *editor_hl_custom_ptr = editor_hl_custom; -static int *editor_el_custom_ptr = editor_el_custom; -static int num_editor_hl_custom = SIZEOF_ARRAY_INT(editor_hl_custom); -static int num_editor_el_custom = SIZEOF_ARRAY_INT(editor_el_custom); +static int *editor_hl_reference_ptr = editor_hl_reference; +static int *editor_el_reference_ptr = editor_el_reference; +static int num_editor_hl_reference = SIZEOF_ARRAY_INT(editor_hl_reference); +static int num_editor_el_reference = SIZEOF_ARRAY_INT(editor_el_reference); static int editor_hl_group[] = { @@ -4372,6 +4791,13 @@ static boolean use_el_empty = FALSE; static int *editor_elements = NULL; /* dynamically allocated */ static int num_editor_elements = 0; /* dynamically determined */ +static boolean setup_editor_show_always = TRUE; +static boolean setup_editor_cascade_never = FALSE; + +static int editor_hl_unused[] = { EL_EMPTY }; +static int *editor_hl_unused_ptr = editor_hl_unused; +static int num_editor_hl_unused = 0; + static struct { boolean *setup_value; @@ -4387,6 +4813,12 @@ static struct } editor_elements_info[] = { + { + &setup_editor_show_always, + &setup_editor_cascade_never, + &editor_hl_unused_ptr, &num_editor_hl_unused, + &editor_el_players_ptr, &num_editor_el_players + }, { &setup.editor.el_boulderdash, &setup.editor_cascade.el_bd, @@ -4408,8 +4840,8 @@ editor_elements_info[] = { &setup.editor.el_more, &setup.editor_cascade.el_rnd, - &editor_hl_more_ptr, &num_editor_hl_more, - &editor_el_more_ptr, &num_editor_el_more + &editor_hl_rnd_ptr, &num_editor_hl_rnd, + &editor_el_rnd_ptr, &num_editor_el_rnd }, { &setup.editor.el_sokoban, @@ -4447,6 +4879,12 @@ editor_elements_info[] = &editor_hl_custom_ptr, &num_editor_hl_custom, &editor_el_custom_ptr, &num_editor_el_custom }, + { + &setup.editor.el_custom, + &setup.editor_cascade.el_ref, + &editor_hl_reference_ptr, &num_editor_hl_reference, + &editor_el_reference_ptr, &num_editor_el_reference + }, { &setup.editor.el_custom, &setup.editor_cascade.el_ge, @@ -5710,6 +6148,10 @@ static void CreateScrollbarGadgets() GDI_SCROLLBAR_ITEMS_MAX, items_max, GDI_SCROLLBAR_ITEMS_VISIBLE, items_visible, GDI_SCROLLBAR_ITEM_POSITION, item_position, + GDI_WHEEL_AREA_X, scrollbar_info[i].wheel_x, + GDI_WHEEL_AREA_Y, scrollbar_info[i].wheel_y, + GDI_WHEEL_AREA_WIDTH, scrollbar_info[i].wheel_width, + GDI_WHEEL_AREA_HEIGHT, scrollbar_info[i].wheel_height, GDI_STATE, GD_BUTTON_UNPRESSED, GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y1, GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2, @@ -6726,6 +7168,8 @@ static void CopyCustomElementPropertiesToEditor(int element) HAS_CHANGE_EVENT(element, CE_BLOCKED) ? CE_BLOCKED : HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT : HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED : + HAS_CHANGE_EVENT(element, CE_VALUE_CHANGES) ? CE_VALUE_CHANGES : + HAS_CHANGE_EVENT(element, CE_SCORE_CHANGES) ? CE_SCORE_CHANGES : HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO) ? CE_VALUE_GETS_ZERO : HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO) ? CE_SCORE_GETS_ZERO : custom_element_change.direct_action); @@ -6751,6 +7195,8 @@ static void CopyCustomElementPropertiesToEditor(int element) HAS_CHANGE_EVENT(element, CE_EXPLOSION_OF_X) ? CE_EXPLOSION_OF_X : HAS_CHANGE_EVENT(element, CE_MOVE_OF_X) ? CE_MOVE_OF_X : HAS_CHANGE_EVENT(element, CE_CREATION_OF_X) ? CE_CREATION_OF_X : + HAS_CHANGE_EVENT(element, CE_VALUE_CHANGES_OF_X) ? CE_VALUE_CHANGES_OF_X : + HAS_CHANGE_EVENT(element, CE_SCORE_CHANGES_OF_X) ? CE_SCORE_CHANGES_OF_X : HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO_OF_X) ? CE_VALUE_GETS_ZERO_OF_X : HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO_OF_X) ? CE_SCORE_GETS_ZERO_OF_X : custom_element_change.other_action); @@ -6869,6 +7315,8 @@ static void CopyCustomElementPropertiesToGame(int element) custom_element_change_events[CE_BLOCKED] = FALSE; custom_element_change_events[CE_IMPACT] = FALSE; custom_element_change_events[CE_SMASHED] = FALSE; + custom_element_change_events[CE_VALUE_CHANGES] = FALSE; + custom_element_change_events[CE_SCORE_CHANGES] = FALSE; custom_element_change_events[CE_VALUE_GETS_ZERO] = FALSE; custom_element_change_events[CE_SCORE_GETS_ZERO] = FALSE; custom_element_change_events[custom_element_change.direct_action] = @@ -6894,6 +7342,8 @@ static void CopyCustomElementPropertiesToGame(int element) custom_element_change_events[CE_EXPLOSION_OF_X] = FALSE; custom_element_change_events[CE_MOVE_OF_X] = FALSE; custom_element_change_events[CE_CREATION_OF_X] = FALSE; + custom_element_change_events[CE_VALUE_CHANGES_OF_X] = FALSE; + custom_element_change_events[CE_SCORE_CHANGES_OF_X] = FALSE; custom_element_change_events[CE_VALUE_GETS_ZERO_OF_X] = FALSE; custom_element_change_events[CE_SCORE_GETS_ZERO_OF_X] = FALSE; custom_element_change_events[custom_element_change.other_action] = @@ -7473,7 +7923,7 @@ static void DrawEnvelopeTextArea(int envelope_nr) DrawBackground(gi->x, gi->y, gi->width, gi->height); if (envelope_nr != -1) - textarea_info[id].value = level.envelope_text[envelope_nr]; + textarea_info[id].value = level.envelope[envelope_nr].text; ModifyGadget(gi, GDI_AREA_SIZE, *counterbutton_info[ED_COUNTER_ID_ENVELOPE_XSIZE].value, @@ -7802,6 +8252,7 @@ static struct #if 1 { EL_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION }, + { EL_LIGHT_SWITCH, &level.time_light, TEXT_DURATION }, { EL_LIGHT_SWITCH_ACTIVE, &level.time_light, TEXT_DURATION }, { EL_SHIELD_NORMAL, &level.shield_normal_time, TEXT_DURATION }, { EL_SHIELD_DEADLY, &level.shield_deadly_time, TEXT_DURATION }, @@ -7935,6 +8386,7 @@ static void DrawPropertiesConfig() int player_nr = GET_PLAYER_NR(properties_element); /* these properties can be set for every player individually */ + drawingarea_info[ED_DRAWING_ID_START_ELEMENT].value = &level.start_element[player_nr]; drawingarea_info[ED_DRAWING_ID_ARTWORK_ELEMENT].value = @@ -7942,13 +8394,17 @@ static void DrawPropertiesConfig() drawingarea_info[ED_DRAWING_ID_EXPLOSION_ELEMENT].value = &level.explosion_element[player_nr]; - /* these properties can be set for every player individually */ checkbutton_info[ED_CHECKBUTTON_ID_USE_START_ELEMENT].value = &level.use_start_element[player_nr]; checkbutton_info[ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT].value = &level.use_artwork_element[player_nr]; checkbutton_info[ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT].value = &level.use_explosion_element[player_nr]; + checkbutton_info[ED_CHECKBUTTON_ID_INITIAL_GRAVITY].value = + &level.initial_player_gravity[player_nr]; + + selectbox_info[ED_SELECTBOX_ID_PLAYER_SPEED].value = + &level.initial_player_stepsize[player_nr]; MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID); MapCheckbuttonGadget(properties_element == EL_SP_MURPHY ? @@ -7960,6 +8416,7 @@ static void DrawPropertiesConfig() MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_START_ELEMENT); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_GRAVITY); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE); MapDrawingArea(ED_DRAWING_ID_START_ELEMENT); @@ -8015,8 +8472,8 @@ static void DrawPropertiesConfig() int counter2_id = ED_COUNTER_ID_ENVELOPE_YSIZE; int envelope_nr = properties_element - EL_ENVELOPE_1; - counterbutton_info[counter1_id].value = &level.envelope_xsize[envelope_nr]; - counterbutton_info[counter2_id].value = &level.envelope_ysize[envelope_nr]; + counterbutton_info[counter1_id].value = &level.envelope[envelope_nr].xsize; + counterbutton_info[counter2_id].value = &level.envelope[envelope_nr].ysize; /* display counter to choose size of envelope text area */ MapCounterButtons(ED_COUNTER_ID_ENVELOPE_XSIZE); @@ -8837,11 +9294,20 @@ static void SetTextCursor(int unused_sx, int unused_sy, int sx, int sy, DrawAreaBorder(sx, sy, sx, sy); } +static void CheckLevelBorderElement(boolean redraw_playfield) +{ + int last_border_element = BorderElement; + + SetBorderElement(); + + if (redraw_playfield && BorderElement != last_border_element) + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); +} + static void CopyLevelToUndoBuffer(int mode) { static boolean accumulated_undo = FALSE; boolean new_undo_buffer_position = TRUE; - int last_border_element; int x, y; switch (mode) @@ -8874,10 +9340,7 @@ static void CopyLevelToUndoBuffer(int mode) UndoBuffer[undo_buffer_position][x][y] = Feld[x][y]; /* check if drawing operation forces change of border style */ - last_border_element = BorderElement; - SetBorderElement(); - if (BorderElement != last_border_element) - DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + CheckLevelBorderElement(TRUE); level.changed = TRUE; } @@ -9763,7 +10226,12 @@ static void HandleControlButtons(struct GadgetInfo *gi) for (x = 0; x < lev_fieldx; x++) for (y = 0; y < lev_fieldy; y++) Feld[x][y] = UndoBuffer[undo_buffer_position][x][y]; - DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos,level_ypos); + + /* check if undo operation forces change of border style */ + CheckLevelBorderElement(FALSE); + + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + break; case GADGET_ID_INFO: @@ -10007,7 +10475,8 @@ void HandleLevelEditorKeyInput(Key key) (key == KSYM_Delete && new_element_shift > element_shift)) break; - if (IS_EDITOR_CASCADE(editor_elements[i])) + /* jump to next cascade block (or to start of element list) */ + if (i == 0 || IS_EDITOR_CASCADE(editor_elements[i])) new_element_shift = i; }