changed constant number of eater arrays to variable for EM game engine
authorHolger Schemel <info@artsoft.org>
Tue, 1 Sep 2020 18:18:53 +0000 (20:18 +0200)
committerHolger Schemel <info@artsoft.org>
Tue, 1 Sep 2020 18:31:41 +0000 (20:31 +0200)
This makes it possible to create and play levels with a number of
eater arrays other than eight (which was a contant value before)
when using the EM game engine.

src/files.c
src/game_em/cave.c
src/game_em/cave.h
src/game_em/convert.c
src/game_em/emerald.h
src/game_em/logic.c

index 3162e629cf126ba102c242a32018ccad2074f711..7b64735ffb160826a5d5311eea97977ff7287a8b 100644 (file)
@@ -3541,6 +3541,8 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level)
   cav->key_score       = level->score[SC_KEY];
   cav->exit_score      = level->score[SC_TIME_BONUS];
 
+  cav->num_eater_arrays        = level->num_yamyam_contents;
+
   for (i = 0; i < MAX_ELEMENT_CONTENTS; i++)
     for (y = 0; y < 3; y++)
       for (x = 0; x < 3; x++)
@@ -3649,9 +3651,9 @@ static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
   level->score[SC_KEY]         = cav->key_score;
   level->score[SC_TIME_BONUS]  = cav->exit_score;
 
-  level->num_yamyam_contents = MAX_ELEMENT_CONTENTS;
+  level->num_yamyam_contents   = cav->num_eater_arrays;
 
-  for (i = 0; i < level->num_yamyam_contents; i++)
+  for (i = 0; i < MAX_ELEMENT_CONTENTS; i++)
     for (y = 0; y < 3; y++)
       for (x = 0; x < 3; x++)
        level->yamyam_content[i].e[x][y] =
index e501a8917438f117cfab4a55796e1c918937a258..c620133cf35c6de0146460f1106e86256aa8d4ef 100644 (file)
@@ -58,6 +58,7 @@ void setLevelInfoToDefaults_EM(void)
   cav.wind_time                = 0;
   cav.wind_direction   = 0;
 
+  cav.num_eater_arrays = 8;
   cav.num_ball_arrays  = 8;
 
   cav.testmode         = FALSE;
index d1a9090bf3aea83bc170070d9fa6a0cad86421fb..2b6ccef8ee05cae33ca4d80c3492cd8cadfacbfd 100644 (file)
@@ -252,6 +252,7 @@ struct CAVE
   int wind_time;               /* reset time for wind activity */
   int wind_direction;          /* wind direction */
 
+  int num_eater_arrays;                /* number of eater data arrays used */
   int num_ball_arrays;         /* number of ball data arrays used */
 
   boolean testmode;            /* flag for test mode */
index 9b8f0a8e8e8d3e690d80f4340a964bd51026e25d..993810648ea39c8e94941010a0d30cb6be9bb9cb 100644 (file)
@@ -365,7 +365,8 @@ void prepare_em_level(void)
 
   lev.killed_out_of_time = FALSE;
 
-  lev.num_ball_arrays = cav.num_ball_arrays;
+  lev.num_eater_arrays = cav.num_eater_arrays;
+  lev.num_ball_arrays  = cav.num_ball_arrays;
 
   for (i = 0; i < 8; i++)
     for (j = 0; j < 9; j++)
index 63009f63d3f67d332debda4dd93ab87481f04e64..629d66e399999587a8a8d436b358ec0f6b013f43 100644 (file)
@@ -702,6 +702,7 @@ struct LOGIC
   int eater_pos;               /* counter for eater array position */
   int shine_cnt;               /* counter for emerald/diamond shining */
 
+  int num_eater_arrays;                /* number of eater data arrays used */
   int num_ball_arrays;         /* number of ball data arrays used */
 
   int home_initial;            /* number of players (initial) */
index ba9c05e5301b331f4cb64afc8398aff3d84190ca..68a977aad53bb02c072445e020b63ac5264a35f7 100644 (file)
@@ -165,7 +165,7 @@ static void Lboom_eater(int x, int y)
   boom[x][y+1]   = lev.eater_array[lev.eater_pos][7];
   boom[x+1][y+1] = lev.eater_array[lev.eater_pos][8];
 
-  lev.eater_pos = (lev.eater_pos + 1) % 8;
+  lev.eater_pos = (lev.eater_pos + 1) % lev.num_eater_arrays;
 
 #if PLAY_ELEMENT_SOUND
   play_element_sound(x, y, SOUND_boom, Xeater_n);