X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame_mm%2Fmm_main.h;h=684647ce12ea77ca52aff8fc88a27288e7fb452f;hp=f20a412daa179a555758249f29ffd978580c1ce5;hb=HEAD;hpb=2f383683929484fed45a21020ae241302ddd0ecd diff --git a/src/game_mm/mm_main.h b/src/game_mm/mm_main.h index f20a412d..684647ce 100644 --- a/src/game_mm/mm_main.h +++ b/src/game_mm/mm_main.h @@ -4,7 +4,7 @@ // (c) 1994-2017 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // mm_main.h // ============================================================================ @@ -21,12 +21,19 @@ #define SCREENY(a) (a) #define LEVELX(a) (a) #define LEVELY(a) (a) -#define IN_VIS_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2) -#define IN_LEV_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=0 && (x)=0 && (y)= 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 EP_BIT_MCDUFFIN (1 << 1) #define EP_BIT_RECTANGLE (1 << 2) @@ -41,6 +48,7 @@ #define EP_BIT_INACTIVE (1 << 11) #define EP_BIT_WALL (1 << 12) #define EP_BIT_PACMAN (1 << 13) +#define EP_BIT_ENVELOPE (1 << 14) #define IS_GRID(e) (Elementeigenschaften[e] & EP_BIT_GRID) #define IS_MCDUFFIN(e) (Elementeigenschaften[e] & EP_BIT_MCDUFFIN) @@ -56,6 +64,7 @@ #define IS_INACTIVE(e) (Elementeigenschaften[e] & EP_BIT_INACTIVE) #define IS_MM_WALL(e) (Elementeigenschaften[e] & EP_BIT_WALL) #define IS_PACMAN(e) (Elementeigenschaften[e] & EP_BIT_PACMAN) +#define IS_ENVELOPE(e) (Elementeigenschaften[e] & EP_BIT_ENVELOPE) #define IS_WALL_STEEL(e) ((e) >= EL_WALL_STEEL_START && \ (e) <= EL_WALL_STEEL_END) @@ -94,6 +103,10 @@ (e) <= EL_DF_MIRROR_END) #define IS_DF_MIRROR_AUTO(e) ((e) >= EL_DF_MIRROR_AUTO_START && \ (e) <= EL_DF_MIRROR_AUTO_END) +#define IS_DF_MIRROR_FIXED(e) ((e) >= EL_DF_MIRROR_FIXED_START && \ + (e) <= EL_DF_MIRROR_FIXED_END) +#define IS_DF_SLOPE(e) ((e) >= EL_DF_SLOPE_START && \ + (e) <= EL_DF_SLOPE_END) #define IS_LASER(e) ((e) >= EL_LASER_START && \ (e) <= EL_LASER_END) #define IS_RECEIVER(e) ((e) >= EL_RECEIVER_START && \ @@ -115,76 +128,71 @@ (e) == EL_BOMB || \ IS_WALL_AMOEBA(e)) -#define CAN_MOVE(e) ((e) == EL_PACMAN) -#define IS_FREE(x,y) (Feld[x][y] == EL_EMPTY) +#define IS_ABSORBING_BLOCK(e) (IS_WALL_WOOD(e) || \ + IS_DF_WALL_WOOD(e) || \ + (e) == EL_BLOCK_WOOD || \ + (e) == EL_GATE_WOOD || \ + (e) == EL_EXIT_CLOSED || \ + (e) == EL_EXIT_OPEN) -#define IS_MOVING(x,y) (MovPos[x][y] != 0) -#define IS_BLOCKED(x,y) (Feld[x][y] == EL_BLOCKED) -#define IS_DRAWABLE(e) ((e) < EL_BLOCKED) -#define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED) +#define IS_ENVELOPE_OPENING(e) ((e) >= EL_ENVELOPE_OPENING_START && \ + (e) <= EL_ENVELOPE_OPENING_END) -#define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_SPIELER1]) +#define ENVELOPE_NR(e) ((e) - EL_ENVELOPE_1) +#define ENVELOPE_OPENING_NR(e) ((e) - EL_ENVELOPE_1_OPENING) + +#define CAN_MOVE(e) ((e) == EL_PACMAN) +#define IS_FREE(x, y) (Tile[x][y] == EL_EMPTY) + +#define IS_MOVING(x, y) (MovPos[x][y] != 0) +#define IS_BLOCKED(x, y) (Tile[x][y] == EL_BLOCKED) +#define IS_DRAWABLE(e) ((e) < EL_BLOCKED) +#define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED) #define WALL_BASE(e) ((e) & 0xfff0) #define WALL_BITS(e) ((e) & 0x000f) -/* Bitmaps with graphic file */ -#define PIX_BACK 0 -#define PIX_DOOR 1 -#define PIX_TOONS 2 -#define PIX_DF 3 -#define PIX_BIGFONT 4 -#define PIX_SMALLFONT 5 -#define PIX_MEDIUMFONT 6 -/* Bitmaps without graphic file */ -#define PIX_DB_DOOR 7 - -#define NUM_PICTURES 7 -#define NUM_BITMAPS 8 - -/* boundaries of arrays etc. */ +// boundaries of arrays etc. #define MAX_PLAYER_NAME_LEN 10 #define MAX_LEVEL_NAME_LEN 32 #define MAX_LEVEL_AUTHOR_LEN 32 #define MAX_SCORE_ENTRIES 100 -#define MAX_ELEMENTS 700 /* 500 static + 200 runtime */ - -#define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */ - -#define MICROLEVEL_SCROLL_DELAY 50 /* delay for scrolling micro level */ -#define MICROLEVEL_LABEL_DELAY 250 /* delay for micro level label */ - -struct HiScore -{ - 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 int joystick_device; -extern char *joystick_device_name[]; +#define MAX_ELEMENTS 700 // 500 static + 200 runtime + +#define MICROLEVEL_SCROLL_DELAY 50 // delay for scrolling micro level +#define MICROLEVEL_LABEL_DELAY 250 // delay for micro level label + +// score for elements +#define SC_COLLECTIBLE 0 +#define SC_UNUSED_1 1 +#define SC_UNUSED_2 2 +#define SC_UNUSED_3 3 +#define SC_UNUSED_4 4 +#define SC_UNUSED_5 5 +#define SC_PACMAN 6 +#define SC_UNUSED_7 7 +#define SC_UNUSED_8 8 +#define SC_KEY 9 +#define SC_TIME_BONUS 10 +#define SC_UNUSED_11 11 +#define SC_UNUSED_12 12 +#define SC_UNUSED_13 13 +#define SC_LIGHTBALL 14 +#define SC_UNUSED_15 15 + +#define LEVEL_SCORE_ELEMENTS 16 // level elements with score + + +extern DrawBuffer *drawto_mm; +extern DrawBuffer *bitmap_db_field; extern int game_status; extern boolean level_editor_test_game; -extern boolean network_playing; - -extern int key_joystick_mapping; -extern int global_joystick_status, joystick_status; -extern int sound_status; -extern boolean sound_loops_allowed; extern boolean redraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int redraw_x1, redraw_y1; -extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Tile[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Hit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Box[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -198,38 +206,39 @@ extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; +extern short AmoebaCnt[MAX_NUM_AMOEBA]; +extern short AmoebaCnt2[MAX_NUM_AMOEBA]; +extern short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; + +extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; + 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 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 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 int dSX, dSY; +extern int cSX, cSY; +extern int cSX2, cSY2; +extern int cFX, cFY; extern Pixel pen_fg, pen_bg, pen_ray, pen_magicolor[2]; extern int color_status; @@ -237,71 +246,10 @@ extern int color_status; extern struct XY Step[]; extern short Sign[16]; -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 SX 8 -#define SY 8 -#define REAL_SX (SX - 2) -#define REAL_SY (SY - 2) -#define DX 534 -#define DY 60 -#define EX DX -#define EY (DY + 178) -#define TILEX TILESIZE -#define TILEY TILESIZE -#define MINI_TILEX (TILEX / 2) -#define MINI_TILEY (TILEY / 2) -#define MICRO_TILEX (TILEX / 4) -#define MICRO_TILEY (TILEY / 4) -#define MICRO_WALLX (TILEX / 8) -#define MICRO_WALLY (TILEY / 8) -#define MIDPOSX (SCR_FIELDX / 2) -#define MIDPOSY (SCR_FIELDY / 2) -#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 + 12 * TILEX) -#define MICROLEV_YPOS (SY + 6 * TILEY) -#define MICROLEV_XSIZE (STD_LEV_FIELDX * MICRO_TILEX) -#define MICROLEV_YSIZE (STD_LEV_FIELDY * MICRO_TILEY) -#define MICROLABEL_XPOS (SY) -#define MICROLABEL_YPOS (SY + 352) -#define MICROLABEL_XSIZE (SXSIZE) -#define MICROLABEL_YSIZE (FONT4_YSIZE) - -#define GFX_STARTX SX -#define GFX_STARTY SY -#define MINI_GFX_STARTX (SX + 8 * TILEX) -#define MINI_GFX_STARTY (SY + 6 * TILEY) -#define MICRO_GFX_STARTX (MINI_GFX_STARTX + 8 * MINI_TILEX) -#define MICRO_GFX_STARTY (MINI_GFX_STARTY + 6 * MINI_TILEY) -#define GFX_PER_LINE 16 -#define MINI_GFX_PER_LINE GFX_PER_LINE -#define MICRO_GFX_PER_LINE GFX_PER_LINE - -#define MINI_DF_STARTX (8 * TILEX) -#define MINI_DF_STARTY (8 * TILEY) -#define MICRO_DF_STARTX (MINI_DF_STARTX + 8 * MINI_TILEX) -#define MICRO_DF_STARTY (MINI_DF_STARTY + 8 * MINI_TILEY) -#define DF_PER_LINE 16 -#define MINI_DF_PER_LINE DF_PER_LINE -#define MICRO_DF_PER_LINE DF_PER_LINE - -#define MICRO_FONT_STARTX (MICRO_DF_STARTX + 8 * MICRO_TILEX) -#define MICRO_FONT_STARTY (MICRO_DF_STARTY + 8 * MICRO_TILEY) -#define MICRO_FONT_PER_LINE 8 - -/* wall positions (that can be OR'ed together) */ +// wall positions (that can be OR'ed together) #define WALL_TOPLEFT 1 #define WALL_TOPRIGHT 2 #define WALL_BOTTOMLEFT 4 @@ -311,11 +259,11 @@ extern int num_element_info; #define WALL_TOP (WALL_TOPLEFT | WALL_TOPRIGHT) #define WALL_BOTTOM (WALL_BOTTOMLEFT | WALL_BOTTOMRIGHT) -/* game elements: -** 0 - 499: real elements, stored in level file -** 500 - 699: flag elements, only used at runtime -*/ -/* "real" level elements */ +// game elements: +// 0 - 499: real elements, stored in level file +// 500 - 699: flag elements, only used at runtime + +// "real" level elements #define EL_MM_START 0 #define EL_MM_START_1 EL_MM_START @@ -357,31 +305,22 @@ extern int num_element_info; #define EL_KETTLE 29 #define EL_BOMB 30 #define EL_PRISM 31 -#define EL_WALL_START 32 -#define EL_WALL_EMPTY EL_WALL_START -#define EL_WALL_00 EL_WALL_START -#define EL_WALL_STEEL EL_WALL_00 -#define EL_WALL_STEEL_START EL_WALL_00 -#define EL_WALL_15 47 -#define EL_WALL_STEEL_END EL_WALL_15 -#define EL_WALL_16 48 -#define EL_WALL_WOOD EL_WALL_16 -#define EL_WALL_WOOD_START EL_WALL_16 -#define EL_WALL_31 63 -#define EL_WALL_WOOD_END EL_WALL_31 -#define EL_WALL_32 64 -#define EL_WALL_ICE EL_WALL_32 -#define EL_WALL_ICE_START EL_WALL_32 -#define EL_WALL_47 79 -#define EL_WALL_ICE_END EL_WALL_47 -#define EL_WALL_48 80 -#define EL_WALL_AMOEBA EL_WALL_48 -#define EL_WALL_AMOEBA_START EL_WALL_48 -#define EL_WALL_63 95 -#define EL_WALL_AMOEBA_END EL_WALL_63 -#define EL_WALL_END EL_WALL_63 +#define EL_WALL_START EL_WALL_STEEL_START +#define EL_WALL_STEEL_BASE 32 +#define EL_WALL_STEEL_START (EL_WALL_STEEL_BASE + 0) +#define EL_WALL_STEEL_END (EL_WALL_STEEL_BASE + 15) +#define EL_WALL_WOOD_BASE 48 +#define EL_WALL_WOOD_START (EL_WALL_WOOD_BASE + 0) +#define EL_WALL_WOOD_END (EL_WALL_WOOD_BASE + 15) +#define EL_WALL_ICE_BASE 64 +#define EL_WALL_ICE_START (EL_WALL_ICE_BASE + 0) +#define EL_WALL_ICE_END (EL_WALL_ICE_BASE + 15) +#define EL_WALL_AMOEBA_BASE 80 +#define EL_WALL_AMOEBA_START (EL_WALL_AMOEBA_BASE + 0) +#define EL_WALL_AMOEBA_END (EL_WALL_AMOEBA_BASE + 15) +#define EL_WALL_END EL_WALL_AMOEBA_END #define EL_BLOCK_WOOD 96 -#define EL_BALL_GRAY 97 +#define EL_GRAY_BALL 97 #define EL_BEAMER_START 98 #define EL_BEAMER_00 (EL_BEAMER_START + 0) #define EL_BEAMER_01 (EL_BEAMER_START + 1) @@ -452,42 +391,46 @@ extern int num_element_info; #define EL_GRID_WOOD_03 (EL_GRID_WOOD_START + 3) #define EL_GRID_WOOD_END EL_GRID_WOOD_03 #define EL_FUEL_EMPTY 155 +#define EL_ENVELOPE_1 156 +#define EL_ENVELOPE_2 157 +#define EL_ENVELOPE_3 158 +#define EL_ENVELOPE_4 159 -#define EL_MM_END_1 155 +#define EL_MM_END_1 159 #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 : \ @@ -496,7 +439,7 @@ extern int num_element_info; #define EL_MM_START_2 240 -/* elements for "Deflektor" style levels */ +// elements for "Deflektor" style levels #define EL_DF_START EL_MM_START_2 #define EL_DF_MIRROR_START EL_DF_START @@ -519,35 +462,36 @@ extern int num_element_info; #define EL_DF_MIRROR_END EL_DF_MIRROR_15 #define EL_GRID_WOOD_FIXED_START 256 -#define EL_GRID_WOOD_FIXED_00 (EL_GRID_WOOD_FIXED_START + 0) /* 0.0° */ -#define EL_GRID_WOOD_FIXED_01 (EL_GRID_WOOD_FIXED_START + 1) /* 22.5° */ -#define EL_GRID_WOOD_FIXED_02 (EL_GRID_WOOD_FIXED_START + 2) /* 45.0° */ -#define EL_GRID_WOOD_FIXED_03 (EL_GRID_WOOD_FIXED_START + 3) /* 67.5° */ -#define EL_GRID_WOOD_FIXED_04 (EL_GRID_WOOD_FIXED_START + 4) /* 90.0° */ -#define EL_GRID_WOOD_FIXED_05 (EL_GRID_WOOD_FIXED_START + 5) /* 112.5° */ -#define EL_GRID_WOOD_FIXED_06 (EL_GRID_WOOD_FIXED_START + 6) /* 135.0° */ -#define EL_GRID_WOOD_FIXED_07 (EL_GRID_WOOD_FIXED_START + 7) /* 157.5° */ +#define EL_GRID_WOOD_FIXED_00 (EL_GRID_WOOD_FIXED_START + 0) // 0.0° +#define EL_GRID_WOOD_FIXED_01 (EL_GRID_WOOD_FIXED_START + 1) // 22.5° +#define EL_GRID_WOOD_FIXED_02 (EL_GRID_WOOD_FIXED_START + 2) // 45.0° +#define EL_GRID_WOOD_FIXED_03 (EL_GRID_WOOD_FIXED_START + 3) // 67.5° +#define EL_GRID_WOOD_FIXED_04 (EL_GRID_WOOD_FIXED_START + 4) // 90.0° +#define EL_GRID_WOOD_FIXED_05 (EL_GRID_WOOD_FIXED_START + 5) // 112.5° +#define EL_GRID_WOOD_FIXED_06 (EL_GRID_WOOD_FIXED_START + 6) // 135.0° +#define EL_GRID_WOOD_FIXED_07 (EL_GRID_WOOD_FIXED_START + 7) // 157.5° #define EL_GRID_WOOD_FIXED_END EL_GRID_WOOD_FIXED_07 #define EL_GRID_STEEL_FIXED_START 264 -#define EL_GRID_STEEL_FIXED_00 (EL_GRID_STEEL_FIXED_START + 0) /* 0.0° */ -#define EL_GRID_STEEL_FIXED_01 (EL_GRID_STEEL_FIXED_START + 1) /* 22.5° */ -#define EL_GRID_STEEL_FIXED_02 (EL_GRID_STEEL_FIXED_START + 2) /* 45.0° */ -#define EL_GRID_STEEL_FIXED_03 (EL_GRID_STEEL_FIXED_START + 3) /* 67.5° */ -#define EL_GRID_STEEL_FIXED_04 (EL_GRID_STEEL_FIXED_START + 4) /* 90.0° */ -#define EL_GRID_STEEL_FIXED_05 (EL_GRID_STEEL_FIXED_START + 5) /* 112.5° */ -#define EL_GRID_STEEL_FIXED_06 (EL_GRID_STEEL_FIXED_START + 6) /* 135.0° */ -#define EL_GRID_STEEL_FIXED_07 (EL_GRID_STEEL_FIXED_START + 7) /* 157.5° */ +#define EL_GRID_STEEL_FIXED_00 (EL_GRID_STEEL_FIXED_START + 0) // 0.0° +#define EL_GRID_STEEL_FIXED_01 (EL_GRID_STEEL_FIXED_START + 1) // 22.5° +#define EL_GRID_STEEL_FIXED_02 (EL_GRID_STEEL_FIXED_START + 2) // 45.0° +#define EL_GRID_STEEL_FIXED_03 (EL_GRID_STEEL_FIXED_START + 3) // 67.5° +#define EL_GRID_STEEL_FIXED_04 (EL_GRID_STEEL_FIXED_START + 4) // 90.0° +#define EL_GRID_STEEL_FIXED_05 (EL_GRID_STEEL_FIXED_START + 5) // 112.5° +#define EL_GRID_STEEL_FIXED_06 (EL_GRID_STEEL_FIXED_START + 6) // 135.0° +#define EL_GRID_STEEL_FIXED_07 (EL_GRID_STEEL_FIXED_START + 7) // 157.5° #define EL_GRID_STEEL_FIXED_END EL_GRID_STEEL_FIXED_07 -#define EL_DF_WALL_WOOD 272 -#define EL_DF_WALL_START EL_DF_WALL_WOOD_START -#define EL_DF_WALL_WOOD_START (EL_DF_WALL_WOOD + 0) -#define EL_DF_WALL_WOOD_END (EL_DF_WALL_WOOD + 15) +#define EL_DF_WALL_WOOD_BASE 272 +#define EL_DF_WALL_WOOD_START (EL_DF_WALL_WOOD_BASE + 0) +#define EL_DF_WALL_WOOD_END (EL_DF_WALL_WOOD_BASE + 15) -#define EL_DF_WALL_STEEL 288 -#define EL_DF_WALL_STEEL_START (EL_DF_WALL_STEEL + 0) -#define EL_DF_WALL_STEEL_END (EL_DF_WALL_STEEL + 15) +#define EL_DF_WALL_STEEL_BASE 288 +#define EL_DF_WALL_STEEL_START (EL_DF_WALL_STEEL_BASE + 0) +#define EL_DF_WALL_STEEL_END (EL_DF_WALL_STEEL_BASE + 15) + +#define EL_DF_WALL_START EL_DF_WALL_WOOD_START #define EL_DF_WALL_END EL_DF_WALL_STEEL_END #define EL_DF_EMPTY 304 @@ -632,408 +576,169 @@ extern int num_element_info; #define EL_BEAMER_BLUE_START 404 #define EL_BEAMER_BLUE_END (EL_BEAMER_BLUE_START + 15) -/* (currently unused, but potentially useful element definitions) */ +// 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_WALL_STEEL 423 +#define EL_WALL_WOOD 424 +#define EL_WALL_ICE 425 +#define EL_WALL_AMOEBA 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_DF_WALL_STEEL 429 +#define EL_DF_WALL_WOOD 430 + +#define EL_DF_MIRROR_FIXED_START 431 +#define EL_DF_MIRROR_FIXED_00 (EL_DF_MIRROR_FIXED_START + 0) +#define EL_DF_MIRROR_FIXED_01 (EL_DF_MIRROR_FIXED_START + 1) +#define EL_DF_MIRROR_FIXED_02 (EL_DF_MIRROR_FIXED_START + 2) +#define EL_DF_MIRROR_FIXED_03 (EL_DF_MIRROR_FIXED_START + 3) +#define EL_DF_MIRROR_FIXED_04 (EL_DF_MIRROR_FIXED_START + 4) +#define EL_DF_MIRROR_FIXED_05 (EL_DF_MIRROR_FIXED_START + 5) +#define EL_DF_MIRROR_FIXED_06 (EL_DF_MIRROR_FIXED_START + 6) +#define EL_DF_MIRROR_FIXED_07 (EL_DF_MIRROR_FIXED_START + 7) +#define EL_DF_MIRROR_FIXED_08 (EL_DF_MIRROR_FIXED_START + 8) +#define EL_DF_MIRROR_FIXED_09 (EL_DF_MIRROR_FIXED_START + 9) +#define EL_DF_MIRROR_FIXED_10 (EL_DF_MIRROR_FIXED_START + 10) +#define EL_DF_MIRROR_FIXED_11 (EL_DF_MIRROR_FIXED_START + 11) +#define EL_DF_MIRROR_FIXED_12 (EL_DF_MIRROR_FIXED_START + 12) +#define EL_DF_MIRROR_FIXED_13 (EL_DF_MIRROR_FIXED_START + 13) +#define EL_DF_MIRROR_FIXED_14 (EL_DF_MIRROR_FIXED_START + 14) +#define EL_DF_MIRROR_FIXED_15 (EL_DF_MIRROR_FIXED_START + 15) +#define EL_DF_MIRROR_FIXED_END EL_DF_MIRROR_FIXED_15 + +#define EL_DF_SLOPE_START 447 +#define EL_DF_SLOPE_00 (EL_DF_SLOPE_START + 0) +#define EL_DF_SLOPE_01 (EL_DF_SLOPE_START + 1) +#define EL_DF_SLOPE_02 (EL_DF_SLOPE_START + 2) +#define EL_DF_SLOPE_03 (EL_DF_SLOPE_START + 3) +#define EL_DF_SLOPE_END EL_DF_SLOPE_03 + +#define EL_MM_END_2 450 #define EL_MM_END EL_MM_END_2 -/* "real" (and therefore drawable) runtime elements */ +// "real" (and therefore drawable) runtime elements #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) +#define EL_GRAY_BALL_ACTIVE 502 +#define EL_GRAY_BALL_OPENING 503 +#define EL_WALL_ICE_SHRINKING 504 +#define EL_WALL_AMOEBA_GROWING 505 +#define EL_BOMB_ACTIVE 506 +#define EL_MINE_ACTIVE 507 +#define EL_ENVELOPE_1_OPENING 508 +#define EL_ENVELOPE_2_OPENING 509 +#define EL_ENVELOPE_3_OPENING 510 +#define EL_ENVELOPE_4_OPENING 511 + +#define EL_ENVELOPE_OPENING_START EL_ENVELOPE_1_OPENING +#define EL_ENVELOPE_OPENING_END EL_ENVELOPE_4_OPENING + +#define EL_WALL_CHANGING_BASE 512 +#define EL_WALL_CHANGING_START (EL_WALL_CHANGING_BASE + 0) +#define EL_WALL_CHANGING_END (EL_WALL_CHANGING_BASE + 15) #define EL_FIRST_RUNTIME_EL EL_EXIT_OPENING -/* "unreal" (and therefore not drawable) runtime elements */ +// "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" -** 192 - 255: pseudo graphics mapped to "MirrorScreen" -** 256 - 511: graphics from "MirrorFont" -** 512 - 767: graphics from "MirrorDF" -*/ + +// game graphics: +// 0 - 191: graphics from "MirrorScreen" +// 192 - 255: pseudo graphics mapped to "MirrorScreen" +// 256 - 511: graphics from "MirrorFont" +// 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 GFX_END_PSEUDO 255 -#define GFX_START_MIRRORFONT 256 -#define GFX_END_MIRRORFONT 511 -#define GFX_START_MIRRORDF 512 -#define GFX_END_MIRRORDF 767 - -#define NUM_TILES 512 - -/* graphics from "MirrorScreen" */ -#define GFX_EMPTY (-1) -/* row 0 (0) */ -#define GFX_MIRROR_START 0 -#define GFX_MIRROR GFX_MIRROR_START -#define GFX_MIRROR_00 (GFX_MIRROR_START + 0) -#define GFX_MIRROR_01 (GFX_MIRROR_START + 1) -#define GFX_MIRROR_02 (GFX_MIRROR_START + 2) -#define GFX_MIRROR_03 (GFX_MIRROR_START + 3) -#define GFX_MIRROR_04 (GFX_MIRROR_START + 4) -#define GFX_MIRROR_05 (GFX_MIRROR_START + 5) -#define GFX_MIRROR_06 (GFX_MIRROR_START + 6) -#define GFX_MIRROR_07 (GFX_MIRROR_START + 7) -#define GFX_MIRROR_08 (GFX_MIRROR_START + 8) -#define GFX_MIRROR_09 (GFX_MIRROR_START + 9) -#define GFX_MIRROR_10 (GFX_MIRROR_START + 10) -#define GFX_MIRROR_11 (GFX_MIRROR_START + 11) -#define GFX_MIRROR_12 (GFX_MIRROR_START + 12) -#define GFX_MIRROR_13 (GFX_MIRROR_START + 13) -#define GFX_MIRROR_14 (GFX_MIRROR_START + 14) -#define GFX_MIRROR_15 (GFX_MIRROR_START + 15) -#define GFX_MIRROR_END GFX_MIRROR_15 -/* row 1 (16) */ -#define GFX_GRID_STEEL_START 16 -#define GFX_GRID_STEEL GFX_GRID_STEEL_START -#define GFX_GRID_STEEL_00 (GFX_GRID_STEEL_START + 0) -#define GFX_GRID_STEEL_01 (GFX_GRID_STEEL_START + 1) -#define GFX_GRID_STEEL_02 (GFX_GRID_STEEL_START + 2) -#define GFX_GRID_STEEL_03 (GFX_GRID_STEEL_START + 3) -#define GFX_MCDUFFIN_START 20 -#define GFX_MCDUFFIN GFX_MCDUFFIN_START -#define GFX_MCDUFFIN_RIGHT (GFX_MCDUFFIN_START + 0) -#define GFX_MCDUFFIN_UP (GFX_MCDUFFIN_START + 1) -#define GFX_MCDUFFIN_LEFT (GFX_MCDUFFIN_START + 2) -#define GFX_MCDUFFIN_DOWN (GFX_MCDUFFIN_START + 3) -#define GFX_EXIT_CLOSED 24 -#define GFX_EXIT_OPENING_1 25 -#define GFX_EXIT_OPENING_2 26 -#define GFX_EXIT_OPEN 27 -#define GFX_KETTLE 28 -#define GFX_EXPLOSION_KETTLE 29 -/* row 2 (32) */ -#define GFX_PRISM 32 -#define GFX_WALL_SEVERAL 33 -#define GFX_WALL_ANIMATION 34 -#define GFX_BLOCK_WOOD 36 -#define GFX_BOMB 37 -#define GFX_FUSE_ON 38 -#define GFX_FUSE_OFF 39 -#define GFX_GATE_STONE 40 -#define GFX_KEY 41 -#define GFX_LIGHTBULB_OFF 42 -#define GFX_LIGHTBULB_ON 43 -#define GFX_BALL_RED 44 -#define GFX_BALL_BLUE 45 -#define GFX_BALL_YELLOW 46 -#define GFX_BALL_GRAY 47 -/* row 3 (48) */ -#define GFX_BEAMER_START 48 -#define GFX_BEAMER_END 63 -/* row 4 (64) */ -#define GFX_PACMAN_START 64 -#define GFX_PACMAN GFX_PACMAN_START -#define GFX_PACMAN_RIGHT (GFX_PACMAN_START + 0) -#define GFX_PACMAN_UP (GFX_PACMAN_START + 1) -#define GFX_PACMAN_LEFT (GFX_PACMAN_START + 2) -#define GFX_PACMAN_DOWN (GFX_PACMAN_START + 3) -#define GFX_EXPLOSION_START 72 -#define GFX_EXPLOSION_SHORT 76 -#define GFX_EXPLOSION_LAST 78 -/* row 5 (80) */ -#define GFX_POLAR_START 80 -#define GFX_POLAR_END 95 -/* row 6 (96) */ -#define GFX_POLAR_CROSS_START 96 -#define GFX_POLAR_CROSS GFX_POLAR_CROSS_START -#define GFX_POLAR_CROSS_00 (GFX_POLAR_CROSS_START + 0) -#define GFX_POLAR_CROSS_01 (GFX_POLAR_CROSS_START + 1) -#define GFX_POLAR_CROSS_02 (GFX_POLAR_CROSS_START + 2) -#define GFX_POLAR_CROSS_03 (GFX_POLAR_CROSS_START + 3) -#define GFX_MIRROR_FIXED_START 100 -#define GFX_MIRROR_FIXED GFX_MIRROR_FIXED_START -#define GFX_MIRROR_FIXED_00 (GFX_MIRROR_FIXED_START + 0) -#define GFX_MIRROR_FIXED_01 (GFX_MIRROR_FIXED_START + 1) -#define GFX_MIRROR_FIXED_02 (GFX_MIRROR_FIXED_START + 2) -#define GFX_MIRROR_FIXED_03 (GFX_MIRROR_FIXED_START + 3) -/* row 7 (112) */ -#define GFX_BLOCK_STONE 112 -#define GFX_GATE_WOOD 113 -#define GFX_FUEL_FULL 114 -#define GFX_FUEL_EMPTY 115 -#define GFX_GRID_WOOD_00 116 -#define GFX_GRID_WOOD_01 117 -#define GFX_GRID_WOOD_02 118 -#define GFX_GRID_WOOD_03 119 -/* row 8 (128) */ -#define GFX_ARROW_BLUE_LEFT 128 -#define GFX_ARROW_BLUE_RIGHT 129 -#define GFX_ARROW_BLUE_UP 130 -#define GFX_ARROW_BLUE_DOWN 131 -#define GFX_ARROW_RED_LEFT 132 -#define GFX_ARROW_RED_RIGHT 133 -#define GFX_ARROW_RED_UP 134 -#define GFX_ARROW_RED_DOWN 135 -/* row 9 (144) */ -#define GFX_SCROLLBAR_BLUE 144 -#define GFX_SCROLLBAR_RED 145 -/* row 10 (160) */ -#define GFX_MASK_CIRCLE 160 -#define GFX_MASK_RECTANGLE 161 -#define GFX_MASK_RECTANGLE2 162 -#define GFX_MASK_RECTANGLE3 163 -#define GFX_MASK_GRID_00 164 -#define GFX_MASK_GRID_01 165 -#define GFX_MASK_GRID_02 166 -#define GFX_MASK_GRID_03 167 -/* row 11 (176) */ -#define GFX_MASK_MCDUFFIN_00 176 -#define GFX_MASK_MCDUFFIN_01 177 -#define GFX_MASK_MCDUFFIN_02 178 -#define GFX_MASK_MCDUFFIN_03 179 - -/* pseudo-graphics; will be mapped to other graphics */ -#define GFX_WALL_STEEL 192 -#define GFX_WALL_WOOD 193 -#define GFX_WALL_ICE 194 -#define GFX_WALL_AMOEBA 195 -#define GFX_DF_WALL_STEEL 196 -#define GFX_DF_WALL_WOOD 197 - -#define GFX_KUGEL_ROT GFX_BALL_RED -#define GFX_KUGEL_BLAU GFX_BALL_BLUE -#define GFX_KUGEL_GELB GFX_BALL_YELLOW -#define GFX_KUGEL_GRAU GFX_BALL_GRAY - -/* graphics from "MirrorFont" */ -#define GFX_CHAR_START (GFX_START_MIRRORFONT) -#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) - -/* graphics from "MirrorDF" */ -#define GFX_DF_MIRROR_00 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 0) -#define GFX_DF_MIRROR_01 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 1) -#define GFX_DF_MIRROR_02 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 2) -#define GFX_DF_MIRROR_03 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 3) -#define GFX_DF_MIRROR_04 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 4) -#define GFX_DF_MIRROR_05 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 5) -#define GFX_DF_MIRROR_06 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 6) -#define GFX_DF_MIRROR_07 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 7) -#define GFX_DF_MIRROR_08 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 8) -#define GFX_DF_MIRROR_09 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 9) -#define GFX_DF_MIRROR_10 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 10) -#define GFX_DF_MIRROR_11 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 11) -#define GFX_DF_MIRROR_12 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 12) -#define GFX_DF_MIRROR_13 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 13) -#define GFX_DF_MIRROR_14 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 14) -#define GFX_DF_MIRROR_15 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 15) - -#define GFX_DF_MIRROR_AUTO_00 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 0) -#define GFX_DF_MIRROR_AUTO_01 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 1) -#define GFX_DF_MIRROR_AUTO_02 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 2) -#define GFX_DF_MIRROR_AUTO_03 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 3) -#define GFX_DF_MIRROR_AUTO_04 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 4) -#define GFX_DF_MIRROR_AUTO_05 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 5) -#define GFX_DF_MIRROR_AUTO_06 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 6) -#define GFX_DF_MIRROR_AUTO_07 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 7) -#define GFX_DF_MIRROR_AUTO_08 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 8) -#define GFX_DF_MIRROR_AUTO_09 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 9) -#define GFX_DF_MIRROR_AUTO_10 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 10) -#define GFX_DF_MIRROR_AUTO_11 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 11) -#define GFX_DF_MIRROR_AUTO_12 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 12) -#define GFX_DF_MIRROR_AUTO_13 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 13) -#define GFX_DF_MIRROR_AUTO_14 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 14) -#define GFX_DF_MIRROR_AUTO_15 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 15) - -#define GFX_GRID_STEEL_FIXED_00 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 0) -#define GFX_GRID_STEEL_FIXED_01 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 1) -#define GFX_GRID_STEEL_FIXED_02 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 2) -#define GFX_GRID_STEEL_FIXED_03 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 3) -#define GFX_GRID_STEEL_FIXED_04 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 4) -#define GFX_GRID_STEEL_FIXED_05 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 5) -#define GFX_GRID_STEEL_FIXED_06 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 6) -#define GFX_GRID_STEEL_FIXED_07 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 7) -#define GFX_GRID_STEEL_FIXED GFX_GRID_STEEL_FIXED_00 - -#define GFX_GRID_WOOD_FIXED_00 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 8) -#define GFX_GRID_WOOD_FIXED_01 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 9) -#define GFX_GRID_WOOD_FIXED_02 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 10) -#define GFX_GRID_WOOD_FIXED_03 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 11) -#define GFX_GRID_WOOD_FIXED_04 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 12) -#define GFX_GRID_WOOD_FIXED_05 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 13) -#define GFX_GRID_WOOD_FIXED_06 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 14) -#define GFX_GRID_WOOD_FIXED_07 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 15) -#define GFX_GRID_WOOD_FIXED GFX_GRID_WOOD_FIXED_00 - -#define GFX_GRID_STEEL_AUTO_00 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 0) -#define GFX_GRID_STEEL_AUTO_01 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 1) -#define GFX_GRID_STEEL_AUTO_02 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 2) -#define GFX_GRID_STEEL_AUTO_03 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 3) -#define GFX_GRID_STEEL_AUTO_04 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 4) -#define GFX_GRID_STEEL_AUTO_05 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 5) -#define GFX_GRID_STEEL_AUTO_06 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 6) -#define GFX_GRID_STEEL_AUTO_07 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 7) -#define GFX_GRID_STEEL_AUTO GFX_GRID_STEEL_AUTO_00 - -#define GFX_GRID_WOOD_AUTO_00 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 8) -#define GFX_GRID_WOOD_AUTO_01 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 9) -#define GFX_GRID_WOOD_AUTO_02 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 10) -#define GFX_GRID_WOOD_AUTO_03 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 11) -#define GFX_GRID_WOOD_AUTO_04 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 12) -#define GFX_GRID_WOOD_AUTO_05 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 13) -#define GFX_GRID_WOOD_AUTO_06 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 14) -#define GFX_GRID_WOOD_AUTO_07 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 15) -#define GFX_GRID_WOOD_AUTO GFX_GRID_WOOD_AUTO_00 - -#define GFX_BEAMER_RED_START (GFX_START_MIRRORDF + 4 * DF_PER_LINE + 0) -#define GFX_BEAMER_RED_END (GFX_START_MIRRORDF + 4 * DF_PER_LINE + 15) -#define GFX_BEAMER_YELLOW_START (GFX_START_MIRRORDF + 5 * DF_PER_LINE + 0) -#define GFX_BEAMER_YELLOW_END (GFX_START_MIRRORDF + 5 * DF_PER_LINE + 15) -#define GFX_BEAMER_GREEN_START (GFX_START_MIRRORDF + 6 * DF_PER_LINE + 0) -#define GFX_BEAMER_GREEN_END (GFX_START_MIRRORDF + 6 * DF_PER_LINE + 15) -#define GFX_BEAMER_BLUE_START (GFX_START_MIRRORDF + 7 * DF_PER_LINE + 0) -#define GFX_BEAMER_BLUE_END (GFX_START_MIRRORDF + 7 * DF_PER_LINE + 15) - -#define GFX_DF_WALL_SEVERAL (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 0) -#define GFX_REFRACTOR (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 1) -#define GFX_CELL (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 2) -#define GFX_MINE (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 4) - -#define GFX_LASER_RIGHT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 0) -#define GFX_LASER_UP (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 1) -#define GFX_LASER_LEFT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 2) -#define GFX_LASER_DOWN (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 3) -#define GFX_RECEIVER_RIGHT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 4) -#define GFX_RECEIVER_UP (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 5) -#define GFX_RECEIVER_LEFT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 6) -#define GFX_RECEIVER_DOWN (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 7) - -#define GFX_FIBRE_OPTIC_00 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 0) -#define GFX_FIBRE_OPTIC_01 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 1) -#define GFX_FIBRE_OPTIC_02 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 2) -#define GFX_FIBRE_OPTIC_03 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 3) -#define GFX_FIBRE_OPTIC_04 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 4) -#define GFX_FIBRE_OPTIC_05 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 5) -#define GFX_FIBRE_OPTIC_06 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 6) -#define GFX_FIBRE_OPTIC_07 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 7) - -#define GFX_FIBRE_OPTIC_ED_00 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 0) -#define GFX_FIBRE_OPTIC_ED_01 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 1) -#define GFX_FIBRE_OPTIC_ED_02 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 2) -#define GFX_FIBRE_OPTIC_ED_03 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 3) -#define GFX_FIBRE_OPTIC_ED_04 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 4) -#define GFX_FIBRE_OPTIC_ED_05 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 5) -#define GFX_FIBRE_OPTIC_ED_06 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 6) -#define GFX_FIBRE_OPTIC_ED_07 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 7) - -/* the names of the sounds */ -#define SND_AMOEBE 0 -#define SND_ANTIGRAV 1 -#define SND_AUTSCH 2 -#define SND_BONG 3 -#define SND_FUEL 4 -#define SND_HALLOFFAME 5 -#define SND_HOLZ 6 -#define SND_HUI 7 -#define SND_KABUMM 8 -#define SND_KINK 9 -#define SND_KLING 10 -#define SND_LASER 11 -#define SND_OEFFNEN 12 -#define SND_QUIEK 13 -#define SND_RHYTHMLOOP 14 -#define SND_ROAAAR 15 -#define SND_SIRR 16 -#define SND_SLURP 17 -#define SND_WARNTON 18 -#define SND_WHOOSH 19 - -#define NUM_SOUNDS 20 - -/* laser angles (directions) */ +// values for graphics/sounds action types +#define MM_ACTION_DEFAULT 0 +#define MM_ACTION_WAITING 1 +#define MM_ACTION_FALLING 2 +#define MM_ACTION_MOVING 3 +#define MM_ACTION_DIGGING 4 +#define MM_ACTION_SNAPPING 5 +#define MM_ACTION_COLLECTING 6 +#define MM_ACTION_DROPPING 7 +#define MM_ACTION_PUSHING 8 +#define MM_ACTION_WALKING 9 +#define MM_ACTION_PASSING 10 +#define MM_ACTION_IMPACT 11 +#define MM_ACTION_BREAKING 12 +#define MM_ACTION_ACTIVATING 13 +#define MM_ACTION_DEACTIVATING 14 +#define MM_ACTION_OPENING 15 +#define MM_ACTION_CLOSING 16 +#define MM_ACTION_ATTACKING 17 +#define MM_ACTION_GROWING 18 +#define MM_ACTION_SHRINKING 19 +#define MM_ACTION_ACTIVE 20 +#define MM_ACTION_FILLING 21 +#define MM_ACTION_EMPTYING 22 +#define MM_ACTION_CHANGING 23 +#define MM_ACTION_EXPLODING 24 +#define MM_ACTION_BORING 25 +#define MM_ACTION_BORING_1 26 +#define MM_ACTION_BORING_2 27 +#define MM_ACTION_BORING_3 28 +#define MM_ACTION_BORING_4 29 +#define MM_ACTION_BORING_5 30 +#define MM_ACTION_BORING_6 31 +#define MM_ACTION_BORING_7 32 +#define MM_ACTION_BORING_8 33 +#define MM_ACTION_BORING_9 34 +#define MM_ACTION_BORING_10 35 +#define MM_ACTION_SLEEPING 36 +#define MM_ACTION_SLEEPING_1 37 +#define MM_ACTION_SLEEPING_2 38 +#define MM_ACTION_SLEEPING_3 39 +#define MM_ACTION_AWAKENING 40 +#define MM_ACTION_DYING 41 +#define MM_ACTION_TURNING 42 +#define MM_ACTION_TURNING_FROM_LEFT 43 +#define MM_ACTION_TURNING_FROM_RIGHT 44 +#define MM_ACTION_TURNING_FROM_UP 45 +#define MM_ACTION_TURNING_FROM_DOWN 46 +#define MM_ACTION_SMASHED_BY_ROCK 47 +#define MM_ACTION_SMASHED_BY_SPRING 48 +#define MM_ACTION_EATING 49 +#define MM_ACTION_TWINKLING 50 +#define MM_ACTION_SPLASHING 51 +#define MM_ACTION_HITTING 52 + +// laser angles (directions) #define ANG_RAY_RIGHT 0 #define ANG_RAY_UP 4 #define ANG_RAY_LEFT 8 #define ANG_RAY_DOWN 12 -/* laser angles (degree) */ +// laser angles (degree) #define ANG_RAY_0 0 #define ANG_RAY_90 4 #define ANG_RAY_180 8 #define ANG_RAY_270 12 #define IS_22_5_ANGLE(angle) ((angle) % 2) #define IS_90_ANGLE(angle) (!((angle) % 4)) +#define IS_45_ANGLE(angle) (!(((angle) + 2) % 4)) #define IS_HORIZ_ANGLE(angle) (!((angle) % 8)) -#define IS_VERT_ANGLE(angle) ((angle) % 8) +#define IS_VERT_ANGLE(angle) (!(((angle) + 4) % 8)) -/* mirror angles */ +// mirror angles #define ANG_MIRROR_0 0 #define ANG_MIRROR_45 4 #define ANG_MIRROR_90 8 #define ANG_MIRROR_135 12 -/* positions for checking where laser already hits element */ +// positions for checking where laser already hits element #define HIT_POS_CENTER 1 #define HIT_POS_EDGE 2 #define HIT_POS_BETWEEN 4 -/* masks for scanning elements */ +// masks for scanning elements #define HIT_MASK_NO_HIT 0 #define HIT_MASK_TOPLEFT 1 #define HIT_MASK_TOPRIGHT 2 @@ -1043,9 +748,11 @@ extern int num_element_info; #define HIT_MASK_RIGHT (HIT_MASK_TOPRIGHT | HIT_MASK_BOTTOMRIGHT) #define HIT_MASK_TOP (HIT_MASK_TOPLEFT | HIT_MASK_TOPRIGHT) #define HIT_MASK_BOTTOM (HIT_MASK_BOTTOMLEFT | HIT_MASK_BOTTOMRIGHT) +#define HIT_MASK_DIAGONAL_1 (HIT_MASK_TOPLEFT | HIT_MASK_BOTTOMRIGHT) +#define HIT_MASK_DIAGONAL_2 (HIT_MASK_TOPRIGHT | HIT_MASK_BOTTOMLEFT) #define HIT_MASK_ALL (HIT_MASK_LEFT | HIT_MASK_RIGHT) -/* step values for rotating elements */ +// step values for rotating elements #define ROTATE_NO_ROTATING 0 #define ROTATE_LEFT (+1) #define ROTATE_RIGHT (-1) @@ -1053,75 +760,37 @@ extern int num_element_info; (button) == MB_RIGHTBUTTON ? ROTATE_RIGHT : \ ROTATE_NO_ROTATING) -/* game over values */ +// game over values #define GAME_OVER_NO_ENERGY 1 #define GAME_OVER_OVERLOADED 2 #define GAME_OVER_BOMB 3 -/* values for game_status */ -#define EXITGAME 0 -#define MAINMENU 1 -#define PLAYING 2 -#define LEVELED 3 -#define HELPSCREEN 4 -#define CHOOSELEVEL 5 -#define TYPENAME 6 -#define HALLOFFAME 7 -#define SETUP 8 - -/* return values for GameActions */ -#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 PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 0 #define PROGRAM_VERSION_PATCH 2 #define PROGRAM_VERSION_STRING "2.0.2" -#define PROGRAM_TITLE_STRING "Mirror Magic II" -#define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_RIGHTS_STRING "Copyright ^1994-2001" -#define PROGRAM_DOS_PORT_STRING "DOS port based on code by Guido Schulz" -#define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " TARGET_STRING -#define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING -#define WINDOW_SUBTITLE_STRING PROGRAM_RIGHTS_STRING " " PROGRAM_AUTHOR_STRING -#define ICON_TITLE_STRING PROGRAM_TITLE_STRING -#define UNIX_USERDATA_DIRECTORY ".mirrormagic" - -#define X11_ICON_FILENAME "mirrormagic_icon.xbm" -#define X11_ICONMASK_FILENAME "mirrormagic_iconmask.xbm" -#define MSDOS_POINTER_FILENAME "mouse.pcx" - -/* functions for version handling */ +// functions for version handling #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: -** 1.4 (still in use) -** 2.0 (actual) -*/ +#define MM_VERSION_MAJOR(x) VERSION_PART_1(x) +#define MM_VERSION_MINOR(x) VERSION_PART_2(x) +#define MM_VERSION_PATCH(x) VERSION_PART_3(x) + +// file version numbers for resource files (levels, score, setup, etc.) +// currently supported/known file version numbers: +// 1.4 (still in use) +// 2.0 (actual) + #define MM_FILE_VERSION_1_4 MM_VERSION_IDENT(1,4,0) #define MM_FILE_VERSION_2_0 MM_VERSION_IDENT(2,0,0) -/* file version does not change for every program version, but is changed - when new features are introduced that are incompatible with older file - versions, so that they can be treated accordingly */ +// file version does not change for every program version, but is changed +// when new features are introduced that are incompatible with older file +// versions, so that they can be treated accordingly #define MM_FILE_VERSION_ACTUAL MM_FILE_VERSION_2_0 #define MM_GAME_VERSION_ACTUAL MM_VERSION_IDENT(PROGRAM_VERSION_MAJOR, \ PROGRAM_VERSION_MINOR, \ PROGRAM_VERSION_PATCH) -/* sound control */ - -#define ST(x) (((x)-8)*16) - -#endif /* MM_MAIN_H */ +#endif // MM_MAIN_H