GADGET_ID_BD_REPLICATORS_ACTIVE,
GADGET_ID_BD_CONVEYOR_BELTS_ACTIVE,
GADGET_ID_BD_CONVEYOR_BELTS_CHANGED,
+ GADGET_ID_BD_CONVEYOR_BELTS_BUGGY,
GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN,
GADGET_ID_BD_HAMMER_WALLS_REAPPEAR,
GADGET_ID_BD_INFINITE_ROCKETS,
ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE,
ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE,
ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED,
+ ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_BUGGY,
ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN,
ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR,
ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS,
NULL, NULL,
"Change direction", "Switch conveyor belt direction"
},
+ {
+ ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_BUGGY,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2),
+ GADGET_ID_BD_CONVEYOR_BELTS_BUGGY, GADGET_ID_NONE,
+ &level.bd_conveyor_belts_buggy,
+ NULL, NULL,
+ "Use buggy conveyor belts", "Bumpy pushing rocks on belt from left"
+ },
{
ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN,
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_BUGGY);
}
if (properties_element == EL_BDX_WATER)
TYPE_BOOLEAN, CONF_VALUE_8_BIT(2),
&li.bd_conveyor_belts_changed, FALSE
},
+ {
+ EL_BDX_CONVEYOR_LEFT, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(3),
+ &li.bd_conveyor_belts_buggy, FALSE
+ },
{
EL_BDX_WATER, -1,
cave->conveyor_belts_active = level->bd_conveyor_belts_active;
cave->conveyor_belts_direction_changed= level->bd_conveyor_belts_changed;
+ cave->conveyor_belts_buggy = level->bd_conveyor_belts_buggy;
cave->water_does_not_flow_down = level->bd_water_cannot_flow_down;
level->bd_conveyor_belts_active = cave->conveyor_belts_active;
level->bd_conveyor_belts_changed = cave->conveyor_belts_direction_changed;
+ level->bd_conveyor_belts_buggy = cave->conveyor_belts_buggy;
level->bd_water_cannot_flow_down = cave->water_does_not_flow_down;
boolean conveyor_belts_active;
boolean conveyor_belts_direction_changed;
+ boolean conveyor_belts_buggy; // use old, buggy conveyor belt behavior
// effects
GdElement explosion_effect; // explosion converts to this element after its last stage.
N_("Direction changed"), CAVE_OFFSET(conveyor_belts_direction_changed), 1,
N_("If the conveyor belts' movement is changed, ie. they are running in the opposite direction. As you can freely use left and right going versions of the conveyor belt in a cave, it is not recommended to change this setting, rather you should select the correct one from the element box when drawing.")
},
+ {
+ "ConveyorBelt.buggy", GD_TYPE_BOOLEAN, 0,
+ N_("Buggy conveyor belt"), CAVE_OFFSET(conveyor_belts_buggy), 1,
+ N_("If it is true, pushing an object onto an active (going right) conveyor belt from the left side results in that object immediately jumping another tile to the right before moving further on the conveyor belt. Otherwise, the conveyor belt works as expected, and objects being pushed onto it from the left side move normally.")
+ },
// water
{
// conveyor belt
{ CAVE_OFFSET(conveyor_belts_active), TRUE },
{ CAVE_OFFSET(conveyor_belts_direction_changed), FALSE },
+ { CAVE_OFFSET(conveyor_belts_buggy), TRUE },
// slime
{ CAVE_OFFSET(slime_predictable), TRUE },
int old_x = getx(cave, raw_x, raw_y);
int old_y = gety(cave, raw_x, raw_y);
- // only move game element if not already moving in that direction
- if (game_bd.game->dir_buffer_to[old_y][old_x] != move_dir)
+ // only move game element if not already moving in that direction (or if buggy)
+ if (game_bd.game->dir_buffer_to[old_y][old_x] != move_dir ||
+ cave->conveyor_belts_buggy)
{
store_dir(cave, x, y, GD_MV_UP, O_SPACE); // place a space ...
store_dir(cave, old_x, old_y, move_dir, tile); // and move element.
int old_x = getx(cave, raw_x, raw_y);
int old_y = gety(cave, raw_x, raw_y);
- // only move game element if not already moving in that direction
- if (game_bd.game->dir_buffer_to[old_y][old_x] != move_dir)
+ // only move game element if not already moving in that direction (or if buggy)
+ if (game_bd.game->dir_buffer_to[old_y][old_x] != move_dir ||
+ cave->conveyor_belts_buggy)
{
store_dir(cave, x, y, GD_MV_DOWN, O_SPACE); // place a space ...
store_dir(cave, old_x, old_y, move_dir, tile); // and move element.
int bd_replicator_create_delay; // BD replicator delay between replications (in BD frames)
boolean bd_conveyor_belts_active; // BD conveyor belts start in active state if enabled
boolean bd_conveyor_belts_changed; // BD conveyor belts direction is changed if enabled
+ boolean bd_conveyor_belts_buggy; // BD conveyor belts setting to implement buggy behaviour
boolean bd_water_cannot_flow_down; // BD water does not flow downwards if enabled
int bd_nut_content; // BD nut contains the specified game element
int bd_hammer_walls_break_delay; // BD hammer time for breaking walls (in BD frames)