added option for BD1 magic wall / amoeba bug for native BD engine
[rocksndiamonds.git] / src / game_bd / bd_cave.h
index b3133512ce2d6f2f197e1825223b2175f7497ced..483b54feafcaafdcf99d6ed4d72753ddc8b23585 100644 (file)
@@ -82,7 +82,7 @@ void gd_struct_set_defaults_from_array(void *str, const GdStructDescriptor *prop
 
 // these define the number of the cells in the png file
 #define GD_NUM_OF_CELLS_X      8
-#define GD_NUM_OF_CELLS_Y      46
+#define GD_NUM_OF_CELLS_Y      47
 
 // +80: placeholder for cells which are rendered by the game;
 // for example diamond + arrow = falling diamond
@@ -253,7 +253,7 @@ typedef struct _elements
 } GdElements;
 
 
-typedef char GdString[128];
+typedef char GdString[MAX_LINE_LEN];
 
 typedef struct _highscore
 {
@@ -394,6 +394,9 @@ typedef struct _gd_cave
   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
 
@@ -432,6 +435,7 @@ typedef struct _gd_cave
   int level_slime_permeability_c64[5];  // Appearing in bd 2
   int level_slime_seed_c64[5];          // predictable slime random seed
   boolean slime_predictable;            // predictable random start for slime. yes for plck.
+  boolean slime_correct_random;         // correct random number generator for rendered caves
   GdElement slime_eats_1, slime_converts_1; // slime eats element x and converts to element x;
                                             // for example diamond -> falling diamond
   GdElement slime_eats_2, slime_converts_2; // this is usually stone -> stone_f
@@ -529,6 +533,9 @@ typedef struct _gd_cave
   int hammered_wall_reappear_frame;
   boolean pneumatic_hammer_sound;
 
+  boolean infinite_rockets;             // if true, the player which got a rocket launcher will be
+                                        // able to launch an infinite number of rockets
+
   // internal variables, used during the game. private data :)
 
   // returns range corrected x/y position (points to perfect or line shifting get function)
@@ -582,6 +589,7 @@ typedef struct _gd_cave
   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