rnd-19990220-1-src
[rocksndiamonds.git] / src / main.h
index 8e5a427ce45b3014710ea987c46d4180ce8385c1..5f0a813a1c71a68b98995920e798a855c0df7f65 100644 (file)
@@ -124,6 +124,8 @@ typedef unsigned char byte;
 #define EP_BIT_HAS_CONTENT     (1 << 26)
 #define EP_BIT_EATABLE         (1 << 27)
 #define EP_BIT_SP_ELEMENT      (1 << 28)
+#define EP_BIT_QUICK_GATE      (1 << 29)
+#define EP_BIT_OVER_PLAYER     (1 << 30)
 
 #define IS_AMOEBALIVE(e)       (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
 #define IS_AMOEBOID(e)         (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
@@ -154,6 +156,8 @@ typedef unsigned char byte;
 #define HAS_CONTENT(e)         (Elementeigenschaften[e] & EP_BIT_HAS_CONTENT)
 #define IS_EATABLE(e)          (Elementeigenschaften[e] & EP_BIT_EATABLE)
 #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_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
@@ -204,6 +208,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 */
@@ -298,6 +307,8 @@ struct PlayerInfo
   byte effective_action;       /* action aknowledged 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
+                                  through doors); overrides other actions */
 
   int joystick_fd;             /* file descriptor of player's joystick */
 
@@ -306,10 +317,12 @@ struct PlayerInfo
   int Frame;
 
   boolean Pushing;
-  boolean gone, LevelSolved, GameOver;
+  boolean LevelSolved, GameOver;
   boolean snapped;
 
   unsigned long move_delay;
+  int move_delay_value;
+
   int last_move_dir;
 
   unsigned long push_delay;
@@ -334,16 +347,18 @@ 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;
 };
 
 struct LevelDirInfo
@@ -381,6 +396,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;
@@ -442,19 +469,15 @@ extern int                ScreenMovDir, ScreenMovPos, ScreenGfxPos;
 extern int             BorderElement;
 extern int             GameFrameDelay;
 extern int             FfwdFrameDelay;
-extern int             MoveSpeed;
 extern int             BX1,BY1, BX2,BY2;
 extern int             SBX_Left, SBX_Right;
 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[];
@@ -468,6 +491,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[];
@@ -519,6 +544,8 @@ extern char         *element_info[];
 #define FONT3_YSIZE            14
 #define FONT4_XSIZE            16
 #define FONT4_YSIZE            16
+#define FONT5_XSIZE            10
+#define FONT5_YSIZE            12
 
 #define GFX_STARTX             SX
 #define GFX_STARTY             SY
@@ -531,12 +558,12 @@ extern char               *element_info[];
 #define MICRO_GFX_PER_LINE     128
 #define HEROES_PER_LINE                16
 #define MINI_MORE_STARTX       0
-#define MINI_MORE_STARTY       224
+#define MINI_MORE_STARTY       352
 #define MICRO_MORE_STARTX      0
-#define MICRO_MORE_STARTY      336
+#define MICRO_MORE_STARTY      448
 #define MORE_PER_LINE          16
 #define MINI_MORE_PER_LINE     16
-#define MICRO_MORE_PER_LINE    16
+#define MICRO_MORE_PER_LINE    64
 #define FONT_CHARS_PER_LINE    16
 #define FONT_LINES_PER_FONT    4
 
@@ -677,7 +704,7 @@ extern char         *element_info[];
 #define EL_SCHWEIN             117
 #define EL_DRACHE              118
 
-#define EL_UNUSED_119          119
+#define EL_EM_KEY_1_FILE       119
 
 #define EL_CHAR_START          120
 #define EL_CHAR_ASCII0         (EL_CHAR_START-32)
@@ -722,13 +749,14 @@ extern char               *element_info[];
 #define EL_MAUER_Y             201
 #define EL_MAUER_XY            202
 
