X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=4385aa55db7d6f3f858355c8473ebb05697eae74;hb=c9bb6e0a6eecbf84320be79b121bd957a938a08c;hp=1e7ea6b7ea2e71499e2c58c6134cf8c11aba378a;hpb=87faaa07872dcc20b7a36a720529d284fc4447fd;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 1e7ea6b7..4385aa55 100644 --- a/src/main.h +++ b/src/main.h @@ -33,6 +33,7 @@ #define IMG_UNDEFINED (-1) #define IMG_EMPTY IMG_EMPTY_SPACE #define IMG_SP_EMPTY IMG_SP_EMPTY_SPACE +#define IMG_EXPLOSION IMG_DEFAULT_EXPLODING #define IMG_CHAR_START IMG_CHAR_SPACE #define IMG_CUSTOM_START IMG_CUSTOM_1 @@ -68,21 +69,21 @@ #define EP_DONT_TOUCH 4 #define EP_INDESTRUCTIBLE 5 #define EP_SLIPPERY 6 -#define EP_CAN_EXPLODE_BY_FIRE 7 +#define EP_CAN_CHANGE 7 #define EP_CAN_MOVE 8 #define EP_CAN_FALL 9 -#define EP_CAN_SMASH 10 -#define EP_WALKABLE_OVER 11 -#define EP_WALKABLE_INSIDE 12 -#define EP_WALKABLE_UNDER 13 -#define EP_PASSABLE_OVER 14 -#define EP_PASSABLE_INSIDE 15 -#define EP_PASSABLE_UNDER 16 -#define EP_CHANGEABLE 17 -#define EP_CAN_EXPLODE_SMASHED 18 -#define EP_CAN_EXPLODE_IMPACT 19 -#define EP_UNUSED_20 20 -#define EP_UNUSED_21 21 +#define EP_CAN_SMASH_PLAYER 10 +#define EP_CAN_SMASH_ENEMIES 11 +#define EP_CAN_SMASH_EVERYTHING 12 +#define EP_CAN_EXPLODE_BY_FIRE 13 +#define EP_CAN_EXPLODE_SMASHED 14 +#define EP_CAN_EXPLODE_IMPACT 15 +#define EP_WALKABLE_OVER 16 +#define EP_WALKABLE_INSIDE 17 +#define EP_WALKABLE_UNDER 18 +#define EP_PASSABLE_OVER 19 +#define EP_PASSABLE_INSIDE 20 +#define EP_PASSABLE_UNDER 21 #define EP_UNUSED_22 22 #define EP_UNUSED_23 23 #define EP_PUSHABLE 24 @@ -130,13 +131,15 @@ #define EP_SOLID_FOR_PUSHING 58 #define EP_DRAGONFIRE_PROOF 59 #define EP_EXPLOSION_PROOF 60 +#define EP_CAN_SMASH 61 +#define EP_CAN_EXPLODE 62 /* values for internal purpose only (level editor) */ -#define EP_EXPLODE_RESULT 61 -#define EP_WALK_TO_OBJECT 62 -#define EP_DEADLY 63 +#define EP_EXPLODE_RESULT 63 +#define EP_WALK_TO_OBJECT 64 +#define EP_DEADLY 65 -#define NUM_ELEMENT_PROPERTIES 64 +#define NUM_ELEMENT_PROPERTIES 66 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -153,8 +156,22 @@ /* values for change events for custom elements */ #define CE_DELAY 0 +#define CE_TOUCHED_BY_PLAYER 1 +#define CE_PRESSED_BY_PLAYER 2 +#define CE_PUSHED_BY_PLAYER 3 +#define CE_IMPACT 4 +#define CE_SMASHED 5 +#define CE_OTHER_COLLECTING 6 +#define CE_OTHER_PUSHING 7 +#define CE_OTHER_CHANGING 8 +#define CE_OTHER_EXPLODING 9 -#define NUM_CHANGE_EVENTS 1 +/* values for internal purpose only (level editor) */ +#define CE_BY_PLAYER 10 +#define CE_IMPACT_SMASHED 11 +#define CE_BY_OTHER 12 + +#define NUM_CHANGE_EVENTS 13 #define CE_BITMASK_DEFAULT 0 @@ -177,17 +194,21 @@ #define DONT_TOUCH(e) HAS_PROPERTY(e, EP_DONT_TOUCH) #define IS_INDESTRUCTIBLE(e) HAS_PROPERTY(e, EP_INDESTRUCTIBLE) #define IS_SLIPPERY(e) HAS_PROPERTY(e, EP_SLIPPERY) -#define CAN_EXPLODE_BY_FIRE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_FIRE) +#define CAN_CHANGE(e) HAS_PROPERTY(e, EP_CAN_CHANGE) #define CAN_MOVE(e) HAS_PROPERTY(e, EP_CAN_MOVE) #define CAN_FALL(e) HAS_PROPERTY(e, EP_CAN_FALL) -#define CAN_SMASH(e) HAS_PROPERTY(e, EP_CAN_SMASH) +#define CAN_SMASH_PLAYER(e) HAS_PROPERTY(e, EP_CAN_SMASH_PLAYER) +#define CAN_SMASH_ENEMIES(e) HAS_PROPERTY(e, EP_CAN_SMASH_ENEMIES) +#define CAN_SMASH_EVERYTHING(e) HAS_PROPERTY(e, EP_CAN_SMASH_EVERYTHING) +#define CAN_EXPLODE_BY_FIRE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_FIRE) +#define CAN_EXPLODE_SMASHED(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_SMASHED) +#define CAN_EXPLODE_IMPACT(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_IMPACT) #define IS_WALKABLE_OVER(e) HAS_PROPERTY(e, EP_WALKABLE_OVER) #define IS_WALKABLE_INSIDE(e) HAS_PROPERTY(e, EP_WALKABLE_INSIDE) #define IS_WALKABLE_UNDER(e) HAS_PROPERTY(e, EP_WALKABLE_UNDER) #define IS_PASSABLE_OVER(e) HAS_PROPERTY(e, EP_PASSABLE_OVER) #define IS_PASSABLE_INSIDE(e) HAS_PROPERTY(e, EP_PASSABLE_INSIDE) #define IS_PASSABLE_UNDER(e) HAS_PROPERTY(e, EP_PASSABLE_UNDER) -#define IS_CHANGEABLE(e) HAS_PROPERTY(e, EP_CHANGEABLE) #define IS_PUSHABLE(e) HAS_PROPERTY(e, EP_PUSHABLE) /* macros for special configurable properties */ @@ -233,7 +254,10 @@ #define IS_SOLID_FOR_PUSHING(e) HAS_PROPERTY(e, EP_SOLID_FOR_PUSHING) #define IS_DRAGONFIRE_PROOF(e) HAS_PROPERTY(e, EP_DRAGONFIRE_PROOF) #define IS_EXPLOSION_PROOF(e) HAS_PROPERTY(e, EP_EXPLOSION_PROOF) +#define CAN_SMASH(e) HAS_PROPERTY(e, EP_CAN_SMASH) +#define CAN_EXPLODE(e) HAS_PROPERTY(e, EP_CAN_EXPLODE) +/* special macros used in game engine */ #define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \ (e) <= EL_CUSTOM_END) @@ -735,19 +759,20 @@ #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) #define EL_NUT_BREAKING (EL_FIRST_RUNTIME_UNREAL + 2) -#define EL_ACID_SPLASH_LEFT (EL_FIRST_RUNTIME_UNREAL + 3) -#define EL_ACID_SPLASH_RIGHT (EL_FIRST_RUNTIME_UNREAL + 4) -#define EL_AMOEBA_GROWING (EL_FIRST_RUNTIME_UNREAL + 5) -#define EL_AMOEBA_SHRINKING (EL_FIRST_RUNTIME_UNREAL + 6) -#define EL_EXPANDABLE_WALL_GROWING (EL_FIRST_RUNTIME_UNREAL + 7) -#define EL_FLAMES (EL_FIRST_RUNTIME_UNREAL + 8) -#define EL_PLAYER_IS_LEAVING (EL_FIRST_RUNTIME_UNREAL + 9) -#define EL_QUICKSAND_FILLING (EL_FIRST_RUNTIME_UNREAL + 10) -#define EL_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 11) -#define EL_BD_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 12) +#define EL_DIAMOND_BREAKING (EL_FIRST_RUNTIME_UNREAL + 3) +#define EL_ACID_SPLASH_LEFT (EL_FIRST_RUNTIME_UNREAL + 4) +#define EL_ACID_SPLASH_RIGHT (EL_FIRST_RUNTIME_UNREAL + 5) +#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_QUICKSAND_FILLING (EL_FIRST_RUNTIME_UNREAL + 11) +#define EL_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 12) +#define EL_BD_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 13) /* dummy elements (never used as game elements, only used as graphics) */ -#define EL_FIRST_DUMMY (EL_FIRST_RUNTIME_UNREAL + 13) +#define EL_FIRST_DUMMY (EL_FIRST_RUNTIME_UNREAL + 14) #define EL_STEELWALL_TOPLEFT (EL_FIRST_DUMMY + 0) #define EL_STEELWALL_TOPRIGHT (EL_FIRST_DUMMY + 1) @@ -765,8 +790,12 @@ #define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 13) #define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 14) #define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 15) +#define EL_DEFAULT (EL_FIRST_DUMMY + 16) +#define EL_BD_DEFAULT (EL_FIRST_DUMMY + 17) +#define EL_SP_DEFAULT (EL_FIRST_DUMMY + 18) +#define EL_SB_DEFAULT (EL_FIRST_DUMMY + 19) -#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 16) +#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 20) /* values for graphics/sounds action types */ @@ -1121,6 +1150,9 @@ struct MenuInfo int draw_yoffset_default; int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; int draw_yoffset[NUM_SPECIAL_GFX_ARGS]; + + int list_size_default; + int list_size[NUM_SPECIAL_GFX_ARGS]; }; struct DoorInfo @@ -1137,6 +1169,8 @@ struct ElementChangeInfo int delay_random; /* added frame delay before changed (random) */ int delay_frames; /* either 1 (frames) or 50 (seconds; 50 fps) */ + short trigger; /* custom element triggering change */ + short successor; /* new custom element after change */ }; @@ -1175,11 +1209,7 @@ struct ElementInfo int move_pattern; /* direction movable element moves to */ int move_direction_initial; /* initial direction element moves to */ - - int consistency; /* only for level editor; not stored */ - int walk_to_action; /* only for level editor; not stored */ - int deadliness; /* only for level editor; not stored */ - int walkable_layer; /* only for level editor; not stored */ + int move_stepsize; /* step size element moves with */ int content[3][3]; /* new elements after explosion */ @@ -1269,6 +1299,7 @@ extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short ChangeDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];