#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
#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)
#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)
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)
#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 */
struct HiScore
{
char *filename;
char *name;
int levels;
+ int first_level;
+ int last_level;
int sort_priority;
boolean user_defined;
boolean readonly;
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[];
#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
#define MINI_MORE_STARTX 0
#define MINI_MORE_STARTY 160
#define MICRO_MORE_STARTX 0
-#define MICRO_MORE_STARTY 208
-#define MORE_PER_LINE 8
+#define MICRO_MORE_STARTY 240
+#define MORE_PER_LINE 16
#define MINI_MORE_PER_LINE 16
#define MICRO_MORE_PER_LINE 16
#define FONT_CHARS_PER_LINE 16
#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
#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
#define EL_PLAYER_IS_LEAVING 408
/* game graphics:
-** 0 - 209: graphics from "RocksScreen"
-** 210 - 255: graphics from "RocksMore"
-** 256 - 511: graphics from "RocksFont"
-** 512 - 767: graphics from "RocksHeroes"
+** 0 - 255: graphics from "RocksScreen"
+** 256 - 511: graphics from "RocksFont"
+** 512 - 767: graphics from "RocksMore"
+** 768 - 1023: graphics from "RocksHeroes"
*/
#define GFX_START_ROCKSSCREEN 0
-#define GFX_END_ROCKSSCREEN 209
-#define GFX_START_ROCKSMORE 210
-#define GFX_END_ROCKSMORE 255
+#define GFX_END_ROCKSSCREEN 255
#define GFX_START_ROCKSFONT 256
#define GFX_END_ROCKSFONT 511
-#define GFX_START_ROCKSHEROES 512
-#define GFX_END_ROCKSHEROES 767
+#define GFX_START_ROCKSMORE 512
+#define GFX_END_ROCKSMORE 767
+#define GFX_START_ROCKSHEROES 768
+#define GFX_END_ROCKSHEROES 1023
-#define NUM_TILES 768
+#define NUM_TILES 1024
/* graphics from "RocksScreen" */
/* Zeile 0 (0) */
#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
#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)
+#define GFX_SP_SNIKSNAK_DOWN (GFX_START_ROCKSMORE + 9 * MORE_PER_LINE +12)
+
+#define GFX2_SP_ELECTRON (GFX_START_ROCKSMORE + 10 * MORE_PER_LINE + 8)
+#define GFX2_SP_TERMINAL (GFX_START_ROCKSMORE + 11 * MORE_PER_LINE + 8)
+#define GFX2_SP_TERMINAL_ACTIVE (GFX_START_ROCKSMORE + 12 * MORE_PER_LINE + 8)
+
/* graphics from "RocksFont" */
#define GFX_CHAR_START (GFX_START_ROCKSFONT)
#define GFX_CHAR_ASCII0 (GFX_CHAR_START-32)
#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
#define TAPES_DIRECTORY "tapes"
#define SCORES_DIRECTORY "scores"
-#define VERSION_STRING "1.2.0"
+#define VERSION_STRING "1.2.1"
#define GAMETITLE_STRING "Rocks'n'Diamonds"
#define WINDOWTITLE_STRING GAMETITLE_STRING " " VERSION_STRING
-#define COPYRIGHT_STRING "Copyright ^1995-98 by Holger Schemel"
+#define COPYRIGHT_STRING "Copyright ^1995-99 by Holger Schemel"
/* default name for empty highscore entry */
#define EMPTY_PLAYER_NAME "no name"
#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_FROM_BACKBUFFER (1L << 8)
-#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_MICROLEVEL (1L << 7)
+#define REDRAW_MICROLEVEL_LABEL (1L << 8)
+#define REDRAW_FROM_BACKBUFFER (1L << 9)
+#define REDRAW_DOOR_2 (REDRAW_VIDEO_1 | \
+ REDRAW_VIDEO_2 | \
+ REDRAW_VIDEO_3)
+#define REDRAW_DOOR_3 (1L << 10)
+#define REDRAW_DOORS (REDRAW_DOOR_1 | \
+ REDRAW_DOOR_2 | \
+ REDRAW_DOOR_3)
+#define REDRAW_MAIN (REDRAW_FIELD | \
+ REDRAW_TILES | \
+ REDRAW_MICROLEVEL | \
+ REDRAW_MICROLEVEL_LABEL)
+#define REDRAWTILES_THRESHOLD (SCR_FIELDX * SCR_FIELDY / 2)
/* areas in pixmap PIX_DOOR */
/* meaning in PIX_DB_DOOR: (3 PAGEs)
#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 */