-#define EL_UNUSED_203          203
-#define EL_UNUSED_204          204
-#define EL_UNUSED_205          205
-#define EL_UNUSED_206          206
-#define EL_UNUSED_207          207
-#define EL_UNUSED_208          208
-#define EL_UNUSED_209          209
+#define EL_EM_GATE_1           203
+#define EL_EM_GATE_2           204
+#define EL_EM_GATE_3           205
+#define EL_EM_GATE_4           206
+
+#define EL_EM_KEY_2_FILE       207
+#define EL_EM_KEY_3_FILE       208
+#define EL_EM_KEY_4_FILE       209
 
 #define EL_SP_START            210
 #define EL_SP_EMPTY            (EL_SP_START + 0)
@@ -773,10 +801,11 @@ extern char               *element_info[];
 #define EL_SP_CHIP_LOWER       (EL_SP_START + 39)
 #define EL_SP_END              (EL_SP_START + 39)
 
-#define EL_UNUSED_250          250
-#define EL_UNUSED_251          251
-#define EL_UNUSED_252          252
-#define EL_UNUSED_253          253
+#define EL_EM_GATE_1X          250
+#define EL_EM_GATE_2X          251
+#define EL_EM_GATE_3X          252
+#define EL_EM_GATE_4X          253
+
 #define EL_UNUSED_254          254
 #define EL_UNUSED_255          255
 
@@ -790,6 +819,10 @@ extern char                *element_info[];
 #define EL_AUSGANG_ACT         306
 #define EL_SP_TERMINAL_ACTIVE  307
 #define EL_SP_BUG_ACTIVE       308
+#define EL_EM_KEY_1            309
+#define EL_EM_KEY_2            310
+#define EL_EM_KEY_3            311
+#define EL_EM_KEY_4            312
 
 /* "unreal" (and therefore not drawable) runtime elements */
 #define EL_BLOCKED             400
@@ -1055,7 +1088,9 @@ extern char               *element_info[];
 
 /* graphics from "RocksMore" */
 #define GFX_SP_EMPTY           (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  0)
+/*
 #define GFX_SP_ZONK            (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  1)
+*/
 #define GFX_SP_BASE            (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  2)
 #define GFX_SP_MURPHY          (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  3)
 #define GFX_SP_INFOTRON                (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  4)
@@ -1097,6 +1132,20 @@ extern char              *element_info[];
 
 #define GFX_INVISIBLE_STEEL    (GFX_START_ROCKSMORE +  5 * MORE_PER_LINE +  3)
 #define GFX_UNSICHTBAR         (GFX_START_ROCKSMORE +  5 * MORE_PER_LINE +  7)
+#define GFX_SP_ZONK            (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  0)
+
+#define GFX_EM_KEY_1           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  4)
+#define GFX_EM_KEY_2           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  5)
+#define GFX_EM_KEY_3           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  6)
+#define GFX_EM_KEY_4           (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE +  7)
+#define GFX_EM_GATE_1          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  0)
+#define GFX_EM_GATE_2          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  1)
+#define GFX_EM_GATE_3          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  2)
+#define GFX_EM_GATE_4          (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  3)
+#define GFX_EM_GATE_1X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  4)
+#define GFX_EM_GATE_2X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  5)
+#define GFX_EM_GATE_3X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  6)
+#define GFX_EM_GATE_4X         (GFX_START_ROCKSMORE +  7 * MORE_PER_LINE +  7)
 
 #define GFX_MURPHY_GO_LEFT     (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  8)
 #define GFX_MURPHY_ANY_LEFT    (GFX_START_ROCKSMORE +  0 * MORE_PER_LINE +  9)
@@ -1247,6 +1296,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
@@ -1273,7 +1323,7 @@ extern char               *element_info[];
 #define TAPES_DIRECTORY                "tapes"
 #define SCORES_DIRECTORY       "scores"
 
-#define PROGRAM_VERSION_STRING "1.2.1"
+#define PROGRAM_VERSION_STRING "1.3.0"
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
 #define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING