#define SCREENY(a) (a)
#define LEVELX(a) (a)
#define LEVELY(a) (a)
-#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_PIX_FIELD(x,y) ((x)>=0 && (x)<SXSIZE && (y)>=0 && (y)<SYSIZE)
+
+#define IN_FIELD(x, y, xsize, ysize) ((x) >= 0 && (x) < (xsize) && \
+ (y) >= 0 && (y) < (ysize))
+#define IN_FIELD_MINMAX(x, y, xmin, ymin, xmax, ymax) \
+ ((x) >= (xmin) && (x) <= (xmax) && \
+ (y) >= (ymin) && (y) <= (ymax))
+
+#define IN_PIX_FIELD(x, y) IN_FIELD(x, y, SXSIZE, SYSIZE)
+#define IN_VIS_FIELD(x, y) IN_FIELD(x, y, SCR_FIELDX, SCR_FIELDY)
+#define IN_LEV_FIELD(x, y) IN_FIELD(x, y, lev_fieldx, lev_fieldy)
+#define IN_SCR_FIELD(x, y) IN_FIELD_MINMAX(x, y, BX1, BY1, BX2, BY2)
/* values for 'Elementeigenschaften' */
#define EP_BIT_GRID (1 << 0)
#define MICROLEVEL_SCROLL_DELAY 50 /* delay for scrolling micro level */
#define MICROLEVEL_LABEL_DELAY 250 /* delay for micro level label */
-struct HiScore
+struct HiScore_MM
{
char Name[MAX_PLAYER_NAME_LEN + 1];
int Score;
};
-struct EditorInfo
-{
- boolean draw_walls_masked;
-};
-
extern Bitmap *pix[];
-extern DrawBuffer *fieldbuffer;
-extern DrawBuffer *drawto_field;
+extern DrawBuffer *fieldbuffer;
+extern DrawBuffer *drawto_field;
extern int joystick_device;
extern char *joystick_device_name[];
extern unsigned int Elementeigenschaften[MAX_ELEMENTS];
extern int level_nr;
-extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
+extern int lev_fieldx, lev_fieldy, scroll_x, scroll_y;
-extern int FX,FY, ScrollStepSize;
+extern int FX, FY, ScrollStepSize;
extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos;
extern int GameFrameDelay;
extern int FfwdFrameDelay;
-extern int BX1,BY1, BX2,BY2;
+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 ZX, ZY, ExitX, ExitY;
extern int AllPlayersGone;
extern int TimeFrames, TimePlayed, TimeLeft;
extern boolean SiebAktiv;
extern int SiebCount;
extern struct LevelInfo_MM native_mm_level;
-extern struct HiScore highscore[];
+extern struct HiScore_MM highscore[];
extern struct TapeInfo tape;
extern struct SetupInfo setup;
extern struct GameInfo_MM game_mm;
extern struct LaserInfo laser;
-extern struct EditorInfo editor;
extern struct GlobalInfo global;
-extern short LX,LY, XS,YS, ELX,ELY;
-extern short CT,Ct;
+extern short LX, LY, XS, YS, ELX, ELY;
+extern short CT, Ct;
extern Pixel pen_fg, pen_bg, pen_ray, pen_magicolor[2];
extern int color_status;
extern struct XY Step[];
extern short Sign[16];
-extern char *sound_name[];
+extern char *sound_name[];
extern int background_loop[];
extern int num_bg_loops;
-extern char *element_info[];
+extern char *element_info[];
extern int num_element_info;
/* often used screen positions */
#define EY (DY + 178)
#define TILEX TILESIZE
#define TILEY TILESIZE
+#define MINI_TILESIZE (TILESIZE / 2)
#define MINI_TILEX (TILEX / 2)
#define MINI_TILEY (TILEY / 2)
#define MICRO_TILEX (TILEX / 4)
** 500 - 699: flag elements, only used at runtime
*/
/* "real" level elements */
+#define EL_MM_START 0
+#define EL_MM_START_1 EL_MM_START
+
#define EL_EMPTY 0
#define EL_MIRROR_START 1
#define EL_MIRROR_00 (EL_MIRROR_START + 0)
#define EL_GRID_WOOD_END EL_GRID_WOOD_03
#define EL_FUEL_EMPTY 155
+#define EL_MM_END_1 155
+
#define EL_CHAR_START 160
-#define EL_CHAR_ASCII0 (EL_CHAR_START-32)
-#define EL_CHAR_AUSRUF (EL_CHAR_ASCII0+33)
-#define EL_CHAR_ZOLL (EL_CHAR_ASCII0+34)
-#define EL_CHAR_RAUTE (EL_CHAR_ASCII0+35)
-#define EL_CHAR_DOLLAR (EL_CHAR_ASCII0+36)
-#define EL_CHAR_PROZ (EL_CHAR_ASCII0+37)
-#define EL_CHAR_AMPERSAND (EL_CHAR_ASCII0+38)
-#define EL_CHAR_APOSTR (EL_CHAR_ASCII0+39)
-#define EL_CHAR_KLAMM1 (EL_CHAR_ASCII0+40)
-#define EL_CHAR_KLAMM2 (EL_CHAR_ASCII0+41)
-#define EL_CHAR_MULT (EL_CHAR_ASCII0+42)
-#define EL_CHAR_PLUS (EL_CHAR_ASCII0+43)
-#define EL_CHAR_KOMMA (EL_CHAR_ASCII0+44)
-#define EL_CHAR_MINUS (EL_CHAR_ASCII0+45)
-#define EL_CHAR_PUNKT (EL_CHAR_ASCII0+46)
-#define EL_CHAR_SLASH (EL_CHAR_ASCII0+47)
-#define EL_CHAR_0 (EL_CHAR_ASCII0+48)
-#define EL_CHAR_9 (EL_CHAR_ASCII0+57)
-#define EL_CHAR_DOPPEL (EL_CHAR_ASCII0+58)
-#define EL_CHAR_SEMIKL (EL_CHAR_ASCII0+59)
-#define EL_CHAR_LT (EL_CHAR_ASCII0+60)
-#define EL_CHAR_GLEICH (EL_CHAR_ASCII0+61)
-#define EL_CHAR_GT (EL_CHAR_ASCII0+62)
-#define EL_CHAR_FRAGE (EL_CHAR_ASCII0+63)
-#define EL_CHAR_AT (EL_CHAR_ASCII0+64)
-#define EL_CHAR_A (EL_CHAR_ASCII0+65)
-#define EL_CHAR_Z (EL_CHAR_ASCII0+90)
-#define EL_CHAR_AE (EL_CHAR_ASCII0+91)
-#define EL_CHAR_OE (EL_CHAR_ASCII0+92)
-#define EL_CHAR_UE (EL_CHAR_ASCII0+93)
-#define EL_CHAR_COPY (EL_CHAR_ASCII0+94)
-#define EL_CHAR_END (EL_CHAR_START+79)
+#define EL_CHAR_ASCII0 (EL_CHAR_START - 32)
+#define EL_CHAR_AUSRUF (EL_CHAR_ASCII0 + 33)
+#define EL_CHAR_ZOLL (EL_CHAR_ASCII0 + 34)
+#define EL_CHAR_RAUTE (EL_CHAR_ASCII0 + 35)
+#define EL_CHAR_DOLLAR (EL_CHAR_ASCII0 + 36)
+#define EL_CHAR_PROZ (EL_CHAR_ASCII0 + 37)
+#define EL_CHAR_AMPERSAND (EL_CHAR_ASCII0 + 38)
+#define EL_CHAR_APOSTR (EL_CHAR_ASCII0 + 39)
+#define EL_CHAR_KLAMM1 (EL_CHAR_ASCII0 + 40)
+#define EL_CHAR_KLAMM2 (EL_CHAR_ASCII0 + 41)
+#define EL_CHAR_MULT (EL_CHAR_ASCII0 + 42)
+#define EL_CHAR_PLUS (EL_CHAR_ASCII0 + 43)
+#define EL_CHAR_KOMMA (EL_CHAR_ASCII0 + 44)
+#define EL_CHAR_MINUS (EL_CHAR_ASCII0 + 45)
+#define EL_CHAR_PUNKT (EL_CHAR_ASCII0 + 46)
+#define EL_CHAR_SLASH (EL_CHAR_ASCII0 + 47)
+#define EL_CHAR_0 (EL_CHAR_ASCII0 + 48)
+#define EL_CHAR_9 (EL_CHAR_ASCII0 + 57)
+#define EL_CHAR_DOPPEL (EL_CHAR_ASCII0 + 58)
+#define EL_CHAR_SEMIKL (EL_CHAR_ASCII0 + 59)
+#define EL_CHAR_LT (EL_CHAR_ASCII0 + 60)
+#define EL_CHAR_GLEICH (EL_CHAR_ASCII0 + 61)
+#define EL_CHAR_GT (EL_CHAR_ASCII0 + 62)
+#define EL_CHAR_FRAGE (EL_CHAR_ASCII0 + 63)
+#define EL_CHAR_AT (EL_CHAR_ASCII0 + 64)
+#define EL_CHAR_A (EL_CHAR_ASCII0 + 65)
+#define EL_CHAR_Z (EL_CHAR_ASCII0 + 90)
+#define EL_CHAR_AE (EL_CHAR_ASCII0 + 91)
+#define EL_CHAR_OE (EL_CHAR_ASCII0 + 92)
+#define EL_CHAR_UE (EL_CHAR_ASCII0 + 93)
+#define EL_CHAR_COPY (EL_CHAR_ASCII0 + 94)
+#define EL_CHAR_END (EL_CHAR_START + 79)
#define EL_CHAR(x) ((x) == CHAR_BYTE_UMLAUT_A ? EL_CHAR_AE : \
(x) == CHAR_BYTE_UMLAUT_O ? EL_CHAR_OE : \
(x) == CHAR_BYTE_UMLAUT_U ? EL_CHAR_UE : \
EL_CHAR_A + (x) - 'A')
+#define EL_MM_START_2 240
+
/* elements for "Deflektor" style levels */
-#define EL_DF_START 240
+#define EL_DF_START EL_MM_START_2
#define EL_DF_MIRROR_START EL_DF_START
#define EL_DF_MIRROR_00 (EL_DF_MIRROR_START + 0)
#define EL_BEAMER_BLUE_START 404
#define EL_BEAMER_BLUE_END (EL_BEAMER_BLUE_START + 15)
+/* element definitions partially used for drawing graphics */
+#define EL_MCDUFFIN 420
+#define EL_PACMAN 421
+#define EL_FUSE_OFF 422
+#define EL_STEEL_WALL 423
+#define EL_WOODEN_WALL 424
+#define EL_ICE_WALL 425
+#define EL_AMOEBA_WALL 426
+#define EL_LASER 427
+#define EL_RECEIVER 428
+#define EL_DF_STEEL_WALL 429
+#define EL_DF_WOODEN_WALL 430
+
+#define EL_MM_END_2 430
+#define EL_MM_END EL_MM_END_2
+
/* "real" (and therefore drawable) runtime elements */
-#define EL_FIRST_RUNTIME_EL 500
-#define EL_FUSE_OFF 501
-#define EL_PACMAN 502
-#define EL_EXIT_OPENING 503
-#define EL_GRAY_BALL_OPENING 504
+#define EL_EXIT_OPENING 500
+#define EL_EXIT_CLOSING 501
+#define EL_GRAY_BALL_OPENING 502
+#define EL_ICE_WALL_SHRINKING 503
+#define EL_AMOEBA_WALL_GROWING 504
#define EL_WALL_CHANGING 512
#define EL_WALL_CHANGING_START (EL_WALL_CHANGING + 0)
#define EL_WALL_CHANGING_END (EL_WALL_CHANGING + 15)
-#if 0
-#define EL_MIRROR 5
-#define EL_GRID_STEEL 5
-#define EL_MCDUFFIN 5
-#define EL_BEAMER 5
-#define EL_POLAR 5
-#define EL_POLAR_CROSS 5
-#define EL_MIRROR_FIXED 5
-#define EL_GRID_WOOD 5
-#define EL_DF_MIRROR 5
-#define EL_GRID_WOOD_FIXED 5
-#define EL_GRID_STEEL_FIXED 5
-#define EL_LASER 5
-#define EL_RECEIVER 5
-#define EL_FIBRE_OPTIC 5
-#define EL_DF_MIRROR_AUTO 5
-#define EL_GRID_WOOD_AUTO 5
-#define EL_GRID_STEEL_AUTO 5
-#endif
+#define EL_FIRST_RUNTIME_EL EL_EXIT_OPENING
/* "unreal" (and therefore not drawable) runtime elements */
#define EL_BLOCKED 600
#define EL_EXPLODING_OPAQUE 601
#define EL_EXPLODING_TRANSP 602
+/* dummy elements (never used as game elements, only used as graphics) */
+#define EL_MM_MASK_MCDUFFIN_RIGHT 700
+#define EL_MM_MASK_MCDUFFIN_UP 701
+#define EL_MM_MASK_MCDUFFIN_LEFT 702
+#define EL_MM_MASK_MCDUFFIN_DOWN 703
+#define EL_MM_MASK_GRID_1 704
+#define EL_MM_MASK_GRID_2 705
+#define EL_MM_MASK_GRID_3 706
+#define EL_MM_MASK_GRID_4 707
+#define EL_MM_MASK_RECTANGE 708
+#define EL_MM_MASK_CIRCLE 709
+
/* game graphics:
** 0 - 191: graphics from "MirrorScreen"
** 512 - 767: graphics from "MirrorDF"
*/
+#define IMG_EMPTY IMG_EMPTY_SPACE
+
#define GFX_START_MIRRORSCREEN 0
#define GFX_END_MIRRORSCREEN 191
#define GFX_START_PSEUDO 192
#define SETUP 8
/* return values for GameActions */
-#define ACT_GO_ON 0
-#define ACT_GAME_OVER 1
-#define ACT_NEW_GAME 2
+#define ACT_GO_ON 0
+#define ACT_GAME_OVER 1
+#define ACT_NEW_GAME 2
/* values for color_status */
-#define STATIC_COLORS 0
-#define DYNAMIC_COLORS 1
+#define STATIC_COLORS 0
+#define DYNAMIC_COLORS 1
#define PROGRAM_VERSION_MAJOR 2
#define PROGRAM_VERSION_MINOR 0
#define MSDOS_POINTER_FILENAME "mouse.pcx"
/* functions for version handling */
-#define MM_VERSION_IDENT(x,y,z) ((x) * 10000 + (y) * 100 + (z))
-#define MM_VERSION_MAJOR(x) ((x) / 10000)
-#define MM_VERSION_MINOR(x) (((x) % 10000) / 100)
-#define MM_VERSION_PATCH(x) ((x) % 100)
+#define MM_VERSION_IDENT(x,y,z) VERSION_IDENT(x,y,z,0)
+#define MM_VERSION_MAJOR(x) VERSION_MAJOR(x)
+#define MM_VERSION_MINOR(x) VERSION_MINOR(x)
+#define MM_VERSION_PATCH(x) VERSION_PATCH(x)
/* file version numbers for resource files (levels, score, setup, etc.)
** currently supported/known file version numbers:
/* sound control */
-#define ST(x) (((x)-8)*16)
+#define ST(x) (((x) - 8) * 16)
#endif /* MM_MAIN_H */