X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=19b7322f27075b9f1a90203908f5eeab0ece330c;hb=1ca582ff344bd825e03229636cee6d006e19251f;hp=ddb8c4f9ec99f01d47666045cae6fea7f1e9a3e9;hpb=d7673e6d995a9d6616f7eaefab6209e6eb60a795;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index ddb8c4f9..19b7322f 100644 --- a/src/main.h +++ b/src/main.h @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2002 Artsoft Entertainment * +* (c) 1995-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -34,6 +34,7 @@ #define IMG_SP_EMPTY IMG_SP_EMPTY_SPACE #define IMG_EXPLOSION IMG_DEFAULT_EXPLODING #define IMG_CHAR_START IMG_CHAR_SPACE +#define IMG_STEEL_CHAR_START IMG_STEEL_CHAR_SPACE #define IMG_CUSTOM_START IMG_CUSTOM_1 #define SND_UNDEFINED (-1) @@ -42,6 +43,8 @@ #define WIN_XSIZE 672 #define WIN_YSIZE 560 +#define DEFAULT_FULLSCREEN_MODE "800x600" + #define SCR_FIELDX 17 #define SCR_FIELDY 17 #define MAX_BUF_XSIZE (SCR_FIELDX + 2) @@ -57,9 +60,16 @@ #define SCREENY(a) ((a) - scroll_y) #define LEVELX(a) ((a) + scroll_x) #define LEVELY(a) ((a) + scroll_y) -#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) < (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_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 configurable properties (custom elem's only, else pre-defined) */ #define EP_DIGGABLE 0 @@ -175,11 +185,7 @@ #define EP_BITMASK_DEFAULT 0 #define PROPERTY_BIT(p) (1 << ((p) % 32)) -#if 1 #define PROPERTY_VAR(e,p) (element_info[e].properties[(p) / 32]) -#else -#define PROPERTY_VAR(e,p) (Properties[e][(p) / 32]) -#endif #define HAS_PROPERTY(e,p) ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0) #define SET_PROPERTY(e,p,v) ((v) ? \ (PROPERTY_VAR(e,p) |= PROPERTY_BIT(p)) : \ @@ -708,14 +714,13 @@ #define SND_ELEMENT(e) (e) #endif -#if 1 #define GROUP_NR(e) ((e) - EL_GROUP_START) #define IS_IN_GROUP(e, nr) (element_info[e].in_group[nr] == TRUE) #define IS_IN_GROUP_EL(e, ge) (IS_IN_GROUP(e, (ge) - EL_GROUP_START)) #define IS_EQUAL_OR_IN_GROUP(e, ge) \ - (IS_GROUP_ELEMENT(ge) ? IS_IN_GROUP(e, GROUP_NR(ge)) : (e) == (ge)) -#endif + (ge == EL_ANY_ELEMENT ? TRUE : \ + IS_GROUP_ELEMENT(ge) ? IS_IN_GROUP(e, GROUP_NR(ge)) : (e) == (ge)) #define IS_PLAYER(x, y) (ELEM_IS_PLAYER(StorePlayer[x][y])) @@ -771,6 +776,9 @@ #define ANIM_DELAY(g) (graphic_info[g].anim_delay) #define ANIM_MODE(g) (graphic_info[g].anim_mode) +#define IS_ANIM_MODE_CE(g) (graphic_info[g].anim_mode & (ANIM_CE_VALUE | \ + ANIM_CE_SCORE | \ + ANIM_CE_DELAY)) #define IS_ANIMATED(g) (ANIM_FRAMES(g) > 1) #define IS_NEW_DELAY(f, g) ((f) % ANIM_DELAY(g) == 0) #define IS_NEW_FRAME(f, g) (IS_ANIMATED(g) && IS_NEW_DELAY(f, g)) @@ -804,12 +812,6 @@ #define MAX_NUM_AMOEBA 100 -#if 0 /* game.h */ -#define MAX_INVENTORY_SIZE 1000 -#define STD_NUM_KEYS 4 -#define MAX_NUM_KEYS 8 -#endif - #define NUM_BELTS 4 #define NUM_BELT_PARTS 3 #define NUM_ENVELOPES 4 @@ -867,7 +869,7 @@ #define MICROLEVEL_XSIZE ((STD_LEV_FIELDX + 2) * MICRO_TILEX) #define MICROLEVEL_YSIZE ((STD_LEV_FIELDY + 2) * MICRO_TILEY) #define MICROLEVEL_XPOS (SX + (SXSIZE - MICROLEVEL_XSIZE) / 2) -#define MICROLEVEL_YPOS (SX + 12 * TILEY - MICRO_TILEY) +#define MICROLEVEL_YPOS (SY + 12 * TILEY - MICRO_TILEY) #define MICROLABEL1_YPOS (MICROLEVEL_YPOS - 36) #define MICROLABEL2_YPOS (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7) @@ -1153,13 +1155,13 @@ #define EL_SIGN_STOP 301 #define EL_SIGN_WHEELCHAIR 302 #define EL_SIGN_PARKING 303 -#define EL_SIGN_ONEWAY 304 -#define EL_SIGN_HEART 305 -#define EL_SIGN_TRIANGLE 306 -#define EL_SIGN_ROUND 307 -#define EL_SIGN_EXIT 308 -#define EL_SIGN_YINYANG 309 -#define EL_SIGN_OTHER 310 +#define EL_SIGN_NO_ENTRY 304 +#define EL_SIGN_UNUSED_1 305 +#define EL_SIGN_GIVE_WAY 306 +#define EL_SIGN_ENTRY_FORBIDDEN 307 +#define EL_SIGN_EMERGENCY_EXIT 308 +#define EL_SIGN_YIN_YANG 309 +#define EL_SIGN_UNUSED_2 310 #define EL_MOLE_LEFT 311 #define EL_MOLE_RIGHT 312 #define EL_MOLE_UP 313 @@ -1309,7 +1311,92 @@ #define EL_BD_EXPANDABLE_WALL 713 -#define NUM_FILE_ELEMENTS 714 +#define EL_PREV_CE_8 714 +#define EL_PREV_CE_7 715 +#define EL_PREV_CE_6 716 +#define EL_PREV_CE_5 717 +#define EL_PREV_CE_4 718 +#define EL_PREV_CE_3 719 +#define EL_PREV_CE_2 720 +#define EL_PREV_CE_1 721 +#define EL_SELF 722 +#define EL_NEXT_CE_1 723 +#define EL_NEXT_CE_2 724 +#define EL_NEXT_CE_3 725 +#define EL_NEXT_CE_4 726 +#define EL_NEXT_CE_5 727 +#define EL_NEXT_CE_6 728 +#define EL_NEXT_CE_7 729 +#define EL_NEXT_CE_8 730 +#define EL_ANY_ELEMENT 731 + +#define EL_STEEL_CHAR_START 732 +#define EL_STEEL_CHAR_ASCII0 (EL_STEEL_CHAR_START - 32) +#define EL_STEEL_CHAR_ASCII0_START (EL_STEEL_CHAR_ASCII0 + 32) + +/* (auto-generated data structure definitions included with normal chars) */ + +#define EL_STEEL_CHAR_ASCII0_END (EL_STEEL_CHAR_ASCII0 + 111) +#define EL_STEEL_CHAR_END (EL_STEEL_CHAR_START + 79) + +#define EL_STEEL_CHAR(c) (EL_STEEL_CHAR_ASCII0+MAP_FONT_ASCII(c)) + +#define EL_SPERMS 812 +#define EL_BULLET 813 +#define EL_HEART 814 +#define EL_CROSS 815 +#define EL_FRANKIE 816 +#define EL_SIGN_SPERMS 817 +#define EL_SIGN_BULLET 818 +#define EL_SIGN_HEART 819 +#define EL_SIGN_CROSS 820 +#define EL_SIGN_FRANKIE 821 + +#define EL_STEEL_EXIT_CLOSED 822 +#define EL_STEEL_EXIT_OPEN 823 + +#define EL_DC_STEELWALL_1_LEFT 824 +#define EL_DC_STEELWALL_1_RIGHT 825 +#define EL_DC_STEELWALL_1_TOP 826 +#define EL_DC_STEELWALL_1_BOTTOM 827 +#define EL_DC_STEELWALL_1_HORIZONTAL 828 +#define EL_DC_STEELWALL_1_VERTICAL 829 +#define EL_DC_STEELWALL_1_TOPLEFT 830 +#define EL_DC_STEELWALL_1_TOPRIGHT 831 +#define EL_DC_STEELWALL_1_BOTTOMLEFT 832 +#define EL_DC_STEELWALL_1_BOTTOMRIGHT 833 +#define EL_DC_STEELWALL_1_TOPLEFT_2 834 +#define EL_DC_STEELWALL_1_TOPRIGHT_2 835 +#define EL_DC_STEELWALL_1_BOTTOMLEFT_2 836 +#define EL_DC_STEELWALL_1_BOTTOMRIGHT_2 837 + +#define EL_DC_STEELWALL_2_LEFT 838 +#define EL_DC_STEELWALL_2_RIGHT 839 +#define EL_DC_STEELWALL_2_TOP 840 +#define EL_DC_STEELWALL_2_BOTTOM 841 +#define EL_DC_STEELWALL_2_HORIZONTAL 842 +#define EL_DC_STEELWALL_2_VERTICAL 843 +#define EL_DC_STEELWALL_2_MIDDLE 844 +#define EL_DC_STEELWALL_2_SINGLE 845 + +#define EL_DC_SWITCHGATE_SWITCH_UP 846 +#define EL_DC_SWITCHGATE_SWITCH_DOWN 847 +#define EL_DC_TIMEGATE_SWITCH 848 +#define EL_DC_TIMEGATE_SWITCH_ACTIVE 849 + +#define EL_DC_LANDMINE 850 + +#define EL_EXPANDABLE_STEELWALL 851 +#define EL_EXPANDABLE_STEELWALL_HORIZONTAL 852 +#define EL_EXPANDABLE_STEELWALL_VERTICAL 853 +#define EL_EXPANDABLE_STEELWALL_ANY 854 + +#define EL_EM_EXIT_CLOSED 855 +#define EL_EM_EXIT_OPEN 856 +#define EL_EM_STEEL_EXIT_CLOSED 857 +#define EL_EM_STEEL_EXIT_OPEN 858 + +#define NUM_FILE_ELEMENTS 859 /* "real" (and therefore drawable) runtime elements */ @@ -1343,41 +1430,47 @@ #define EL_CONVEYOR_BELT_4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 25) #define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 26) #define EL_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 27) -#define EL_SP_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 28) -#define EL_SP_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 29) -#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 30) -#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 31) -#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 32) -#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 33) -#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 34) -#define EL_AMOEBA_DROPPING (EL_FIRST_RUNTIME_REAL + 35) -#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 36) -#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 37) -#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38) -#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 39) -#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40) -#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 41) -#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) -#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 43) -#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44) -#define EL_EMC_FAKE_GRASS_ACTIVE (EL_FIRST_RUNTIME_REAL + 45) -#define EL_GATE_1_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 46) -#define EL_GATE_2_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 47) -#define EL_GATE_3_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 48) -#define EL_GATE_4_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 49) -#define EL_EM_GATE_1_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 50) -#define EL_EM_GATE_2_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 51) -#define EL_EM_GATE_3_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 52) -#define EL_EM_GATE_4_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 53) -#define EL_EMC_GATE_5_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 54) -#define EL_EMC_GATE_6_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 55) -#define EL_EMC_GATE_7_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 56) -#define EL_EMC_GATE_8_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 57) -#define EL_EMC_DRIPPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 58) -#define EL_EMC_SPRING_BUMPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 59) +#define EL_STEEL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 28) +#define EL_STEEL_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 29) +#define EL_EM_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 30) +#define EL_EM_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 31) +#define EL_EM_STEEL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 32) +#define EL_EM_STEEL_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 33) +#define EL_SP_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 34) +#define EL_SP_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 35) +#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 36) +#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 37) +#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 38) +#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 39) +#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 40) +#define EL_AMOEBA_DROPPING (EL_FIRST_RUNTIME_REAL + 41) +#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) +#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 43) +#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 44) +#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 45) +#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 46) +#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 47) +#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 48) +#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 49) +#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 50) +#define EL_EMC_FAKE_GRASS_ACTIVE (EL_FIRST_RUNTIME_REAL + 51) +#define EL_GATE_1_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 52) +#define EL_GATE_2_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 53) +#define EL_GATE_3_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 54) +#define EL_GATE_4_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 55) +#define EL_EM_GATE_1_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 56) +#define EL_EM_GATE_2_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 57) +#define EL_EM_GATE_3_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 58) +#define EL_EM_GATE_4_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 59) +#define EL_EMC_GATE_5_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 60) +#define EL_EMC_GATE_6_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 61) +#define EL_EMC_GATE_7_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 62) +#define EL_EMC_GATE_8_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 63) +#define EL_EMC_DRIPPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 64) +#define EL_EMC_SPRING_BUMPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 65) /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 60) +#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 66) #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) @@ -1388,20 +1481,21 @@ #define EL_AMOEBA_GROWING (EL_FIRST_RUNTIME_UNREAL + 6) #define EL_AMOEBA_SHRINKING (EL_FIRST_RUNTIME_UNREAL + 7) #define EL_EXPANDABLE_WALL_GROWING (EL_FIRST_RUNTIME_UNREAL + 8) -#define EL_FLAMES (EL_FIRST_RUNTIME_UNREAL + 9) -#define EL_PLAYER_IS_LEAVING (EL_FIRST_RUNTIME_UNREAL + 10) -#define EL_PLAYER_IS_EXPLODING_1 (EL_FIRST_RUNTIME_UNREAL + 11) -#define EL_PLAYER_IS_EXPLODING_2 (EL_FIRST_RUNTIME_UNREAL + 12) -#define EL_PLAYER_IS_EXPLODING_3 (EL_FIRST_RUNTIME_UNREAL + 13) -#define EL_PLAYER_IS_EXPLODING_4 (EL_FIRST_RUNTIME_UNREAL + 14) -#define EL_QUICKSAND_FILLING (EL_FIRST_RUNTIME_UNREAL + 15) -#define EL_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 16) -#define EL_BD_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 17) -#define EL_ELEMENT_SNAPPING (EL_FIRST_RUNTIME_UNREAL + 18) -#define EL_DIAGONAL_SHRINKING (EL_FIRST_RUNTIME_UNREAL + 19) -#define EL_DIAGONAL_GROWING (EL_FIRST_RUNTIME_UNREAL + 20) - -#define NUM_RUNTIME_ELEMENTS (EL_FIRST_RUNTIME_UNREAL + 21) +#define EL_EXPANDABLE_STEELWALL_GROWING (EL_FIRST_RUNTIME_UNREAL + 9) +#define EL_FLAMES (EL_FIRST_RUNTIME_UNREAL + 10) +#define EL_PLAYER_IS_LEAVING (EL_FIRST_RUNTIME_UNREAL + 11) +#define EL_PLAYER_IS_EXPLODING_1 (EL_FIRST_RUNTIME_UNREAL + 12) +#define EL_PLAYER_IS_EXPLODING_2 (EL_FIRST_RUNTIME_UNREAL + 13) +#define EL_PLAYER_IS_EXPLODING_3 (EL_FIRST_RUNTIME_UNREAL + 14) +#define EL_PLAYER_IS_EXPLODING_4 (EL_FIRST_RUNTIME_UNREAL + 15) +#define EL_QUICKSAND_FILLING (EL_FIRST_RUNTIME_UNREAL + 16) +#define EL_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 17) +#define EL_BD_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 18) +#define EL_ELEMENT_SNAPPING (EL_FIRST_RUNTIME_UNREAL + 19) +#define EL_DIAGONAL_SHRINKING (EL_FIRST_RUNTIME_UNREAL + 20) +#define EL_DIAGONAL_GROWING (EL_FIRST_RUNTIME_UNREAL + 21) + +#define NUM_RUNTIME_ELEMENTS (EL_FIRST_RUNTIME_UNREAL + 22) /* dummy elements (never used as game elements, only used as graphics) */ #define EL_FIRST_DUMMY NUM_RUNTIME_ELEMENTS @@ -1458,23 +1552,25 @@ #define EL_INTERNAL_CASCADE_DX_ACTIVE (EL_FIRST_INTERNAL + 19) #define EL_INTERNAL_CASCADE_CHARS (EL_FIRST_INTERNAL + 20) #define EL_INTERNAL_CASCADE_CHARS_ACTIVE (EL_FIRST_INTERNAL + 21) -#define EL_INTERNAL_CASCADE_CE (EL_FIRST_INTERNAL + 22) -#define EL_INTERNAL_CASCADE_CE_ACTIVE (EL_FIRST_INTERNAL + 23) -#define EL_INTERNAL_CASCADE_GE (EL_FIRST_INTERNAL + 24) -#define EL_INTERNAL_CASCADE_GE_ACTIVE (EL_FIRST_INTERNAL + 25) -#define EL_INTERNAL_CASCADE_USER (EL_FIRST_INTERNAL + 26) -#define EL_INTERNAL_CASCADE_USER_ACTIVE (EL_FIRST_INTERNAL + 27) -#define EL_INTERNAL_CASCADE_GENERIC (EL_FIRST_INTERNAL + 28) -#define EL_INTERNAL_CASCADE_GENERIC_ACTIVE (EL_FIRST_INTERNAL + 29) -#define EL_INTERNAL_CASCADE_DYNAMIC (EL_FIRST_INTERNAL + 30) -#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE (EL_FIRST_INTERNAL + 31) +#define EL_INTERNAL_CASCADE_STEEL_CHARS (EL_FIRST_INTERNAL + 22) +#define EL_INTERNAL_CASCADE_STEEL_CHARS_ACTIVE (EL_FIRST_INTERNAL + 23) +#define EL_INTERNAL_CASCADE_CE (EL_FIRST_INTERNAL + 24) +#define EL_INTERNAL_CASCADE_CE_ACTIVE (EL_FIRST_INTERNAL + 25) +#define EL_INTERNAL_CASCADE_GE (EL_FIRST_INTERNAL + 26) +#define EL_INTERNAL_CASCADE_GE_ACTIVE (EL_FIRST_INTERNAL + 27) +#define EL_INTERNAL_CASCADE_REF (EL_FIRST_INTERNAL + 28) +#define EL_INTERNAL_CASCADE_REF_ACTIVE (EL_FIRST_INTERNAL + 29) +#define EL_INTERNAL_CASCADE_USER (EL_FIRST_INTERNAL + 30) +#define EL_INTERNAL_CASCADE_USER_ACTIVE (EL_FIRST_INTERNAL + 31) +#define EL_INTERNAL_CASCADE_DYNAMIC (EL_FIRST_INTERNAL + 32) +#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE (EL_FIRST_INTERNAL + 33) #define EL_INTERNAL_CLIPBOARD_START (EL_FIRST_INTERNAL + 0) #define EL_INTERNAL_CLIPBOARD_END (EL_FIRST_INTERNAL + 2) #define EL_INTERNAL_START (EL_FIRST_INTERNAL + 0) -#define EL_INTERNAL_END (EL_FIRST_INTERNAL + 31) +#define EL_INTERNAL_END (EL_FIRST_INTERNAL + 33) -#define MAX_NUM_ELEMENTS (EL_FIRST_INTERNAL + 32) +#define MAX_NUM_ELEMENTS (EL_FIRST_INTERNAL + 34) /* values for graphics/sounds action types */ @@ -1573,18 +1669,30 @@ /* values for special image configuration suffixes (must match game mode) */ #define GFX_SPECIAL_ARG_DEFAULT 0 #define GFX_SPECIAL_ARG_TITLE 1 -#define GFX_SPECIAL_ARG_MAIN 2 -#define GFX_SPECIAL_ARG_LEVELS 3 -#define GFX_SPECIAL_ARG_SCORES 4 -#define GFX_SPECIAL_ARG_EDITOR 5 -#define GFX_SPECIAL_ARG_INFO 6 -#define GFX_SPECIAL_ARG_SETUP 7 -#define GFX_SPECIAL_ARG_PLAYING 8 -#define GFX_SPECIAL_ARG_DOOR 9 -#define GFX_SPECIAL_ARG_PREVIEW 10 -#define GFX_SPECIAL_ARG_CRUMBLED 11 - -#define NUM_SPECIAL_GFX_ARGS 12 +#define GFX_SPECIAL_ARG_MESSAGE 2 +#define GFX_SPECIAL_ARG_MAIN 3 +#define GFX_SPECIAL_ARG_LEVELS 4 +#define GFX_SPECIAL_ARG_SCORES 5 +#define GFX_SPECIAL_ARG_EDITOR 6 +#define GFX_SPECIAL_ARG_INFO 7 +#define GFX_SPECIAL_ARG_SETUP 8 +#define GFX_SPECIAL_ARG_PLAYING 9 +#define GFX_SPECIAL_ARG_DOOR 10 +#define GFX_SPECIAL_ARG_PREVIEW 11 +#define GFX_SPECIAL_ARG_CRUMBLED 12 + +#define NUM_SPECIAL_GFX_ARGS 13 + +/* these additional definitions are currently only used for draw offsets */ +#define GFX_SPECIAL_ARG_INFO_MAIN 0 +#define GFX_SPECIAL_ARG_INFO_TITLE 1 +#define GFX_SPECIAL_ARG_INFO_ELEMENTS 2 +#define GFX_SPECIAL_ARG_INFO_MUSIC 3 +#define GFX_SPECIAL_ARG_INFO_CREDITS 4 +#define GFX_SPECIAL_ARG_INFO_PROGRAM 5 +#define GFX_SPECIAL_ARG_INFO_LEVELSET 6 + +#define NUM_SPECIAL_GFX_INFO_ARGS 7 /* values for image configuration suffixes */ @@ -1627,8 +1735,11 @@ #define GFX_ARG_NAME 36 #define GFX_ARG_SCALE_UP_FACTOR 37 #define GFX_ARG_CLONE_FROM 38 +#define GFX_ARG_FADE_DELAY 39 +#define GFX_ARG_POST_DELAY 40 +#define GFX_ARG_AUTO_DELAY 41 -#define NUM_GFX_ARGS 39 +#define NUM_GFX_ARGS 42 /* values for sound configuration suffixes */ @@ -1645,61 +1756,77 @@ #define NUM_MUS_ARGS 1 -/* values for font configuration */ +/* values for font configuration (definitions must match those from main.c) */ #define FONT_INITIAL_1 0 #define FONT_INITIAL_2 1 #define FONT_INITIAL_3 2 #define FONT_INITIAL_4 3 #define FONT_TITLE_1 4 #define FONT_TITLE_2 5 -#define FONT_MENU_1 6 -#define FONT_MENU_2 7 -#define FONT_TEXT_1_ACTIVE 8 -#define FONT_TEXT_2_ACTIVE 9 -#define FONT_TEXT_3_ACTIVE 10 -#define FONT_TEXT_4_ACTIVE 11 -#define FONT_TEXT_1 12 -#define FONT_TEXT_2 13 -#define FONT_TEXT_3 14 -#define FONT_TEXT_4 15 -#define FONT_ENVELOPE_1 16 -#define FONT_ENVELOPE_2 17 -#define FONT_ENVELOPE_3 18 -#define FONT_ENVELOPE_4 19 -#define FONT_INPUT_1_ACTIVE 20 -#define FONT_INPUT_2_ACTIVE 21 -#define FONT_INPUT_1 22 -#define FONT_INPUT_2 23 -#define FONT_OPTION_OFF 24 -#define FONT_OPTION_ON 25 -#define FONT_VALUE_1 26 -#define FONT_VALUE_2 27 -#define FONT_VALUE_OLD 28 -#define FONT_LEVEL_NUMBER_ACTIVE 29 -#define FONT_LEVEL_NUMBER 30 -#define FONT_TAPE_RECORDER 31 -#define FONT_GAME_INFO 32 - -#define NUM_FONTS 33 +#define FONT_MENU_1_ACTIVE 6 +#define FONT_MENU_2_ACTIVE 7 +#define FONT_MENU_1 8 +#define FONT_MENU_2 9 +#define FONT_TEXT_1_ACTIVE 10 +#define FONT_TEXT_2_ACTIVE 11 +#define FONT_TEXT_3_ACTIVE 12 +#define FONT_TEXT_4_ACTIVE 13 +#define FONT_TEXT_1 14 +#define FONT_TEXT_2 15 +#define FONT_TEXT_3 16 +#define FONT_TEXT_4 17 +#define FONT_ENVELOPE_1 18 +#define FONT_ENVELOPE_2 19 +#define FONT_ENVELOPE_3 20 +#define FONT_ENVELOPE_4 21 +#define FONT_INPUT_1_ACTIVE 22 +#define FONT_INPUT_2_ACTIVE 23 +#define FONT_INPUT_1 24 +#define FONT_INPUT_2 25 +#define FONT_OPTION_OFF 26 +#define FONT_OPTION_ON 27 +#define FONT_VALUE_1 28 +#define FONT_VALUE_2 29 +#define FONT_VALUE_OLD 30 +#define FONT_LEVEL_NUMBER_ACTIVE 31 +#define FONT_LEVEL_NUMBER 32 +#define FONT_TAPE_RECORDER 33 +#define FONT_GAME_INFO 34 + +#define NUM_FONTS 35 #define NUM_INITIAL_FONTS 4 +#define FONT_ACTIVE(f) \ + ((f) == FONT_MENU_1 ? FONT_MENU_1_ACTIVE : \ + (f) == FONT_MENU_2 ? FONT_MENU_2_ACTIVE : \ + (f) == FONT_TEXT_1 ? FONT_TEXT_1_ACTIVE : \ + (f) == FONT_TEXT_2 ? FONT_TEXT_2_ACTIVE : \ + (f) == FONT_TEXT_3 ? FONT_TEXT_3_ACTIVE : \ + (f) == FONT_TEXT_4 ? FONT_TEXT_4_ACTIVE : \ + (f) == FONT_INPUT_1 ? FONT_INPUT_1_ACTIVE : \ + (f) == FONT_INPUT_2 ? FONT_INPUT_2_ACTIVE : \ + (f) == FONT_LEVEL_NUMBER ? FONT_LEVEL_NUMBER_ACTIVE : \ + (f)) + + /* values for game_status (must match special image configuration suffixes) */ #define GAME_MODE_DEFAULT 0 #define GAME_MODE_TITLE 1 -#define GAME_MODE_MAIN 2 -#define GAME_MODE_LEVELS 3 -#define GAME_MODE_SCORES 4 -#define GAME_MODE_EDITOR 5 -#define GAME_MODE_INFO 6 -#define GAME_MODE_SETUP 7 -#define GAME_MODE_PLAYING 8 -#define GAME_MODE_PSEUDO_DOOR 9 -#define GAME_MODE_PSEUDO_PREVIEW 10 -#define GAME_MODE_PSEUDO_CRUMBLED 11 +#define GAME_MODE_MESSAGE 2 +#define GAME_MODE_MAIN 3 +#define GAME_MODE_LEVELS 4 +#define GAME_MODE_SCORES 5 +#define GAME_MODE_EDITOR 6 +#define GAME_MODE_INFO 7 +#define GAME_MODE_SETUP 8 +#define GAME_MODE_PLAYING 9 +#define GAME_MODE_PSEUDO_DOOR 10 +#define GAME_MODE_PSEUDO_PREVIEW 11 +#define GAME_MODE_PSEUDO_CRUMBLED 12 /* there are no special config file suffixes for these modes */ -#define GAME_MODE_PSEUDO_TYPENAME 12 -#define GAME_MODE_QUIT 13 +#define GAME_MODE_PSEUDO_TYPENAME 13 +#define GAME_MODE_QUIT 14 /* special definitions currently only used for custom artwork configuration */ #define MUSIC_PREFIX_BACKGROUND 0 @@ -1714,27 +1841,38 @@ /* program information and versioning definitions */ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_BUILD 9 +#define PROGRAM_VERSION_PATCH 4 +#define PROGRAM_VERSION_BUILD 0 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2006 by Holger Schemel" +#define PROGRAM_COPYRIGHT_STRING "Copyright ©1995-2006 by Holger Schemel" +#define PROGRAM_EMAIL_STRING "info@artsoft.org" +#define PROGRAM_WEBSITE_STRING "http://www.artsoft.org/" +#define PROGRAM_GAME_BY_STRING "A Game by Artsoft Entertainment" #define ICON_TITLE_STRING PROGRAM_TITLE_STRING #define COOKIE_PREFIX "ROCKSNDIAMONDS" #define FILENAME_PREFIX "Rocks" -#if defined(PLATFORM_UNIX) -#define USERDATA_DIRECTORY ".rocksndiamonds" -#elif defined(PLATFORM_WIN32) -#define USERDATA_DIRECTORY PROGRAM_TITLE_STRING +#define USERDATA_DIRECTORY_WIN32 PROGRAM_TITLE_STRING +#define USERDATA_DIRECTORY_MACOSX PROGRAM_TITLE_STRING +#define USERDATA_DIRECTORY_UNIX ".rocksndiamonds" +#define USERDATA_DIRECTORY_DOS "userdata" + +#if defined(PLATFORM_WIN32) +#define USERDATA_DIRECTORY USERDATA_DIRECTORY_WIN32 +#elif defined(PLATFORM_MACOSX) +#define USERDATA_DIRECTORY USERDATA_DIRECTORY_MACOSX +#elif defined(PLATFORM_UNIX) +#define USERDATA_DIRECTORY USERDATA_DIRECTORY_UNIX #else -#define USERDATA_DIRECTORY "userdata" +#define USERDATA_DIRECTORY USERDATA_DIRECTORY_DOS #endif #define X11_ICON_FILENAME "rocks_icon.xbm" #define X11_ICONMASK_FILENAME "rocks_iconmask.xbm" +#define SDL_ICON_FILENAME "rocks_icon_32x32.pcx" #define MSDOS_POINTER_FILENAME "mouse.pcx" /* file version numbers for resource files (levels, tapes, score, setup, etc.) @@ -1792,17 +1930,96 @@ #define NUM_ENGINE_TYPES 3 +struct BorderInfo +{ + int draw_masked[NUM_SPECIAL_GFX_ARGS]; +}; + +struct MenuPosInfo +{ + int x, y; + int width, height; + int align; +}; + +struct MenuMainButtonInfo +{ + struct MenuPosInfo name; + struct MenuPosInfo levels; + struct MenuPosInfo scores; + struct MenuPosInfo editor; + struct MenuPosInfo info; + struct MenuPosInfo game; + struct MenuPosInfo setup; + struct MenuPosInfo quit; + + struct MenuPosInfo prev_level; + struct MenuPosInfo next_level; +}; + +struct MenuMainTextInfo +{ + struct MenuPosInfo name; + struct MenuPosInfo levels; + struct MenuPosInfo scores; + struct MenuPosInfo editor; + struct MenuPosInfo info; + struct MenuPosInfo game; + struct MenuPosInfo setup; + struct MenuPosInfo quit; + + struct MenuPosInfo current_level; + struct MenuPosInfo first_level; + struct MenuPosInfo last_level; + struct MenuPosInfo level_info_1; + struct MenuPosInfo level_info_2; + struct MenuPosInfo title_1; + struct MenuPosInfo title_2; + struct MenuPosInfo title_3; +}; + +struct MenuMainInputInfo +{ + struct MenuPosInfo name; +}; + +struct MenuMainInfo +{ + struct MenuMainButtonInfo button; + struct MenuMainTextInfo text; + struct MenuMainInputInfo input; +}; + +struct TitleInfo +{ + int fade_delay; + int post_delay; + int auto_delay; + + int fade_delay_final; + int post_delay_final; + int auto_delay_final; +}; + struct MenuInfo { int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; int draw_yoffset[NUM_SPECIAL_GFX_ARGS]; + int draw_xoffset_info[NUM_SPECIAL_GFX_INFO_ARGS]; + int draw_yoffset_info[NUM_SPECIAL_GFX_INFO_ARGS]; int scrollbar_xoffset; int list_size[NUM_SPECIAL_GFX_ARGS]; + int fade_delay; + int post_delay; + int auto_delay; + int sound[NUM_SPECIAL_GFX_ARGS]; int music[NUM_SPECIAL_GFX_ARGS]; + + struct MenuMainInfo main; }; struct DoorInfo @@ -1814,6 +2031,18 @@ struct DoorInfo int anim_mode; }; +struct PreviewInfo +{ + int x, y; + int align; + int xsize, ysize; + int xoffset, yoffset; + int tile_size; + int step_offset; + int step_delay; + int anim_mode; +}; + struct HiScore { char Name[MAX_PLAYER_NAME_LEN + 1]; @@ -1915,7 +2144,6 @@ struct LevelInfo int explosion_element[MAX_PLAYERS]; boolean use_explosion_element[MAX_PLAYERS]; -#if 1 /* values for the new EMC elements */ int android_move_time; int android_clone_time; @@ -1932,12 +2160,8 @@ struct LevelInfo struct Content ball_content[MAX_ELEMENT_CONTENTS]; int num_ball_contents; -#if 0 - boolean android_array[16]; -#endif int num_android_clone_elements; int android_clone_element[MAX_ANDROID_ELEMENTS]; -#endif int can_move_into_acid_bits; /* bitfield to store property for elements */ int dont_collide_with_bits; /* bitfield to store property for elements */ @@ -2183,20 +2407,28 @@ struct GraphicInfo int src_x, src_y; /* start position of animation frames */ int width, height; /* width/height of each animation frame */ + int offset_x, offset_y; /* x/y offset to next animation frame */ int offset2_x, offset2_y; /* x/y offset to second movement tile */ + boolean double_movement; /* animation has second movement tile */ int swap_double_tiles; /* explicitely force or forbid tile swapping */ + int anim_frames; int anim_frames_per_line; int anim_start_frame; int anim_delay; /* important: delay of 1 means "no delay"! */ int anim_mode; + boolean anim_global_sync; + int crumbled_like; /* element for cloning crumble graphics */ int diggable_like; /* element for cloning digging graphics */ + int border_size; /* border size for "crumbled" graphics */ + int scale_up_factor; /* optional factor for scaling image up */ + int clone_from; /* graphic for cloning *all* settings */ int anim_delay_fixed; /* optional delay values for bored and */ @@ -2212,6 +2444,12 @@ struct GraphicInfo int draw_masked; /* optional setting for drawing envelope gfx */ + int fade_delay; /* optional setting for drawing title screens */ + int post_delay; /* optional setting for drawing title screens */ + int auto_delay; /* optional setting for drawing title screens */ + + boolean use_image_size; /* use image size as default width and height */ + #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) Pixmap clip_mask; /* single-graphic-only clip mask for X11 */ GC clip_gc; /* single-graphic-only clip gc for X11 */ @@ -2286,8 +2524,9 @@ struct HelpAnimInfo }; -extern Bitmap *bitmap_db_title; +extern Bitmap *bitmap_db_cross; extern Bitmap *bitmap_db_field; +extern Bitmap *bitmap_db_panel; extern Bitmap *bitmap_db_door; extern Pixmap tile_clipmask[]; extern DrawBuffer *fieldbuffer; @@ -2325,6 +2564,7 @@ extern short ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short CheckImpact[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaCnt[MAX_NUM_AMOEBA]; extern short AmoebaCnt2[MAX_NUM_AMOEBA]; @@ -2334,10 +2574,6 @@ extern short ExplodeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int RunnerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -#if 0 -extern unsigned long Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS]; -#endif - extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -2362,8 +2598,6 @@ extern int ExitX, ExitY; extern int AllPlayersGone; extern int TimeFrames, TimePlayed, TimeLeft, TapeTime; -extern boolean SiebAktiv; -extern int SiebCount; extern boolean network_player_action_received; @@ -2374,8 +2608,11 @@ extern struct LevelInfo level, level_template; extern struct HiScore highscore[]; extern struct TapeInfo tape; extern struct GlobalInfo global; +extern struct BorderInfo border; +extern struct TitleInfo title; extern struct MenuInfo menu; extern struct DoorInfo door_1, door_2; +extern struct PreviewInfo preview; extern struct ElementInfo element_info[]; extern struct ElementNameInfo element_name_info[]; extern struct ElementActionInfo element_action_info[];