rnd-20050314-1-src
[rocksndiamonds.git] / src / game_em / main_em.h
index 2a422f6d02b2b2a7ef7849b2a5005a072b7ca261..17cb9f73df67ebc4380f9b546301b18936068e1e 100644 (file)
@@ -362,6 +362,18 @@ enum
   Xfake_door_6,
   Xfake_door_7,
   Xfake_door_8,
+
+#if 1
+  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
+
   Xsteel_1,
   Xsteel_2,
   Xsteel_3,
@@ -474,10 +486,12 @@ enum
   SAMPLE_crack,                /* stone hits nut */
   SAMPLE_bug,          /* bug moves */
   SAMPLE_tank,         /* tank moves */
-  SAMPLE_android,      /* android places something */
+  SAMPLE_android_clone,        /* android places something */
+  SAMPLE_android_move, /* android moves */
   SAMPLE_spring,       /* spring hits ground/wall/bumper, stone hits spring */
   SAMPLE_slurp,                /* spring kills alien */
-  SAMPLE_eater,                /* eater sits/eats diamond */
+  SAMPLE_eater,                /* eater sits */
+  SAMPLE_eater_eat,    /* eater eats diamond */
   SAMPLE_alien,                /* alien moves */
   SAMPLE_collect,      /* player collects object */
   SAMPLE_diamond,      /* diamond/emerald hits ground */
@@ -491,7 +505,8 @@ enum
   SAMPLE_grow,         /* growing wall grows */
   SAMPLE_wonder,       /* wonderwall is active */
   SAMPLE_door,         /* player goes thru door (gate) */
-  SAMPLE_exit,         /* player goes into exit */
+  SAMPLE_exit_open,    /* exit opens */
+  SAMPLE_exit_leave,   /* player goes into exit */
   SAMPLE_dynamite,     /* player places dynamite */
   SAMPLE_tick,         /* dynamite ticks */
   SAMPLE_press,                /* player presses wheel/wind/switch */
