X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Femerald.h;h=38a2656f29ca7fd2d31b882cd5a063e52132c4fe;hb=56be9668e4ff713c8fff9b105f0913dd4d373cb1;hp=6faa9e61f0d2507137650ab5fcdcca64d866beed;hpb=98a8e95036df3ed4440cf9742b9aabd7e9e0e7e3;p=rocksndiamonds.git diff --git a/src/game_em/emerald.h b/src/game_em/emerald.h index 6faa9e61..38a2656f 100644 --- a/src/game_em/emerald.h +++ b/src/game_em/emerald.h @@ -48,19 +48,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // constant definitions // ---------------------------------------------------------------------------- -/* define these to use additional elements */ -#define EM_ENGINE_USE_ADDITIONAL_ELEMENTS +#define CAVE_WIDTH MAX_PLAYFIELD_WIDTH +#define CAVE_HEIGHT MAX_PLAYFIELD_HEIGHT -/* one border for Zborder elements, one border for steelwall, if needed */ -#define EM_MAX_CAVE_WIDTH (MAX_PLAYFIELD_WIDTH + 2 + 2) -#define EM_MAX_CAVE_HEIGHT (MAX_PLAYFIELD_HEIGHT + 2 + 2) +/* 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: + the element names (mostly) 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 start with 'Y' indicate moving or active elements - elements that end with 'B' are the "backside" of moving elements ----------------------------------------------------------------------------- */ @@ -69,95 +71,41 @@ enum { Xblank = 0, - Xacid_splash_e, - Xacid_splash_w, + Xsplash_e, + Xsplash_w, - Xpush_stone_e, - Xpush_stone_w, - Xpush_nut_e, - Xpush_nut_w, - Xpush_spring_e, - Xpush_spring_w, - Xpush_emerald_e, - Xpush_emerald_w, - Xpush_diamond_e, - Xpush_diamond_w, - Xpush_bomb_e, - Xpush_bomb_w, + Xplant, + Yplant, - Xstone, - Xstone_pause, - Xstone_fall, - Ystone_s, - Ystone_sB, - Ystone_e, - Ystone_eB, - Ystone_w, - Ystone_wB, + Xacid_1, + Xacid_2, + Xacid_3, + Xacid_4, + Xacid_5, + Xacid_6, + Xacid_7, + Xacid_8, - Xnut, - Xnut_pause, - Xnut_fall, - Ynut_s, - Ynut_sB, - Ynut_e, - Ynut_eB, - Ynut_w, - Ynut_wB, + Xfake_acid_1, /* newly added to EM engine */ + Xfake_acid_2, + Xfake_acid_3, + Xfake_acid_4, + Xfake_acid_5, + Xfake_acid_6, + Xfake_acid_7, + Xfake_acid_8, - Xbug_1_n, - Xbug_1_e, - Xbug_1_s, - Xbug_1_w, - Xbug_2_n, - Xbug_2_e, - Xbug_2_s, - Xbug_2_w, - Ybug_n, - Ybug_nB, - Ybug_e, - Ybug_eB, - Ybug_s, - Ybug_sB, - Ybug_w, - Ybug_wB, - Ybug_w_n, - Ybug_n_e, - Ybug_e_s, - Ybug_s_w, - Ybug_e_n, - Ybug_s_e, - Ybug_w_s, - Ybug_n_w, - Ybug_stone, - Ybug_spring, + Xgrass, + Ygrass_nB, + Ygrass_eB, + Ygrass_sB, + Ygrass_wB, - Xtank_1_n, - Xtank_1_e, - Xtank_1_s, - Xtank_1_w, - Xtank_2_n, - Xtank_2_e, - Xtank_2_s, - Xtank_2_w, - Ytank_n, - Ytank_nB, - Ytank_e, - Ytank_eB, - Ytank_s, - Ytank_sB, - Ytank_w, - Ytank_wB, - Ytank_w_n, - Ytank_n_e, - Ytank_e_s, - Ytank_s_w, - Ytank_e_n, - Ytank_s_e, - Ytank_w_s, - Ytank_n_w, - Ytank_stone, - Ytank_spring, + Xdirt, + Ydirt_nB, + Ydirt_eB, + Ydirt_sB, + Ydirt_wB, Xandroid, Xandroid_1_n, @@ -185,22 +133,6 @@ enum Yandroid_nw, Yandroid_nwB, - Xspring, - Xspring_pause, - Xspring_e, - Xspring_w, - Xspring_fall, - Yspring_s, - Yspring_sB, - Yspring_e, - Yspring_eB, - Yspring_w, - Yspring_wB, - Yspring_alien_e, - Yspring_alien_eB, - Yspring_alien_w, - Yspring_alien_wB, - Xeater_n, Xeater_e, Xeater_w, @@ -229,6 +161,60 @@ enum Yalien_stone, Yalien_spring, + Xbug_1_n, + Xbug_1_e, + Xbug_1_s, + Xbug_1_w, + Xbug_2_n, + Xbug_2_e, + Xbug_2_s, + Xbug_2_w, + Ybug_n, + Ybug_nB, + Ybug_e, + Ybug_eB, + Ybug_s, + Ybug_sB, + Ybug_w, + Ybug_wB, + Ybug_w_n, + Ybug_n_e, + Ybug_e_s, + Ybug_s_w, + Ybug_e_n, + Ybug_s_e, + Ybug_w_s, + Ybug_n_w, + Ybug_stone, + Ybug_spring, + + Xtank_1_n, + Xtank_1_e, + Xtank_1_s, + Xtank_1_w, + Xtank_2_n, + Xtank_2_e, + Xtank_2_s, + Xtank_2_w, + Ytank_n, + Ytank_nB, + Ytank_e, + Ytank_eB, + Ytank_s, + Ytank_sB, + Ytank_w, + Ytank_wB, + Ytank_w_n, + Ytank_n_e, + Ytank_e_s, + Ytank_s_w, + Ytank_e_n, + Ytank_s_e, + Ytank_w_s, + Ytank_n_w, + Ytank_stone, + Ytank_spring, + Xemerald, Xemerald_pause, Xemerald_fall, @@ -240,7 +226,6 @@ enum Yemerald_w, Yemerald_wB, Yemerald_blank, - Ynut_stone, Xdiamond, Xdiamond_pause, @@ -255,14 +240,15 @@ enum Ydiamond_blank, Ydiamond_stone, - Xdrip_fall, - Xdrip_stretch, - Xdrip_stretchB, - Xdrip, - Ydrip_1_s, - Ydrip_1_sB, - Ydrip_2_s, - Ydrip_2_sB, + Xstone, + Xstone_pause, + Xstone_fall, + Ystone_s, + Ystone_sB, + Ystone_e, + Ystone_eB, + Ystone_w, + Ystone_wB, Xbomb, Xbomb_pause, @@ -275,6 +261,80 @@ enum Ybomb_wB, Ybomb_blank, + Xnut, + Xnut_pause, + Xnut_fall, + Ynut_s, + Ynut_sB, + Ynut_e, + Ynut_eB, + Ynut_w, + Ynut_wB, + Ynut_stone, + + Xspring, + Xspring_pause, + Xspring_e, + Xspring_w, + Xspring_fall, + Yspring_s, + Yspring_sB, + Yspring_e, + Yspring_eB, + Yspring_w, + Yspring_wB, + Yspring_alien_e, + Yspring_alien_eB, + Yspring_alien_w, + Yspring_alien_wB, + + Xpush_emerald_e, + Xpush_emerald_w, + Xpush_diamond_e, + Xpush_diamond_w, + Xpush_stone_e, + Xpush_stone_w, + Xpush_bomb_e, + Xpush_bomb_w, + Xpush_nut_e, + Xpush_nut_w, + Xpush_spring_e, + Xpush_spring_w, + + Xdynamite, + Ydynamite_blank, + Xdynamite_1, + Xdynamite_2, + Xdynamite_3, + Xdynamite_4, + + Xkey_1, + Xkey_2, + Xkey_3, + Xkey_4, + Xkey_5, + Xkey_6, + Xkey_7, + Xkey_8, + + Xdoor_1, + Xdoor_2, + Xdoor_3, + Xdoor_4, + Xdoor_5, + Xdoor_6, + Xdoor_7, + Xdoor_8, + + Xfake_door_1, + Xfake_door_2, + Xfake_door_3, + Xfake_door_4, + Xfake_door_5, + Xfake_door_6, + Xfake_door_7, + Xfake_door_8, + Xballoon, Yballoon_n, Yballoon_nB, @@ -285,61 +345,12 @@ enum Yballoon_w, Yballoon_wB, - Xgrass, - Ygrass_nB, - Ygrass_eB, - Ygrass_sB, - Ygrass_wB, - - Xdirt, - Ydirt_nB, - Ydirt_eB, - Ydirt_sB, - Ydirt_wB, - - Xacid_ne, - Xacid_se, - Xacid_s, - Xacid_sw, - Xacid_nw, - Xacid_1, - Xacid_2, - Xacid_3, - Xacid_4, - Xacid_5, - Xacid_6, - Xacid_7, - Xacid_8, - Xball_1, Yball_1, Xball_2, Yball_2, Yball_blank, -#ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS - Ykey_1_blank, - Ykey_2_blank, - Ykey_3_blank, - Ykey_4_blank, - Ykey_5_blank, - Ykey_6_blank, - Ykey_7_blank, - Ykey_8_blank, - Ylenses_blank, - Ymagnify_blank, - Ygrass_blank, - Ydirt_blank, -#endif - - Xslidewall_ns, /* growing wall */ - Yslidewall_ns_blank, - Xslidewall_ew, - Yslidewall_ew_blank, - - Xwonderwall, - XwonderwallB, - Xamoeba_1, Xamoeba_2, Xamoeba_3, @@ -349,51 +360,45 @@ enum Xamoeba_7, Xamoeba_8, - Xdoor_1, - Xdoor_2, - Xdoor_3, - Xdoor_4, - Xdoor_5, - Xdoor_6, - Xdoor_7, - Xdoor_8, - - Xkey_1, - Xkey_2, - Xkey_3, - Xkey_4, - Xkey_5, - Xkey_6, - Xkey_7, - Xkey_8, + Xdrip, + Xdrip_fall, + Xdrip_stretch, + Xdrip_stretchB, + Ydrip_1_s, + Ydrip_1_sB, + Ydrip_2_s, + Ydrip_2_sB, - Xwind_n, - Xwind_e, - Xwind_s, - Xwind_w, - Xwind_any, - Xwind_stop, + Xwonderwall, + Ywonderwall, - Xexit, - Xexit_1, - Xexit_2, - Xexit_3, + Xwheel, + Ywheel, - Xdynamite, - Ydynamite_blank, - Xdynamite_1, - Xdynamite_2, - Xdynamite_3, - Xdynamite_4, + Xswitch, + Yswitch, Xbumper, - XbumperB, + Ybumper, - Xwheel, - XwheelB, + Xacid_nw, + Xacid_ne, + Xacid_sw, + Xacid_s, + Xacid_se, - Xswitch, - XswitchB, + Xfake_blank, + Yfake_blank, + + Xfake_grass, + Yfake_grass, + + Xfake_amoeba, /* dripper */ + Yfake_amoeba, + + Xlenses, + + Xmagnify, Xsand, Xsand_stone, @@ -401,63 +406,37 @@ enum Xsand_stonein_2, Xsand_stonein_3, Xsand_stonein_4, + Xsand_sandstone_1, + Xsand_sandstone_2, + Xsand_sandstone_3, + Xsand_sandstone_4, Xsand_stonesand_1, Xsand_stonesand_2, Xsand_stonesand_3, Xsand_stonesand_4, - -#ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS - Xsand_stonesand_quickout_1, - Xsand_stonesand_quickout_2, -#endif - Xsand_stoneout_1, Xsand_stoneout_2, - Xsand_sandstone_1, - Xsand_sandstone_2, - Xsand_sandstone_3, - Xsand_sandstone_4, - - Xplant, - Yplant, - - Xlenses, - - Xmagnify, - - Xfake_amoeba, /* dripper */ - Xfake_amoebaB, - - Xfake_blank, - Xfake_blankB, + Xsand_stonesand_quickout_1, /* newly added to EM engine */ + Xsand_stonesand_quickout_2, - Xfake_grass, - Xfake_grassB, + Xslide_ns, /* growing wall */ + Yslide_ns_blank, + Xslide_ew, + Yslide_ew_blank, - Xfake_door_1, - Xfake_door_2, - Xfake_door_3, - Xfake_door_4, - Xfake_door_5, - Xfake_door_6, - Xfake_door_7, - Xfake_door_8, + Xwind_n, + Xwind_e, + Xwind_s, + Xwind_w, + Xwind_any, + Xwind_stop, -#ifdef EM_ENGINE_USE_ADDITIONAL_ELEMENTS - Xfake_acid_1, - Xfake_acid_2, - Xfake_acid_3, - Xfake_acid_4, - Xfake_acid_5, - Xfake_acid_6, - Xfake_acid_7, - Xfake_acid_8, -#endif + Xexit, + Xexit_1, + Xexit_2, + Xexit_3, - Xsteel_1, - Xsteel_2, - Xsteel_3, - Xsteel_4, + Xpause, Xwall_1, Xwall_2, @@ -469,6 +448,11 @@ enum Xroundwall_3, Xroundwall_4, + Xsteel_1, + Xsteel_2, + Xsteel_3, + Xsteel_4, + Xdecor_1, Xdecor_2, Xdecor_3, @@ -529,6 +513,19 @@ enum Xalpha_arrow_w, Xalpha_copyr, + Ykey_1_blank, /* newly added to EM engine */ + Ykey_2_blank, + Ykey_3_blank, + Ykey_4_blank, + Ykey_5_blank, + Ykey_6_blank, + Ykey_7_blank, + Ykey_8_blank, + Ylenses_blank, + Ymagnify_blank, + Ygrass_blank, + Ydirt_blank, + Xboom_bug, /* passed from explode to synchro (linked explosion); transition to explode_normal */ Xboom_bomb, /* passed from explode to synchro (linked explosion); @@ -600,7 +597,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 */ @@ -621,40 +618,29 @@ enum // data structure definitions // ---------------------------------------------------------------------------- -struct LEVEL +struct LOGIC { - int home_initial; /* number of players (initial) */ - int home; /* number of players not yet at home */ - /* 0 == all players at home */ - int width; /* playfield width */ int height; /* playfield height */ - int time_seconds; /* available time (seconds) */ - int time_initial; /* available time (initial) */ - int time; /* time remaining (runtime) */ - - boolean killed_out_of_time; /* kill player due to time out */ - - int required_initial; /* emeralds needed (initial) */ - int required; /* emeralds needed (runtime) */ + int left; /* playfield left edge */ + int top; /* playfield top edge */ + int right; /* playfield right edge */ + int bottom; /* playfield bottom edge */ + 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 */ @@ -665,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 */ @@ -677,28 +661,44 @@ 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 */ - short eater_array[8][9]; /* eater data */ - short ball_array[8][8]; /* ball data */ - short android_array[TILE_MAX];/* android clone table */ + 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 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[TILE_MAX]; /* android clone table */ + + short cavebuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; + short nextbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; + short drawbuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; + short boombuf[CAVE_BUFFER_WIDTH][CAVE_BUFFER_HEIGHT]; + + short *cavecol[CAVE_BUFFER_WIDTH]; + short *nextcol[CAVE_BUFFER_WIDTH]; + short *drawcol[CAVE_BUFFER_WIDTH]; + short *boomcol[CAVE_BUFFER_WIDTH]; + + short **cave; + short **next; + short **draw; + short **boom; }; struct PLAYER @@ -713,8 +713,6 @@ struct PLAYER int keys; int anim; - int x_initial; - int y_initial; int x; int y; int oldx;