rnd-19990610-1-src
[rocksndiamonds.git] / src / main.h
index ec429bfbffdc15bd954b50b79b1aa09aec8ac4ee..0550a996fbb53d6aa12b2ff75b3ea467b94dbde0 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,30 +350,35 @@ 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
 {
-  char *filename;
-  char *name;
-  char *author;
-  int levels;
-  int first_level;
-  int last_level;
-  int sort_priority;
-  boolean user_defined;
-  boolean readonly;
-  int color;
+  char *filename;      /* level series sub-directory inside level directory */
+  char *name;          /* level series name, as displayed on main screen */
+  char *name_short;    /* optional short name for level selection screen */
+  char *author;                /* level series author name levels without author */
+  char *imported_from; /* optional comment for imported level series */
+  int levels;          /* number of levels in level series */
+  int first_level;     /* first level number (to allow start with 0 or 1) */
+  int last_level;      /* last level number (automatically calculated) */
+  int sort_priority;   /* sort levels by 'sort_priority' and then by name */
+  boolean user_defined;        /* user defined levels are stored in home directory */
+  boolean readonly;    /* readonly levels can not be changed with editor */
+  int color;           /* color to use on selection screen for this level */
+  char *class_desc;    /* description of level series class */
 };
 
 struct TapeInfo
@@ -394,6 +402,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;
@@ -461,12 +481,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[];
@@ -480,6 +497,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[];
@@ -531,6 +550,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
@@ -585,7 +606,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
@@ -601,7 +622,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
@@ -620,7 +641,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
@@ -794,31 +817,83 @@ extern char               *element_info[];
 #define EL_UNUSED_254          254
 #define EL_UNUSED_255          255
 
+#define EL_PEARL               256
+#define EL_CRYSTAL             257
+#define EL_WALL_PEARL          258
+#define EL_WALL_CRYSTAL                259
+#define EL_DOOR_WHITE          260
+#define EL_DOOR_WHITE_GRAY     261
+#define EL_KEY_WHITE           262
+#define EL_FORCE_FIELD         263
+#define EL_EXTRA_TIME          264
+#define EL_SWITCH_GATE_OPEN    265
+#define EL_SWITCH_GATE_CLOSED  266
+#define EL_SWITCH_GATE_SWITCH  267
+#define EL_TIME_GATE           268
+#define EL_TIME_GATE_WHEEL     269
+#define EL_BELT_GREEN_LEFT     270
+#define EL_BELT_GREEN_MIDDLE   271
+#define EL_BELT_GREEN_RIGHT    272
+#define EL_BELT_GREEN_SWITCH   273
+#define EL_BELT_RED_LEFT       274
+#define EL_BELT_RED_MIDDLE     275
+#define EL_BELT_RED_RIGHT      276
+#define EL_BELT_RED_SWITCH     277
+#define EL_BELT_BLUE_LEFT      278
+#define EL_BELT_BLUE_MIDDLE    279
+#define EL_BELT_BLUE_RIGHT     280
+#define EL_BELT_BLUE_SWITCH    281
+#define EL_LANDMINE            282
+#define EL_ENVELOPE            283
+#define EL_LIGHT_SWITCH                284
+#define EL_SIGN_EXCLAMATION    285
+#define EL_SIGN_RADIOACTIVITY  286
+#define EL_SIGN_STOP           287
+#define EL_SIGN_WHEELCHAIR     288
+#define EL_SIGN_PARKING                289
+#define EL_SIGN_ONEWAY         290
+#define EL_SIGN_HEART          291
+#define EL_SIGN_TRIANGLE       292
+#define EL_SIGN_ROUND          293
+#define EL_SIGN_EXIT           294
+#define EL_SIGN_YINYANG                295
+#define EL_SIGN_OTHER          296
+#define EL_MOLE_LEFT           297
+#define EL_MOLE_RIGHT          298
+#define EL_MOLE_UP             299
+#define EL_MOLE_DOWN           300
+#define EL_STEEL_SLANTED       301
+#define EL_SAND_INVISIBLE      302
+
 /* "real" (and therefore drawable) runtime elements */
-#define EL_SIEB_LEER           300
-#define EL_SIEB2_LEER          301
-#define EL_SIEB_VOLL           302
-#define EL_SIEB2_VOLL          303
-#define EL_SIEB_TOT            304
-#define EL_SIEB2_TOT           305
-#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
+#define EL_SIEB_LEER           1000
+#define EL_SIEB2_LEER          1001
+#define EL_SIEB_VOLL           1002
+#define EL_SIEB2_VOLL          1003
+#define EL_SIEB_TOT            1004
+#define EL_SIEB2_TOT           1005
+#define EL_AUSGANG_ACT         1006
+#define EL_SP_TERMINAL_ACTIVE  1007
+#define EL_SP_BUG_ACTIVE       1008
+#define EL_EM_KEY_1            1009
+#define EL_EM_KEY_2            1010
+#define EL_EM_KEY_3            1011
+#define EL_EM_KEY_4            1012
+#define EL_DYNABOMB_ACTIVE_1   1013
+#define EL_DYNABOMB_ACTIVE_2   1014
+#define EL_DYNABOMB_ACTIVE_3   1015
+#define EL_DYNABOMB_ACTIVE_4   1016
 
 /* "unreal" (and therefore not drawable) runtime elements */
