// these define the number of the cells in the png file
#define GD_NUM_OF_CELLS_X 8
-#define GD_NUM_OF_CELLS_Y 47
+#define GD_NUM_OF_CELLS_Y 51
// +80: placeholder for cells which are rendered by the game;
// for example diamond + arrow = falling diamond
E_P_PUSHABLE, // can be pushed
E_P_CAN_MOVE, // can move
E_P_CAN_FALL, // can fall
+ E_P_FALLING, // falling
+ E_P_GROWING, // growing (element birth)
};
// properties
#define P_PUSHABLE (1 << E_P_PUSHABLE)
#define P_CAN_MOVE (1 << E_P_CAN_MOVE)
#define P_CAN_FALL (1 << E_P_CAN_FALL)
+#define P_FALLING (1 << E_P_FALLING)
+#define P_GROWING (1 << E_P_GROWING)
// These are states of the magic wall.
typedef enum _magic_wall_state
int level_magic_wall_time[5]; // magic wall 'on' state for each level (seconds)
boolean magic_wall_stops_amoeba; // Turning on magic wall changes amoeba to diamonds.
// Original BD: yes, constkit: no
+ boolean magic_wall_breakscan; // Currently this setting enabled will turn the amoeba to
+ // an enclosed state. To implement buggy BD1 behaviour.
+ boolean magic_timer_zero_is_infinite; // magic wall timer 0 is interpreted as infinite
boolean magic_timer_wait_for_hatching;// magic wall timer does not start before player's birth
boolean magic_wall_sound; // magic wall has sound
int amoeba_2_max_count; // selected amoeba 2 threshold for this level
GdAmoebaState amoeba_state; // state of amoeba 1
GdAmoebaState amoeba_2_state; // state of amoeba 2
+ boolean convert_amoeba_this_frame; // To implement BD1 buggy amoeba+magic wall behaviour.
int magic_wall_time; // magic wall 'on' state for seconds
int slime_permeability; // true random slime
int slime_permeability_c64; // Appearing in bd 2
void gd_cave_set_gdash_defaults(GdCave *cave);
void gd_cave_set_defaults_from_array(GdCave* cave, GdPropertyDefault *defaults);
void gd_cave_correct_visible_size(GdCave *cave);
+void gd_cave_set_random_colors(GdCave *cave, GdColorType type);
void gd_cave_auto_shrink(GdCave *cave);
void gd_cave_setup_for_game(GdCave *cave);
// game playing helpers
#define GD_REDRAW (1 << 10)
-void gd_drawcave_game(const GdCave *cave, int **element_buffer, int **gfx_buffer,
+void gd_drawcave_game(const GdCave *cave,
+ int **element_buffer, int **last_element_buffer, int **gfx_buffer,
boolean bonus_life_flash, int animcycle, boolean hate_invisible_outbox);
// function to copy a GdString
unsigned int gd_cave_adler_checksum(GdCave *cave);
void gd_cave_adler_checksum_more(GdCave *cave, unsigned int *a, unsigned int *b);
+boolean gd_cave_has_levels(GdCave *cave);
+boolean gd_caveset_has_levels(void);
+
#endif // BD_CAVE_H