X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=d119689010aee7c6f8212e049bed330d02fc6175;hb=1847b9f73a9189758958980912c005dc289e1b08;hp=670711500babb17db6313394ca4708ac42c74f2c;hpb=b06f921c487c5b1e30e44ec00ec2c08f366f83df;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 67071150..d1196890 100644 --- a/src/main.h +++ b/src/main.h @@ -163,11 +163,15 @@ #define EP_HAS_ACTION 87 #define EP_CAN_CHANGE_OR_HAS_ACTION 88 -#define NUM_ELEMENT_PROPERTIES 89 +/* values for internal purpose only (other) */ +#define EP_OBSOLETE 89 + +#define NUM_ELEMENT_PROPERTIES 90 #define NUM_EP_BITFIELDS ((NUM_ELEMENT_PROPERTIES + 31) / 32) -#define EP_BITFIELD_BASE 0 +#define EP_BITFIELD_BASE_NR 0 +#define EP_BITMASK_BASE_DEFAULT (1 << EP_CAN_MOVE_INTO_ACID) #define EP_BITMASK_DEFAULT 0 #define PROPERTY_BIT(p) (1 << ((p) % 32)) @@ -223,11 +227,20 @@ #define CE_CREATION_OF_X 37 #define CE_SCORE_GETS_ZERO 38 #define CE_SCORE_GETS_ZERO_OF_X 39 +#define CE_VALUE_CHANGES 40 +#define CE_VALUE_CHANGES_OF_X 41 +#define CE_SCORE_CHANGES 42 +#define CE_SCORE_CHANGES_OF_X 43 + +#define NUM_CHANGE_EVENTS 44 -#define NUM_CHANGE_EVENTS 40 +#define NUM_CE_BITFIELDS ((NUM_CHANGE_EVENTS + 31) / 32) #define CE_BITMASK_DEFAULT 0 +#define CH_EVENT_BITFIELD_NR(e) (e / 32) +#define CH_EVENT_BIT(e) (1 << ((e) % 32)) + #define CH_EVENT_VAR(e,c) (element_info[e].change->has_event[c]) #define CH_ANY_EVENT_VAR(e,c) (element_info[e].has_change_event[c]) @@ -320,7 +333,7 @@ #define CA_SET_LEVEL_GEMS 7 #define CA_SET_LEVEL_SCORE 8 #define CA_SET_LEVEL_WIND 9 -#define CA_SET_LEVEL_GRAVITY 10 +#define CA_SET_PLAYER_GRAVITY 10 #define CA_SET_PLAYER_KEYS 11 #define CA_SET_PLAYER_SPEED 12 #define CA_SET_PLAYER_SHIELD 13 @@ -593,6 +606,8 @@ #define CAN_CHANGE_OR_HAS_ACTION(e) \ HAS_PROPERTY(e, EP_CAN_CHANGE_OR_HAS_ACTION) +#define IS_OBSOLETE(e) HAS_PROPERTY(e, EP_OBSOLETE) + /* special macros used in game engine */ #define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \ (e) <= EL_CUSTOM_END) @@ -780,14 +795,19 @@ #define MAX_ELEMENT_NAME_LEN 32 #define MAX_TAPES_PER_SET 1024 #define MAX_SCORE_ENTRIES 100 +#define MAX_NUM_TITLE_SCREENS 5 + #define MAX_NUM_AMOEBA 100 + #if 0 /* game.h */ #define MAX_INVENTORY_SIZE 1000 #define STD_NUM_KEYS 4 #define MAX_NUM_KEYS 8 #endif + #define NUM_BELTS 4 #define NUM_BELT_PARTS 3 +#define NUM_ENVELOPES 4 #define MIN_ENVELOPE_XSIZE 1 #define MIN_ENVELOPE_YSIZE 1 #define MAX_ENVELOPE_XSIZE 30 @@ -805,8 +825,6 @@ #define STD_ELEMENT_CONTENTS 4 #define MAX_ELEMENT_CONTENTS 8 -#define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */ - /* often used screen positions */ #define SX 8 #define SY 8 @@ -864,6 +882,10 @@ #define SC_CRYSTAL 11 #define SC_PEARL 12 #define SC_SHIELD 13 +#define SC_UNKNOWN_14 14 +#define SC_UNKNOWN_15 15 + +#define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */ /* "real" level file elements */ @@ -1543,18 +1565,19 @@ /* values for special image configuration suffixes (must match game mode) */ #define GFX_SPECIAL_ARG_DEFAULT 0 -#define GFX_SPECIAL_ARG_MAIN 1 -#define GFX_SPECIAL_ARG_LEVELS 2 -#define GFX_SPECIAL_ARG_SCORES 3 -#define GFX_SPECIAL_ARG_EDITOR 4 -#define GFX_SPECIAL_ARG_INFO 5 -#define GFX_SPECIAL_ARG_SETUP 6 -#define GFX_SPECIAL_ARG_PLAYING 7 -#define GFX_SPECIAL_ARG_DOOR 8 -#define GFX_SPECIAL_ARG_PREVIEW 9 -#define GFX_SPECIAL_ARG_CRUMBLED 10 +#define GFX_SPECIAL_ARG_TITLE 1 +#define GFX_SPECIAL_ARG_MAIN 2 +#define GFX_SPECIAL_ARG_LEVELS 3 +#define GFX_SPECIAL_ARG_SCORES 4 +#define GFX_SPECIAL_ARG_EDITOR 5 +#define GFX_SPECIAL_ARG_INFO 6 +#define GFX_SPECIAL_ARG_SETUP 7 +#define GFX_SPECIAL_ARG_PLAYING 8 +#define GFX_SPECIAL_ARG_DOOR 9 +#define GFX_SPECIAL_ARG_PREVIEW 10 +#define GFX_SPECIAL_ARG_CRUMBLED 11 -#define NUM_SPECIAL_GFX_ARGS 11 +#define NUM_SPECIAL_GFX_ARGS 12 /* values for image configuration suffixes */ @@ -1655,20 +1678,21 @@ /* values for game_status (must match special image configuration suffixes) */ #define GAME_MODE_DEFAULT 0 -#define GAME_MODE_MAIN 1 -#define GAME_MODE_LEVELS 2 -#define GAME_MODE_SCORES 3 -#define GAME_MODE_EDITOR 4 -#define GAME_MODE_INFO 5 -#define GAME_MODE_SETUP 6 -#define GAME_MODE_PLAYING 7 -#define GAME_MODE_PSEUDO_DOOR 8 -#define GAME_MODE_PSEUDO_PREVIEW 9 -#define GAME_MODE_PSEUDO_CRUMBLED 10 +#define GAME_MODE_TITLE 1 +#define GAME_MODE_MAIN 2 +#define GAME_MODE_LEVELS 3 +#define GAME_MODE_SCORES 4 +#define GAME_MODE_EDITOR 5 +#define GAME_MODE_INFO 6 +#define GAME_MODE_SETUP 7 +#define GAME_MODE_PLAYING 8 +#define GAME_MODE_PSEUDO_DOOR 9 +#define GAME_MODE_PSEUDO_PREVIEW 10 +#define GAME_MODE_PSEUDO_CRUMBLED 11 /* there are no special config file suffixes for these modes */ -#define GAME_MODE_PSEUDO_TYPENAME 11 -#define GAME_MODE_QUIT 12 +#define GAME_MODE_PSEUDO_TYPENAME 12 +#define GAME_MODE_QUIT 13 /* special definitions currently only used for custom artwork configuration */ #define MUSIC_PREFIX_BACKGROUND 0 @@ -1792,6 +1816,14 @@ struct Content int e[3][3]; }; +struct EnvelopeInfo +{ + int xsize; + int ysize; + + char text[MAX_ENVELOPE_TEXT_LEN + 1]; +}; + struct LevelSetInfo { int music[MAX_LEVELS]; @@ -1806,6 +1838,13 @@ struct LevelFileInfo char *filename; }; +struct DateInfo +{ + int year; + int month; + int day; +}; + struct LevelInfo { struct LevelFileInfo file_info; @@ -1818,6 +1857,8 @@ struct LevelInfo int file_version; /* file format version the level is stored with */ int game_version; /* game release version the level was created with */ + struct DateInfo creation_date; + boolean encoding_16bit_field; /* level contains 16-bit elements */ boolean encoding_16bit_yamyam; /* yamyam contains 16-bit elements */ boolean encoding_16bit_amoeba; /* amoeba contains 16-bit elements */ @@ -1830,8 +1871,7 @@ struct LevelInfo char name[MAX_LEVEL_NAME_LEN + 1]; char author[MAX_LEVEL_AUTHOR_LEN + 1]; - char envelope_text[4][MAX_ENVELOPE_TEXT_LEN + 1]; - int envelope_xsize[4], envelope_ysize[4]; + struct EnvelopeInfo envelope[NUM_ENVELOPES]; int score[LEVEL_SCORE_ELEMENTS]; @@ -1893,9 +1933,9 @@ struct LevelInfo int can_move_into_acid_bits; /* bitfield to store property for elements */ int dont_collide_with_bits; /* bitfield to store property for elements */ - int initial_player_stepsize; /* initial player speed */ + int initial_player_stepsize[MAX_PLAYERS]; /* initial player speed */ + boolean initial_player_gravity[MAX_PLAYERS]; - boolean initial_gravity; boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */ boolean use_spring_bug; /* for compatibility with old levels */ boolean use_time_orb_bug; /* for compatibility with old levels */ @@ -2237,10 +2277,12 @@ struct HelpAnimInfo }; -extern Bitmap *bitmap_db_field, *bitmap_db_door; +extern Bitmap *bitmap_db_title; +extern Bitmap *bitmap_db_field; +extern Bitmap *bitmap_db_door; extern Pixmap tile_clipmask[]; -extern DrawBuffer *fieldbuffer; -extern DrawBuffer *drawto_field; +extern DrawBuffer *fieldbuffer; +extern DrawBuffer *drawto_field; extern int game_status; extern boolean level_editor_test_game;