added separate initial and runtime level structure definitions for EM engine
authorHolger Schemel <info@artsoft.org>
Thu, 13 Feb 2020 17:22:08 +0000 (18:22 +0100)
committerHolger Schemel <info@artsoft.org>
Tue, 19 May 2020 16:19:56 +0000 (18:19 +0200)
src/files.c
src/game_em/cave.h [new file with mode: 0644]
src/game_em/emerald.h
src/game_em/export.h
src/game_em/input.c
src/game_em/main_em.h
src/tools.c

index 04151ff10bbecb90ec2f92ad7e11fddf32dfaf8b..15f43aa6d8d5218c38765930beff51dfd7a94ecf 100644 (file)
@@ -3515,7 +3515,7 @@ static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level)
     { 2, 2 },
   };
   struct LevelInfo_EM *level_em = level->native_em_level;
-  struct LEVEL *cav = level_em->cav;
+  struct CAVE *cav = level_em->cav;
   int i, j, x, y;
 
   cav->width  = MIN(level->fieldx, MAX_PLAYFIELD_WIDTH);
@@ -3623,7 +3623,7 @@ static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
     { 2, 2 },
   };
   struct LevelInfo_EM *level_em = level->native_em_level;
-  struct LEVEL *cav = level_em->cav;
+  struct CAVE *cav = level_em->cav;
   int i, j, x, y;
 
   level->fieldx = MIN(cav->width,  MAX_LEV_FIELDX);
diff --git a/src/game_em/cave.h b/src/game_em/cave.h
new file mode 100644 (file)
index 0000000..936f284
--- /dev/null
@@ -0,0 +1,68 @@
+/* 2009-01-25 23:00:34
+ *
+ * intermediate cave structure
+ */
+
+#ifndef CAVE_H
+#define CAVE_H
+
+struct CAVE
+{
+  int width;                   /* playfield width */
+  int height;                  /* playfield height */
+
+  int player_x[MAX_PLAYERS];   /* player x pos */
+  int player_y[MAX_PLAYERS];   /* player y pos */
+
+  int time_seconds;            /* available time (seconds) */
+  int required_initial;                /* emeralds needed */
+
+  int alien_score;             /* score for killing alien */
+  int amoeba_time;             /* amoeba speed */
+  int android_move_cnt_initial;        /* android move counter (initial) */
+  int android_move_time;       /* android move reset time */
+  int android_clone_cnt_initial;/* android clone counter (initial) */
+  int android_clone_time;      /* android clone reset time */
+  int ball_cnt;                        /* ball counter */
+  int ball_pos;                        /* ball array pos counter */
+  int ball_random;             /* ball is random flag */
+  int ball_state_initial;      /* ball active flag (initial) */
+  int ball_time;               /* ball reset time */
+  int bug_score;               /* score for killing bug */
+  int diamond_score;           /* score for collecting diamond */
+  int dynamite_score;          /* score for collecting dynamite */
+  int eater_pos;               /* eater array pos */
+  int eater_score;             /* score for killing eater */
+  int emerald_score;           /* score for collecting emerald */
+  int exit_score;              /* score for entering exit */
+  int key_score;               /* score for colleting key */
+  int lenses_cnt_initial;      /* lenses counter (initial) */
+  int lenses_score;            /* score for collecting lenses */
+  int lenses_time;             /* lenses reset time */
+  int magnify_cnt_initial;     /* magnify counter (initial) */
+  int magnify_score;           /* score for collecting magnifier */
+  int magnify_time;            /* magnify reset time */
+  int nut_score;               /* score for cracking nut */
+  int shine_cnt;               /* shine counter for emerald/diamond */
+  int slurp_score;             /* score for slurping alien */
+  int tank_score;              /* score for killing tank */
+  int wheel_cnt_initial;       /* wheel counter (initial) */
+  int wheel_x_initial;         /* wheel x pos (initial) */
+  int wheel_y_initial;         /* wheel y pos (initial) */
+  int wheel_time;              /* wheel reset time */
+  int wind_cnt_initial;                /* wind counter (initial) */
+  int wind_direction_initial;  /* wind direction (initial) */
+  int wind_time;               /* wind reset time */
+  int wonderwall_state_initial;        /* wonderwall active flag (initial) */
+  int wonderwall_time_initial; /* wonderwall time (initial) */
+
+  int num_ball_arrays;         /* number of ball data arrays used */
+
+  short eater_array[8][9];             /* eater data */
+  short ball_array[8][8];              /* ball data */
+  short android_array[TILE_MAX];       /* android clone table */
+
+  short cave_raw[CAVE_WIDTH][CAVE_HEIGHT];
+};
+
+#endif // CAVE_H
index 8e17761d8785402c1b32625cedcbf1b7565837c7..38a2656f29ca7fd2d31b882cd5a063e52132c4fe 100644 (file)
@@ -618,7 +618,7 @@ enum
 // data structure definitions
 // ----------------------------------------------------------------------------
 
