rnd-19990315-1-src
[rocksndiamonds.git] / src / main.h
index 10e7161a46778b56d245c85ee7741044413ae189..fad880a44de800221ef9bad3ca01a5ac155dd551 100644 (file)
@@ -126,6 +126,7 @@ typedef unsigned char byte;
 #define EP_BIT_SP_ELEMENT      (1 << 28)
 #define EP_BIT_QUICK_GATE      (1 << 29)
 #define EP_BIT_OVER_PLAYER     (1 << 30)
+#define EP_BIT_ACTIVE_BOMB     (1 << 31)
 
 #define IS_AMOEBALIVE(e)       (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
 #define IS_AMOEBOID(e)         (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
@@ -158,6 +159,7 @@ typedef unsigned char byte;
 #define IS_SP_ELEMENT(e)       (Elementeigenschaften[e] & EP_BIT_SP_ELEMENT)
 #define IS_QUICK_GATE(e)       (Elementeigenschaften[e] & EP_BIT_QUICK_GATE)
 #define IS_OVER_PLAYER(e)      (Elementeigenschaften[e] & EP_BIT_OVER_PLAYER)
+#define IS_ACTIVE_BOMB(e)      (Elementeigenschaften[e] & EP_BIT_ACTIVE_BOMB)
 
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
@@ -199,7 +201,7 @@ typedef unsigned char byte;
 #define NUM_PIXMAPS            10
 
 /* boundaries of arrays etc. */
-#define MAX_NAMELEN            (10+1)
+#define MAX_PLAYER_NAME_LEN    10
 #define MAX_LEVEL_NAME_LEN     32
 #define MAX_LEVEL_AUTHOR_LEN   32
 #define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
@@ -208,6 +210,11 @@ typedef unsigned char byte;
 #define MAX_ELEMENTS           512
 #define MAX_NUM_AMOEBA         100
 
+/* values for elements with content */
+#define MIN_ELEMENT_CONTENTS   1
+#define STD_ELEMENT_CONTENTS   4
+#define MAX_ELEMENT_CONTENTS   8
+
 #define LEVEL_SCORE_ELEMENTS   16      /* level elements with score */
 
 /* fundamental game speed values */
@@ -220,7 +227,7 @@ typedef unsigned char byte;
 
 struct HiScore
 {
-  char Name[MAX_NAMELEN];
+  char Name[MAX_PLAYER_NAME_LEN + 1];
   int Score;
 };
 
@@ -229,7 +236,8 @@ struct OptionInfo
   char *display_name;
   char *server_host;
   int server_port;
-  char *base_directory;
+  char *ro_base_directory;
+  char *rw_base_directory;
   char *level_directory;
   boolean serveronly;
   boolean network;
@@ -305,12 +313,6 @@ struct PlayerInfo
   byte programmed_action;      /* action forced by game itself (like moving
                                   through doors); overrides other actions */
 
-
-#if 0
-  byte programmed_speed;       /* speed (for only one move) forced by game */
-#endif
-
-
   int joystick_fd;             /* file descriptor of player's joystick */
 
   int jx,jy, last_jx,last_jy;
@@ -318,11 +320,12 @@ struct PlayerInfo
   int Frame;
 
   boolean Pushing;
-  boolean gone, LevelSolved, GameOver;
+  boolean LevelSolved, GameOver;
   boolean snapped;
 
-  int move_speed;
   unsigned long move_delay;
+  int move_delay_value;
+
   int last_move_dir;
 
   unsigned long push_delay;
@@ -347,15 +350,16 @@ struct LevelInfo
   int fieldx;
   int fieldy;
   int time;
-  int edelsteine;
+  int gems_needed;
   char name[MAX_LEVEL_NAME_LEN + 1];
   char author[MAX_LEVEL_AUTHOR_LEN + 1];
   int score[LEVEL_SCORE_ELEMENTS];
-  int mampfer_inhalt[8][3][3];
-  int tempo_amoebe;
-  int dauer_sieb;
-  int dauer_ablenk;
-  int amoebe_inhalt;
+  int yam_content[MAX_ELEMENT_CONTENTS][3][3];
+  int num_yam_contents;
+  int amoeba_speed;
+  int amoeba_content;
+  int time_magic_wall;
+  int time_wheel;
   boolean double_speed;
   boolean gravity;
 };
@@ -395,6 +399,18 @@ struct TapeInfo
   } pos[MAX_TAPELEN];
 };
 
+struct GameInfo
+{
+  int emulation;
+  int yam_content_nr;
+  boolean magic_wall_active;
+  int magic_wall_time_left;
+};
+
+struct GlobalInfo
+{
+};
+
 extern Display        *display;
 extern Visual         *visual;
 extern int             screen;
