GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN,
GADGET_ID_BD_HAMMER_WALLS_REAPPEAR,
GADGET_ID_BD_INFINITE_ROCKETS,
+ GADGET_ID_BD_BUGGY_TELEPORTER,
GADGET_ID_BD_CREATURES_START_BACKWARDS,
GADGET_ID_BD_CREATURES_TURN_ON_HATCHING,
GADGET_ID_BD_GRAVITY_SWITCH_ACTIVE,
ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN,
ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR,
ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS,
+ ED_CHECKBUTTON_ID_BD_BUGGY_TELEPORTER,
ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS,
ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING,
ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE,
NULL, NULL,
"Infinite rockets", "Rocket launcher has infinite rockets"
},
+ {
+ ED_CHECKBUTTON_ID_BD_BUGGY_TELEPORTER,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
+ GADGET_ID_BD_BUGGY_TELEPORTER, GADGET_ID_NONE,
+ &level.bd_buggy_teleporter,
+ NULL, NULL,
+ "Use buggy teleporter", "Teleporter only works from two sides"
+ },
{
ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS,
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
element == EL_BDX_HEAVY_ROCK ||
element == EL_BDX_BOMB ||
element == EL_BDX_ROCKET_LAUNCHER ||
+ element == EL_BDX_TELEPORTER ||
element == EL_BDX_NITRO_PACK ||
element == EL_BDX_SWEET ||
element == EL_BDX_VOODOO_DOLL ||
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS);
}
+ if (properties_element == EL_BDX_TELEPORTER)
+ {
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_BUGGY_TELEPORTER);
+ }
+
if (properties_element == EL_BDX_CREATURE_SWITCH)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS);
&li.bd_infinite_rockets, FALSE
},
+ {
+ EL_BDX_TELEPORTER, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
+ &li.bd_buggy_teleporter, FALSE
+ },
+
{
EL_BDX_SKELETON, -1,
TYPE_INTEGER, CONF_VALUE_8_BIT(1),
cave->infinite_rockets = level->bd_infinite_rockets;
+ cave->buggy_teleporter = level->bd_buggy_teleporter;
+
cave->skeletons_needed_for_pot = level->bd_num_skeletons_needed_for_pot;
cave->skeletons_worth_diamonds = level->bd_skeleton_worth_num_diamonds;
level->bd_infinite_rockets = cave->infinite_rockets;
+ level->bd_buggy_teleporter = cave->buggy_teleporter;
+
level->bd_num_skeletons_needed_for_pot= cave->skeletons_needed_for_pot;
level->bd_skeleton_worth_num_diamonds = cave->skeletons_worth_diamonds;
boolean infinite_rockets; // if true, the player which got a rocket launcher will be
// able to launch an infinite number of rockets
+ boolean buggy_teleporter; // use old, buggy teleporter behavior
+
// internal variables, used during the game. private data :)
// returns range corrected x/y position (points to perfect or line shifting get function)
N_("Infinite rockets"), CAVE_OFFSET(infinite_rockets), 1,
N_("If it is true, the player is able to launch an infinite number of rockets. Otherwise every rocket launcher contains only a single rocket.")
},
+ {
+ "Teleporter.buggy", GD_TYPE_BOOLEAN, 0,
+ N_("Buggy teleporter"), CAVE_OFFSET(buggy_teleporter), 1,
+ N_("If it is true, the player can only enter a teleporter from two sides (right and bottom side). Otherwise, the teleporter works as expected, and the player can enter from all four sides.")
+ },
// pneumatic hammer
{
// bladder
{ CAVE_OFFSET(bladder_converts_by), O_VOODOO },
+ // teleporter
+ { CAVE_OFFSET(buggy_teleporter), TRUE },
+
// SOUND
{ CAVE_OFFSET(amoeba_sound), TRUE },
{ CAVE_OFFSET(magic_wall_sound), TRUE },
// @return True, if the player is teleported, false, if no suitable teleporter found.
static boolean do_teleporter(GdCave *cave, int px, int py, GdDirection player_move)
{
- // start at teleporter position (not at player position!)
- int tx_start = px + gd_dx[player_move];
- int ty_start = py + gd_dy[player_move];
+ // start at teleporter position (not at player position!) unless using buggy behaviour
+ int tx_start = px + (cave->buggy_teleporter ? 0 : gd_dx[player_move]);
+ int ty_start = py + (cave->buggy_teleporter ? 0 : gd_dy[player_move]);
int tx = tx_start;
int ty = ty_start;
boolean bd_hammer_walls_reappear; // BD hammered walls are reappearing after some delay
int bd_hammer_walls_reappear_delay; // BD hammer time for reappearing walls (in BD frames)
boolean bd_infinite_rockets; // BD rocket launcher has infinite number of rockets
+ boolean bd_buggy_teleporter; // BD teleporter setting to implement buggy behaviour
int bd_num_skeletons_needed_for_pot; // BD skeletons amount must be collected to use a pot
int bd_skeleton_worth_num_diamonds; // BD skeleton collected is worth this number of diamonds
int bd_expanding_wall_looks_like; // BD expanding wall looks like this other game element