X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Femerald.h;h=01219b9ea9726f4a9d743f70117ad05f8aced617;hb=2a4f4ada000ade47a2a04e7f7b4d1d67878a2381;hp=26032ff428c3486bdc6681c0a4618171e887a2ac;hpb=dd11b3af00799f1dcd34481281bb219216ac9a4b;p=rocksndiamonds.git diff --git a/src/game_em/emerald.h b/src/game_em/emerald.h index 26032ff4..01219b9e 100644 --- a/src/game_em/emerald.h +++ b/src/game_em/emerald.h @@ -48,35 +48,48 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // constant definitions // ---------------------------------------------------------------------------- -/* define these to use additional elements */ -#define EM_ENGINE_USE_ADDITIONAL_ELEMENTS +/* maximum cave size */ +#define CAVE_WIDTH MAX_PLAYFIELD_WIDTH +#define CAVE_HEIGHT MAX_PLAYFIELD_HEIGHT -/* with border for steelwall, if needed (when converted from R'n'D level) */ -#define CAVE_WIDTH (MAX_PLAYFIELD_WIDTH + 2) -#define CAVE_HEIGHT (MAX_PLAYFIELD_HEIGHT + 2) - -/* with border for Zborder elements (surrounding the visible playfield) */ -#define CAVE_BUFFER_XOFFSET 1 -#define CAVE_BUFFER_YOFFSET 1 +/* additional padding for Zborder elements and linked cave buffer columns */ +#define CAVE_BUFFER_XOFFSET 4 +#define CAVE_BUFFER_YOFFSET 2 #define CAVE_BUFFER_WIDTH (CAVE_WIDTH + 2 * CAVE_BUFFER_XOFFSET) #define CAVE_BUFFER_HEIGHT (CAVE_HEIGHT + 2 * CAVE_BUFFER_YOFFSET) -/* - ----------------------------------------------------------------------------- - definition of elements used in the Emerald Mine Club engine; - the element names have the following properties: - - elements that start with 'X' can be stored in a level file - - elements that start with 'Y' indicate moving elements - - elements that end with 'B' are the "backside" of moving elements - ----------------------------------------------------------------------------- -*/ + +// ---------------------------------------------------------------------------- +// definition of elements used in the Emerald Mine Club engine; +// the element names (mostly) have the following properties: +// - elements that start with 'X' are not animated (more or less) +// - elements that start with 'Y' are animated elements +// - elements that start with 'Z' are internal elements (without graphics) +// - elements that end with 'B' or '_blank' change to the "Xblank" element +// ---------------------------------------------------------------------------- enum { - Xblank = 0, + Zborder, /* special code to indicate border */ + Zplayer, /* special code to indicate player */ + + Zbug, /* internal bug explosion */ + Ztank, /* internal tank/alien/bomb explosion */ + Zeater, /* internal eater explosion */ + Zdynamite, /* internal dynamite explosion */ + Zboom, /* explosion */ + + Xchain, /* chain explosion; transition to Zboom */ + Xboom_bug, /* bug explosion; transition to Zbug */ + Xboom_tank, /* tank/alien/bomb explosion; transition to Ztank */ + Xboom_android, /* android explosion; transition to Xboom_2 */ + Xboom_1, /* tile explosion; transition to Xboom_2 */ + Xboom_2, /* transition to boom[] */ + + Xblank, - Xacid_splash_e, - Xacid_splash_w, + Xsplash_e, + Xsplash_w, Xplant, Yplant, @@ -90,8 +103,7 @@ enum Xacid_7, Xacid_8, -#ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS - Xfake_acid_1, + Xfake_acid_1, /* newly added to EM engine */ Xfake_acid_2, Xfake_acid_3, Xfake_acid_4, @@ -99,7 +111,15 @@ enum Xfake_acid_6, Xfake_acid_7, Xfake_acid_8, -#endif + + Xfake_acid_1_player, /* newly added to EM engine */ + Xfake_acid_2_player, + Xfake_acid_3_player, + Xfake_acid_4_player, + Xfake_acid_5_player, + Xfake_acid_6_player, + Xfake_acid_7_player, + Xfake_acid_8_player, Xgrass, Ygrass_nB, @@ -115,12 +135,12 @@ enum Xandroid, Xandroid_1_n, - Xandroid_2_n, Xandroid_1_e, - Xandroid_2_e, Xandroid_1_w, - Xandroid_2_w, Xandroid_1_s, + Xandroid_2_n, + Xandroid_2_e, + Xandroid_2_w, Xandroid_2_s, Yandroid_n, Yandroid_nB, @@ -376,16 +396,16 @@ enum Ydrip_2_sB, Xwonderwall, - XwonderwallB, + Ywonderwall, Xwheel, - XwheelB, + Ywheel, Xswitch, - XswitchB, + Yswitch, Xbumper, - XbumperB, + Ybumper, Xacid_nw, Xacid_ne, @@ -394,13 +414,13 @@ enum Xacid_se, Xfake_blank, - Xfake_blankB, + Yfake_blank, Xfake_grass, - Xfake_grassB, + Yfake_grass, - Xfake_amoeba, /* dripper */ - Xfake_amoebaB, + Xfake_amoeba, /* dripper */ + Yfake_amoeba, Xlenses, @@ -422,15 +442,13 @@ enum Xsand_stonesand_4, Xsand_stoneout_1, Xsand_stoneout_2, -#ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS - Xsand_stonesand_quickout_1, + Xsand_stonesand_quickout_1, /* newly added to EM engine */ Xsand_stonesand_quickout_2, -#endif - Xslidewall_ns, /* growing wall */ - Yslidewall_ns_blank, - Xslidewall_ew, - Yslidewall_ew_blank, + Xslide_ns, /* growing wall */ + Yslide_ns_blank, + Xslide_ew, + Yslide_ew_blank, Xwind_n, Xwind_e, @@ -485,7 +503,7 @@ enum Xalpha_8, Xalpha_9, Xalpha_excla, - Xalpha_quote, + Xalpha_apost, Xalpha_comma, Xalpha_minus, Xalpha_perio, @@ -521,8 +539,7 @@ enum Xalpha_arrow_w, Xalpha_copyr, -#ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS - Ykey_1_blank, + Ykey_1_blank, /* newly added to EM engine */ Ykey_2_blank, Ykey_3_blank, Ykey_4_blank, @@ -534,28 +551,8 @@ enum Ymagnify_blank, Ygrass_blank, Ydirt_blank, -#endif - - Xboom_bug, /* passed from explode to synchro (linked explosion); - transition to explode_normal */ - Xboom_bomb, /* passed from explode to synchro (linked explosion); - transition to explode_normal */ - Xboom_android, /* passed from explode to synchro; - transition to boom_2 */ - Xboom_1, /* passed from explode to synchro; - transition to boom_2 */ - Xboom_2, /* transition to boom[] */ - Znormal, /* passed from synchro to explode, only in next[]; - no picture */ - Zdynamite, /* passed from synchro to explode, only in next[]; - no picture */ - Zplayer, /* special code to indicate player; - no picture */ - Zborder, /* special code to indicate border; - no picture */ - - TILE_MAX + GAME_TILE_MAX }; /* other definitions */ @@ -584,7 +581,7 @@ enum enum { - SOUND_blank = 0, /* player walks on blank */ + SOUND_blank, /* player walks on blank */ SOUND_roll, /* player pushes stone/bomb/nut/spring */ SOUND_stone, /* stone hits ground */ SOUND_nut, /* nut hits ground */ @@ -607,7 +604,7 @@ enum SOUND_dirt, /* player digs into dirt */ SOUND_acid, /* acid splashes */ SOUND_ball, /* ball places something */ - SOUND_slidewall, /* slide wall grows */ + SOUND_slide, /* slide wall grows */ SOUND_wonder, /* wonderwall is active */ SOUND_door, /* player goes thru door (gate) */ SOUND_exit_open, /* exit opens */ @@ -628,85 +625,110 @@ enum // data structure definitions // ---------------------------------------------------------------------------- -struct LEVEL +/* structure used by logic() for gameplay */ + +struct PLAYER { - int home_initial; /* number of players (initial) */ - int home; /* number of players not yet at home */ - /* 0 == all players at home */ + int num; /* player number */ + int anim; - int width; /* playfield width */ - int height; /* playfield height */ + int x; + int y; + int prev_x; + int prev_y; - int time_seconds; /* available time (seconds) */ - int time_initial; /* available time (initial) */ - int time; /* time remaining (runtime) */ + boolean exists; /* flag if player exists in cave */ + boolean alive; /* flag if player is alive */ - boolean killed_out_of_time; /* kill player due to time out */ + int dynamite; /* number of pieces of collected dynamite */ + int dynamite_cnt; /* how long the player has held down fire */ + int keys; /* keys the player has collected */ - int required_initial; /* emeralds needed (initial) */ - int required; /* emeralds needed (runtime) */ + int last_move_dir; - int score; /* score */ + boolean joy_n; + boolean joy_e; + boolean joy_s; + boolean joy_w; + boolean joy_snap; + boolean joy_drop; + boolean joy_stick; +}; + +struct LOGIC +{ + int width; /* cave width */ + int height; /* cave height */ - /* all below entries must be filled every time a level is read */ + int left; /* cave left edge */ + int top; /* cave top edge */ + int right; /* cave right edge */ + int bottom; /* cave bottom edge */ + int time; /* time remaining */ + int gems_needed; /* emeralds needed */ + int score; /* score */ + + int eater_score; /* score for killing eater */ 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 */ + int tank_score; /* score for killing tank */ + int slurp_score; /* score for slurping alien with spring */ + int nut_score; /* score for cracking nut to emerald */ + int emerald_score; /* score for collecting emerald */ 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_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 */ - 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_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 exit_score; /* score for entering exit */ + + int android_move_time; /* reset time for android movement */ + int android_clone_time; /* reset time for android cloning */ + int ball_time; /* reset time for ball activity */ + int amoeba_time; /* amoeba growth speed */ + int wonderwall_time; /* reset time for wonderwall activity */ + int wheel_time; /* reset time for wheel activity */ + int wheel_x; /* wheel x position */ + int wheel_y; /* wheel y position */ + int lenses_time; /* reset time for lenses activity */ + int magnify_time; /* reset time for magnifier activity */ + int wind_time; /* reset time for wind activity */ 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 */ - short eater_array[8][9]; /* eater data */ - short ball_array[8][8]; /* ball data */ - short android_array[TILE_MAX];/* android clone table */ + + boolean ball_random; /* flag if ball is random */ + boolean ball_active; /* flag if ball is already active */ + boolean wonderwall_active; /* flag if wonderwall is already active */ + + int wheel_cnt; /* counter for wheel activity */ + int lenses_cnt; /* counter for lenses activity */ + int magnify_cnt; /* counter for magnifier activity */ + int wind_cnt; /* counter for wind activity */ + int android_move_cnt; /* counter for android movement */ + int android_clone_cnt; /* counter for android cloning */ + int ball_cnt; /* counter for ball activity */ + int ball_pos; /* counter for ball array position */ + 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) */ + int home; /* number of players not yet at home */ + /* 0 == all players at home */ + + boolean testmode; /* test mode */ + boolean infinite; /* flag for infinitely wide cave */ + boolean infinite_true; /* flag for truely infinitely wide cave */ + boolean killed_out_of_time; /* kill player due to time out */ + int exit_x, exit_y; /* kludge for playing player exit sound */ + short eater_array[8][9]; /* eater data */ + short ball_array[8][8]; /* ball data */ + short android_array[GAME_TILE_MAX]; /* android clone data */ + short cavebuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; short nextbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; short drawbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; @@ -723,35 +745,4 @@ struct LEVEL short **boom; }; -struct PLAYER -{ - int num; - int exists; - int alive_initial; - int alive; - - int dynamite; - int dynamite_cnt; - int keys; - int anim; - - int x_initial; - int y_initial; - int x; - int y; - int oldx; - int oldy; - - int last_move_dir; - - int joy_n:1; - int joy_e:1; - int joy_s:1; - int joy_w:1; - int joy_snap:1; - int joy_drop:1; - int joy_stick:1; - int joy_spin:1; -}; - #endif // EMERALD_H