@@ -505,76 +520,79 @@ enum
 
 struct LEVEL
 {
-  unsigned int home_initial;          /* number of players (initial) */
-  unsigned int home;                  /* number of players not yet at home */
-                                      /* 0 == all players at home */
-
-  unsigned int width;                 /* playfield width */
-  unsigned int height;                /* playfield height */
-
-  unsigned int time_seconds;          /* available time (seconds) */
-  unsigned int time_initial;          /* available time (initial) */
-  unsigned int time;                  /* time remaining (runtime) */
-
-  unsigned int required_initial;      /* emeralds needed (initial) */
-  unsigned int required;              /* emeralds needed (runtime) */
-
-  unsigned int score;                 /* score */
-
-  /* fill in all below /every/ time you read a level */
-  unsigned int alien_score;           /* alien popped by stone/spring score */
-  unsigned int amoeba_time;           /* amoeba speed */
-  unsigned int android_move_cnt_initial; /* android move time counter (initial) */
-  unsigned int android_move_cnt;      /* android move time counter */
-  unsigned int android_move_time;     /* android move reset time */
-  unsigned int android_clone_cnt_initial; /* android clone time counter (initial) */
-  unsigned int android_clone_cnt;     /* android clone time counter */
-  unsigned int android_clone_time;    /* android clone reset time */
-  unsigned int ball_cnt;              /* ball time counter */
-  unsigned int ball_pos;              /* ball array pos counter */
-  unsigned int ball_random;           /* ball is random flag */
-  unsigned int ball_state_initial;    /* ball currently on flag (initial) */
-  unsigned int ball_state;            /* ball currently on flag */
-  unsigned int ball_time;             /* ball reset time */
-  unsigned int bug_score;             /* bug popped by stone/spring score */
-  unsigned int diamond_score;         /* diamond collect score */
-  unsigned int dynamite_score;        /* dynamite collect scoer*/
-  unsigned int eater_pos;             /* eater array pos */
-  unsigned int eater_score;           /* eater popped by stone/spring score */
-  unsigned int emerald_score;         /* emerald collect score */
-  unsigned int exit_score;            /* exit score */
-  unsigned int key_score;             /* key collect score */
-  unsigned int lenses_cnt_initial;    /* lenses time counter (initial) */
-  unsigned int lenses_cnt;            /* lenses time counter */
-  unsigned int lenses_score;          /* lenses collect score */
-  unsigned int lenses_time;           /* lenses reset time */
-  unsigned int magnify_cnt_initial;   /* magnify time counter (initial) */
-  unsigned int magnify_cnt;           /* magnify time counter */
-  unsigned int magnify_score;         /* magnify collect score */
-  unsigned int magnify_time;          /* magnify reset time */
-  unsigned int nut_score;             /* nut crack score */
-  unsigned int shine_cnt;             /* shine counter for emerald/diamond */
-  unsigned int slurp_score;           /* slurp alien score */
-  unsigned int tank_score;            /* tank popped by stone/spring */
-  unsigned int wheel_cnt_initial;     /* wheel time counter (initial) */
-  unsigned int wheel_cnt;             /* wheel time counter */
-  unsigned int wheel_x_initial;       /* wheel x pos (initial) */
-  unsigned int wheel_x;               /* wheel x pos */
-  unsigned int wheel_y_initial;       /* wheel y pos (initial) */
-  unsigned int wheel_y;               /* wheel y pos */
-  unsigned int wheel_time;            /* wheel reset time */
-  unsigned int wind_cnt_initial;      /* wind time counter (initial) */
-  unsigned int wind_cnt;              /* wind time counter */
-  unsigned int wind_direction_initial;/* wind direction (initial) */
-  unsigned int wind_direction;        /* wind direction */
-  unsigned int wind_time;             /* wind reset time */
-  unsigned int wonderwall_state_initial; /* wonderwall currently on flag (initial) */
-  unsigned int wonderwall_state;      /* wonderwall currently on flag */
-  unsigned int wonderwall_time_initial;/* wonderwall time (initial) */
-  unsigned int wonderwall_time;       /* wonderwall time */
-  unsigned short eater_array[8][9];   /* eater data */
-  unsigned short ball_array[8][8];    /* ball data */
-  unsigned short android_array[TILE_MAX]; /* android clone table */
+  unsigned int home_initial;           /* number of players (initial) */
+  unsigned int home;                   /* number of players not yet at home */
+                                       /* 0 == all players at home */
+
+  unsigned int width;                  /* playfield width */
+  unsigned int height;                 /* playfield height */
+
+  unsigned int time_seconds;           /* available time (seconds) */
+  unsigned int time_initial;           /* available time (initial) */
+  unsigned int time;                   /* time remaining (runtime) */
+
+  boolean killed_out_of_time;          /* kill player due to time out */
+
+  unsigned int required_initial;       /* emeralds needed (initial) */
+  unsigned int required;               /* emeralds needed (runtime) */
+
+  unsigned int score;                  /* score */
+
+  /* all below entries must be filled every time a level is read */
+
+  unsigned int alien_score;            /* score for killing alien */
+  unsigned int amoeba_time;            /* amoeba speed */
+  unsigned int android_move_cnt_initial;/* android move counter (initial) */
+  unsigned int android_move_cnt;       /* android move counter */
+  unsigned int android_move_time;      /* android move reset time */
+  unsigned int android_clone_cnt_initial;/* android clone counter (initial) */
+  unsigned int android_clone_cnt;      /* android clone counter */
+  unsigned int android_clone_time;     /* android clone reset time */
+  unsigned int ball_cnt;               /* ball counter */
+  unsigned int ball_pos;               /* ball array pos counter */
+  unsigned int ball_random;            /* ball is random flag */
+  unsigned int ball_state_initial;     /* ball active flag (initial) */
+  unsigned int ball_state;             /* ball active flag */
+  unsigned int ball_time;              /* ball reset time */
+  unsigned int bug_score;              /* score for killing bug */
+  unsigned int diamond_score;          /* score for collecting diamond */
+  unsigned int dynamite_score;         /* score for collecting dynamite */
+  unsigned int eater_pos;              /* eater array pos */
+  unsigned int eater_score;            /* score for killing eater */
+  unsigned int emerald_score;          /* score for collecting emerald */
+  unsigned int exit_score;             /* score for entering exit */
+  unsigned int key_score;              /* score for colleting key */
+  unsigned int lenses_cnt_initial;     /* lenses counter (initial) */
+  unsigned int lenses_cnt;             /* lenses counter */
+  unsigned int lenses_score;           /* score for collecting lenses */
+  unsigned int lenses_time;            /* lenses reset time */
+  unsigned int magnify_cnt_initial;    /* magnify counter (initial) */
+  unsigned int magnify_cnt;            /* magnify counter */
+  unsigned int magnify_score;          /* score for collecting magnifier */
+  unsigned int magnify_time;           /* magnify reset time */
+  unsigned int nut_score;              /* score for cracking nut */
+  unsigned int shine_cnt;              /* shine counter for emerald/diamond */
+  unsigned int slurp_score;            /* score for slurping alien */
+  unsigned int tank_score;             /* score for killing tank */
+  unsigned int wheel_cnt_initial;      /* wheel counter (initial) */
+  unsigned int wheel_cnt;              /* wheel counter */
+  unsigned int wheel_x_initial;                /* wheel x pos (initial) */
+  unsigned int wheel_x;                        /* wheel x pos */
+  unsigned int wheel_y_initial;                /* wheel y pos (initial) */
+  unsigned int wheel_y;                        /* wheel y pos */
+  unsigned int wheel_time;             /* wheel reset time */
+  unsigned int wind_cnt_initial;       /* wind counter (initial) */
+  unsigned int wind_cnt;               /* wind time counter */
+  unsigned int wind_direction_initial; /* wind direction (initial) */
+  unsigned int wind_direction;         /* wind direction */
+  unsigned int wind_time;              /* wind reset time */
+  unsigned int wonderwall_state_initial;/* wonderwall active flag (initial) */
+  unsigned int wonderwall_state;       /* wonderwall active flag */
+  unsigned int wonderwall_time_initial;        /* wonderwall time (initial) */
+  unsigned int wonderwall_time;                /* wonderwall time */
+  unsigned short eater_array[8][9];    /* eater data */
+  unsigned short ball_array[8][8];     /* ball data */
+  unsigned short android_array[TILE_MAX];/* android clone table */
 };
 
 struct PLAYER
