X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=929b37f57a2e9bfff2ed22408367324644a6dd75;hb=63f41483ea7866802a7f6382c1d1b7135a1cd86a;hp=e2bfa12bf7bd136384bae2603acd4f1f469576e5;hpb=eecbe2a298826a3c32ca78b81b77491702ced84c;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index e2bfa12b..929b37f5 100644 --- a/src/main.h +++ b/src/main.h @@ -154,12 +154,15 @@ /* values for internal purpose only (level editor) */ #define EP_WALK_TO_OBJECT 81 #define EP_DEADLY 82 +#define EP_EDITOR_CASCADE 83 +#define EP_EDITOR_CASCADE_ACTIVE 84 +#define EP_EDITOR_CASCADE_INACTIVE 85 /* values for internal purpose only (game engine) */ -#define EP_HAS_ACTION 83 -#define EP_CAN_CHANGE_OR_HAS_ACTION 84 +#define EP_HAS_ACTION 86 +#define EP_CAN_CHANGE_OR_HAS_ACTION 87 -#define NUM_ELEMENT_PROPERTIES 85 +#define NUM_ELEMENT_PROPERTIES 88 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) #define EP_BITFIELD_BASE 0 @@ -206,8 +209,13 @@ #define CE_HITTING_X 28 #define CE_HIT_BY_X 29 #define CE_BLOCKED 30 +#define CE_SWITCHED_BY_PLAYER 31 +#define CE_PLAYER_SWITCHES_X 32 +#define CE_SNAPPED_BY_PLAYER 33 +#define CE_PLAYER_SNAPS_X 34 +#define CE_MOVE_OF_X 35 -#define NUM_CHANGE_EVENTS 31 +#define NUM_CHANGE_EVENTS 36 #define CE_BITMASK_DEFAULT 0 @@ -345,8 +353,9 @@ #define CA_ARG_NUMBER_LEVEL_SCORE (CA_ARG_NUMBER + 8) #define CA_ARG_NUMBER_HEADLINE (CA_ARG_NUMBER + 999) #define CA_ARG_ELEMENT 12000 -#define CA_ARG_ELEMENT_TARGET (CA_ARG_ELEMENT + 0) -#define CA_ARG_ELEMENT_TRIGGER (CA_ARG_ELEMENT + 1) +#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_HEADLINE (CA_ARG_ELEMENT + 999) #define CA_ARG_SPEED 13000 #define CA_ARG_SPEED_NOT_MOVING (CA_ARG_SPEED + 0) @@ -531,6 +540,13 @@ HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_EXPLOSION) #define COULD_MOVE_INTO_ACID(e) HAS_PROPERTY(e, EP_COULD_MOVE_INTO_ACID) #define MAYBE_DONT_COLLIDE_WITH(e) HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH) + +#define IS_EDITOR_CASCADE(e) HAS_PROPERTY(e, EP_EDITOR_CASCADE) +#define IS_EDITOR_CASCADE_ACTIVE(e) \ + HAS_PROPERTY(e, EP_EDITOR_CASCADE_ACTIVE) +#define IS_EDITOR_CASCADE_INACTIVE(e) \ + HAS_PROPERTY(e, EP_EDITOR_CASCADE_INACTIVE) + #define HAS_ACTION(e) HAS_PROPERTY(e, EP_HAS_ACTION) #define CAN_CHANGE_OR_HAS_ACTION(e) \ HAS_PROPERTY(e, EP_CAN_CHANGE_OR_HAS_ACTION) @@ -585,16 +601,28 @@ #define IS_RND_GATE_GRAY(e) ((e) >= EL_GATE_1_GRAY && \ (e) <= EL_GATE_4_GRAY) +#define IS_RND_GATE_GRAY_ACTIVE(e) ((e) >= EL_GATE_1_GRAY_ACTIVE && \ + (e) <= EL_GATE_4_GRAY_ACTIVE) #define IS_EM_GATE_GRAY(e) ((e) >= EL_EM_GATE_1_GRAY && \ (e) <= EL_EM_GATE_4_GRAY) +#define IS_EM_GATE_GRAY_ACTIVE(e) ((e) >= EL_EM_GATE_1_GRAY_ACTIVE && \ + (e) <= EL_EM_GATE_4_GRAY_ACTIVE) #define IS_EMC_GATE_GRAY(e) ((e) >= EL_EMC_GATE_5_GRAY && \ (e) <= EL_EMC_GATE_8_GRAY) +#define IS_EMC_GATE_GRAY_ACTIVE(e) ((e) >= EL_EMC_GATE_5_GRAY_ACTIVE && \ + (e) <= EL_EMC_GATE_8_GRAY_ACTIVE) #define IS_GATE_GRAY(e) (IS_RND_GATE_GRAY(e) || \ IS_EM_GATE_GRAY(e) || \ IS_EMC_GATE_GRAY(e)) +#define IS_GATE_GRAY_ACTIVE(e) (IS_RND_GATE_GRAY_ACTIVE(e) || \ + IS_EM_GATE_GRAY_ACTIVE(e) || \ + IS_EMC_GATE_GRAY_ACTIVE(e)) #define RND_GATE_GRAY_NR(e) ((e) - EL_GATE_1_GRAY) +#define RND_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_GATE_1_GRAY_ACTIVE) #define EM_GATE_GRAY_NR(e) ((e) - EL_EM_GATE_1_GRAY) +#define EM_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_EM_GATE_1_GRAY_ACTIVE) #define EMC_GATE_GRAY_NR(e) ((e) - EL_EMC_GATE_5_GRAY + 4) +#define EMC_GATE_GRAY_ACTIVE_NR(e) ((e) - EL_EMC_GATE_5_GRAY_ACTIVE + 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) @@ -669,6 +697,11 @@ #define IS_LOOP_SOUND(s) (sound_info[s].loop) +#define EL_CASCADE_ACTIVE(e) (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 : (e)) +#define EL_CASCADE_INACTIVE(e) (IS_EDITOR_CASCADE_ACTIVE(e) ? (e) - 1 : (e)) +#define EL_CASCADE_TOGGLE(e) (IS_EDITOR_CASCADE_INACTIVE(e) ? (e) + 1 : \ + IS_EDITOR_CASCADE_ACTIVE(e) ? (e) - 1 : (e)) + /* fundamental game speed values */ #define ONE_SECOND_DELAY 1000 /* delay value for one second */ @@ -1222,9 +1255,23 @@ #define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) #define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 43) #define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44) +#define EL_EMC_FAKE_GRASS_ACTIVE (EL_FIRST_RUNTIME_REAL + 45) +#define EL_GATE_1_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 46) +#define EL_GATE_2_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 47) +#define EL_GATE_3_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 48) +#define EL_GATE_4_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 49) +#define EL_EM_GATE_1_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 50) +#define EL_EM_GATE_2_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 51) +#define EL_EM_GATE_3_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 52) +#define EL_EM_GATE_4_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 53) +#define EL_EMC_GATE_5_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 54) +#define EL_EMC_GATE_6_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 55) +#define EL_EMC_GATE_7_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 56) +#define EL_EMC_GATE_8_GRAY_ACTIVE (EL_FIRST_RUNTIME_REAL + 57) +#define EL_EMC_DRIPPER_ACTIVE (EL_FIRST_RUNTIME_REAL + 58) /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 45) +#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 59) #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) @@ -1283,12 +1330,41 @@ #define EL_INTERNAL_CLIPBOARD_GROUP (EL_FIRST_INTERNAL + 2) #define EL_INTERNAL_DUMMY (EL_FIRST_INTERNAL + 3) +#define EL_INTERNAL_CASCADE_BD (EL_FIRST_INTERNAL + 4) +#define EL_INTERNAL_CASCADE_BD_ACTIVE (EL_FIRST_INTERNAL + 5) +#define EL_INTERNAL_CASCADE_EM (EL_FIRST_INTERNAL + 6) +#define EL_INTERNAL_CASCADE_EM_ACTIVE (EL_FIRST_INTERNAL + 7) +#define EL_INTERNAL_CASCADE_EMC (EL_FIRST_INTERNAL + 8) +#define EL_INTERNAL_CASCADE_EMC_ACTIVE (EL_FIRST_INTERNAL + 9) +#define EL_INTERNAL_CASCADE_RND (EL_FIRST_INTERNAL + 10) +#define EL_INTERNAL_CASCADE_RND_ACTIVE (EL_FIRST_INTERNAL + 11) +#define EL_INTERNAL_CASCADE_SB (EL_FIRST_INTERNAL + 12) +#define EL_INTERNAL_CASCADE_SB_ACTIVE (EL_FIRST_INTERNAL + 13) +#define EL_INTERNAL_CASCADE_SP (EL_FIRST_INTERNAL + 14) +#define EL_INTERNAL_CASCADE_SP_ACTIVE (EL_FIRST_INTERNAL + 15) +#define EL_INTERNAL_CASCADE_DC (EL_FIRST_INTERNAL + 16) +#define EL_INTERNAL_CASCADE_DC_ACTIVE (EL_FIRST_INTERNAL + 17) +#define EL_INTERNAL_CASCADE_DX (EL_FIRST_INTERNAL + 18) +#define EL_INTERNAL_CASCADE_DX_ACTIVE (EL_FIRST_INTERNAL + 19) +#define EL_INTERNAL_CASCADE_CHARS (EL_FIRST_INTERNAL + 20) +#define EL_INTERNAL_CASCADE_CHARS_ACTIVE (EL_FIRST_INTERNAL + 21) +#define EL_INTERNAL_CASCADE_CE (EL_FIRST_INTERNAL + 22) +#define EL_INTERNAL_CASCADE_CE_ACTIVE (EL_FIRST_INTERNAL + 23) +#define EL_INTERNAL_CASCADE_GE (EL_FIRST_INTERNAL + 24) +#define EL_INTERNAL_CASCADE_GE_ACTIVE (EL_FIRST_INTERNAL + 25) +#define EL_INTERNAL_CASCADE_USER (EL_FIRST_INTERNAL + 26) +#define EL_INTERNAL_CASCADE_USER_ACTIVE (EL_FIRST_INTERNAL + 27) +#define EL_INTERNAL_CASCADE_GENERIC (EL_FIRST_INTERNAL + 28) +#define EL_INTERNAL_CASCADE_GENERIC_ACTIVE (EL_FIRST_INTERNAL + 29) +#define EL_INTERNAL_CASCADE_DYNAMIC (EL_FIRST_INTERNAL + 30) +#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE (EL_FIRST_INTERNAL + 31) + #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 EL_INTERNAL_END (EL_FIRST_INTERNAL + 31) -#define MAX_NUM_ELEMENTS (EL_FIRST_INTERNAL + 4) +#define MAX_NUM_ELEMENTS (EL_FIRST_INTERNAL + 32) /* values for graphics/sounds action types */ @@ -1536,7 +1612,7 @@ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 2 #define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_BUILD 5 +#define PROGRAM_VERSION_BUILD 6 #endif #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" @@ -1667,7 +1743,8 @@ struct PlayerInfo int GfxAction; - boolean use_murphy_graphic; + boolean use_murphy; + int artwork_element; boolean block_last_field; int block_delay_adjustment; /* needed for different engine versions */ @@ -1808,6 +1885,12 @@ struct LevelInfo int start_element[MAX_PLAYERS]; boolean use_start_element[MAX_PLAYERS]; + int artwork_element[MAX_PLAYERS]; + boolean use_artwork_element[MAX_PLAYERS]; + + int explosion_element[MAX_PLAYERS]; + boolean use_explosion_element[MAX_PLAYERS]; + #if 1 /* values for the new EMC elements */ int android_move_time; @@ -1821,7 +1904,10 @@ struct LevelInfo int lenses_time; int magnify_time; int wind_direction_initial; + struct Content ball_content[MAX_ELEMENT_CONTENTS]; + int num_ball_contents; + boolean android_array[16]; #endif @@ -1906,6 +1992,7 @@ struct GameInfo /* (for the latest engine version, these flags should always be "FALSE") */ boolean use_change_when_pushing_bug; boolean use_block_last_field_bug; + boolean max_num_changes_per_frame; /* variable within running game */ int yamyam_content_nr; @@ -1921,6 +2008,12 @@ struct GameInfo boolean explosions_delayed; boolean envelope_active; +#if 1 + /* values for the new EMC elements */ + int lenses_time_left; + int magnify_time_left; +#endif + /* values for player idle animation (no effect on engine) */ int player_boring_delay_fixed; int player_boring_delay_random; @@ -2276,7 +2369,7 @@ extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern boolean Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern boolean Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];