From 56be9668e4ff713c8fff9b105f0913dd4d373cb1 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 13 Feb 2020 18:22:08 +0100 Subject: [PATCH] added separate initial and runtime level structure definitions for EM engine --- src/files.c | 4 +-- src/game_em/cave.h | 68 +++++++++++++++++++++++++++++++++++++++++++ src/game_em/emerald.h | 30 ++----------------- src/game_em/export.h | 7 +++-- src/game_em/input.c | 4 +-- src/game_em/main_em.h | 4 +-- src/tools.c | 4 +-- 7 files changed, 83 insertions(+), 38 deletions(-) create mode 100644 src/game_em/cave.h diff --git a/src/files.c b/src/files.c index 04151ff1..15f43aa6 100644 --- a/src/files.c +++ b/src/files.c @@ -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 index 00000000..936f2848 --- /dev/null +++ b/src/game_em/cave.h @@ -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 diff --git a/src/game_em/emerald.h b/src/game_em/emerald.h index 8e17761d..38a2656f 100644 --- a/src/game_em/emerald.h +++ b/src/game_em/emerald.h @@ -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]; diff --git a/src/game_em/export.h b/src/game_em/export.h index a1a0d10b..3089d48f 100644 --- a/src/game_em/export.h +++ b/src/game_em/export.h @@ -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; diff --git a/src/game_em/input.c b/src/game_em/input.c index 75de23c9..7eccf546 100644 --- a/src/game_em/input.c +++ b/src/game_em/input.c @@ -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; diff --git a/src/game_em/main_em.h b/src/game_em/main_em.h index 7bed7362..0e988595 100644 --- a/src/game_em/main_em.h +++ b/src/game_em/main_em.h @@ -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; diff --git a/src/tools.c b/src/tools.c index e19a352f..3f8c3adf 100644 --- a/src/tools.c +++ b/src/tools.c @@ -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; -- 2.34.1