X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=1d0375f1a8fdc8f08f1dd799aa998ca35b38693b;hb=c8da2fb958f55086c20c03246e17f7f542326137;hp=1f16fcc82deec921f94ebd28c5730e55c91876e5;hpb=274935f49f49068998ad7b4ed9d93892aedfc6aa;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 1f16fcc8..1d0375f1 100644 --- a/src/main.h +++ b/src/main.h @@ -165,7 +165,7 @@ #define CE_COLLISION 5 #define CE_IMPACT 6 #define CE_SMASHED 7 -#define CE_OTHER_IS_TOUCHING 8 +#define CE_TOUCHING_ANY_SIDE_OF 8 #define CE_OTHER_IS_CHANGING 9 #define CE_OTHER_IS_EXPLODING 10 #define CE_OTHER_GETS_TOUCHED 11 @@ -173,21 +173,31 @@ #define CE_OTHER_GETS_PUSHED 13 #define CE_OTHER_GETS_COLLECTED 14 #define CE_OTHER_GETS_DROPPED 15 +#define CE_BY_PLAYER 16 /* obsolete; map'd to CE_BY_DIRECT_ACTION */ +#define CE_BY_COLLISION 17 /* obsolete; map'd to CE_BY_DIRECT_ACTION */ +#define CE_BY_OTHER_ACTION 18 /* activates other element events */ +#define CE_BY_DIRECT_ACTION 19 /* activates direct element events */ +#define CE_OTHER_GETS_DIGGED 20 +#define CE_TOUCHING_LEFT_OF 21 +#define CE_TOUCHING_RIGHT_OF 22 +#define CE_TOUCHING_TOP_OF 23 +#define CE_TOUCHING_BOTTOM_OF 24 -/* values for activating change events (also stored in level file!) */ -#define CE_BY_PLAYER 16 -#define CE_BY_COLLISION 17 -#define CE_BY_OTHER 18 +/* values for derived change events (determined from properties above) */ +#define CE_TOUCHING_SOME_SIDE 25 /* summarized left/right/up/down/any */ -#define NUM_CHANGE_EVENTS 19 +#define NUM_CHANGE_EVENTS 26 #define CE_BITMASK_DEFAULT 0 #define CH_EVENT_BIT(c) (1 << (c)) #define CH_EVENT_VAR(e) (element_info[e].change->events) +#define CH_ANY_EVENT_VAR(e) (element_info[e].change_events) #define HAS_CHANGE_EVENT(e,c) (IS_CUSTOM_ELEMENT(e) && \ (CH_EVENT_VAR(e) & CH_EVENT_BIT(c)) != 0) +#define HAS_ANY_CHANGE_EVENT(e,c) (IS_CUSTOM_ELEMENT(e) && \ + (CH_ANY_EVENT_VAR(e) & CH_EVENT_BIT(c)) != 0) #define SET_CHANGE_EVENT(e,c,v) (IS_CUSTOM_ELEMENT(e) ? \ ((v) ? \ (CH_EVENT_VAR(e) |= CH_EVENT_BIT(c)) : \ @@ -373,7 +383,7 @@ #define MAX_ENVELOPE_YSIZE 20 #define MAX_ENVELOPE_TEXT_LEN (MAX_ENVELOPE_XSIZE * MAX_ENVELOPE_YSIZE) #define MIN_CHANGE_PAGES 1 -#define MAX_CHANGE_PAGES 10 +#define MAX_CHANGE_PAGES 16 /* values for elements with content */ #define MIN_ELEMENT_CONTENTS 1 @@ -789,24 +799,25 @@ #define EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 28) #define EL_CONVEYOR_BELT_4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 29) #define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 30) -#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 31) -#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 32) -#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 33) -#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 34) -#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 35) -#define EL_AMOEBA_DROPPING (EL_FIRST_RUNTIME_REAL + 36) -#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 37) -#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38) -#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 39) -#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40) -#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 41) -#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) -#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43) -#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44) -#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45) +#define EL_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 31) +#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 32) +#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 33) +#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 34) +#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 35) +#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 36) +#define EL_AMOEBA_DROPPING (EL_FIRST_RUNTIME_REAL + 37) +#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 38) +#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 39) +#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 40) +#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 41) +#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 42) +#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43) +#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 44) +#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45) +#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 46) /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 46) +#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 47) #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) @@ -892,11 +903,12 @@ #define GFX_SPECIAL_ARG_EDITOR 3 #define GFX_SPECIAL_ARG_INFO 4 #define GFX_SPECIAL_ARG_SETUP 5 -#define GFX_SPECIAL_ARG_DOOR 6 -#define GFX_SPECIAL_ARG_PREVIEW 7 -#define GFX_SPECIAL_ARG_CRUMBLED 8 +#define GFX_SPECIAL_ARG_PLAYING 6 +#define GFX_SPECIAL_ARG_DOOR 7 +#define GFX_SPECIAL_ARG_PREVIEW 8 +#define GFX_SPECIAL_ARG_CRUMBLED 9 -#define NUM_SPECIAL_GFX_ARGS 9 +#define NUM_SPECIAL_GFX_ARGS 10 /* values for image configuration suffixes */ @@ -918,15 +930,17 @@ #define GFX_ARG_GLOBAL_SYNC 15 #define GFX_ARG_CRUMBLED_LIKE 16 #define GFX_ARG_DIGGABLE_LIKE 17 -#define GFX_ARG_STEP_OFFSET 18 -#define GFX_ARG_STEP_DELAY 19 -#define GFX_ARG_DIRECTION 20 -#define GFX_ARG_POSITION 21 -#define GFX_ARG_DRAW_XOFFSET 22 -#define GFX_ARG_DRAW_YOFFSET 23 -#define GFX_ARG_NAME 24 +#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_NAME 26 -#define NUM_GFX_ARGS 25 +#define NUM_GFX_ARGS 27 /* values for sound configuration suffixes */ @@ -976,20 +990,20 @@ #define GAME_MODE_EDITOR 3 #define GAME_MODE_INFO 4 #define GAME_MODE_SETUP 5 -#define GAME_MODE_PSEUDO_DOOR 6 -#define GAME_MODE_PSEUDO_PREVIEW 7 -#define GAME_MODE_PSEUDO_CRUMBLED 8 +#define GAME_MODE_PLAYING 6 +#define GAME_MODE_PSEUDO_DOOR 7 +#define GAME_MODE_PSEUDO_PREVIEW 8 +#define GAME_MODE_PSEUDO_CRUMBLED 9 /* there are no special config file suffixes for these modes */ -#define GAME_MODE_PLAYING 9 #define GAME_MODE_PSEUDO_TYPENAME 10 #define GAME_MODE_QUIT 11 #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 0 -#define PROGRAM_VERSION_PATCH 3 +#define PROGRAM_VERSION_PATCH 5 #define PROGRAM_VERSION_RELEASE 0 -#define PROGRAM_VERSION_STRING "3.0.3" +#define PROGRAM_VERSION_STRING "3.0.5" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -1088,6 +1102,8 @@ struct PlayerInfo boolean is_digging; boolean is_collecting; + boolean show_envelope; + unsigned long move_delay; int move_delay_value; @@ -1233,6 +1249,8 @@ struct DoorInfo struct ElementChangeInfo { + boolean can_change; /* use or ignore this change info */ + unsigned long events; /* bitfield for change events */ short target_element; /* target element after change */ @@ -1260,9 +1278,8 @@ struct ElementChangeInfo /* ---------- internal values used in level editor ---------- */ - int player_action; /* touched/pressed/pushed by player */ - int collide_action; /* collision/impact/smashed */ - int other_action; /* various change actions */ + int direct_action; /* change triggered by actions on element */ + int other_action; /* change triggered by other element actions */ }; struct ElementInfo @@ -1317,10 +1334,13 @@ struct ElementInfo int num_change_pages; /* actual number of change pages */ int current_change_page; /* currently edited change page */ - /* ---------- internal values used in game at runtime ---------- */ + /* ---------- internal values used at runtime when playing ---------- */ unsigned long change_events; /* bitfield for combined change events */ + int event_page_num[NUM_CHANGE_EVENTS]; /* page number for each event */ + struct ElementChangeInfo *event_page[NUM_CHANGE_EVENTS]; /* page for event */ + /* ---------- internal values used in level editor ---------- */ int access_type; /* walkable or passable */ @@ -1362,12 +1382,15 @@ struct GraphicInfo boolean anim_global_sync; int crumbled_like; /* element for cloning crumble graphics */ int diggable_like; /* element for cloning digging graphics */ + int border_size; /* border size for "crumbled" graphics */ int step_offset; /* optional step offset of toon animations */ int step_delay; /* optional step delay of toon animations */ int draw_x, draw_y; /* optional offset for drawing fonts chars */ + int draw_masked; /* optional setting for drawing envelope gfx */ + #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) Pixmap clip_mask; /* single-graphic-only clip mask for X11 */ GC clip_gc; /* single-graphic-only clip gc for X11 */ @@ -1428,7 +1451,8 @@ 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 Changing[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern unsigned long Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern unsigned long ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaCnt[MAX_NUM_AMOEBA];