X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=c8c83033f75c4cb23418dd10f91b3112e045fa9a;hb=4b1b5a2a67227d3023ff6da4596be31eae8eaefc;hp=1374311eb18518517a7491332606ebf76f16a814;hpb=86e1890b2d87dd7710b320e2b306c7291d41e2a5;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 1374311e..c8c83033 100644 --- a/src/main.h +++ b/src/main.h @@ -267,10 +267,6 @@ #define MV_BIT_TURNING_RANDOM 16 /* values for custom move patterns */ -#define MV_HORIZONTAL (MV_LEFT | MV_RIGHT) -#define MV_VERTICAL (MV_UP | MV_DOWN) -#define MV_ALL_DIRECTIONS (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN) -#define MV_ANY_DIRECTION (MV_ALL_DIRECTIONS) #define MV_TOWARDS_PLAYER (1 << MV_BIT_TOWARDS_PLAYER) #define MV_AWAY_FROM_PLAYER (1 << MV_BIT_AWAY_FROM_PLAYER) #define MV_ALONG_LEFT_SIDE (1 << MV_BIT_ALONG_LEFT_SIDE) @@ -422,17 +418,53 @@ #define IS_ENVELOPE(e) ((e) >= EL_ENVELOPE_1 && \ (e) <= EL_ENVELOPE_4) -#define IS_GATE(e) ((e) >= EL_GATE_1 && \ +#define IS_RND_KEY(e) ((e) >= EL_KEY_1 && \ + (e) <= EL_KEY_4) +#define IS_EM_KEY(e) ((e) >= EL_EM_KEY_1 && \ + (e) <= EL_EM_KEY_4) +#define IS_EMC_KEY(e) ((e) >= EL_EMC_KEY_5 && \ + (e) <= EL_EMC_KEY_8) +#define IS_KEY(e) (IS_RND_KEY(e) || \ + IS_EM_KEY(e) || \ + IS_EMC_KEY(e)) +#define RND_KEY_NR(e) ((e) - EL_KEY_1) +#define EM_KEY_NR(e) ((e) - EL_EM_KEY_1) +#define EMC_KEY_NR(e) ((e) - EL_EMC_KEY_5 + 4) +#define KEY_NR(e) (IS_RND_KEY(e) ? RND_KEY_NR(e) : \ + IS_EM_KEY(e) ? EM_KEY_NR(e) : \ + IS_EMC_KEY(e) ? EMC_KEY_NR(e) : 0) + +#define IS_RND_GATE(e) ((e) >= EL_GATE_1 && \ (e) <= EL_GATE_4) - -#define IS_GATE_GRAY(e) ((e) >= EL_GATE_1_GRAY && \ - (e) <= EL_GATE_4_GRAY) - #define IS_EM_GATE(e) ((e) >= EL_EM_GATE_1 && \ (e) <= EL_EM_GATE_4) - +#define IS_EMC_GATE(e) ((e) >= EL_EMC_GATE_5 && \ + (e) <= EL_EMC_GATE_8) +#define IS_GATE(e) (IS_RND_GATE(e) || \ + IS_EM_GATE(e) || \ + IS_EMC_GATE(e)) +#define RND_GATE_NR(e) ((e) - EL_GATE_1) +#define EM_GATE_NR(e) ((e) - EL_EM_GATE_1) +#define EMC_GATE_NR(e) ((e) - EL_EMC_GATE_5 + 4) +#define GATE_NR(e) (IS_RND_GATE(e) ? RND_GATE_NR(e) : \ + IS_EM_GATE(e) ? EM_GATE_NR(e) : \ + IS_EMC_GATE(e) ? EMC_GATE_NR(e) : 0) + +#define IS_RND_GATE_GRAY(e) ((e) >= EL_GATE_1_GRAY && \ + (e) <= EL_GATE_4_GRAY) #define IS_EM_GATE_GRAY(e) ((e) >= EL_EM_GATE_1_GRAY && \ (e) <= EL_EM_GATE_4_GRAY) +#define IS_EMC_GATE_GRAY(e) ((e) >= EL_EMC_GATE_5_GRAY && \ + (e) <= EL_EMC_GATE_8_GRAY) +#define IS_GATE_GRAY(e) (IS_RND_GATE_GRAY(e) || \ + IS_EM_GATE_GRAY(e) || \ + IS_EMC_GATE_GRAY(e)) +#define RND_GATE_GRAY_NR(e) ((e) - EL_GATE_1_GRAY) +#define EM_GATE_GRAY_NR(e) ((e) - EL_EM_GATE_1_GRAY) +#define EMC_GATE_GRAY_NR(e) ((e) - EL_EMC_GATE_5_GRAY + 4) +#define GATE_GRAY_NR(e) (IS_RND_GATE_GRAY(e) ? RND_GATE_GRAY_NR(e) : \ + IS_EM_GATE_GRAY(e) ? EM_GATE_GRAY_NR(e) : \ + IS_EMC_GATE_GRAY(e) ? EMC_GATE_GRAY_NR(e) : 0) #define GFX_ELEMENT(e) (element_info[e].use_gfx_element ? \ element_info[e].gfx_element : e) @@ -525,7 +557,8 @@ #define MAX_SCORE_ENTRIES 100 #define MAX_NUM_AMOEBA 100 #define MAX_INVENTORY_SIZE 1000 -#define MAX_KEYS 4 +#define STD_NUM_KEYS 4 +#define MAX_NUM_KEYS 8 #define NUM_BELTS 4 #define NUM_BELT_PARTS 3 #define MIN_ENVELOPE_XSIZE 1 @@ -580,11 +613,12 @@ #define EYSIZE (VYSIZE + 44) #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 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 MICROLABEL1_YPOS (MICROLEVEL_YPOS - 36) +#define MICROLABEL2_YPOS (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7) /* score for elements */ @@ -970,18 +1004,18 @@ /* the following EMC style elements are currently not implemented in R'n'D */ #define EL_BALLOON_SWITCH_NONE 667 -#define EL_EM_GATE_5 668 -#define EL_EM_GATE_6 669 -#define EL_EM_GATE_7 670 -#define EL_EM_GATE_8 671 -#define EL_EM_GATE_5_GRAY 672 -#define EL_EM_GATE_6_GRAY 673 -#define EL_EM_GATE_7_GRAY 674 -#define EL_EM_GATE_8_GRAY 675 -#define EL_EM_KEY_5 676 -#define EL_EM_KEY_6 677 -#define EL_EM_KEY_7 678 -#define EL_EM_KEY_8 679 +#define EL_EMC_GATE_5 668 +#define EL_EMC_GATE_6 669 +#define EL_EMC_GATE_7 670 +#define EL_EMC_GATE_8 671 +#define EL_EMC_GATE_5_GRAY 672 +#define EL_EMC_GATE_6_GRAY 673 +#define EL_EMC_GATE_7_GRAY 674 +#define EL_EMC_GATE_8_GRAY 675 +#define EL_EMC_KEY_5 676 +#define EL_EMC_KEY_6 677 +#define EL_EMC_KEY_7 678 +#define EL_EMC_KEY_8 679 #define EL_EMC_ANDROID 680 #define EL_EMC_GRASS 681 #define EL_EMC_MAGIC_BALL 682 @@ -1005,9 +1039,10 @@ #define EL_EMC_WALL_SLIPPERY_3 700 #define EL_EMC_WALL_SLIPPERY_4 701 #define EL_EMC_FAKE_GRASS 702 -#define EL_EMC_DRIPPER 703 +#define EL_EMC_FAKE_ACID 703 +#define EL_EMC_DRIPPER 704 -#define NUM_FILE_ELEMENTS 704 +#define NUM_FILE_ELEMENTS 705 /* "real" (and therefore drawable) runtime elements */ @@ -1178,9 +1213,10 @@ #define ACTION_SMASHED_BY_SPRING 48 #define ACTION_SLURPED_BY_SPRING 49 #define ACTION_TWINKLING 50 -#define ACTION_OTHER 51 +#define ACTION_SPLASHING 51 +#define ACTION_OTHER 52 -#define NUM_ACTIONS 52 +#define NUM_ACTIONS 53 #define ACTION_BORING_LAST ACTION_BORING_10 #define ACTION_SLEEPING_LAST ACTION_SLEEPING_3 @@ -1218,30 +1254,31 @@ #define GFX_ARG_2ND_OFFSET 12 #define GFX_ARG_2ND_XOFFSET 13 #define GFX_ARG_2ND_YOFFSET 14 -#define GFX_ARG_FRAMES 15 -#define GFX_ARG_FRAMES_PER_LINE 16 -#define GFX_ARG_START_FRAME 17 -#define GFX_ARG_DELAY 18 -#define GFX_ARG_ANIM_MODE 19 -#define GFX_ARG_GLOBAL_SYNC 20 -#define GFX_ARG_CRUMBLED_LIKE 21 -#define GFX_ARG_DIGGABLE_LIKE 22 -#define GFX_ARG_BORDER_SIZE 23 -#define GFX_ARG_STEP_OFFSET 24 -#define GFX_ARG_STEP_DELAY 25 -#define GFX_ARG_DIRECTION 26 -#define GFX_ARG_POSITION 27 -#define GFX_ARG_DRAW_XOFFSET 28 -#define GFX_ARG_DRAW_YOFFSET 29 -#define GFX_ARG_DRAW_MASKED 30 -#define GFX_ARG_ANIM_DELAY_FIXED 31 -#define GFX_ARG_ANIM_DELAY_RANDOM 32 -#define GFX_ARG_POST_DELAY_FIXED 33 -#define GFX_ARG_POST_DELAY_RANDOM 34 -#define GFX_ARG_NAME 35 -#define GFX_ARG_SCALE_UP_FACTOR 36 - -#define NUM_GFX_ARGS 37 +#define GFX_ARG_2ND_SWAP_TILES 15 +#define GFX_ARG_FRAMES 16 +#define GFX_ARG_FRAMES_PER_LINE 17 +#define GFX_ARG_START_FRAME 18 +#define GFX_ARG_DELAY 19 +#define GFX_ARG_ANIM_MODE 20 +#define GFX_ARG_GLOBAL_SYNC 21 +#define GFX_ARG_CRUMBLED_LIKE 22 +#define GFX_ARG_DIGGABLE_LIKE 23 +#define GFX_ARG_BORDER_SIZE 24 +#define GFX_ARG_STEP_OFFSET 25 +#define GFX_ARG_STEP_DELAY 26 +#define GFX_ARG_DIRECTION 27 +#define GFX_ARG_POSITION 28 +#define GFX_ARG_DRAW_XOFFSET 29 +#define GFX_ARG_DRAW_YOFFSET 30 +#define GFX_ARG_DRAW_MASKED 31 +#define GFX_ARG_ANIM_DELAY_FIXED 32 +#define GFX_ARG_ANIM_DELAY_RANDOM 33 +#define GFX_ARG_POST_DELAY_FIXED 34 +#define GFX_ARG_POST_DELAY_RANDOM 35 +#define GFX_ARG_NAME 36 +#define GFX_ARG_SCALE_UP_FACTOR 37 + +#define NUM_GFX_ARGS 38 /* values for sound configuration suffixes */ @@ -1325,9 +1362,9 @@ /* program information and versioning definitions */ #define PROGRAM_VERSION_MAJOR 3 -#define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_PATCH 1 -#define PROGRAM_VERSION_BUILD 0 +#define PROGRAM_VERSION_MINOR 2 +#define PROGRAM_VERSION_PATCH 0 +#define PROGRAM_VERSION_BUILD 2 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -1404,14 +1441,11 @@ struct MenuInfo { - int draw_xoffset_default; - int draw_yoffset_default; int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; int draw_yoffset[NUM_SPECIAL_GFX_ARGS]; int scrollbar_xoffset; - int list_size_default; int list_size[NUM_SPECIAL_GFX_ARGS]; int sound[NUM_SPECIAL_GFX_ARGS]; @@ -1525,7 +1559,7 @@ struct PlayerInfo int sokobanfields_still_needed; int lights_still_needed; int friends_still_needed; - int key[4]; + int key[MAX_NUM_KEYS]; int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl; int shield_normal_time_left; int shield_deadly_time_left; @@ -1906,6 +1940,7 @@ struct GraphicInfo 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;