/*
-----------------------------------------------------------------------------
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
-----------------------------------------------------------------------------
*/
Ydrip_2_sB,
Xwonderwall,
- XwonderwallB,
+ Ywonderwall,
Xwheel,
- XwheelB,
+ Ywheel,
Xswitch,
- XswitchB,
+ Yswitch,
Xbumper,
- XbumperB,
+ Ybumper,
Xacid_nw,
Xacid_ne,
Xacid_se,
Xfake_blank,
- Xfake_blankB,
+ Yfake_blank,
Xfake_grass,
- Xfake_grassB,
+ Yfake_grass,
Xfake_amoeba, /* dripper */
- Xfake_amoebaB,
+ Yfake_amoeba,
Xlenses,
struct LEVEL
{
- 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 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) */
- boolean killed_out_of_time; /* kill player due to time out */
-
int required_initial; /* emeralds needed (initial) */
int required; /* emeralds needed (runtime) */
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 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];
int keys;
int anim;
- int x_initial;
- int y_initial;
int x;
int y;
int oldx;