@@ -595,11 +613,14 @@ struct PLAYER
   unsigned int oldx;
   unsigned int oldy;
 
+  unsigned int last_move_dir;
+
   unsigned joy_n:1;
   unsigned joy_e:1;
   unsigned joy_s:1;
   unsigned joy_w:1;
-  unsigned joy_fire:1;
+  unsigned joy_snap:1;
+  unsigned joy_drop:1;
   unsigned joy_stick:1;
   unsigned joy_spin:1;
 };
@@ -626,10 +647,10 @@ struct LevelInfo_EM
 {
   int file_version;
 
+  unsigned short cave[EM_MAX_CAVE_WIDTH][EM_MAX_CAVE_HEIGHT];
+
   struct LEVEL *lev;
   struct PLAYER *ply1, *ply2;
-
-  unsigned short cave[EM_MAX_CAVE_WIDTH][EM_MAX_CAVE_HEIGHT];
 };
 
 struct GraphicInfo_EM
@@ -640,11 +661,13 @@ struct GraphicInfo_EM
   int dst_offset_x, dst_offset_y;
   int width, height;
 
-  boolean has_crumbled_graphics;
   Bitmap *crumbled_bitmap;
   int crumbled_src_x, crumbled_src_y;
   int crumbled_border_size;
 
+  boolean has_crumbled_graphics;
+  boolean preserve_background;
+
   int unique_identifier;       /* used to identify needed screen updates */
 };