X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=6ea027d683b2702045223266fd33e2d936e6fd7d;hb=18a8fd0a1f4a2999c0cdff4423a584be49ff868a;hp=c0f072d19a14958b7b7a902ce4cee65eebffe813;hpb=75dd1314a0f4e27158e7536068f3751ef4e0b352;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index c0f072d1..6ea027d6 100644 --- a/src/editor.c +++ b/src/editor.c @@ -429,6 +429,18 @@ enum GADGET_ID_LEVELSET_NUM_LEVELS_DOWN, GADGET_ID_LEVELSET_NUM_LEVELS_TEXT, GADGET_ID_LEVELSET_NUM_LEVELS_UP, + GADGET_ID_BD_CYCLE_DELAY_MS_DOWN, + GADGET_ID_BD_CYCLE_DELAY_MS_TEXT, + GADGET_ID_BD_CYCLE_DELAY_MS_UP, + GADGET_ID_BD_CYCLE_DELAY_C64_DOWN, + GADGET_ID_BD_CYCLE_DELAY_C64_TEXT, + GADGET_ID_BD_CYCLE_DELAY_C64_UP, + GADGET_ID_BD_HATCHING_DELAY_CYCLES_DOWN, + GADGET_ID_BD_HATCHING_DELAY_CYCLES_TEXT, + GADGET_ID_BD_HATCHING_DELAY_CYCLES_UP, + GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN, + GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT, + GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP, GADGET_ID_ELEMENT_VALUE1_DOWN, GADGET_ID_ELEMENT_VALUE1_TEXT, GADGET_ID_ELEMENT_VALUE1_UP, @@ -571,6 +583,7 @@ enum GADGET_ID_TIME_OR_STEPS, GADGET_ID_TIME_SCORE_BASE, GADGET_ID_GAME_ENGINE_TYPE, + GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_LEVELSET_SAVE_MODE, GADGET_ID_WIND_DIRECTION, GADGET_ID_PLAYER_SPEED, @@ -650,6 +663,10 @@ enum GADGET_ID_RANDOM_QUANTITY, GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_BD_INTERMISSION, + GADGET_ID_BD_PAL_TIMING, + GADGET_ID_BD_LINE_SHIFTING_BORDERS, + GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, + GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_STICK_ELEMENT, GADGET_ID_EM_SLIPPERY_GEMS, GADGET_ID_EM_EXPLODES_BY_FIRE, @@ -750,6 +767,10 @@ enum ED_COUNTER_ID_LEVEL_RANDOM_SEED, ED_COUNTER_ID_LEVELSET_NUM_LEVELS, ED_COUNTER_ID_LEVEL_RANDOM, + ED_COUNTER_ID_BD_CYCLE_DELAY_MS, + ED_COUNTER_ID_BD_CYCLE_DELAY_C64, + ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES, + ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS, ED_COUNTER_ID_ELEMENT_VALUE1, ED_COUNTER_ID_ELEMENT_VALUE2, ED_COUNTER_ID_ELEMENT_VALUE3, @@ -864,6 +885,7 @@ enum ED_SELECTBOX_ID_TIME_OR_STEPS, ED_SELECTBOX_ID_TIME_SCORE_BASE, ED_SELECTBOX_ID_GAME_ENGINE_TYPE, + ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, ED_SELECTBOX_ID_WIND_DIRECTION, ED_SELECTBOX_ID_PLAYER_SPEED, @@ -903,6 +925,9 @@ enum #define ED_SELECTBOX_ID_LEVELSET_FIRST ED_SELECTBOX_ID_LEVELSET_SAVE_MODE #define ED_SELECTBOX_ID_LEVELSET_LAST ED_SELECTBOX_ID_LEVELSET_SAVE_MODE +#define ED_SELECTBOX_ID_ENGINE_FIRST ED_SELECTBOX_ID_BD_SCHEDULING_TYPE +#define ED_SELECTBOX_ID_ENGINE_LAST ED_SELECTBOX_ID_BD_SCHEDULING_TYPE + #define ED_SELECTBOX_ID_CUSTOM1_FIRST ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE #define ED_SELECTBOX_ID_CUSTOM1_LAST ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION #define ED_SELECTBOX_ID_CUSTOM2_FIRST ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN @@ -968,6 +993,10 @@ enum ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_3, ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2, ED_CHECKBUTTON_ID_BD_INTERMISSION, + ED_CHECKBUTTON_ID_BD_PAL_TIMING, + ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, + ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW, + ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS, ED_CHECKBUTTON_ID_STICK_ELEMENT, ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS, ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE, @@ -1049,7 +1078,7 @@ enum #define ED_CHECKBUTTON_ID_EDITOR_LAST ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2 #define ED_CHECKBUTTON_ID_ENGINE_FIRST ED_CHECKBUTTON_ID_BD_INTERMISSION -#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_INTERMISSION +#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE @@ -1482,6 +1511,42 @@ static struct &random_placement_value, "random element placement:", NULL, "in" }, + { + ED_COUNTER_ID_BD_CYCLE_DELAY_MS, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(3), + 50, 500, + GADGET_ID_BD_CYCLE_DELAY_MS_DOWN, GADGET_ID_BD_CYCLE_DELAY_MS_UP, + GADGET_ID_BD_CYCLE_DELAY_MS_TEXT, GADGET_ID_NONE, + &level.bd_cycle_delay_ms, + NULL, NULL, "game cycle delay (ms)" + }, + { + ED_COUNTER_ID_BD_CYCLE_DELAY_C64, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(3), + 0, 32, + GADGET_ID_BD_CYCLE_DELAY_C64_DOWN, GADGET_ID_BD_CYCLE_DELAY_C64_UP, + GADGET_ID_BD_CYCLE_DELAY_C64_TEXT, GADGET_ID_NONE, + &level.bd_cycle_delay_c64, + NULL, NULL, "game cycle delay (C64-style)" + }, + { + ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + 1, 40, + GADGET_ID_BD_HATCHING_DELAY_CYCLES_DOWN, GADGET_ID_BD_HATCHING_DELAY_CYCLES_UP, + GADGET_ID_BD_HATCHING_DELAY_CYCLES_TEXT, GADGET_ID_NONE, + &level.bd_hatching_delay_cycles, + NULL, NULL, "hatching delay (cycles)" + }, + { + ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + 1, 40, + GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN, GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP, + GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT, GADGET_ID_NONE, + &level.bd_hatching_delay_seconds, + NULL, NULL, "hatching delay (seconds)" + }, // ---------- element settings: configure (various elements) ---------------- @@ -2528,6 +2593,19 @@ static struct ValueTextInfo options_group_choice_mode[] = { -1, NULL } }; +static struct ValueTextInfo options_bd_scheduling_type[] = +{ + { GD_SCHEDULING_MILLISECONDS, "Milliseconds" }, + { GD_SCHEDULING_BD1, "BD1" }, + { GD_SCHEDULING_BD2, "BD2" }, + { GD_SCHEDULING_PLCK, "Construction Kit" }, + { GD_SCHEDULING_CRDR, "Crazy Dream 7" }, + { GD_SCHEDULING_BD1_ATARI, "Atari BD1" }, + { GD_SCHEDULING_BD2_PLCK_ATARI, "Atari BD2 / PLCK" }, + + { -1, NULL } +}; + static struct ValueTextInfo *action_arg_modes[] = { options_action_mode_none, @@ -2611,6 +2689,15 @@ static struct &level.game_engine_type, NULL, "game engine:", NULL, "game engine" }, + { + ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(1), + GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_NONE, + -1, + options_bd_scheduling_type, + &level.bd_scheduling_type, + NULL, "scheduling type:", NULL, "level timing" + }, { ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), @@ -3254,6 +3341,38 @@ static struct "Boulder Dash game engine settings:", NULL, "intermission", "level is an intermission level" }, + { + ED_CHECKBUTTON_ID_BD_PAL_TIMING, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), + GADGET_ID_BD_PAL_TIMING, GADGET_ID_NONE, + &level.bd_pal_timing, + NULL, NULL, + "PAL timing", "use slower timer (like PAL C64)" + }, + { + ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), + GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE, + &level.bd_line_shifting_borders, + "Compatibility settings:", NULL, + "line-shifting borders", "use line-shifting wrap-around" + }, + { + ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), + GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_NONE, + &level.bd_scan_first_and_last_row, + NULL, NULL, + "scan first and last row", "also process top/bottom border rows" + }, + { + ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), + GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_NONE, + &level.bd_short_explosions, + NULL, NULL, + "short explosions", "use four game cycles for explosions" + }, // ---------- element settings: configure (various elements) ---------------- @@ -4328,7 +4447,7 @@ static int editor_el_boulderdash_native[] = EL_BD_AMOEBA, EL_BD_BUTTERFLY_UP, EL_BD_FIREFLY_UP, - EL_EXIT_CLOSED, + EL_BD_EXIT_CLOSED, EL_BD_BUTTERFLY_LEFT, EL_BD_FIREFLY_LEFT, @@ -4338,7 +4457,7 @@ static int editor_el_boulderdash_native[] = EL_BD_INBOX, EL_BD_BUTTERFLY_DOWN, EL_BD_FIREFLY_DOWN, - EL_EXIT_OPEN, + EL_BD_EXIT_OPEN, EL_BD_AMOEBA_2, EL_BD_BUTTERFLY_2_UP, @@ -10007,9 +10126,25 @@ static void DrawLevelConfigEngine(void) { int i; + // draw counter gadgets + if (level.bd_scheduling_type == GD_SCHEDULING_MILLISECONDS) + { + MapCounterButtons(ED_COUNTER_ID_BD_CYCLE_DELAY_MS); + MapCounterButtons(ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES); + } + else + { + MapCounterButtons(ED_COUNTER_ID_BD_CYCLE_DELAY_C64); + MapCounterButtons(ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS); + } + // draw checkbutton gadgets for (i = ED_CHECKBUTTON_ID_ENGINE_FIRST; i <= ED_CHECKBUTTON_ID_ENGINE_LAST; i++) MapCheckbuttonGadget(i); + + // draw selectbox gadgets + for (i = ED_SELECTBOX_ID_ENGINE_FIRST; i <= ED_SELECTBOX_ID_ENGINE_LAST; i++) + MapSelectboxGadget(i); } static void DrawLevelConfigWindow(void) @@ -14520,6 +14655,11 @@ static void HandleSelectboxGadgets(struct GadgetInfo *gi) ReinitializeElementList(); ModifyEditorElementList(); } + else if (type_id == ED_SELECTBOX_ID_BD_SCHEDULING_TYPE) + { + // update BD cycle delay counter gadgets depending on BD scheduling type + DrawLevelConfigWindow(); + } // do not mark level as modified for certain non-level-changing gadgets if (type_id == ED_SELECTBOX_ID_LEVELSET_SAVE_MODE ||