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,
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,
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,
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,
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,
#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
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,
#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
&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) ----------------
{ -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,
&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),
"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) ----------------
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,
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,
{
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)
}
#define TEXT_COLLECTING "Score for collecting"
-#define TEXT_COLLECTING_EXTRA "Extra score for collecting"
+#define TEXT_COLLECTING_EXTRA "Score for extra diamonds"
#define TEXT_SMASHING "Score for smashing"
#define TEXT_SLURPING "Score for slurping robot"
#define TEXT_CRACKING "Score for cracking"
{
int i;
+ // special case: empty space customization only available in R'n'D game engine
+ if (element == EL_EMPTY_SPACE && level.game_engine_type != GAME_ENGINE_TYPE_RND)
+ return FALSE;
+
if (IS_GEM(element) ||
IS_CUSTOM_ELEMENT(element) ||
IS_GROUP_ELEMENT(element) ||
if (IS_BD_PLAYER_ELEMENT(properties_element))
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS);
- if (IS_GEM(properties_element))
+ // special case: slippery walls option for gems only available in R'n'D game engine
+ if (IS_GEM(properties_element) && level.game_engine_type == GAME_ENGINE_TYPE_RND)
{
checkbutton_info[ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS].y =
ED_ELEMENT_SETTINGS_XPOS(properties_element == EL_BD_DIAMOND ? 2 : 1);
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 ||