// constant definitions
// ----------------------------------------------------------------------------
-/* define these for backwards compatibility */
-#define EM_ENGINE_BAD_ROLL
-#define EM_ENGINE_BAD_SPRING
+/* maximum cave size */
+#define CAVE_WIDTH MAX_PLAYFIELD_WIDTH
+#define CAVE_HEIGHT MAX_PLAYFIELD_HEIGHT
-/* define these to use additional elements */
-#define EM_ENGINE_USE_ADDITIONAL_ELEMENTS
+/* 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)
-/* internal definitions for EM engine */
-#ifdef EM_ENGINE_BAD_ROLL
-#define BAD_ROLL
-#endif
-#ifdef EM_ENGINE_BAD_SPRING
-#define BAD_SPRING
-#endif
-
-/* 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)
-
-/*
- -----------------------------------------------------------------------------
- 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,
- Xacid_splash_e,
- Xacid_splash_w,
+ 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[] */
-#ifdef EM_ENGINE_BAD_ROLL
- 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,
-#endif
+ Xblank,
+
+ Xsplash_e,
+ Xsplash_w,
+
+ Xplant,
+ Yplant,
+
+ Xacid_1,
+ Xacid_2,
+ Xacid_3,
+ Xacid_4,
+ Xacid_5,
+ Xacid_6,
+ Xacid_7,
+ Xacid_8,
+
+ 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,
+
+ Xgrass,
+ Ygrass_nB,
+ Ygrass_eB,
+ Ygrass_sB,
+ Ygrass_wB,
+
+ Xdirt,
+ Ydirt_nB,
+ Ydirt_eB,
+ Ydirt_sB,
+ Ydirt_wB,
+
+ Xandroid,
+ Xandroid_1_n,
+ Xandroid_1_e,
+ Xandroid_1_w,
+ Xandroid_1_s,
+ Xandroid_2_n,
+ Xandroid_2_e,
+ Xandroid_2_w,
+ Xandroid_2_s,
+ Yandroid_n,
+ Yandroid_nB,
+ Yandroid_ne,
+ Yandroid_neB,
+ Yandroid_e,
+ Yandroid_eB,
+ Yandroid_se,
+ Yandroid_seB,
+ Yandroid_s,
+ Yandroid_sB,
+ Yandroid_sw,
+ Yandroid_swB,
+ Yandroid_w,
+ Yandroid_wB,
+ Yandroid_nw,
+ Yandroid_nwB,
+
+ Xeater_n,
+ Xeater_e,
+ Xeater_w,
+ Xeater_s,
+ Yeater_n,
+ Yeater_nB,
+ Yeater_e,
+ Yeater_eB,
+ Yeater_s,
+ Yeater_sB,
+ Yeater_w,
+ Yeater_wB,
+ Yeater_stone,
+ Yeater_spring,
+
+ Xalien,
+ Xalien_pause,
+ Yalien_n,
+ Yalien_nB,
+ Yalien_e,
+ Yalien_eB,
+ Yalien_s,
+ Yalien_sB,
+ Yalien_w,
+ Yalien_wB,
+ Yalien_stone,
+ Yalien_spring,
- Xstone,
- Xstone_pause,
- Xstone_fall,
- Ystone_s,
- Ystone_sB,
- Ystone_e,
- Ystone_eB,
- Ystone_w,
- Ystone_wB,
- Xnut,
- Xnut_pause,
- Xnut_fall,
- Ynut_s,
- Ynut_sB,
- Ynut_e,
- Ynut_eB,
- Ynut_w,
- Ynut_wB,
Xbug_1_n,
Xbug_1_e,
Xbug_1_s,
Ybug_n_w,
Ybug_stone,
Ybug_spring,
+
Xtank_1_n,
Xtank_1_e,
Xtank_1_s,
Ytank_n_w,
Ytank_stone,
Ytank_spring,
- Xandroid,
- Xandroid_1_n,
- Xandroid_2_n,
- Xandroid_1_e,
- Xandroid_2_e,
- Xandroid_1_w,
- Xandroid_2_w,
- Xandroid_1_s,
- Xandroid_2_s,
- Yandroid_n,
- Yandroid_nB,
- Yandroid_ne,
- Yandroid_neB,
- Yandroid_e,
- Yandroid_eB,
- Yandroid_se,
- Yandroid_seB,
- Yandroid_s,
- Yandroid_sB,
- Yandroid_sw,
- Yandroid_swB,
- Yandroid_w,
- Yandroid_wB,
- 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,
- Xeater_s,
- Yeater_n,
- Yeater_nB,
- Yeater_e,
- Yeater_eB,
- Yeater_s,
- Yeater_sB,
- Yeater_w,
- Yeater_wB,
- Yeater_stone,
- Yeater_spring,
- Xalien,
- Xalien_pause,
- Yalien_n,
- Yalien_nB,
- Yalien_e,
- Yalien_eB,
- Yalien_s,
- Yalien_sB,
- Yalien_w,
- Yalien_wB,
- Yalien_stone,
- Yalien_spring,
+
Xemerald,
Xemerald_pause,
Xemerald_fall,
Yemerald_w,
Yemerald_wB,
Yemerald_blank,
- Ynut_stone,
+
Xdiamond,
Xdiamond_pause,
Xdiamond_fall,
Ydiamond_wB,
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,
Xbomb_fall,
Ybomb_w,
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,
Yballoon_sB,
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,
Xamoeba_6,
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,
- Xwind_n,
- Xwind_e,
- Xwind_s,
- Xwind_w,
- Xwind_any,
- Xwind_stop,
- Xexit,
- Xexit_1,
- Xexit_2,
- Xexit_3,
- Xdynamite,
- Ydynamite_blank,
- Xdynamite_1,
- Xdynamite_2,
- Xdynamite_3,
- Xdynamite_4,
- Xbumper,
- XbumperB,
+
+ Xdrip,
+ Xdrip_fall,
+ Xdrip_stretch,
+ Xdrip_stretchB,
+ Ydrip_1_s,
+ Ydrip_1_sB,
+ Ydrip_2_s,
+ Ydrip_2_sB,
+
+ Xwonderwall,
+ Ywonderwall,
+
Xwheel,
- XwheelB,
+ Ywheel,
+
Xswitch,
- XswitchB,
+ Yswitch,
+
+ Xbumper,
+ Ybumper,
+
+ Xacid_nw,
+ Xacid_ne,
+ Xacid_sw,
+ Xacid_s,
+ Xacid_se,
+
+ Xfake_blank,
+ Yfake_blank,
+
+ Xfake_grass,
+ Yfake_grass,
+
+ Xfake_amoeba, /* dripper */
+ Yfake_amoeba,
+
+ Xlenses,
+
+ Xmagnify,
+
Xsand,
Xsand_stone,
Xsand_stonein_1,
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,
- Xfake_grass,
- Xfake_grassB,
- Xfake_door_1,
- Xfake_door_2,
- Xfake_door_3,
- Xfake_door_4,
- Xfake_door_5,
- Xfake_door_6,
- Xfake_door_7,
- Xfake_door_8,
+ Xsand_stonesand_quickout_1, /* newly added to EM engine */
+ Xsand_stonesand_quickout_2,
-#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
+ Xslide_ns, /* growing wall */
+ Yslide_ns_blank,
+ Xslide_ew,
+ Yslide_ew_blank,
+
+ Xwind_n,
+ Xwind_e,
+ Xwind_s,
+ Xwind_w,
+ Xwind_any,
+ Xwind_stop,
+
+ Xexit,
+ Xexit_1,
+ Xexit_2,
+ Xexit_3,
+
+ Xpause,
- Xsteel_1,
- Xsteel_2,
- Xsteel_3,
- Xsteel_4,
Xwall_1,
Xwall_2,
Xwall_3,
Xwall_4,
+
Xroundwall_1,
Xroundwall_2,
Xroundwall_3,
Xroundwall_4,
+
+ Xsteel_1,
+ Xsteel_2,
+ Xsteel_3,
+ Xsteel_4,
+
Xdecor_1,
Xdecor_2,
Xdecor_3,
Xdecor_10,
Xdecor_11,
Xdecor_12,
+
Xalpha_0,
Xalpha_1,
Xalpha_2,
Xalpha_8,
Xalpha_9,
Xalpha_excla,
- Xalpha_quote,
+ Xalpha_apost,
Xalpha_comma,
Xalpha_minus,
Xalpha_perio,
Xalpha_arrow_w,
Xalpha_copyr,
- 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 */
+ 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,
- TILE_MAX
+ GAME_TILE_MAX
};
/* other definitions */
enum
{
PLY_still = 0,
+
PLY_walk_n,
PLY_walk_e,
PLY_walk_s,
PLY_walk_w,
+
PLY_push_n,
PLY_push_e,
PLY_push_s,
PLY_push_w,
+
PLY_shoot_n,
PLY_shoot_e,
PLY_shoot_s,
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 */
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 */
// 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 */
+
+ int left; /* cave left edge */
+ int top; /* cave top edge */
+ int right; /* cave right edge */
+ int bottom; /* cave bottom edge */
- /* all below entries must be filled every time a level is read */
+ 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_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 killed_out_of_time; /* kill player due to time out */
+
int exit_x, exit_y; /* kludge for playing player exit sound */
-};
-struct PLAYER
-{
- int num;
- int exists;
- int alive_initial;
- int alive;
-
- int dynamite;
- int dynamite_cnt;
- int keys;
- int anim;
+ short eater_array[8][9]; /* eater data */
+ short ball_array[8][8]; /* ball data */
+ short android_array[GAME_TILE_MAX]; /* android clone data */
- int x_initial;
- int y_initial;
- int x;
- int y;
- int oldx;
- int oldy;
+ 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];
- int last_move_dir;
+ short *cavecol[CAVE_BUFFER_WIDTH];
+ short *nextcol[CAVE_BUFFER_WIDTH];
+ short *drawcol[CAVE_BUFFER_WIDTH];
+ short *boomcol[CAVE_BUFFER_WIDTH];
- 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;
+ short **cave;
+ short **next;
+ short **draw;
+ short **boom;
};
#endif // EMERALD_H