rnd-20020321-1-src
[rocksndiamonds.git] / src / main.h
index f82ff3336500ed7b7be233bc7200eaf1e44875fc..86377ccf152a4df2741a069c899cc16518f20584 100644 (file)
@@ -17,6 +17,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -96,6 +97,7 @@
 #define EP_BIT_BELT            (1 << 0)
 #define EP_BIT_BELT_SWITCH     (1 << 1)
 #define EP_BIT_TUBE            (1 << 2)
+#define EP_BIT_EM_SLIPPERY_WALL        (1 << 3)
 
 #define IS_AMOEBALIVE(e)       (Elementeigenschaften1[e] & EP_BIT_AMOEBALIVE)
 #define IS_AMOEBOID(e)         (Elementeigenschaften1[e] & EP_BIT_AMOEBOID)
 #define IS_BELT(e)             (Elementeigenschaften2[e] & EP_BIT_BELT)
 #define IS_BELT_SWITCH(e)      (Elementeigenschaften2[e] & EP_BIT_BELT_SWITCH)
 #define IS_TUBE(e)             (Elementeigenschaften2[e] & EP_BIT_TUBE)
+#define IS_EM_SLIPPERY_WALL(e) (Elementeigenschaften2[e] & EP_BIT_EM_SLIPPERY_WALL)
 
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
@@ -260,13 +263,6 @@ struct SetupInfo
   struct SetupInputInfo input[MAX_PLAYERS];
 };
 
-struct SetupFileList
-{
-  char *token;
-  char *value;
-  struct SetupFileList *next;
-};
-
 struct PlayerInfo
 {
   boolean present;             /* player present in level playfield */
@@ -276,7 +272,7 @@ struct PlayerInfo
   int index_nr, client_nr, element_nr;
 
   byte action;                 /* action from local input device */
-  byte effective_action;       /* action aknowledged from network server
+  byte effective_action;       /* action acknowledged from network server
                                   or summarized over all configured input
                                   devices when in single player mode */
   byte programmed_action;      /* action forced by game itself (like moving
@@ -297,6 +293,7 @@ struct PlayerInfo
   int move_delay_value;
 
   int last_move_dir;
+  int is_moving;
 
   unsigned long push_delay;
   unsigned long push_delay_value;
@@ -319,8 +316,12 @@ struct PlayerInfo
 
 struct LevelInfo
 {
-  int file_version;    /* version of file this level was stored with */
-  int game_version;    /* version of game engine to play this level */
+  int file_version;    /* file format version the level is stored with    */
+  int game_version;    /* game engine version the level was created with  */
+  boolean encoding_16bit_field;                /* level contains 16-bit elements  */
+  boolean encoding_16bit_yamyam;       /* yamyam contains 16-bit elements */
+  boolean encoding_16bit_amoeba;       /* amoeba contains 16-bit elements */
+
   int fieldx;
   int fieldy;
   int time;
@@ -338,12 +339,13 @@ struct LevelInfo
   int time_timegate;
   boolean double_speed;
   boolean gravity;
+  boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
 };
 
 struct TapeInfo
 {
-  int file_version;    /* version of file this level tape was stored with */
-  int game_version;    /* version of game engine to play this tapeĀ“s level */
+  int file_version;    /* file format version the tape is stored with   */
+  int game_version;    /* game engine version the tape was created with */
   int version;
   int level_nr;
   unsigned long random_seed;
@@ -357,6 +359,7 @@ struct TapeInfo
   boolean fast_forward;
   boolean changed;
   boolean player_participates[MAX_PLAYERS];
+  int num_participating_players;
   struct
   {
     byte action[MAX_PLAYERS];
@@ -377,6 +380,7 @@ struct GameInfo
   int belt_dir_nr[4];
   int switchgate_pos;
   int balloon_dir;
+  boolean explosions_delayed;
 };
 
 struct GlobalInfo
@@ -418,6 +422,7 @@ extern boolean              Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
+extern short           ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern unsigned long   Elementeigenschaften1[MAX_ELEMENTS];
 extern unsigned long   Elementeigenschaften2[MAX_ELEMENTS];
 
@@ -910,6 +915,7 @@ extern int          num_element_info;
 #define EL_QUICKSAND_EMPTYING  525
 #define EL_MAGIC_WALL_EMPTYING 526
 #define EL_MAGIC_WALL_BD_EMPTYING 527
+#define EL_AMOEBA_DRIPPING     528
 
 /* "unreal" (and therefore not drawable) runtime elements */
 #define EL_BLOCKED             600
@@ -1522,10 +1528,14 @@ extern int              num_element_info;
 #define SETUPINPUT             9
 #define CALIBRATION            10
 
-#define PROGRAM_VERSION_STRING "2.0.0"
+#define PROGRAM_VERSION_MAJOR  2
+#define PROGRAM_VERSION_MINOR  0
+#define PROGRAM_VERSION_PATCH  2
+#define PROGRAM_VERSION_STRING "2.0.2"
+
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
-#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2001 by"
+#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2002 by"
 #define PROGRAM_DOS_PORT_STRING        "DOS port done by Guido Schulz"
 #define PROGRAM_IDENT_STRING   PROGRAM_VERSION_STRING " " TARGET_STRING
 #define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
@@ -1544,16 +1554,24 @@ extern int              num_element_info;
 **     1.4 (still in use)
 **     2.0 (actual)
 */
-#define FILE_VERSION_1_0       10
-#define FILE_VERSION_1_2       12
-#define FILE_VERSION_1_4       14
-#define FILE_VERSION_2_0       20
+#define FILE_VERSION_1_0       VERSION_IDENT(1,0,0)
+#define FILE_VERSION_1_2       VERSION_IDENT(1,2,0)
+#define FILE_VERSION_1_4       VERSION_IDENT(1,4,0)
+#define FILE_VERSION_2_0       VERSION_IDENT(2,0,0)
+
+/* file version does not change for every program version, but is changed
+   when new features are introduced that are incompatible with older file
+   versions, so that they can be treated accordingly */
 #define FILE_VERSION_ACTUAL    FILE_VERSION_2_0
+
 #define GAME_VERSION_1_0       FILE_VERSION_1_0
 #define GAME_VERSION_1_2       FILE_VERSION_1_2
 #define GAME_VERSION_1_4       FILE_VERSION_1_4
 #define GAME_VERSION_2_0       FILE_VERSION_2_0
-#define GAME_VERSION_ACTUAL    GAME_VERSION_2_0
+
+#define GAME_VERSION_ACTUAL    VERSION_IDENT(PROGRAM_VERSION_MAJOR, \
+                                             PROGRAM_VERSION_MINOR, \
+                                             PROGRAM_VERSION_PATCH)
 
 /* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
 #define ANIM_NORMAL            0