X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=0550a996fbb53d6aa12b2ff75b3ea467b94dbde0;hb=538315c24bc8be21751b452eef2f02b13e159f55;hp=ec429bfbffdc15bd954b50b79b1aa09aec8ac4ee;hpb=84c20a81b20d9a4017f7691dda78fc3b6f2dedf5;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index ec429bfb..0550a996 100644 --- a/src/main.h +++ b/src/main.h @@ -126,6 +126,7 @@ typedef unsigned char byte; #define EP_BIT_SP_ELEMENT (1 << 28) #define EP_BIT_QUICK_GATE (1 << 29) #define EP_BIT_OVER_PLAYER (1 << 30) +#define EP_BIT_ACTIVE_BOMB (1 << 31) #define IS_AMOEBALIVE(e) (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE) #define IS_AMOEBOID(e) (Elementeigenschaften[e] & EP_BIT_AMOEBOID) @@ -158,6 +159,7 @@ typedef unsigned char byte; #define IS_SP_ELEMENT(e) (Elementeigenschaften[e] & EP_BIT_SP_ELEMENT) #define IS_QUICK_GATE(e) (Elementeigenschaften[e] & EP_BIT_QUICK_GATE) #define IS_OVER_PLAYER(e) (Elementeigenschaften[e] & EP_BIT_OVER_PLAYER) +#define IS_ACTIVE_BOMB(e) (Elementeigenschaften[e] & EP_BIT_ACTIVE_BOMB) #define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y])) @@ -199,7 +201,7 @@ typedef unsigned char byte; #define NUM_PIXMAPS 10 /* boundaries of arrays etc. */ -#define MAX_NAMELEN (10+1) +#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 */ @@ -208,6 +210,11 @@ typedef unsigned char byte; #define MAX_ELEMENTS 512 #define MAX_NUM_AMOEBA 100 +/* values for elements with content */ +#define MIN_ELEMENT_CONTENTS 1 +#define STD_ELEMENT_CONTENTS 4 +#define MAX_ELEMENT_CONTENTS 8 + #define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */ /* fundamental game speed values */ @@ -220,7 +227,7 @@ typedef unsigned char byte; struct HiScore { - char Name[MAX_NAMELEN]; + char Name[MAX_PLAYER_NAME_LEN + 1]; int Score; }; @@ -229,7 +236,8 @@ struct OptionInfo char *display_name; char *server_host; int server_port; - char *base_directory; + char *ro_base_directory; + char *rw_base_directory; char *level_directory; boolean serveronly; boolean network; @@ -305,12 +313,6 @@ struct PlayerInfo byte programmed_action; /* action forced by game itself (like moving through doors); overrides other actions */ - -#if 0 - byte programmed_speed; /* speed (for only one move) forced by game */ -#endif - - int joystick_fd; /* file descriptor of player's joystick */ int jx,jy, last_jx,last_jy; @@ -318,11 +320,12 @@ struct PlayerInfo int Frame; boolean Pushing; - boolean gone, LevelSolved, GameOver; + boolean LevelSolved, GameOver; boolean snapped; - int move_speed; unsigned long move_delay; + int move_delay_value; + int last_move_dir; unsigned long push_delay; @@ -347,30 +350,35 @@ struct LevelInfo int fieldx; int fieldy; int time; - int edelsteine; + int gems_needed; char name[MAX_LEVEL_NAME_LEN + 1]; char author[MAX_LEVEL_AUTHOR_LEN + 1]; int score[LEVEL_SCORE_ELEMENTS]; - int mampfer_inhalt[8][3][3]; - int tempo_amoebe; - int dauer_sieb; - int dauer_ablenk; - int amoebe_inhalt; + int yam_content[MAX_ELEMENT_CONTENTS][3][3]; + int num_yam_contents; + int amoeba_speed; + int amoeba_content; + int time_magic_wall; + int time_wheel; boolean double_speed; + boolean gravity; }; struct LevelDirInfo { - char *filename; - char *name; - char *author; - int levels; - int first_level; - int last_level; - int sort_priority; - boolean user_defined; - boolean readonly; - int color; + char *filename; /* level series sub-directory inside level directory */ + char *name; /* level series name, as displayed on main screen */ + char *name_short; /* optional short name for level selection screen */ + char *author; /* level series author name levels without author */ + char *imported_from; /* optional comment for imported level series */ + int levels; /* number of levels in level series */ + 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 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 */ }; struct TapeInfo @@ -394,6 +402,18 @@ struct TapeInfo } pos[MAX_TAPELEN]; }; +struct GameInfo +{ + int emulation; + int yam_content_nr; + boolean magic_wall_active; + int magic_wall_time_left; +}; + +struct GlobalInfo +{ +}; + extern Display *display; extern Visual *visual; extern int screen; @@ -461,12 +481,9 @@ extern int SBY_Upper, SBY_Lower; extern int ZX,ZY, ExitX,ExitY; extern int AllPlayersGone; extern int FrameCounter, TimeFrames, TimePlayed, TimeLeft; -extern int MampferMax, MampferNr; extern boolean SiebAktiv; extern int SiebCount; -extern int game_emulation; - extern boolean network_player_action_received; extern struct LevelDirInfo leveldir[]; @@ -480,6 +497,8 @@ extern struct OptionInfo options; extern struct SetupInfo setup; extern struct SetupFileList *setup_list; extern struct SetupFileList *level_setup_list; +extern struct GameInfo game; +extern struct GlobalInfo global; extern char *sound_name[]; extern int background_loop[]; @@ -531,6 +550,8 @@ extern char *element_info[]; #define FONT3_YSIZE 14 #define FONT4_XSIZE 16 #define FONT4_YSIZE 16 +#define FONT5_XSIZE 10 +#define FONT5_YSIZE 14 #define GFX_STARTX SX #define GFX_STARTY SY @@ -585,7 +606,7 @@ extern char *element_info[]; #define EL_KOKOSNUSS 25 #define EL_LIFE 26 #define EL_LIFE_ASYNC 27 -#define EL_DYNAMIT 28 +#define EL_DYNAMITE_ACTIVE 28 #define EL_BADEWANNE 29 #define EL_ABLENK_AUS 30 #define EL_ABLENK_EIN 31 @@ -601,7 +622,7 @@ extern char *element_info[]; #define EL_PFORTE2X 41 #define EL_PFORTE3X 42 #define EL_PFORTE4X 43 -#define EL_DYNAMIT_AUS 44 +#define EL_DYNAMITE_INACTIVE 44 #define EL_PACMAN 45 #define EL_UNSICHTBAR 46 #define EL_BIRNE_AUS 47 @@ -620,7 +641,9 @@ extern char *element_info[]; #define EL_MAMPFER2 60 #define EL_SIEB2_INAKTIV 61 #define EL_INVISIBLE_STEEL 62 -#define EL_DYNABOMB 63 + +#define EL_UNUSED_63 63 + #define EL_DYNABOMB_NR 64 #define EL_DYNABOMB_SZ 65 #define EL_DYNABOMB_XL 66 @@ -794,31 +817,83 @@ extern char *element_info[]; #define EL_UNUSED_254 254 #define EL_UNUSED_255 255 +#define EL_PEARL 256 +#define EL_CRYSTAL 257 +#define EL_WALL_PEARL 258 +#define EL_WALL_CRYSTAL 259 +#define EL_DOOR_WHITE 260 +#define EL_DOOR_WHITE_GRAY 261 +#define EL_KEY_WHITE 262 +#define EL_FORCE_FIELD 263 +#define EL_EXTRA_TIME 264 +#define EL_SWITCH_GATE_OPEN 265 +#define EL_SWITCH_GATE_CLOSED 266 +#define EL_SWITCH_GATE_SWITCH 267 +#define EL_TIME_GATE 268 +#define EL_TIME_GATE_WHEEL 269 +#define EL_BELT_GREEN_LEFT 270 +#define EL_BELT_GREEN_MIDDLE 271 +#define EL_BELT_GREEN_RIGHT 272 +#define EL_BELT_GREEN_SWITCH 273 +#define EL_BELT_RED_LEFT 274 +#define EL_BELT_RED_MIDDLE 275 +#define EL_BELT_RED_RIGHT 276 +#define EL_BELT_RED_SWITCH 277 +#define EL_BELT_BLUE_LEFT 278 +#define EL_BELT_BLUE_MIDDLE 279 +#define EL_BELT_BLUE_RIGHT 280 +#define EL_BELT_BLUE_SWITCH 281 +#define EL_LANDMINE 282 +#define EL_ENVELOPE 283 +#define EL_LIGHT_SWITCH 284 +#define EL_SIGN_EXCLAMATION 285 +#define EL_SIGN_RADIOACTIVITY 286 +#define EL_SIGN_STOP 287 +#define EL_SIGN_WHEELCHAIR 288 +#define EL_SIGN_PARKING 289 +#define EL_SIGN_ONEWAY 290 +#define EL_SIGN_HEART 291 +#define EL_SIGN_TRIANGLE 292 +#define EL_SIGN_ROUND 293 +#define EL_SIGN_EXIT 294 +#define EL_SIGN_YINYANG 295 +#define EL_SIGN_OTHER 296 +#define EL_MOLE_LEFT 297 +#define EL_MOLE_RIGHT 298 +#define EL_MOLE_UP 299 +#define EL_MOLE_DOWN 300 +#define EL_STEEL_SLANTED 301 +#define EL_SAND_INVISIBLE 302 + /* "real" (and therefore drawable) runtime elements */ -#define EL_SIEB_LEER 300 -#define EL_SIEB2_LEER 301 -#define EL_SIEB_VOLL 302 -#define EL_SIEB2_VOLL 303 -#define EL_SIEB_TOT 304 -#define EL_SIEB2_TOT 305 -#define EL_AUSGANG_ACT 306 -#define EL_SP_TERMINAL_ACTIVE 307 -#define EL_SP_BUG_ACTIVE 308 -#define EL_EM_KEY_1 309 -#define EL_EM_KEY_2 310 -#define EL_EM_KEY_3 311 -#define EL_EM_KEY_4 312 +#define EL_SIEB_LEER 1000 +#define EL_SIEB2_LEER 1001 +#define EL_SIEB_VOLL 1002 +#define EL_SIEB2_VOLL 1003 +#define EL_SIEB_TOT 1004 +#define EL_SIEB2_TOT 1005 +#define EL_AUSGANG_ACT 1006 +#define EL_SP_TERMINAL_ACTIVE 1007 +#define EL_SP_BUG_ACTIVE 1008 +#define EL_EM_KEY_1 1009 +#define EL_EM_KEY_2 1010 +#define EL_EM_KEY_3 1011 +#define EL_EM_KEY_4 1012 +#define EL_DYNABOMB_ACTIVE_1 1013 +#define EL_DYNABOMB_ACTIVE_2 1014 +#define EL_DYNABOMB_ACTIVE_3 1015 +#define EL_DYNABOMB_ACTIVE_4 1016 /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_BLOCKED 400 -#define EL_EXPLODING 401 -#define EL_CRACKINGNUT 402 -#define EL_BLURB_LEFT 403 -#define EL_BLURB_RIGHT 404 -#define EL_AMOEBING 405 -#define EL_MAUERND 406 -#define EL_BURNING 407 -#define EL_PLAYER_IS_LEAVING 408 +#define EL_BLOCKED 2000 +#define EL_EXPLODING 2001 +#define EL_CRACKINGNUT 2002 +#define EL_BLURB_LEFT 2003 +#define EL_BLURB_RIGHT 2004 +#define EL_AMOEBING 2005 +#define EL_MAUERND 2006 +#define EL_BURNING 2007 +#define EL_PLAYER_IS_LEAVING 2008 /* game graphics: ** 0 - 255: graphics from "RocksScreen" @@ -1188,6 +1263,55 @@ extern char *element_info[]; #define GFX_CHAR_COPY (GFX_CHAR_ASCII0 + 94) #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 +#define GFX_FORCE_FIELD GFX_CHAR_FRAGE +#define GFX_EXTRA_TIME GFX_CHAR_FRAGE +#define GFX_SWITCH_GATE_OPEN GFX_CHAR_FRAGE +#define GFX_SWITCH_GATE_CLOSED GFX_CHAR_FRAGE +#define GFX_SWITCH_GATE_SWITCH GFX_CHAR_FRAGE +#define GFX_TIME_GATE GFX_CHAR_FRAGE +#define GFX_TIME_GATE_WHEEL GFX_CHAR_FRAGE +#define GFX_BELT_GREEN_LEFT GFX_CHAR_FRAGE +#define GFX_BELT_GREEN_MIDDLE GFX_CHAR_FRAGE +#define GFX_BELT_GREEN_RIGHT GFX_CHAR_FRAGE +#define GFX_BELT_GREEN_SWITCH GFX_CHAR_FRAGE +#define GFX_BELT_RED_LEFT GFX_CHAR_FRAGE +#define GFX_BELT_RED_MIDDLE GFX_CHAR_FRAGE +#define GFX_BELT_RED_RIGHT GFX_CHAR_FRAGE +#define GFX_BELT_RED_SWITCH GFX_CHAR_FRAGE +#define GFX_BELT_BLUE_LEFT GFX_CHAR_FRAGE +#define GFX_BELT_BLUE_MIDDLE GFX_CHAR_FRAGE +#define GFX_BELT_BLUE_RIGHT GFX_CHAR_FRAGE +#define GFX_BELT_BLUE_SWITCH GFX_CHAR_FRAGE +#define GFX_LANDMINE GFX_CHAR_FRAGE +#define GFX_ENVELOPE GFX_CHAR_FRAGE +#define GFX_LIGHT_SWITCH GFX_CHAR_FRAGE +#define GFX_SIGN_EXCLAMATION GFX_CHAR_FRAGE +#define GFX_SIGN_RADIOACTIVITY GFX_CHAR_FRAGE +#define GFX_SIGN_STOP GFX_CHAR_FRAGE +#define GFX_SIGN_WHEELCHAIR GFX_CHAR_FRAGE +#define GFX_SIGN_PARKING GFX_CHAR_FRAGE +#define GFX_SIGN_ONEWAY GFX_CHAR_FRAGE +#define GFX_SIGN_HEART GFX_CHAR_FRAGE +#define GFX_SIGN_TRIANGLE GFX_CHAR_FRAGE +#define GFX_SIGN_ROUND GFX_CHAR_FRAGE +#define GFX_SIGN_EXIT GFX_CHAR_FRAGE +#define GFX_SIGN_YINYANG GFX_CHAR_FRAGE +#define GFX_SIGN_OTHER GFX_CHAR_FRAGE +#define GFX_MOLE_LEFT GFX_CHAR_FRAGE +#define GFX_MOLE_RIGHT GFX_CHAR_FRAGE +#define GFX_MOLE_UP GFX_CHAR_FRAGE +#define GFX_MOLE_DOWN GFX_CHAR_FRAGE +#define GFX_STEEL_SLANTED GFX_CHAR_FRAGE +#define GFX_SAND_INVISIBLE GFX_CHAR_FRAGE + /* the names of the sounds */ #define SND_ALCHEMY 0 #define SND_AMOEBE 1 @@ -1250,8 +1374,9 @@ extern char *element_info[]; #define SND_SP_BOOOM 58 #define SND_SP_EXIT 59 #define SND_EMPTY 60 +#define SND_GATE 61 -#define NUM_SOUNDS 61 +#define NUM_SOUNDS 62 /* default input keys */ #define KEY_UNDEFINDED XK_VoidSymbol @@ -1281,6 +1406,7 @@ extern char *element_info[]; #define FC_YELLOW 3 #define FC_SPECIAL1 4 #define FC_SPECIAL2 5 +#define FC_SPECIAL3 6 /* values for game_status */ #define EXITGAME 0 @@ -1295,11 +1421,16 @@ extern char *element_info[]; #define SETUPINPUT 9 #define CALIBRATION 10 -#ifndef GAME_DIR -#define GAME_DIR "." +#ifndef RO_GAME_DIR +#define RO_GAME_DIR "." +#endif + +#ifndef RW_GAME_DIR +#define RW_GAME_DIR "." #endif -#define BASE_PATH GAME_DIR +#define RO_BASE_PATH RO_GAME_DIR +#define RW_BASE_PATH RW_GAME_DIR #define GRAPHICS_DIRECTORY "graphics" #define SOUNDS_DIRECTORY "sounds" @@ -1307,7 +1438,7 @@ extern char *element_info[]; #define TAPES_DIRECTORY "tapes" #define SCORES_DIRECTORY "scores" -#define PROGRAM_VERSION_STRING "1.3.0" +#define PROGRAM_VERSION_STRING "1.3.5" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" #define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING