X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=f2e076fafb4dd0b36e60282c19b76700d7d55ca7;hb=830ab4d58b00129ff57c9600dc99a2494af8841c;hp=cb739c041ccedc618bd196d452b74247444433eb;hpb=5216f629803d5255919cadc2419fb1e798812ae2;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index cb739c04..f2e076fa 100644 --- a/src/main.h +++ b/src/main.h @@ -86,7 +86,7 @@ #define EP_DROPPABLE 22 #define EP_CAN_EXPLODE_1X1 23 #define EP_PUSHABLE 24 -#define EP_CAN_EXPLODE_DYNA 25 +#define EP_CAN_EXPLODE_CROSS 25 #define EP_PROTECTED 26 #define EP_CAN_MOVE_INTO_ACID 27 @@ -112,43 +112,44 @@ #define EP_AMOEBOID 50 #define EP_AMOEBALIVE 51 #define EP_HAS_CONTENT 52 -#define EP_ACTIVE_BOMB 53 -#define EP_INACTIVE 54 +#define EP_CAN_TURN_EACH_MOVE 53 +#define EP_ACTIVE_BOMB 54 +#define EP_INACTIVE 55 /* values for special configurable properties (depending on level settings) */ -#define EP_EM_SLIPPERY_WALL 55 +#define EP_EM_SLIPPERY_WALL 56 /* values for special graphics properties (no effect on game engine) */ -#define EP_GFX_CRUMBLED 56 +#define EP_GFX_CRUMBLED 57 /* values for derived properties (determined from properties above) */ -#define EP_ACCESSIBLE_OVER 57 -#define EP_ACCESSIBLE_INSIDE 58 -#define EP_ACCESSIBLE_UNDER 59 -#define EP_WALKABLE 60 -#define EP_PASSABLE 61 -#define EP_ACCESSIBLE 62 -#define EP_COLLECTIBLE 63 -#define EP_SNAPPABLE 64 -#define EP_WALL 65 -#define EP_SOLID_FOR_PUSHING 66 -#define EP_DRAGONFIRE_PROOF 67 -#define EP_EXPLOSION_PROOF 68 -#define EP_CAN_SMASH 69 -#define EP_CAN_EXPLODE 70 -#define EP_CAN_EXPLODE_3X3 71 -#define EP_SP_PORT 72 -#define EP_CAN_EXPLODE_BY_DRAGONFIRE 73 -#define EP_CAN_EXPLODE_BY_EXPLOSION 74 -#define EP_COULD_MOVE_INTO_ACID 75 -#define EP_MAYBE_DONT_COLLIDE_WITH 76 +#define EP_ACCESSIBLE_OVER 58 +#define EP_ACCESSIBLE_INSIDE 59 +#define EP_ACCESSIBLE_UNDER 60 +#define EP_WALKABLE 61 +#define EP_PASSABLE 62 +#define EP_ACCESSIBLE 63 +#define EP_COLLECTIBLE 64 +#define EP_SNAPPABLE 65 +#define EP_WALL 66 +#define EP_SOLID_FOR_PUSHING 67 +#define EP_DRAGONFIRE_PROOF 68 +#define EP_EXPLOSION_PROOF 69 +#define EP_CAN_SMASH 70 +#define EP_CAN_EXPLODE 71 +#define EP_CAN_EXPLODE_3X3 72 +#define EP_SP_PORT 73 +#define EP_CAN_EXPLODE_BY_DRAGONFIRE 74 +#define EP_CAN_EXPLODE_BY_EXPLOSION 75 +#define EP_COULD_MOVE_INTO_ACID 76 +#define EP_MAYBE_DONT_COLLIDE_WITH 77 /* values for internal purpose only (level editor) */ -#define EP_EXPLODE_RESULT 77 -#define EP_WALK_TO_OBJECT 78 -#define EP_DEADLY 79 +#define EP_EXPLODE_RESULT 78 +#define EP_WALK_TO_OBJECT 79 +#define EP_DEADLY 80 -#define NUM_ELEMENT_PROPERTIES 80 +#define NUM_ELEMENT_PROPERTIES 81 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -236,9 +237,9 @@ #define CH_PAGE_ANY (0xffffffff) /* values for change power for custom elements */ -#define CP_NON_DESTRUCTIVE 0 -#define CP_HALF_DESTRUCTIVE 1 -#define CP_FULL_DESTRUCTIVE 2 +#define CP_WHEN_EMPTY 0 +#define CP_WHEN_DIGGABLE 1 +#define CP_WHEN_DESTRUCTIBLE 2 /* values for custom move patterns (bits 0 - 3: basic move directions) */ #define MV_BIT_TOWARDS_PLAYER 4 @@ -324,7 +325,7 @@ #define IS_DROPPABLE(e) HAS_PROPERTY(e, EP_DROPPABLE) #define CAN_EXPLODE_1X1(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_1X1) #define IS_PUSHABLE(e) HAS_PROPERTY(e, EP_PUSHABLE) -#define CAN_EXPLODE_DYNA(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_DYNA) +#define CAN_EXPLODE_CROSS(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_CROSS) #define IS_PROTECTED(e) HAS_PROPERTY(e, EP_PROTECTED) #define CAN_MOVE_INTO_ACID(e) HAS_PROPERTY(e, EP_CAN_MOVE_INTO_ACID) @@ -356,6 +357,7 @@ #define IS_AMOEBOID(e) HAS_PROPERTY(e, EP_AMOEBOID) #define IS_AMOEBALIVE(e) HAS_PROPERTY(e, EP_AMOEBALIVE) #define HAS_CONTENT(e) HAS_PROPERTY(e, EP_HAS_CONTENT) +#define CAN_TURN_EACH_MOVE(e) HAS_PROPERTY(e, EP_CAN_TURN_EACH_MOVE) #define IS_ACTIVE_BOMB(e) HAS_PROPERTY(e, EP_ACTIVE_BOMB) #define IS_INACTIVE(e) HAS_PROPERTY(e, EP_INACTIVE) @@ -390,16 +392,22 @@ #define IS_GROUP_ELEMENT(e) ((e) >= EL_GROUP_START && \ (e) <= EL_GROUP_END) +#define IS_CLIPBOARD_ELEMENT(e) ((e) >= EL_INTERNAL_CLIPBOARD_START && \ + (e) <= EL_INTERNAL_CLIPBOARD_END) + +#define IS_INTERNAL_ELEMENT(e) ((e) >= EL_INTERNAL_START && \ + (e) <= EL_INTERNAL_END) + #define IS_ENVELOPE(e) ((e) >= EL_ENVELOPE_1 && \ (e) <= EL_ENVELOPE_4) #define GFX_ELEMENT(e) (element_info[e].use_gfx_element ? \ element_info[e].gfx_element : e) -#define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y])) +#define IS_PLAYER(x, y) (ELEM_IS_PLAYER(StorePlayer[x][y])) -#define IS_FREE(x,y) (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x,y)) -#define IS_FREE_OR_PLAYER(x,y) (Feld[x][y] == EL_EMPTY) +#define IS_FREE(x, y) (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x, y)) +#define IS_FREE_OR_PLAYER(x, y) (Feld[x][y] == EL_EMPTY) #define IS_MOVING(x,y) (MovPos[x][y] != 0) #define IS_FALLING(x,y) (MovPos[x][y] != 0 && MovDir[x][y] == MV_DOWN) @@ -902,8 +910,10 @@ /* ---------- end of custom elements section ------------------------------- */ #define EL_UNKNOWN 656 +#define EL_TRIGGER_ELEMENT 657 +#define EL_TRIGGER_PLAYER 658 -#define NUM_FILE_ELEMENTS 657 +#define NUM_FILE_ELEMENTS 659 /* "real" (and therefore drawable) runtime elements */ @@ -1009,10 +1019,17 @@ /* internal elements (only used for internal purposes like copying) */ #define EL_FIRST_INTERNAL (EL_FIRST_DUMMY + 25) -#define EL_INTERNAL_EDITOR (EL_FIRST_INTERNAL + 0) -#define EL_INTERNAL_DUMMY (EL_FIRST_INTERNAL + 1) +#define EL_INTERNAL_CLIPBOARD_CUSTOM (EL_FIRST_INTERNAL + 0) +#define EL_INTERNAL_CLIPBOARD_CHANGE (EL_FIRST_INTERNAL + 1) +#define EL_INTERNAL_CLIPBOARD_GROUP (EL_FIRST_INTERNAL + 2) +#define EL_INTERNAL_DUMMY (EL_FIRST_INTERNAL + 3) -#define MAX_NUM_ELEMENTS (EL_FIRST_INTERNAL + 2) +#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 + 3) + +#define MAX_NUM_ELEMENTS (EL_FIRST_INTERNAL + 4) /* values for graphics/sounds action types */ @@ -1204,7 +1221,7 @@ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 1 #define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_BUILD 0 +#define PROGRAM_VERSION_BUILD 2 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -1435,7 +1452,9 @@ struct LevelInfo boolean block_last_field; /* player blocks previous field while moving */ boolean sp_block_last_field; /* player blocks previous field while moving */ boolean use_spring_bug; /* for compatibility with old levels */ + boolean instant_relocation; /* no visual delay when relocating player */ + /* ('int' instead of 'boolean' because used as selectbox value in editor) */ int use_step_counter; /* count steps instead of seconds for level */ short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -1462,7 +1481,8 @@ struct TapeInfo boolean pause_before_death; boolean recording, playing, pausing; boolean fast_forward; - boolean index_search; + boolean warp_forward; + boolean deactivate_display; boolean auto_play; boolean auto_play_level_solved; boolean quick_resume; @@ -1542,23 +1562,28 @@ struct ElementChangeInfo int delay_random; /* added frame delay before changed (random) */ int delay_frames; /* either 1 (frames) or 50 (seconds; 50 fps) */ - short trigger_element; /* custom element triggering change */ + short trigger_element; /* element triggering change */ - int content[3][3]; /* new elements after extended change */ - boolean use_content; /* use extended change content */ - boolean only_complete; /* only use complete content */ - boolean use_random_change; /* use random value for setting content */ - int random; /* random value for setting content */ - int power; /* power of extended change */ + int target_content[3][3]; /* elements for extended change target */ + boolean use_target_content; /* use extended change target */ + boolean only_if_complete; /* only use complete target content */ + boolean use_random_replace; /* use random value for replacing elements */ + int random_percentage; /* random value for replacing elements */ + int replace_when; /* type of elements that can be replaced */ boolean explode; /* explode instead of change */ + /* ---------- internal values used at runtime when playing ---------- */ + /* functions that are called before, while and after the change of an element -- currently only used for non-custom elements */ void (*pre_change_function)(int x, int y); void (*change_function)(int x, int y); void (*post_change_function)(int x, int y); + short actual_trigger_element; /* element that actually triggered change */ + int actual_trigger_player; /* player which actually triggered change */ + /* ---------- internal values used in level editor ---------- */ int direct_action; /* change triggered by actions on element */ @@ -1617,10 +1642,12 @@ struct ElementInfo int collect_score; /* score value for collecting */ int collect_count; /* count value for collecting */ - int push_delay_fixed; /* constant frame delay for pushing */ - int push_delay_random; /* additional random frame delay for pushing */ - int move_delay_fixed; /* constant frame delay for moving */ - int move_delay_random; /* additional random frame delay for moving */ + int push_delay_fixed; /* constant delay before pushing */ + int push_delay_random; /* additional random delay before pushing */ + int drop_delay_fixed; /* constant delay after dropping */ + int drop_delay_random; /* additional random delay after dropping */ + int move_delay_fixed; /* constant delay after moving */ + int move_delay_random; /* additional random delay after moving */ int move_pattern; /* direction movable element moves to */ int move_direction_initial; /* initial direction element moves to */ @@ -1653,8 +1680,10 @@ struct ElementInfo boolean in_group[NUM_GROUP_ELEMENTS]; +#if 0 boolean can_leave_element; /* element can leave other element behind */ boolean can_leave_element_last; +#endif /* ---------- internal values used in level editor ---------- */