X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=68f1eed082c22ec8b93d9b9e902c93f65ca9849d;hb=ade0034b74cb1213bfe0a73213f459081e10b85a;hp=fbd89b278cf005a760fdea16059174e6c420e030;hpb=478ead0811dfe963fe610b4fdf2b74a16c7bd12b;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index fbd89b27..68f1eed0 100644 --- a/src/main.h +++ b/src/main.h @@ -281,6 +281,7 @@ PLAYER_BITS_3 | \ PLAYER_BITS_4) #define PLAYER_BITS_TRIGGER (1 << 4) +#define PLAYER_BITS_ACTION (1 << 5) /* values for move directions (bits 0 - 3: basic move directions) */ #define MV_BIT_PREVIOUS 4 @@ -337,7 +338,7 @@ #define CP_WHEN_REMOVABLE 4 #define CP_WHEN_WALKABLE 5 -/* values for change actions for custom elements */ +/* values for change actions for custom elements (stored in level file) */ #define CA_NO_ACTION 0 #define CA_EXIT_PLAYER 1 #define CA_KILL_PLAYER 2 @@ -356,6 +357,9 @@ #define CA_SET_CE_SCORE 15 #define CA_SET_CE_VALUE 16 #define CA_SET_ENGINE_SCAN_MODE 17 +#define CA_SET_PLAYER_INVENTORY 18 +#define CA_SET_CE_ARTWORK 19 +#define CA_SET_LEVEL_RANDOM_SEED 20 #define CA_HEADLINE_LEVEL_ACTIONS 250 #define CA_HEADLINE_PLAYER_ACTIONS 251 @@ -395,6 +399,7 @@ #define CA_ARG_PLAYER_4 (CA_ARG_PLAYER + PLAYER_BITS_4) #define CA_ARG_PLAYER_ANY (CA_ARG_PLAYER + PLAYER_BITS_ANY) #define CA_ARG_PLAYER_TRIGGER (CA_ARG_PLAYER + PLAYER_BITS_TRIGGER) +#define CA_ARG_PLAYER_ACTION (CA_ARG_PLAYER + PLAYER_BITS_ACTION) #define CA_ARG_PLAYER_HEADLINE (CA_ARG_PLAYER + 999) #define CA_ARG_NUMBER 11000 #define CA_ARG_NUMBER_MIN (CA_ARG_NUMBER + 0) @@ -411,15 +416,19 @@ #define CA_ARG_ELEMENT_RESET (CA_ARG_ELEMENT + 0) #define CA_ARG_ELEMENT_TARGET (CA_ARG_ELEMENT + 1) #define CA_ARG_ELEMENT_TRIGGER (CA_ARG_ELEMENT + 2) +#define CA_ARG_ELEMENT_ACTION (CA_ARG_ELEMENT + 7) #define CA_ARG_ELEMENT_HEADLINE (CA_ARG_ELEMENT + 997) #define CA_ARG_ELEMENT_CV_TARGET (CA_ARG_ELEMENT_TARGET) #define CA_ARG_ELEMENT_CV_TRIGGER (CA_ARG_ELEMENT_TRIGGER) +#define CA_ARG_ELEMENT_CV_ACTION (CA_ARG_ELEMENT_ACTION) #define CA_ARG_ELEMENT_CV_HEADLINE (CA_ARG_ELEMENT_HEADLINE) #define CA_ARG_ELEMENT_NR_TARGET (CA_ARG_ELEMENT + 3) #define CA_ARG_ELEMENT_NR_TRIGGER (CA_ARG_ELEMENT + 4) +#define CA_ARG_ELEMENT_NR_ACTION (CA_ARG_ELEMENT + 8) #define CA_ARG_ELEMENT_NR_HEADLINE (CA_ARG_ELEMENT + 998) #define CA_ARG_ELEMENT_CS_TARGET (CA_ARG_ELEMENT + 5) #define CA_ARG_ELEMENT_CS_TRIGGER (CA_ARG_ELEMENT + 6) +#define CA_ARG_ELEMENT_CS_ACTION (CA_ARG_ELEMENT + 9) #define CA_ARG_ELEMENT_CS_HEADLINE (CA_ARG_ELEMENT + 999) #define CA_ARG_SPEED 13000 #define CA_ARG_SPEED_NOT_MOVING (CA_ARG_SPEED + STEPSIZE_NOT_MOVING) @@ -456,6 +465,16 @@ #define CA_ARG_SCAN_MODE_NORMAL (CA_ARG_SCAN_MODE + MV_NORMAL) #define CA_ARG_SCAN_MODE_REVERSE (CA_ARG_SCAN_MODE + MV_REVERSE) #define CA_ARG_SCAN_MODE_HEADLINE (CA_ARG_SCAN_MODE + 999) +#define CA_ARG_INVENTORY 18000 +#define CA_ARG_INVENTORY_RESET (CA_ARG_INVENTORY + 0) +#define CA_ARG_INVENTORY_RM_TARGET (CA_ARG_INVENTORY + 1) +#define CA_ARG_INVENTORY_RM_TRIGGER (CA_ARG_INVENTORY + 2) +#define CA_ARG_INVENTORY_RM_ACTION (CA_ARG_INVENTORY + 3) +#define CA_ARG_INVENTORY_RM_FIRST (CA_ARG_INVENTORY + 4) +#define CA_ARG_INVENTORY_RM_LAST (CA_ARG_INVENTORY + 5) +#define CA_ARG_INVENTORY_RM_ALL (CA_ARG_INVENTORY + 6) +#define CA_ARG_INVENTORY_HEADLINE (CA_ARG_INVENTORY + 998) +#define CA_ARG_INVENTORY_RM_HEADLINE (CA_ARG_INVENTORY + 999) #define CA_ARG_UNDEFINED 65535 /* values for custom move patterns (bits 0 - 3: basic move directions) */ @@ -740,8 +759,27 @@ #define IS_DC_STEELWALL_2(e) ((e) >= EL_DC_STEELWALL_2_LEFT && \ (e) <= EL_DC_STEELWALL_2_SINGLE) +#if 1 + +#if 1 +#define GFX_ELEMENT(e) (element_info[e].gfx_element) +#else +#define GFX_ELEMENT(e) (element_info[e].gfx_element == \ + (element_info[e].use_gfx_element ? \ + element_info[e].gfx_element : e) ? \ + element_info[e].gfx_element : \ + element_info[e].gfx_element + \ + 0 * printf("::: %d: %d <-> %d\n", \ + e, \ + element_info[e].gfx_element, \ + element_info[e].use_gfx_element ? \ + element_info[e].gfx_element : e)) +#endif + +#else #define GFX_ELEMENT(e) (element_info[e].use_gfx_element ? \ element_info[e].gfx_element : e) +#endif /* !!! CHECK THIS !!! */ #if 1 @@ -897,6 +935,10 @@ #define STD_ELEMENT_CONTENTS 4 #define MAX_ELEMENT_CONTENTS 8 +/* values for initial player inventory */ +#define MIN_INITIAL_INVENTORY_SIZE 1 +#define MAX_INITIAL_INVENTORY_SIZE 8 + /* often used screen positions */ #define SX 8 #define SY 8 @@ -1964,8 +2006,8 @@ /* program information and versioning definitions */ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_PATCH 5 -#define PROGRAM_VERSION_BUILD 0 +#define PROGRAM_VERSION_PATCH 6 +#define PROGRAM_VERSION_BUILD 1 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -2267,6 +2309,8 @@ struct LevelInfo char name[MAX_LEVEL_NAME_LEN + 1]; char author[MAX_LEVEL_AUTHOR_LEN + 1]; + int random_seed; + struct EnvelopeInfo envelope[NUM_ENVELOPES]; int score[LEVEL_SCORE_ELEMENTS]; @@ -2327,7 +2371,12 @@ struct LevelInfo int initial_player_stepsize[MAX_PLAYERS]; /* initial player speed */ boolean initial_player_gravity[MAX_PLAYERS]; + boolean use_initial_inventory[MAX_PLAYERS]; + int initial_inventory_size[MAX_PLAYERS]; + int initial_inventory_content[MAX_PLAYERS][MAX_INITIAL_INVENTORY_SIZE]; + boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */ + boolean em_explodes_by_fire; /* EM style chain explosion behaviour */ boolean use_spring_bug; /* for compatibility with old levels */ boolean use_time_orb_bug; /* for compatibility with old levels */ boolean instant_relocation; /* no visual delay when relocating player */ @@ -2350,6 +2399,9 @@ struct LevelInfo boolean no_valid_file; /* set when level file missing or invalid */ boolean changed; /* set when level was changed in the editor */ + + /* runtime flags to handle bugs in old levels (not stored in level file) */ + boolean use_action_after_change_bug; }; struct GlobalInfo @@ -2408,6 +2460,7 @@ struct ElementChangeInfo int action_type; /* type of action */ int action_mode; /* mode of action */ int action_arg; /* parameter of action */ + int action_element; /* element related to action */ /* ---------- internal values used at runtime when playing ---------- */ @@ -2490,7 +2543,7 @@ struct ElementInfo unsigned long properties[NUM_EP_BITFIELDS]; /* element base properties */ boolean use_gfx_element; /* use custom graphic element */ - int gfx_element; /* optional custom graphic element */ + int gfx_element_initial; /* initial optional custom graphic element */ int access_direction; /* accessible from which direction */ @@ -2541,6 +2594,8 @@ struct ElementInfo boolean in_group[NUM_GROUP_ELEMENTS]; + int gfx_element; /* runtime optional custom graphic element */ + int collect_score; /* runtime score value for collecting */ /* count of this element on playfield, calculated after each frame */