X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=414ff7fccfc03a098ad8e8a17904626281e696e0;hb=51dcb2097c619c5f9ba924a7edb4a3bdd6a6986e;hp=0bfa9971783eef58358a0174aedc235c184cab75;hpb=2354413660449688b28a1e9a21df85a24df902ec;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 0bfa9971..414ff7fc 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 @@ -557,12 +590,15 @@ #define VY 400 #define EX 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 TILESIZE 32 +#define TILEX TILESIZE +#define TILEY TILESIZE +#define MINI_TILESIZE (TILESIZE / 2) +#define MINI_TILEX MINI_TILESIZE +#define MINI_TILEY MINI_TILESIZE +#define MICRO_TILESIZE (TILESIZE / 8) +#define MICRO_TILEX MICRO_TILESIZE +#define MICRO_TILEY MICRO_TILESIZE #define MIDPOSX (SCR_FIELDX / 2) #define MIDPOSY (SCR_FIELDY / 2) #define SXSIZE (SCR_FIELDX * TILEX) @@ -577,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 */ @@ -967,41 +1004,45 @@ /* 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 -#define EL_EMC_MAGIC_BALL_SWITCH 683 -#define EL_EMC_SPRING_BUMPER 684 -#define EL_EMC_PLANT 685 -#define EL_EMC_LENSES 686 -#define EL_EMC_MAGNIFIER 687 -#define EL_EMC_WALL_9 688 -#define EL_EMC_WALL_10 689 -#define EL_EMC_WALL_11 690 -#define EL_EMC_WALL_12 691 -#define EL_EMC_WALL_13 692 -#define EL_EMC_WALL_14 693 -#define EL_EMC_WALL_15 694 -#define EL_EMC_WALL_16 695 -#define EL_EMC_WALL_SLIPPERY_1 696 -#define EL_EMC_WALL_SLIPPERY_2 697 -#define EL_EMC_WALL_SLIPPERY_3 698 -#define EL_EMC_WALL_SLIPPERY_4 699 -#define EL_EMC_DRIPPER 700 - -#define NUM_FILE_ELEMENTS 701 +#define EL_EMC_MAGIC_BALL_ACTIVE 683 +#define EL_EMC_MAGIC_BALL_SWITCH 684 +#define EL_EMC_MAGIC_BALL_SWITCH_ACTIVE 685 +#define EL_EMC_SPRING_BUMPER 686 +#define EL_EMC_PLANT 687 +#define EL_EMC_LENSES 688 +#define EL_EMC_MAGNIFIER 689 +#define EL_EMC_WALL_9 690 +#define EL_EMC_WALL_10 691 +#define EL_EMC_WALL_11 692 +#define EL_EMC_WALL_12 693 +#define EL_EMC_WALL_13 694 +#define EL_EMC_WALL_14 695 +#define EL_EMC_WALL_15 696 +#define EL_EMC_WALL_16 697 +#define EL_EMC_WALL_SLIPPERY_1 698 +#define EL_EMC_WALL_SLIPPERY_2 699 +#define EL_EMC_WALL_SLIPPERY_3 700 +#define EL_EMC_WALL_SLIPPERY_4 701 +#define EL_EMC_FAKE_GRASS 702 +#define EL_EMC_FAKE_ACID 703 +#define EL_EMC_DRIPPER 704 + +#define NUM_FILE_ELEMENTS 705 /* "real" (and therefore drawable) runtime elements */ @@ -1168,9 +1209,14 @@ #define ACTION_TURNING_FROM_RIGHT 44 #define ACTION_TURNING_FROM_UP 45 #define ACTION_TURNING_FROM_DOWN 46 -#define ACTION_OTHER 47 +#define ACTION_SMASHED_BY_ROCK 47 +#define ACTION_SMASHED_BY_SPRING 48 +#define ACTION_SLURPED_BY_SPRING 49 +#define ACTION_TWINKLING 50 +#define ACTION_SPLASHING 51 +#define ACTION_OTHER 52 -#define NUM_ACTIONS 48 +#define NUM_ACTIONS 53 #define ACTION_BORING_LAST ACTION_BORING_10 #define ACTION_SLEEPING_LAST ACTION_SLEEPING_3 @@ -1199,34 +1245,40 @@ #define GFX_ARG_YPOS 3 #define GFX_ARG_WIDTH 4 #define GFX_ARG_HEIGHT 5 -#define GFX_ARG_OFFSET 6 -#define GFX_ARG_VERTICAL 7 +#define GFX_ARG_VERTICAL 6 +#define GFX_ARG_OFFSET 7 #define GFX_ARG_XOFFSET 8 #define GFX_ARG_YOFFSET 9 -#define GFX_ARG_FRAMES 10 -#define GFX_ARG_FRAMES_PER_LINE 11 -#define GFX_ARG_START_FRAME 12 -#define GFX_ARG_DELAY 13 -#define GFX_ARG_ANIM_MODE 14 -#define GFX_ARG_GLOBAL_SYNC 15 -#define GFX_ARG_CRUMBLED_LIKE 16 -#define GFX_ARG_DIGGABLE_LIKE 17 -#define GFX_ARG_BORDER_SIZE 18 -#define GFX_ARG_STEP_OFFSET 19 -#define GFX_ARG_STEP_DELAY 20 -#define GFX_ARG_DIRECTION 21 -#define GFX_ARG_POSITION 22 -#define GFX_ARG_DRAW_XOFFSET 23 -#define GFX_ARG_DRAW_YOFFSET 24 -#define GFX_ARG_DRAW_MASKED 25 -#define GFX_ARG_ANIM_DELAY_FIXED 26 -#define GFX_ARG_ANIM_DELAY_RANDOM 27 -#define GFX_ARG_POST_DELAY_FIXED 28 -#define GFX_ARG_POST_DELAY_RANDOM 29 -#define GFX_ARG_NAME 30 -#define GFX_ARG_SCALE_UP_FACTOR 31 - -#define NUM_GFX_ARGS 32 +#define GFX_ARG_2ND_MOVEMENT_TILE 10 +#define GFX_ARG_2ND_VERTICAL 11 +#define GFX_ARG_2ND_OFFSET 12 +#define GFX_ARG_2ND_XOFFSET 13 +#define GFX_ARG_2ND_YOFFSET 14 +#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 */ @@ -1310,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" @@ -1510,7 +1562,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; @@ -1889,6 +1941,9 @@ 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;