-struct LEVEL
+struct LOGIC
 {
   int width;                   /* playfield width */
   int height;                  /* playfield height */
@@ -628,32 +628,19 @@ struct LEVEL
   int right;                   /* playfield right edge */
   int bottom;                  /* playfield bottom edge */
 
-  int player_x[MAX_PLAYERS];   /* player x pos */
-  int player_y[MAX_PLAYERS];   /* player y pos */
-
-  int time_seconds;            /* available time (seconds) */
-  int time_initial;            /* available time (initial) */
-  int time;                    /* time remaining (runtime) */
-
-  int required_initial;                /* emeralds needed (initial) */
-  int required;                        /* emeralds needed (runtime) */
-
+  int time;                    /* time remaining */
+  int required;                        /* emeralds needed */
   int score;                   /* score */
 
-  /* all below entries must be filled every time a level is read */
-
   int alien_score;             /* score for killing alien */
   int amoeba_time;             /* amoeba speed */
-  int android_move_cnt_initial;        /* android move counter (initial) */
   int android_move_cnt;                /* android move counter */
   int android_move_time;       /* android move reset time */
-  int android_clone_cnt_initial;/* android clone counter (initial) */
   int android_clone_cnt;       /* android clone counter */
   int android_clone_time;      /* android clone reset time */
   int ball_cnt;                        /* ball counter */
   int ball_pos;                        /* ball array pos counter */
   int ball_random;             /* ball is random flag */
-  int ball_state_initial;      /* ball active flag (initial) */
   int ball_state;              /* ball active flag */
   int ball_time;               /* ball reset time */
   int bug_score;               /* score for killing bug */
@@ -664,11 +651,9 @@ struct LEVEL
   int emerald_score;           /* score for collecting emerald */
   int exit_score;              /* score for entering exit */
   int key_score;               /* score for colleting key */
-  int lenses_cnt_initial;      /* lenses counter (initial) */
   int lenses_cnt;              /* lenses counter */
   int lenses_score;            /* score for collecting lenses */
   int lenses_time;             /* lenses reset time */
-  int magnify_cnt_initial;     /* magnify counter (initial) */
   int magnify_cnt;             /* magnify counter */
   int magnify_score;           /* score for collecting magnifier */
   int magnify_time;            /* magnify reset time */
@@ -676,21 +661,14 @@ struct LEVEL
   int shine_cnt;               /* shine counter for emerald/diamond */
   int slurp_score;             /* score for slurping alien */
   int tank_score;              /* score for killing tank */
-  int wheel_cnt_initial;       /* wheel counter (initial) */
   int wheel_cnt;               /* wheel counter */
-  int wheel_x_initial;         /* wheel x pos (initial) */
   int wheel_x;                 /* wheel x pos */
-  int wheel_y_initial;         /* wheel y pos (initial) */
   int wheel_y;                 /* wheel y pos */
   int wheel_time;              /* wheel reset time */
-  int wind_cnt_initial;                /* wind counter (initial) */
   int wind_cnt;                        /* wind time counter */
-  int wind_direction_initial;  /* wind direction (initial) */
   int wind_direction;          /* wind direction */
   int wind_time;               /* wind reset time */
-  int wonderwall_state_initial;        /* wonderwall active flag (initial) */
   int wonderwall_state;                /* wonderwall active flag */
-  int wonderwall_time_initial; /* wonderwall time (initial) */
   int wonderwall_time;         /* wonderwall time */
 
   int num_ball_arrays;         /* number of ball data arrays used */
@@ -707,8 +685,6 @@ struct LEVEL
   short ball_array[8][8];              /* ball data */
   short android_array[TILE_MAX];       /* android clone table */
 
-  short cave_raw[CAVE_WIDTH][CAVE_HEIGHT];
-
   short cavebuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
   short nextbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
   short drawbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT];
