X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.h;h=4c1d57d52a1191f1a44d679211a4fbfa1c06f6fa;hp=880223b224b6153c36f1b9d59595ef9e3ca3f377;hb=8d46c5298f0fcce7bdb52f3835b2fbbdc403dfe0;hpb=eae2f3467caaaf64a9370c1acd8cecf11fd58328 diff --git a/src/main.h b/src/main.h index 880223b2..4c1d57d5 100644 --- a/src/main.h +++ b/src/main.h @@ -40,6 +40,10 @@ #include "msdos.h" #endif /* MSDOS */ +#ifdef USE_SDL_LIBRARY +#include "sdl.h" +#endif + #ifdef DEBUG #define DEBUG_TIMING 0 #endif @@ -54,6 +58,7 @@ typedef unsigned char byte; #define WIN_XSIZE 672 #define WIN_YSIZE 560 +#define WIN_SDL_DEPTH 16 /* !!! change this !!! */ #ifndef MSDOS #define WIN_XPOS 0 #define WIN_YPOS 0 @@ -132,6 +137,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 +173,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])) @@ -178,13 +185,15 @@ typedef unsigned char byte; #define IS_BLOCKED(x,y) (Feld[x][y] == EL_BLOCKED) #define EL_CHANGED(e) ((e) == EL_FELSBROCKEN ? EL_EDELSTEIN : \ + (e) == EL_BD_ROCK ? EL_EDELSTEIN_BD : \ (e) == EL_EDELSTEIN ? EL_DIAMANT : \ (e) == EL_EDELSTEIN_GELB ? EL_DIAMANT : \ (e) == EL_EDELSTEIN_ROT ? EL_DIAMANT : \ (e) == EL_EDELSTEIN_LILA ? EL_DIAMANT : \ EL_FELSBROCKEN) #define EL_CHANGED2(e) ((e) == EL_FELSBROCKEN ? EL_EDELSTEIN_BD : \ - EL_FELSBROCKEN) + (e) == EL_BD_ROCK ? EL_EDELSTEIN_BD : \ + EL_BD_ROCK) #define IS_DRAWABLE(e) ((e) < EL_BLOCKED) #define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED) #define TAPE_IS_EMPTY(x) ((x).length == 0) @@ -192,6 +201,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,23 +212,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_MEDIUMFONT 8 +#define PIX_MORE 6 +#define PIX_BIGFONT 7 +#define PIX_SMALLFONT 8 +#define PIX_MEDIUMFONT 9 /* Pixmaps without graphic file */ -#define PIX_DB_BACK 9 -#define PIX_DB_DOOR 10 -#define PIX_DB_FIELD 11 +#define PIX_DB_BACK 10 +#define PIX_DB_DOOR 11 +#define PIX_DB_FIELD 12 -#define NUM_PICTURES 9 -#define NUM_PIXMAPS 11 +#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 @@ -384,7 +396,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 */ @@ -394,11 +408,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 @@ -438,6 +460,7 @@ struct GameInfo struct GlobalInfo { + int dummy; }; extern Display *display; @@ -455,6 +478,14 @@ extern XpmAttributes xpm_att[]; extern Drawable drawto, drawto_field, backbuffer, fieldbuffer; extern Colormap cmap; +#ifdef USE_SDL_LIBRARY +extern SDL_Surface *sdl_window; +extern SDL_Surface *sdl_drawto, *sdl_drawto_field; +extern SDL_Surface *sdl_backbuffer, *sdl_fieldbuffer; +extern SDL_Surface *sdl_pix[]; +extern SDL_Surface *sdl_pix_masked[], *sdl_tile_masked[]; +#endif + extern int sound_pipe[2]; extern int sound_device; extern char *sound_device_name; @@ -494,7 +525,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; @@ -513,7 +544,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[]; @@ -608,6 +639,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 @@ -636,7 +675,7 @@ extern char *element_info[]; #define EL_MORAST_VOLL 17 #define EL_TROPFEN 18 #define EL_BOMBE 19 -#define EL_SIEB_INAKTIV 20 +#define EL_MAGIC_WALL_OFF 20 #define EL_SPEED_PILL 21 #define EL_SALZSAEURE 22 #define EL_AMOEBE_NASS 23 @@ -677,7 +716,7 @@ extern char *element_info[]; #define EL_ERZ_EDEL_BD 58 #define EL_ERZ_EDEL_GELB 59 #define EL_MAMPFER2 60 -#define EL_SIEB2_INAKTIV 61 +#define EL_MAGIC_WALL_BD_OFF 61 #define EL_INVISIBLE_STEEL 62 #define EL_UNUSED_63 63 @@ -731,14 +770,10 @@ extern char *element_info[]; #define EL_BADEWANNE3 102 #define EL_BADEWANNE4 103 #define EL_BADEWANNE5 104 - -#define EL_UNUSED_105 105 -#define EL_UNUSED_106 106 - +#define EL_BD_WALL 105 +#define EL_BD_ROCK 106 #define EL_AUSGANG_AUF 107 - #define EL_BLACK_ORB 108 - #define EL_AMOEBA2DIAM 109 #define EL_MOLE 110 #define EL_PINGUIN 111 @@ -950,16 +985,30 @@ 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 +#define EL_DX_SUPABOMB 357 /* "real" (and therefore drawable) runtime elements */ #define EL_FIRST_RUNTIME_EL 500 -#define EL_SIEB_LEER 500 -#define EL_SIEB2_LEER 501 -#define EL_SIEB_VOLL 502 -#define EL_SIEB2_VOLL 503 -#define EL_SIEB_TOT 504 -#define EL_SIEB2_TOT 505 +#define EL_MAGIC_WALL_EMPTY 500 +#define EL_MAGIC_WALL_BD_EMPTY 501 +#define EL_MAGIC_WALL_FULL 502 +#define EL_MAGIC_WALL_BD_FULL 503 +#define EL_MAGIC_WALL_DEAD 504 +#define EL_MAGIC_WALL_BD_DEAD 505 #define EL_AUSGANG_ACT 506 #define EL_SP_TERMINAL_ACTIVE 507 #define EL_SP_BUG_ACTIVE 508 @@ -975,6 +1024,10 @@ 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 +#define EL_SPRING_MOVING 523 +#define EL_SP_MURPHY_CLONE 524 /* "unreal" (and therefore not drawable) runtime elements */ #define EL_BLOCKED 600 @@ -994,6 +1047,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 @@ -1006,8 +1060,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) */ @@ -1104,10 +1160,10 @@ extern char *element_info[]; #define GFX_SOKOBAN_FELD_VOLL 123 #define GFX_GEBLUBBER 124 /* Zeile 8 (128) */ -#define GFX_SIEB_INAKTIV 128 -#define GFX_SIEB_LEER GFX_SIEB_INAKTIV -#define GFX_SIEB_VOLL GFX_SIEB_INAKTIV -#define GFX_SIEB_TOT GFX_SIEB_INAKTIV +#define GFX_MAGIC_WALL_OFF 128 +#define GFX_MAGIC_WALL_EMPTY GFX_MAGIC_WALL_OFF +#define GFX_MAGIC_WALL_FULL GFX_MAGIC_WALL_OFF +#define GFX_MAGIC_WALL_DEAD GFX_MAGIC_WALL_OFF #define GFX_ERZ_EDEL 132 #define GFX_ERZ_DIAM 133 #define GFX_ERZ_EDEL_ROT 134 @@ -1142,10 +1198,10 @@ extern char *element_info[]; #define GFX_MAUER_L1 GFX_MAUER_LEFT #define GFX_MAUER_L 170 #define GFX_MAUER_LEBT 171 -#define GFX_SIEB2_INAKTIV 172 -#define GFX_SIEB2_LEER GFX_SIEB2_INAKTIV -#define GFX_SIEB2_VOLL GFX_SIEB2_INAKTIV -#define GFX_SIEB2_TOT GFX_SIEB2_INAKTIV +#define GFX_MAGIC_WALL_BD_OFF 172 +#define GFX_MAGIC_WALL_BD_EMPTY GFX_MAGIC_WALL_BD_OFF +#define GFX_MAGIC_WALL_BD_FULL GFX_MAGIC_WALL_BD_OFF +#define GFX_MAGIC_WALL_BD_DEAD GFX_MAGIC_WALL_BD_OFF /* Zeile 11 (176) */ #define GFX_AUSGANG_ZU 176 #define GFX_AUSGANG_ACT 177 @@ -1336,6 +1392,8 @@ extern char *element_info[]; #define GFX2_SP_TERMINAL (GFX_START_ROCKSSP + 11 * SP_PER_LINE + 8) #define GFX2_SP_TERMINAL_ACTIVE (GFX_START_ROCKSSP + 12 * SP_PER_LINE + 8) +#define GFX_SP_MURPHY_CLONE (GFX_START_ROCKSSP + 0 * SP_PER_LINE + 3) + /* graphics from "RocksDC" */ #define GFX_BELT1_MIDDLE (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 0) #define GFX_BELT1_LEFT (GFX_START_ROCKSDC + 1 * DC_PER_LINE + 0) @@ -1405,6 +1463,41 @@ 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) +#define GFX_BD_WALL (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 4) +#define GFX_BD_ROCK (GFX_START_ROCKSMORE + 2 * MORE_PER_LINE + 4) +#define GFX_DX_SUPABOMB (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 7) + /* graphics from "RocksFont" */ #define GFX_CHAR_START (GFX_START_ROCKSFONT) #define GFX_CHAR_ASCII0 (GFX_CHAR_START - 32) @@ -1438,10 +1531,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 @@ -1586,7 +1675,7 @@ extern char *element_info[]; #define TAPES_DIRECTORY "tapes" #define SCORES_DIRECTORY "scores" -#define PROGRAM_VERSION_STRING "1.3.5" +#define PROGRAM_VERSION_STRING "1.4.0 SDL" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" #define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING