rnd-19990122-1
[rocksndiamonds.git] / src / main.h
index 26251e847bdb997d14cdd29d87bff2c0945593fe..00d49ab9edc81fbdaf5a73938ec0b4353ef7be4b 100644 (file)
@@ -65,13 +65,14 @@ typedef unsigned char byte;
 #define SCR_FIELDY     17
 #define MAX_BUF_XSIZE  (SCR_FIELDX + 2)
 #define MAX_BUF_YSIZE  (SCR_FIELDY + 2)
-
-#define MIN_LEV_FIELDX (SCR_FIELDX - 2)
-#define MIN_LEV_FIELDY (SCR_FIELDY - 2)
+#define MIN_LEV_FIELDX 3
+#define MIN_LEV_FIELDY 3
 #define STD_LEV_FIELDX 64
 #define STD_LEV_FIELDY 32
 #define MAX_LEV_FIELDX 128
 #define MAX_LEV_FIELDY 128
+#define ED_FIELDX      (2 * SCR_FIELDX - 1)
+#define ED_FIELDY      (2 * SCR_FIELDY - 2)
 
 #define MAX_PLAYERS    4
 
@@ -95,13 +96,14 @@ typedef unsigned char byte;
 #define IN_VIS_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
 #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
+#define IN_ED_FIELD(x,y)  ((x)>=0 && (x)<ED_FIELDX && (y)>=0 &&(y)<ED_FIELDY)
 
 #define EP_BIT_AMOEBALIVE      (1 << 0)
 #define EP_BIT_AMOEBOID                (1 << 1)
 #define EP_BIT_SCHLUESSEL      (1 << 2)
 #define EP_BIT_PFORTE          (1 << 3)
 #define EP_BIT_SOLID           (1 << 4)
-#define EP_BIT_MASSIV          (1 << 5)
+#define EP_BIT_MASSIVE         (1 << 5)
 #define EP_BIT_SLIPPERY                (1 << 6)
 #define EP_BIT_ENEMY           (1 << 7)
 #define EP_BIT_MAUER           (1 << 8)
@@ -131,7 +133,7 @@ typedef unsigned char byte;
 #define IS_SCHLUESSEL(e)       (Elementeigenschaften[e] & EP_BIT_SCHLUESSEL)
 #define IS_PFORTE(e)           (Elementeigenschaften[e] & EP_BIT_PFORTE)
 #define IS_SOLID(e)            (Elementeigenschaften[e] & EP_BIT_SOLID)
-#define IS_MASSIV(e)           (Elementeigenschaften[e] & EP_BIT_MASSIV)
+#define IS_MASSIVE(e)          (Elementeigenschaften[e] & EP_BIT_MASSIVE)
 #define IS_SLIPPERY(e)         (Elementeigenschaften[e] & EP_BIT_SLIPPERY)
 #define IS_ENEMY(e)            (Elementeigenschaften[e] & EP_BIT_ENEMY)
 #define IS_MAUER(e)            (Elementeigenschaften[e] & EP_BIT_MAUER)
@@ -174,7 +176,6 @@ typedef unsigned char byte;
                                 EL_FELSBROCKEN)
 #define IS_DRAWABLE(e)         ((e) < EL_BLOCKED)
 #define IS_NOT_DRAWABLE(e)     ((e) >= EL_BLOCKED)
-#define TIMESIZE               (TimeLeft * 100 / level.time)
 #define TAPE_IS_EMPTY(x)       ((x).length == 0)
 #define TAPE_IS_STOPPED(x)     (!(x).recording && !(x).playing &&!(x).pausing)
 
@@ -198,7 +199,8 @@ typedef unsigned char byte;
 
 /* boundaries of arrays etc. */
 #define MAX_NAMELEN            (10+1)
-#define MAX_LEVNAMLEN          32
+#define MAX_LEVEL_NAME_LEN     32
+#define MAX_LEVEL_AUTHOR_LEN   34
 #define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
 #define MAX_LEVDIR_ENTRIES     100
 #define MAX_SCORE_ENTRIES      100
@@ -212,6 +214,8 @@ typedef unsigned char byte;
 #define FFWD_FRAME_DELAY       10      /* 200% speed for fast forward */
 #define FRAMES_PER_SECOND      (1000 / GAME_FRAME_DELAY)
 #define GADGET_FRAME_DELAY     150     /* delay between gadget actions */
+#define MICROLEVEL_SCROLL_DELAY        50      /* delay for scrolling micro level */
+#define MICROLEVEL_LABEL_DELAY 250     /* delay for micro level label */
 
 struct HiScore
 {
@@ -334,7 +338,8 @@ struct LevelInfo
   int fieldy;
   int time;
   int edelsteine;
-  char name[MAX_LEVNAMLEN];
+  char name[MAX_LEVEL_NAME_LEN];
+  char author[MAX_LEVEL_AUTHOR_LEN];
   int score[LEVEL_SCORE_ELEMENTS];
   int mampfer_inhalt[8][3][3];
   int tempo_amoebe;
@@ -348,6 +353,7 @@ struct LevelDirInfo
 {
   char *filename;
   char *name;
+  char *author;
   int levels;
   int first_level;
   int last_level;
@@ -435,17 +441,22 @@ extern int                lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 extern int             FX,FY, ScrollStepSize;
 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, TimeLeft;
+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[];
@@ -496,10 +507,10 @@ extern int                num_bg_loops;
 #define EYSIZE                 (VXSIZE + 44)
 #define FULL_SXSIZE            (2+SXSIZE+2)
 #define FULL_SYSIZE            (2+SYSIZE+2)
-#define MICROLEV_XPOS          (SX+4*32+16)
-#define MICROLEV_YPOS          (SX+12*32)
-#define MICROLEV_XSIZE         (STD_LEV_FIELDX*MICRO_TILEX)
-#define MICROLEV_YSIZE         (STD_LEV_FIELDY*MICRO_TILEY)
+#define MICROLEV_XSIZE         ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
+#define MICROLEV_YSIZE         ((STD_LEV_FIELDY + 2) * MICRO_TILEY)
+#define MICROLEV_XPOS          (SX + (SXSIZE - MICROLEV_XSIZE) / 2)
+#define MICROLEV_YPOS          (SX + 12 * TILEY - MICRO_TILEY)
 #define MICROLABEL_YPOS                (MICROLEV_YPOS+MICROLEV_YSIZE+12)
 #define FONT1_XSIZE            32
 #define FONT1_YSIZE            32
@@ -523,7 +534,7 @@ extern int          num_bg_loops;
 #define MINI_MORE_STARTX       0
 #define MINI_MORE_STARTY       160
 #define MICRO_MORE_STARTX      0
-#define MICRO_MORE_STARTY      208
+#define MICRO_MORE_STARTY      240
 #define MORE_PER_LINE          16
 #define MINI_MORE_PER_LINE     16
 #define MICRO_MORE_PER_LINE    16
@@ -597,9 +608,7 @@ extern int          num_bg_loops;
 #define EL_ERZ_EDEL_GELB       59
 #define EL_MAMPFER2            60
 #define EL_SIEB2_INAKTIV       61
-
-#define EL_UNUSED_62           62
-
+#define EL_INVISIBLE_STEEL     62
 #define EL_DYNABOMB            63
 #define EL_DYNABOMB_NR         64
 #define EL_DYNABOMB_SZ         65
@@ -775,6 +784,7 @@ extern int          num_bg_loops;
 #define EL_SIEB2_TOT           305
 #define EL_AUSGANG_ACT         306
 #define EL_SP_TERMINAL_ACTIVE  307
+#define EL_SP_BUG_ACTIVE       308
 
 /* "unreal" (and therefore not drawable) runtime elements */
 #define EL_BLOCKED             400
@@ -961,6 +971,8 @@ extern int          num_bg_loops;
 #define GFX_FIREFLY_L          206
 #define GFX_FIREFLY_U          207
 
+#define GFX_INVISIBLE_STEEL    GFX_UNSICHTBAR
+
 #define GFX_SCHLUESSEL         GFX_SCHLUESSEL1
 #define GFX_SPIELFIGUR         GFX_SPIELER1
 
@@ -1060,8 +1072,10 @@ extern int               num_bg_loops;
 #define GFX_SP_CHIP_UPPER      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE + 6)
 #define GFX_SP_CHIP_LOWER      (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE + 7)
 
+#define GFX_SP_BUG_WARNING     (GFX_START_ROCKSMORE +  2 * MORE_PER_LINE +15)
 #define GFX_SP_EXPLODE_EMPTY   (GFX_START_ROCKSMORE +  3 * MORE_PER_LINE + 8)
 #define GFX_SP_EXPLODE_INFOTRON        (GFX_START_ROCKSMORE +  4 * MORE_PER_LINE + 8)
+#define GFX_SP_BUG_ACTIVE      (GFX_START_ROCKSMORE +  6 * MORE_PER_LINE + 8)
 #define GFX_SP_SNIKSNAK_LEFT   (GFX_START_ROCKSMORE +  8 * MORE_PER_LINE + 8)
 #define GFX_SP_SNIKSNAK_RIGHT  (GFX_START_ROCKSMORE +  8 * MORE_PER_LINE +12)
 #define GFX_SP_SNIKSNAK_UP     (GFX_START_ROCKSMORE +  9 * MORE_PER_LINE + 8)
@@ -1156,8 +1170,17 @@ extern int               num_bg_loops;
 #define SND_WARNTON            49
 #define SND_WHOOSH             50
 #define SND_ZISCH              51
-
-#define NUM_SOUNDS             52
+#define SND_SP_BASE            52
+#define SND_SP_INFOTRON                53
+#define SND_SP_ZONKDOWN                54
+#define SND_SP_ZONKPUSH                55
+#define SND_SP_BUG             56
+#define SND_SP_BOOM            57
+#define SND_SP_BOOOM           58
+#define SND_SP_EXIT            59
+#define SND_EMPTY              60
+
+#define NUM_SOUNDS             61
 
 /* default input keys */
 #define KEY_UNDEFINDED         XK_VoidSymbol
@@ -1213,10 +1236,11 @@ extern int              num_bg_loops;
 #define TAPES_DIRECTORY                "tapes"
 #define SCORES_DIRECTORY       "scores"
 
-#define VERSION_STRING         "1.2.1"
-#define GAMETITLE_STRING       "Rocks'n'Diamonds"
-#define WINDOWTITLE_STRING     GAMETITLE_STRING " " VERSION_STRING
-#define COPYRIGHT_STRING       "Copyright ^1995-99 by Holger Schemel"
+#define PROGRAM_VERSION_STRING "1.2.1"
+#define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
+#define PROGRAM_AUTHOR_STRING  "Holger Schemel"
+#define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING
+#define COPYRIGHT_STRING       "Copyright ^1995-99 by " PROGRAM_AUTHOR_STRING
 
 /* default name for empty highscore entry */
 #define EMPTY_PLAYER_NAME      "no name"
@@ -1245,13 +1269,19 @@ extern int              num_bg_loops;
 #define REDRAW_VIDEO_1         (1L << 4)
 #define REDRAW_VIDEO_2         (1L << 5)
 #define REDRAW_VIDEO_3         (1L << 6)
-#define REDRAW_MICROLEV                (1L << 7)
+#define REDRAW_MICROLEVEL      (1L << 7)
 #define REDRAW_FROM_BACKBUFFER (1L << 8)
-#define REDRAW_DOOR_2  (REDRAW_VIDEO_1 | REDRAW_VIDEO_2 | REDRAW_VIDEO_3)
+#define REDRAW_DOOR_2          (REDRAW_VIDEO_1 | \
+                                REDRAW_VIDEO_2 | \
+                                REDRAW_VIDEO_3)
 #define REDRAW_DOOR_3          (1L << 9)
-#define REDRAW_DOORS   (REDRAW_DOOR_1 | REDRAW_DOOR_2 | REDRAW_DOOR_3)
-#define REDRAW_MAIN    (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
-#define REDRAWTILES_THRESHOLD  SCR_FIELDX*SCR_FIELDY/2
+#define REDRAW_DOORS           (REDRAW_DOOR_1 | \
+                                REDRAW_DOOR_2 | \
+                                REDRAW_DOOR_3)
+#define REDRAW_MAIN            (REDRAW_FIELD | \
+                                REDRAW_TILES | \
+                                REDRAW_MICROLEVEL)
+#define REDRAWTILES_THRESHOLD  (SCR_FIELDX * SCR_FIELDY / 2)
 
 /* areas in pixmap PIX_DOOR */
 /* meaning in PIX_DB_DOOR: (3 PAGEs)
@@ -1277,4 +1307,10 @@ extern int               num_bg_loops;
 #define ANIM_OSCILLATE 1
 #define ANIM_REVERSE   2
 
+/* values for game_emulation */
+#define EMU_NONE               0
+#define EMU_BOULDERDASH                1
+#define EMU_SOKOBAN            2
+#define EMU_SUPAPLEX           3
+
 #endif /* MAIN_H */