X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=66c7d05f4505cd21848b5dcf472477532a69dd4f;hb=f806f2ad0dfa82c3abd3d027250a549ca22f4374;hp=b8ba717bbdeed26f557f54b4f9a4ff92a2a3b2f9;hpb=c2641d60f5d3461bbd449dffe85251483f12e6b5;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index b8ba717b..66c7d05f 100644 --- a/src/main.h +++ b/src/main.h @@ -132,6 +132,7 @@ typedef unsigned char byte; /* values for 'Elementeigenschaften2' */ #define EP_BIT_BELT (1 << 0) #define EP_BIT_BELT_SWITCH (1 << 1) +#define EP_BIT_TUBE (1 << 2) #define IS_AMOEBALIVE(e) (Elementeigenschaften1[e] & EP_BIT_AMOEBALIVE) #define IS_AMOEBOID(e) (Elementeigenschaften1[e] & EP_BIT_AMOEBOID) @@ -167,6 +168,7 @@ typedef unsigned char byte; #define IS_ACTIVE_BOMB(e) (Elementeigenschaften1[e] & EP_BIT_ACTIVE_BOMB) #define IS_BELT(e) (Elementeigenschaften2[e] & EP_BIT_BELT) #define IS_BELT_SWITCH(e) (Elementeigenschaften2[e] & EP_BIT_BELT_SWITCH) +#define IS_TUBE(e) (Elementeigenschaften2[e] & EP_BIT_TUBE) #define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y])) @@ -192,6 +194,9 @@ typedef unsigned char byte; #define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_SPIELER1]) #define SHIELD_ON(p) ((p)->shield_passive_time_left > 0) +#define PROTECTED_FIELD(x,y) (IS_TUBE(Feld[x][y])) +#define PLAYER_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) || \ + PROTECTED_FIELD(x, y)) /* Pixmaps with graphic file */ #define PIX_BACK 0 @@ -200,22 +205,23 @@ typedef unsigned char byte; #define PIX_TOONS 3 #define PIX_SP 4 #define PIX_DC 5 -#define PIX_BIGFONT 6 -#define PIX_SMALLFONT 7 +#define PIX_MORE 6 +#define PIX_BIGFONT 7 +#define PIX_SMALLFONT 8 +#define PIX_MEDIUMFONT 9 /* Pixmaps without graphic file */ -#define PIX_DB_BACK 8 -#define PIX_DB_DOOR 9 -#define PIX_DB_FIELD 10 +#define PIX_DB_BACK 10 +#define PIX_DB_DOOR 11 +#define PIX_DB_FIELD 12 -#define NUM_PICTURES 8 -#define NUM_PIXMAPS 10 +#define NUM_PICTURES 10 +#define NUM_PIXMAPS 13 /* boundaries of arrays etc. */ #define MAX_PLAYER_NAME_LEN 10 #define MAX_LEVEL_NAME_LEN 32 #define MAX_LEVEL_AUTHOR_LEN 32 #define MAX_TAPELEN (1000 * 50) /* max. time * framerate */ -#define MAX_LEVDIR_ENTRIES 250 /* max. level directories */ #define MAX_SCORE_ENTRIES 100 #define MAX_ELEMENTS 700 /* 500 static + 200 runtime */ #define MAX_NUM_AMOEBA 100 @@ -383,7 +389,9 @@ struct LevelInfo struct LevelDirInfo { - char *filename; /* level series sub-directory inside level directory */ + char *filename; /* level series single directory name */ + char *fullpath; /* complete path relative to level directory */ + char *basepath; /* absolute base path of level directory */ char *name; /* level series name, as displayed on main screen */ char *name_short; /* optional short name for level selection screen */ char *name_sorting; /* optional sorting name for correct level sorting */ @@ -393,11 +401,19 @@ struct LevelDirInfo int first_level; /* first level number (to allow start with 0 or 1) */ int last_level; /* last level number (automatically calculated) */ int sort_priority; /* sort levels by 'sort_priority' and then by name */ + boolean level_group; /* directory contains more level series directories */ + boolean parent_link; /* entry links back to parent directory */ boolean user_defined; /* user defined levels are stored in home directory */ boolean readonly; /* readonly levels can not be changed with editor */ int color; /* color to use on selection screen for this level */ char *class_desc; /* description of level series class */ int handicap_level; /* number of the lowest unsolved level */ + int cl_first; /* internal control field for "choose level" screen */ + int cl_cursor; /* internal control field for "choose level" screen */ + + struct LevelDirInfo *node_parent; /* parent level directory info */ + struct LevelDirInfo *node_group; /* level group sub-directory info */ + struct LevelDirInfo *next; /* next level series structure node */ }; struct TapeInfo @@ -493,7 +509,7 @@ extern short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; extern unsigned long Elementeigenschaften1[MAX_ELEMENTS]; extern unsigned long Elementeigenschaften2[MAX_ELEMENTS]; -extern int level_nr, leveldir_nr, num_leveldirs; +extern int level_nr; extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y; extern int FX,FY, ScrollStepSize; @@ -512,7 +528,7 @@ extern int SiebCount; extern boolean network_player_action_received; -extern struct LevelDirInfo leveldir[]; +extern struct LevelDirInfo *leveldir_first, *leveldir_current; extern struct LevelInfo level; extern struct PlayerInfo stored_player[], *local_player; extern struct HiScore highscore[]; @@ -576,6 +592,8 @@ extern char *element_info[]; #define FONT4_YSIZE 16 #define FONT5_XSIZE 10 #define FONT5_YSIZE 14 +#define FONT6_XSIZE 16 +#define FONT6_YSIZE 32 #define GFX_STARTX SX #define GFX_STARTY SY @@ -605,6 +623,14 @@ extern char *element_info[]; #define MINI_DC_PER_LINE 16 #define MICRO_DC_PER_LINE 16 +#define MINI_MORE_STARTX 256 +#define MINI_MORE_STARTY 256 +#define MICRO_MORE_STARTX 384 +#define MICRO_MORE_STARTY 384 +#define MORE_PER_LINE 16 +#define MINI_MORE_PER_LINE 16 +#define MICRO_MORE_PER_LINE 16 + #define FONT_CHARS_PER_LINE 16 #define FONT_LINES_PER_FONT 4 @@ -947,6 +973,19 @@ extern char *element_info[]; #define EL_EMC_WALL_7 342 #define EL_EMC_WALL_8 343 +#define EL_TUBE_CROSS 344 +#define EL_TUBE_VERTICAL 345 +#define EL_TUBE_HORIZONTAL 346 +#define EL_TUBE_VERT_LEFT 347 +#define EL_TUBE_VERT_RIGHT 348 +#define EL_TUBE_HORIZ_UP 349 +#define EL_TUBE_HORIZ_DOWN 350 +#define EL_TUBE_LEFT_UP 351 +#define EL_TUBE_LEFT_DOWN 352 +#define EL_TUBE_RIGHT_UP 353 +#define EL_TUBE_RIGHT_DOWN 354 +#define EL_SPRING 355 +#define EL_TRAP_INACTIVE 356 /* "real" (and therefore drawable) runtime elements */ #define EL_FIRST_RUNTIME_EL 500 @@ -972,6 +1011,8 @@ extern char *element_info[]; #define EL_SWITCHGATE_CLOSING 518 #define EL_TIMEGATE_OPENING 519 #define EL_TIMEGATE_CLOSING 520 +#define EL_PEARL_BREAKING 521 +#define EL_TRAP_ACTIVE 522 /* "unreal" (and therefore not drawable) runtime elements */ #define EL_BLOCKED 600 @@ -991,6 +1032,7 @@ extern char *element_info[]; ** 512 - 767: graphics from "RocksHeroes" ** 768 - 1023: graphics from "RocksSP" ** 1024 - 1279: graphics from "RocksDC" +** 1280 - 1535: graphics from "RocksMore" */ #define GFX_START_ROCKSSCREEN 0 @@ -1003,8 +1045,10 @@ extern char *element_info[]; #define GFX_END_ROCKSSP 1023 #define GFX_START_ROCKSDC 1024 #define GFX_END_ROCKSDC 1279 +#define GFX_START_ROCKSMORE 1280 +#define GFX_END_ROCKSMORE 1535 -#define NUM_TILES 1280 +#define NUM_TILES 1536 /* graphics from "RocksScreen" */ /* Zeile 0 (0) */ @@ -1402,6 +1446,38 @@ extern char *element_info[]; #define GFX_EMC_WALL_7 (GFX_START_ROCKSDC + 2 * DC_PER_LINE + 15) #define GFX_EMC_WALL_8 (GFX_START_ROCKSDC + 1 * DC_PER_LINE + 14) +/* graphics from "RocksMore" */ +#define GFX_ARROW_BLUE_LEFT (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 0) +#define GFX_ARROW_BLUE_RIGHT (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 1) +#define GFX_ARROW_BLUE_UP (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 2) +#define GFX_ARROW_BLUE_DOWN (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 3) +#define GFX_ARROW_RED_LEFT (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 0) +#define GFX_ARROW_RED_RIGHT (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 1) +#define GFX_ARROW_RED_UP (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 2) +#define GFX_ARROW_RED_DOWN (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 3) +#define GFX_SCROLLBAR_BLUE (GFX_START_ROCKSMORE + 2 * MORE_PER_LINE + 0) +#define GFX_SCROLLBAR_RED (GFX_START_ROCKSMORE + 2 * MORE_PER_LINE + 1) +#define GFX_PEARL (GFX_START_ROCKSMORE + 3 * MORE_PER_LINE + 0) +#define GFX_CRYSTAL (GFX_START_ROCKSMORE + 3 * MORE_PER_LINE + 1) +#define GFX_WALL_PEARL (GFX_START_ROCKSMORE + 3 * MORE_PER_LINE + 2) +#define GFX_WALL_CRYSTAL (GFX_START_ROCKSMORE + 3 * MORE_PER_LINE + 3) +#define GFX_PEARL_BREAKING (GFX_START_ROCKSMORE + 4 * MORE_PER_LINE + 0) +#define GFX_SPRING (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 0) +#define GFX_TUBE_RIGHT_DOWN (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 1) +#define GFX_TUBE_HORIZ_DOWN (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 2) +#define GFX_TUBE_LEFT_DOWN (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 3) +#define GFX_TUBE_HORIZONTAL (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 0) +#define GFX_TUBE_VERT_RIGHT (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 1) +#define GFX_TUBE_CROSS (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 2) +#define GFX_TUBE_VERT_LEFT (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 3) +#define GFX_TUBE_VERTICAL (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 0) +#define GFX_TUBE_RIGHT_UP (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 1) +#define GFX_TUBE_HORIZ_UP (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 2) +#define GFX_TUBE_LEFT_UP (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 3) + +#define GFX_TRAP_INACTIVE (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 4) +#define GFX_TRAP_ACTIVE (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 7) + /* graphics from "RocksFont" */ #define GFX_CHAR_START (GFX_START_ROCKSFONT) #define GFX_CHAR_ASCII0 (GFX_CHAR_START - 32) @@ -1435,10 +1511,6 @@ extern char *element_info[]; #define GFX_CHAR_END (GFX_CHAR_START + 79) /* new elements which still have no graphic */ -#define GFX_PEARL GFX_CHAR_FRAGE -#define GFX_CRYSTAL GFX_CHAR_FRAGE -#define GFX_WALL_PEARL GFX_CHAR_FRAGE -#define GFX_WALL_CRYSTAL GFX_CHAR_FRAGE #define GFX_DOOR_WHITE GFX_CHAR_FRAGE #define GFX_DOOR_WHITE_GRAY GFX_CHAR_FRAGE #define GFX_KEY_WHITE GFX_CHAR_FRAGE @@ -1543,6 +1615,7 @@ extern char *element_info[]; /* font types */ #define FS_SMALL 0 #define FS_BIG 1 +#define FS_MEDIUM 2 /* font colors */ #define FC_RED 0 #define FC_BLUE 1