-#define EL_BLOCKED             400
-#define EL_EXPLODING           401
-#define EL_CRACKINGNUT         402
-#define EL_BLURB_LEFT          403
-#define EL_BLURB_RIGHT         404
-#define EL_AMOEBING            405
-#define EL_MAUERND             406
-#define EL_BURNING             407
-#define EL_PLAYER_IS_LEAVING   408
+#define EL_BLOCKED             2000
+#define EL_EXPLODING           2001
+#define EL_CRACKINGNUT         2002
+#define EL_BLURB_LEFT          2003
+#define EL_BLURB_RIGHT         2004
+#define EL_AMOEBING            2005
+#define EL_MAUERND             2006
+#define EL_BURNING             2007
+#define EL_PLAYER_IS_LEAVING   2008
 
 /* game graphics:
 **       0 -  255: graphics from "RocksScreen"
@@ -1188,6 +1263,55 @@ extern char              *element_info[];
 #define GFX_CHAR_COPY          (GFX_CHAR_ASCII0 + 94)
 #define GFX_CHAR_END           (GFX_CHAR_START + 79)
 
+/* new elements which still have no graphic */
+#define GFX_PEARL              GFX_CHAR_FRAGE
+#define GFX_CRYSTAL            GFX_CHAR_FRAGE
+#define GFX_WALL_PEARL         GFX_CHAR_FRAGE
+#define GFX_WALL_CRYSTAL       GFX_CHAR_FRAGE
+#define GFX_DOOR_WHITE         GFX_CHAR_FRAGE
+#define GFX_DOOR_WHITE_GRAY    GFX_CHAR_FRAGE
+#define GFX_KEY_WHITE          GFX_CHAR_FRAGE
+#define GFX_FORCE_FIELD                GFX_CHAR_FRAGE
+#define GFX_EXTRA_TIME         GFX_CHAR_FRAGE
+#define GFX_SWITCH_GATE_OPEN   GFX_CHAR_FRAGE
+#define GFX_SWITCH_GATE_CLOSED GFX_CHAR_FRAGE
+#define GFX_SWITCH_GATE_SWITCH GFX_CHAR_FRAGE
+#define GFX_TIME_GATE          GFX_CHAR_FRAGE
+#define GFX_TIME_GATE_WHEEL    GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_LEFT    GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_MIDDLE  GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_RIGHT   GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_SWITCH  GFX_CHAR_FRAGE
+#define GFX_BELT_RED_LEFT      GFX_CHAR_FRAGE
+#define GFX_BELT_RED_MIDDLE    GFX_CHAR_FRAGE
+#define GFX_BELT_RED_RIGHT     GFX_CHAR_FRAGE
+#define GFX_BELT_RED_SWITCH    GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_LEFT     GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_MIDDLE   GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_RIGHT    GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_SWITCH   GFX_CHAR_FRAGE
+#define GFX_LANDMINE           GFX_CHAR_FRAGE
+#define GFX_ENVELOPE           GFX_CHAR_FRAGE
+#define GFX_LIGHT_SWITCH       GFX_CHAR_FRAGE
+#define GFX_SIGN_EXCLAMATION   GFX_CHAR_FRAGE
+#define GFX_SIGN_RADIOACTIVITY GFX_CHAR_FRAGE
+#define GFX_SIGN_STOP          GFX_CHAR_FRAGE
+#define GFX_SIGN_WHEELCHAIR    GFX_CHAR_FRAGE
+#define GFX_SIGN_PARKING       GFX_CHAR_FRAGE
+#define GFX_SIGN_ONEWAY                GFX_CHAR_FRAGE
+#define GFX_SIGN_HEART         GFX_CHAR_FRAGE
+#define GFX_SIGN_TRIANGLE      GFX_CHAR_FRAGE
+#define GFX_SIGN_ROUND         GFX_CHAR_FRAGE
+#define GFX_SIGN_EXIT          GFX_CHAR_FRAGE
+#define GFX_SIGN_YINYANG       GFX_CHAR_FRAGE
+#define GFX_SIGN_OTHER         GFX_CHAR_FRAGE
+#define GFX_MOLE_LEFT          GFX_CHAR_FRAGE
+#define GFX_MOLE_RIGHT         GFX_CHAR_FRAGE
+#define GFX_MOLE_UP            GFX_CHAR_FRAGE
+#define GFX_MOLE_DOWN          GFX_CHAR_FRAGE
+#define GFX_STEEL_SLANTED      GFX_CHAR_FRAGE
+#define GFX_SAND_INVISIBLE     GFX_CHAR_FRAGE
+
 /* the names of the sounds */
 #define SND_ALCHEMY            0
 #define SND_AMOEBE             1
@@ -1250,8 +1374,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
@@ -1281,6 +1406,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
@@ -1295,11 +1421,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"
@@ -1307,7 +1438,7 @@ extern char               *element_info[];
 #define TAPES_DIRECTORY                "tapes"
 #define SCORES_DIRECTORY       "scores"
 
-#define PROGRAM_VERSION_STRING "1.3.0"
+#define PROGRAM_VERSION_STRING "1.3.5"
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
 #define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING