#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)
/* 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
#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
{
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;
{
char *filename;
char *name;
+ char *author;
int levels;
int first_level;
int last_level;
extern int FfwdFrameDelay;
extern int MoveSpeed;
extern int BX1,BY1, BX2,BY2;
-extern int SBX_Left, SBX_Middle, SBX_Right;
-extern int SBY_Upper, SBY_Middle, SBY_Lower;
+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;
/* often used screen positions */
#define SX 8
#define SY 8
-#define REAL_SX (SX-2)
-#define REAL_SY (SY-2)
+#define REAL_SX (SX - 2)
+#define REAL_SY (SY - 2)
#define DX 566
#define DY 60
#define VX DX
#define EY (VY - 44)
#define TILEX 32
#define TILEY 32
-#define MINI_TILEX (TILEX/2)
-#define MINI_TILEY (TILEY/2)
-#define MICRO_TILEX (TILEX/8)
-#define MICRO_TILEY (TILEY/8)
-#define MIDPOSX (SCR_FIELDX/2)
-#define MIDPOSY (SCR_FIELDY/2)
-#define SXSIZE (SCR_FIELDX*TILEX)
-#define SYSIZE (SCR_FIELDY*TILEY)
-#define FXSIZE ((SCR_FIELDX+2)*TILEX)
-#define FYSIZE ((SCR_FIELDY+2)*TILEY)
+#define MINI_TILEX (TILEX / 2)
+#define MINI_TILEY (TILEY / 2)
+#define MICRO_TILEX (TILEX / 8)
+#define MICRO_TILEY (TILEY / 8)
+#define MIDPOSX (SCR_FIELDX / 2)
+#define MIDPOSY (SCR_FIELDY / 2)
+#define SXSIZE (SCR_FIELDX * TILEX)
+#define SYSIZE (SCR_FIELDY * TILEY)
+#define FXSIZE ((SCR_FIELDX + 2) * TILEX)
+#define FYSIZE ((SCR_FIELDY + 2) * TILEY)
#define DXSIZE 100
#define DYSIZE 280
#define VXSIZE DXSIZE
#define VYSIZE 100
#define EXSIZE DXSIZE
#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 MICROLABEL_YPOS (MICROLEV_YPOS+MICROLEV_YSIZE+12)
+#define FULL_SXSIZE (2 + SXSIZE + 2)
+#define FULL_SYSIZE (2 + SYSIZE + 2)
+#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 + 7)
#define FONT1_XSIZE 32
#define FONT1_YSIZE 32
#define FONT2_XSIZE 14
#define MICRO_GFX_PER_LINE 128
#define HEROES_PER_LINE 16
#define MINI_MORE_STARTX 0
-#define MINI_MORE_STARTY 160
+#define MINI_MORE_STARTY 224
#define MICRO_MORE_STARTX 0
-#define MICRO_MORE_STARTY 240
+#define MICRO_MORE_STARTY 336
#define MORE_PER_LINE 16
#define MINI_MORE_PER_LINE 16
#define MICRO_MORE_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 GFX_BADEWANNE1 16
#define GFX_SALZSAEURE 17
#define GFX_BADEWANNE2 18
+
+/*
#define GFX_UNSICHTBAR 19
+*/
+
#define GFX_SCHLUESSEL1 20
#define GFX_SCHLUESSEL2 21
#define GFX_SCHLUESSEL3 22
#define GFX_FIREFLY_L 206
#define GFX_FIREFLY_U 207
+/* only available as size MINI_TILE */
+#define GFX_STEEL_UPPER_LEFT 208
+#define GFX_STEEL_UPPER_RIGHT 209
+#define GFX_STEEL_LOWER_LEFT 210
+#define GFX_STEEL_LOWER_RIGHT 211
+#define GFX_STEEL_HORIZONTAL 212
+#define GFX_STEEL_VERTICAL 213
+
+/* elements with graphics borrowed from other elements */
#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_INVISIBLE_STEEL (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 3)
+#define GFX_UNSICHTBAR (GFX_START_ROCKSMORE + 5 * 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)
/* graphics from "RocksFont" */
#define GFX_CHAR_START (GFX_START_ROCKSFONT)
-#define GFX_CHAR_ASCII0 (GFX_CHAR_START-32)
-#define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0+33)
-#define GFX_CHAR_ZOLL (GFX_CHAR_ASCII0+34)
-#define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0+36)
-#define GFX_CHAR_PROZ (GFX_CHAR_ASCII0+37)
-#define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0+39)
-#define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0+40)
-#define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0+41)
-#define GFX_CHAR_PLUS (GFX_CHAR_ASCII0+43)
-#define GFX_CHAR_KOMMA (GFX_CHAR_ASCII0+44)
-#define GFX_CHAR_MINUS (GFX_CHAR_ASCII0+45)
-#define GFX_CHAR_PUNKT (GFX_CHAR_ASCII0+46)
-#define GFX_CHAR_SLASH (GFX_CHAR_ASCII0+47)
-#define GFX_CHAR_0 (GFX_CHAR_ASCII0+48)
-#define GFX_CHAR_9 (GFX_CHAR_ASCII0+57)
-#define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0+58)
-#define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0+59)
-#define GFX_CHAR_LT (GFX_CHAR_ASCII0+60)
-#define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0+61)
-#define GFX_CHAR_GT (GFX_CHAR_ASCII0+62)
-#define GFX_CHAR_FRAGE (GFX_CHAR_ASCII0+63)
-#define GFX_CHAR_AT (GFX_CHAR_ASCII0+64)
-#define GFX_CHAR_A (GFX_CHAR_ASCII0+65)
-#define GFX_CHAR_Z (GFX_CHAR_ASCII0+90)
-#define GFX_CHAR_AE (GFX_CHAR_ASCII0+91)
-#define GFX_CHAR_OE (GFX_CHAR_ASCII0+92)
-#define GFX_CHAR_UE (GFX_CHAR_ASCII0+93)
-#define GFX_CHAR_COPY (GFX_CHAR_ASCII0+94)
-#define GFX_CHAR_END (GFX_CHAR_START+79)
+#define GFX_CHAR_ASCII0 (GFX_CHAR_START - 32)
+#define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0 + 33)
+#define GFX_CHAR_ZOLL (GFX_CHAR_ASCII0 + 34)
+#define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0 + 36)
+#define GFX_CHAR_PROZ (GFX_CHAR_ASCII0 + 37)
+#define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0 + 39)
+#define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0 + 40)
+#define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0 + 41)
+#define GFX_CHAR_PLUS (GFX_CHAR_ASCII0 + 43)
+#define GFX_CHAR_KOMMA (GFX_CHAR_ASCII0 + 44)
+#define GFX_CHAR_MINUS (GFX_CHAR_ASCII0 + 45)
+#define GFX_CHAR_PUNKT (GFX_CHAR_ASCII0 + 46)
+#define GFX_CHAR_SLASH (GFX_CHAR_ASCII0 + 47)
+#define GFX_CHAR_0 (GFX_CHAR_ASCII0 + 48)
+#define GFX_CHAR_9 (GFX_CHAR_ASCII0 + 57)
+#define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0 + 58)
+#define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0 + 59)
+#define GFX_CHAR_LT (GFX_CHAR_ASCII0 + 60)
+#define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0 + 61)
+#define GFX_CHAR_GT (GFX_CHAR_ASCII0 + 62)
+#define GFX_CHAR_FRAGE (GFX_CHAR_ASCII0 + 63)
+#define GFX_CHAR_AT (GFX_CHAR_ASCII0 + 64)
+#define GFX_CHAR_A (GFX_CHAR_ASCII0 + 65)
+#define GFX_CHAR_Z (GFX_CHAR_ASCII0 + 90)
+#define GFX_CHAR_AE (GFX_CHAR_ASCII0 + 91)
+#define GFX_CHAR_OE (GFX_CHAR_ASCII0 + 92)
+#define GFX_CHAR_UE (GFX_CHAR_ASCII0 + 93)
+#define GFX_CHAR_COPY (GFX_CHAR_ASCII0 + 94)
+#define GFX_CHAR_END (GFX_CHAR_START + 79)
/* the names of the sounds */
#define SND_ALCHEMY 0
#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"
+/* default name for unknown player names */
+#define ANONYMOUS_NAME "anonymous"
+
+/* default name for new levels */
+#define NAMELESS_LEVEL_NAME "nameless level"
+
/* values for button_status */
#define MB_NOT_PRESSED FALSE
#define MB_RELEASED FALSE
#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)
#define DOOR_GFX_PAGEY2 DYSIZE
/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
-#define ANIM_NORMAL 0
-#define ANIM_OSCILLATE 1
-#define ANIM_REVERSE 2
+#define ANIM_NORMAL 0
+#define ANIM_OSCILLATE 1
+#define ANIM_REVERSE 2
/* values for game_emulation */
#define EMU_NONE 0