@@ -462,12 +478,9 @@ extern int         SBY_Upper, SBY_Lower;
 extern int             ZX,ZY, ExitX,ExitY;
 extern int             AllPlayersGone;
 extern int             FrameCounter, TimeFrames, TimePlayed, TimeLeft;
-extern int             MampferMax, MampferNr;
 extern boolean         SiebAktiv;
 extern int             SiebCount;
 
-extern int             game_emulation;
-
 extern boolean         network_player_action_received;
 
 extern struct LevelDirInfo     leveldir[];
@@ -481,6 +494,8 @@ extern struct OptionInfo    options;
 extern struct SetupInfo                setup;
 extern struct SetupFileList    *setup_list;
 extern struct SetupFileList    *level_setup_list;
+extern struct GameInfo         game;
+extern struct GlobalInfo       global;
 
 extern char            *sound_name[];
 extern int             background_loop[];
@@ -532,6 +547,8 @@ extern char         *element_info[];
 #define FONT3_YSIZE            14
 #define FONT4_XSIZE            16
 #define FONT4_YSIZE            16
+#define FONT5_XSIZE            10
+#define FONT5_YSIZE            14
 
 #define GFX_STARTX             SX
 #define GFX_STARTY             SY
@@ -586,7 +603,7 @@ extern char         *element_info[];
 #define EL_KOKOSNUSS           25
 #define EL_LIFE                        26
 #define EL_LIFE_ASYNC          27
-#define EL_DYNAMIT             28
+#define EL_DYNAMITE_ACTIVE     28
 #define EL_BADEWANNE           29
 #define EL_ABLENK_AUS          30
 #define EL_ABLENK_EIN          31
@@ -602,7 +619,7 @@ extern char         *element_info[];
 #define EL_PFORTE2X            41
 #define EL_PFORTE3X            42
 #define EL_PFORTE4X            43
-#define EL_DYNAMIT_AUS         44
+#define EL_DYNAMITE_INACTIVE   44
 #define EL_PACMAN              45
 #define EL_UNSICHTBAR          46
 #define EL_BIRNE_AUS           47
@@ -621,7 +638,9 @@ extern char         *element_info[];
 #define EL_MAMPFER2            60
 #define EL_SIEB2_INAKTIV       61
 #define EL_INVISIBLE_STEEL     62
-#define EL_DYNABOMB            63
+
+#define EL_UNUSED_63           63
+
 #define EL_DYNABOMB_NR         64
 #define EL_DYNABOMB_SZ         65
 #define EL_DYNABOMB_XL         66
@@ -809,6 +828,10 @@ extern char                *element_info[];
 #define EL_EM_KEY_2            310
 #define EL_EM_KEY_3            311
 #define EL_EM_KEY_4            312
+#define EL_DYNABOMB_ACTIVE_1   313
+#define EL_DYNABOMB_ACTIVE_2   314
+#define EL_DYNABOMB_ACTIVE_3   315
+#define EL_DYNABOMB_ACTIVE_4   316
 
 /* "unreal" (and therefore not drawable) runtime elements */
 #define EL_BLOCKED             400
@@ -1251,8 +1274,9 @@ extern char               *element_info[];
 #define SND_SP_BOOOM           58
 #define SND_SP_EXIT            59
 #define SND_EMPTY              60
+#define SND_GATE               61
 
-#define NUM_SOUNDS             61
+#define NUM_SOUNDS             62
 
 /* default input keys */
 #define KEY_UNDEFINDED         XK_VoidSymbol
@@ -1282,6 +1306,7 @@ extern char               *element_info[];
 #define FC_YELLOW              3
 #define FC_SPECIAL1            4
 #define FC_SPECIAL2            5
+#define FC_SPECIAL3            6
 
 /* values for game_status */
 #define EXITGAME               0
@@ -1296,11 +1321,16 @@ extern char             *element_info[];
 #define SETUPINPUT             9
 #define CALIBRATION            10
 
-#ifndef GAME_DIR
-#define GAME_DIR               "."
+#ifndef RO_GAME_DIR
+#define RO_GAME_DIR            "."
+#endif
+
+#ifndef RW_GAME_DIR
+#define RW_GAME_DIR            "."
 #endif
 
-#define BASE_PATH              GAME_DIR
+#define RO_BASE_PATH           RO_GAME_DIR
+#define RW_BASE_PATH           RW_GAME_DIR
 
 #define GRAPHICS_DIRECTORY     "graphics"
 #define SOUNDS_DIRECTORY       "sounds"