index a1a0d10bd8b921f99ef243efcfacc16a7ccbc500..3089d48f3f5e3e3c3b9051e00121434a5bcfa2d5 100644 (file)
@@ -6,6 +6,7 @@
 // ============================================================================
 
 #include "emerald.h"
+#include "cave.h"
 
 
 // ----------------------------------------------------------------------------
@@ -39,7 +40,7 @@ struct GameInfo_EM
   int last_moving_player;
   int last_player_direction[MAX_PLAYERS];
 
-  struct LEVEL *lev;
+  struct LOGIC *lev;
   struct PLAYER *ply[MAX_PLAYERS];
 };
 
@@ -47,7 +48,7 @@ struct LevelInfo_EM
 {
   int file_version;
 
-  struct LEVEL *cav;
+  struct CAVE *cav;
 };
 
 struct GraphicInfo_EM
@@ -73,7 +74,7 @@ struct EngineSnapshotInfo_EM
 {
   struct GameInfo_EM game_em;
   unsigned int RandomEM;
-  struct LEVEL lev;
+  struct LOGIC lev;
   struct PLAYER ply[MAX_PLAYERS];
   int screen_x;
   int screen_y;
index 75de23c96644c7bf1fa40996e161c8b8d14a2a3c..7eccf546178f894186ff1f0e9240cbcc70708e9e 100644 (file)
@@ -8,8 +8,8 @@
 
 unsigned int RandomEM;
 
-struct LEVEL cav;
-struct LEVEL lev;
+struct CAVE cav;
+struct LOGIC lev;
 struct PLAYER ply[MAX_PLAYERS];
 
 extern int screen_x;
index 7bed7362e1951af648f19a1a38f448d80008eac1..0e988595552363b5fda805b893d31d2df7716ece 100644 (file)
@@ -87,8 +87,8 @@ extern int                    SX, SY;
 
 extern unsigned int RandomEM;
 
-extern struct LEVEL cav;
-extern struct LEVEL lev;
+extern struct CAVE cav;
+extern struct LOGIC lev;
 extern struct PLAYER ply[MAX_PLAYERS];
 
 extern struct LevelInfo_EM native_em_level;
index e19a352f9e9909da637a1879f2ce422de45b8864..3f8c3adf8c08ce6b85adb645b1b5dc848f98b58f 100644 (file)
@@ -7751,7 +7751,7 @@ int map_element_EM_to_RND(int element_em)
 void map_android_clone_elements_RND_to_EM(struct LevelInfo *level)
 {
   struct LevelInfo_EM *level_em = level->native_em_level;
-  struct LEVEL *cav = level_em->cav;
+  struct CAVE *cav = level_em->cav;
   int i, j;
 
   for (i = 0; i < TILE_MAX; i++)
@@ -7771,7 +7771,7 @@ void map_android_clone_elements_RND_to_EM(struct LevelInfo *level)
 void map_android_clone_elements_EM_to_RND(struct LevelInfo *level)
 {
   struct LevelInfo_EM *level_em = level->native_em_level;
-  struct LEVEL *cav = level_em->cav;
+  struct CAVE *cav = level_em->cav;
   int i, j;
 
   level->num_android_clone_elements = 0;