X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=4769e69bb958e48854b6090cb4c5003611d969cb;hb=1101077a226b09854650662759bf12caf7c84f8d;hp=568e5c0eba1f1bc97bf6c99b1b59a9e3a6d3b68f;hpb=f7b1cff56121f72c25e1da08f53958ddab27ce75;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 568e5c0e..4769e69b 100644 --- a/src/main.h +++ b/src/main.h @@ -1,14 +1,14 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2001 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* main.h * +* main.h * ***********************************************************/ #ifndef MAIN_H @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -24,30 +25,19 @@ #include #include -#ifdef DEBUG -#define DEBUG_TIMING 0 -#endif - -typedef unsigned char boolean; -typedef unsigned char byte; - -#include "system.h" - -#ifndef FALSE -#define FALSE 0 -#define TRUE (!FALSE) -#endif +#include "libgame/libgame.h" #define WIN_XSIZE 672 #define WIN_YSIZE 560 -#define WIN_SDL_DEPTH 16 /* !!! change this !!! */ -#ifndef MSDOS + +#if !defined(PLATFORM_MSDOS) #define WIN_XPOS 0 #define WIN_YPOS 0 -#else /* MSDOS */ +#else #define WIN_XPOS ((XRES - WIN_XSIZE) / 2) #define WIN_YPOS ((YRES - WIN_YSIZE) / 2) -#endif /* MSDOS */ +#endif + #define SCR_FIELDX 17 #define SCR_FIELDY 17 #define MAX_BUF_XSIZE (SCR_FIELDX + 2) @@ -59,21 +49,6 @@ typedef unsigned char byte; #define MAX_LEV_FIELDX 128 #define MAX_LEV_FIELDY 128 -#define MAX_PLAYERS 4 - -#ifndef MIN -#define MIN(a,b) ((a) < (b) ? (a) : (b)) -#endif -#ifndef MAX -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif -#ifndef ABS -#define ABS(a) ((a) < 0 ? -(a) : (a)) -#endif -#ifndef SIGN -#define SIGN(a) ((a) < 0 ? -1 : ((a)>0 ? 1 : 0)) -#endif - #define SCREENX(a) ((a) - scroll_x) #define SCREENY(a) ((a) - scroll_y) #define LEVELX(a) ((a) + scroll_x) @@ -120,6 +95,7 @@ typedef unsigned char byte; #define EP_BIT_BELT (1 << 0) #define EP_BIT_BELT_SWITCH (1 << 1) #define EP_BIT_TUBE (1 << 2) +#define EP_BIT_EM_SLIPPERY_WALL (1 << 3) #define IS_AMOEBALIVE(e) (Elementeigenschaften1[e] & EP_BIT_AMOEBALIVE) #define IS_AMOEBOID(e) (Elementeigenschaften1[e] & EP_BIT_AMOEBOID) @@ -156,6 +132,7 @@ typedef unsigned char byte; #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_EM_SLIPPERY_WALL(e) (Elementeigenschaften2[e] & EP_BIT_EM_SLIPPERY_WALL) #define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y])) @@ -179,7 +156,7 @@ typedef unsigned char byte; #define IS_DRAWABLE(e) ((e) < EL_BLOCKED) #define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED) #define TAPE_IS_EMPTY(x) ((x).length == 0) -#define TAPE_IS_STOPPED(x) (!(x).recording && !(x).playing &&!(x).pausing) +#define TAPE_IS_STOPPED(x) (!(x).recording && !(x).playing) #define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_SPIELER1]) #define SHIELD_ON(p) ((p)->shield_passive_time_left > 0) @@ -199,15 +176,13 @@ typedef unsigned char byte; #define PIX_SMALLFONT 8 #define PIX_MEDIUMFONT 9 /* Bitmaps without graphic file */ -#define PIX_DB_BACK 10 -#define PIX_DB_DOOR 11 -#define PIX_DB_FIELD 12 +#define PIX_DB_DOOR 10 +#define PIX_DB_FIELD 11 #define NUM_PICTURES 10 -#define NUM_BITMAPS 13 +#define NUM_BITMAPS 12 /* 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 */ @@ -226,7 +201,6 @@ typedef unsigned char byte; #define GAME_FRAME_DELAY 20 /* frame delay in milliseconds */ #define FFWD_FRAME_DELAY 10 /* 200% speed for fast forward */ #define FRAMES_PER_SECOND (1000 / GAME_FRAME_DELAY) -#define GADGET_FRAME_DELAY 150 /* delay between gadget actions */ #define MICROLEVEL_SCROLL_DELAY 50 /* delay for scrolling micro level */ #define MICROLEVEL_LABEL_DELAY 250 /* delay for micro level label */ @@ -236,76 +210,6 @@ struct HiScore int Score; }; -struct OptionInfo -{ - char *display_name; - char *server_host; - int server_port; - char *ro_base_directory; - char *rw_base_directory; - char *level_directory; - boolean serveronly; - boolean network; - boolean verbose; -}; - -struct SetupJoystickInfo -{ - char *device_name; - int xleft, xmiddle, xright; - int yupper, ymiddle, ylower; - int snap; - int bomb; -}; - -struct SetupKeyboardInfo -{ - Key left; - Key right; - Key up; - Key down; - Key snap; - Key bomb; -}; - -struct SetupInputInfo -{ - boolean use_joystick; - struct SetupJoystickInfo joy; - struct SetupKeyboardInfo key; -}; - -struct SetupInfo -{ - char *player_name; - - boolean sound; - boolean sound_loops; - boolean sound_music; - boolean sound_simple; - boolean toons; - boolean double_buffering; - boolean direct_draw; /* !double_buffering (redundant!) */ - boolean scroll_delay; - boolean soft_scrolling; - boolean fading; - boolean autorecord; - boolean quick_doors; - boolean team_mode; - boolean handicap; - boolean time_limit; - boolean fullscreen; - - struct SetupInputInfo input[MAX_PLAYERS]; -}; - -struct SetupFileList -{ - char *token; - char *value; - struct SetupFileList *next; -}; - struct PlayerInfo { boolean present; /* player present in level playfield */ @@ -315,14 +219,12 @@ struct PlayerInfo int index_nr, client_nr, element_nr; byte action; /* action from local input device */ - byte effective_action; /* action aknowledged from network server + byte effective_action; /* action acknowledged from network server or summarized over all configured input devices when in single player mode */ byte programmed_action; /* action forced by game itself (like moving through doors); overrides other actions */ - int joystick_fd; /* file descriptor of player's joystick */ - int jx,jy, last_jx,last_jy; int MovDir, MovPos, GfxPos; int Frame; @@ -332,11 +234,12 @@ struct PlayerInfo boolean LevelSolved, GameOver; boolean snapped; + int last_move_dir; + int is_moving; + unsigned long move_delay; int move_delay_value; - int last_move_dir; - unsigned long push_delay; unsigned long push_delay_value; @@ -358,6 +261,12 @@ struct PlayerInfo struct LevelInfo { + int file_version; /* file format version the level is stored with */ + int game_version; /* game engine version the level was created with */ + 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 */ + int fieldx; int fieldy; int time; @@ -375,39 +284,14 @@ struct LevelInfo int time_timegate; boolean double_speed; boolean gravity; -}; - -struct LevelDirInfo -{ - 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 */ - 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 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 */ + boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */ }; struct TapeInfo { + int file_version; /* file format version the tape is stored with */ + int game_version; /* game engine version the tape was created with */ + int version; int level_nr; unsigned long random_seed; unsigned long date; @@ -418,8 +302,13 @@ struct TapeInfo boolean pause_before_death; boolean recording, playing, pausing; boolean fast_forward; + boolean index_search; + boolean quick_resume; + boolean single_step; boolean changed; boolean player_participates[MAX_PLAYERS]; + int num_participating_players; + struct { byte action[MAX_PLAYERS]; @@ -429,6 +318,7 @@ struct TapeInfo struct GameInfo { + int version; int emulation; int yam_content_nr; boolean magic_wall_active; @@ -439,53 +329,30 @@ struct GameInfo int belt_dir_nr[4]; int switchgate_pos; int balloon_dir; + boolean explosions_delayed; }; struct GlobalInfo { - int dummy; + float frames_per_second; + boolean fps_slowdown; + int fps_slowdown_factor; }; -extern Display *display; -extern Visual *visual; -extern int screen; -extern DrawWindow window; -extern GC gc, clip_gc[], tile_clip_gc; -extern Bitmap pix[]; -extern Bitmap pix_masked[], tile_masked[]; -extern Pixmap clipmask[], tile_clipmask[]; - -#ifdef USE_XPM_LIBRARY -extern XpmAttributes xpm_att[]; -#endif - -extern DrawBuffer drawto, drawto_field, backbuffer, fieldbuffer; -extern Colormap cmap; - -extern int sound_pipe[2]; -extern int sound_device; -extern char *sound_device_name; -extern int joystick_device; -extern char *joystick_device_name[]; - -extern char *program_name; +extern GC tile_clip_gc; +extern Bitmap *pix[]; +extern Pixmap tile_clipmask[]; +extern DrawBuffer *fieldbuffer; +extern DrawBuffer *drawto_field; extern int game_status; extern boolean level_editor_test_game; extern boolean network_playing; -extern int button_status; -extern boolean motion_status; + extern int key_joystick_mapping; -extern int global_joystick_status, joystick_status; -extern int sound_status; -extern boolean sound_loops_allowed; -extern boolean fullscreen_available; -extern boolean fullscreen_enabled; extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; extern int redraw_x1, redraw_y1; -extern int redraw_mask; -extern int redraw_tiles; extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -500,10 +367,10 @@ extern boolean Stop[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], AmoebaCnt2[MAX_NUM_AMOEBA]; +extern short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern unsigned long Elementeigenschaften1[MAX_ELEMENTS]; extern unsigned long Elementeigenschaften2[MAX_ELEMENTS]; -extern int level_nr; extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y; extern int FX,FY, ScrollStepSize; @@ -516,29 +383,23 @@ extern int SBX_Left, SBX_Right; extern int SBY_Upper, SBY_Lower; extern int ZX,ZY, ExitX,ExitY; extern int AllPlayersGone; -extern int FrameCounter, TimeFrames, TimePlayed, TimeLeft; + +extern int TimeFrames, TimePlayed, TimeLeft; extern boolean SiebAktiv; extern int SiebCount; extern boolean network_player_action_received; -extern struct LevelDirInfo *leveldir_first, *leveldir_current; extern struct LevelInfo level; extern struct PlayerInfo stored_player[], *local_player; extern struct HiScore highscore[]; extern struct TapeInfo tape; -extern struct SoundInfo Sound[]; -extern struct JoystickInfo joystick[]; -extern struct OptionInfo options; -extern struct SetupInfo setup; extern struct GameInfo game; extern struct GlobalInfo global; extern char *sound_name[]; -extern int background_loop[]; -extern int num_bg_loops; extern char *element_info[]; - +extern int num_element_info; /* often used screen positions */ #define SX 8 @@ -576,18 +437,6 @@ extern char *element_info[]; #define MICROLEV_XPOS (SX + (SXSIZE - MICROLEV_XSIZE) / 2) #define MICROLEV_YPOS (SX + 12 * TILEY - MICRO_TILEY) #define MICROLABEL_YPOS (MICROLEV_YPOS + MICROLEV_YSIZE + 7) -#define FONT1_XSIZE 32 -#define FONT1_YSIZE 32 -#define FONT2_XSIZE 14 -#define FONT2_YSIZE 14 -#define FONT3_XSIZE 11 -#define FONT3_YSIZE 14 -#define FONT4_XSIZE 16 -#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 @@ -625,9 +474,6 @@ extern char *element_info[]; #define MINI_MORE_PER_LINE 16 #define MICRO_MORE_PER_LINE 16 -#define FONT_CHARS_PER_LINE 16 -#define FONT_LINES_PER_FONT 4 - /* game elements: ** 0 - 499: real elements, stored in level file ** 500 - 699: flag elements, only used at runtime @@ -1006,6 +852,10 @@ extern char *element_info[]; #define EL_TRAP_ACTIVE 522 #define EL_SPRING_MOVING 523 #define EL_SP_MURPHY_CLONE 524 +#define EL_QUICKSAND_EMPTYING 525 +#define EL_MAGIC_WALL_EMPTYING 526 +#define EL_MAGIC_WALL_BD_EMPTYING 527 +#define EL_AMOEBA_DRIPPING 528 /* "unreal" (and therefore not drawable) runtime elements */ #define EL_BLOCKED 600 @@ -1018,6 +868,9 @@ extern char *element_info[]; #define EL_MAUERND 607 #define EL_BURNING 608 #define EL_PLAYER_IS_LEAVING 609 +#define EL_QUICKSAND_FILLING 610 +#define EL_MAGIC_WALL_FILLING 611 +#define EL_MAGIC_WALL_BD_FILLING 612 /* game graphics: ** 0 - 255: graphics from "RocksScreen" @@ -1527,100 +1380,63 @@ extern char *element_info[]; /* the names of the sounds */ -#define SND_ALCHEMY 0 -#define SND_AMOEBE 1 -#define SND_ANTIGRAV 2 -#define SND_AUTSCH 3 -#define SND_BLURB 4 -#define SND_BONG 5 -#define SND_BUING 6 -#define SND_CHASE 7 -#define SND_CZARDASZ 8 -#define SND_DENG 9 -#define SND_FUEL 10 -#define SND_GONG 11 -#define SND_HALLOFFAME 12 -#define SND_HOLZ 13 -#define SND_HUI 14 -#define SND_KABUMM 15 -#define SND_KINK 16 -#define SND_KLAPPER 17 -#define SND_KLING 18 -#define SND_KLOPF 19 -#define SND_KLUMPF 20 -#define SND_KNACK 21 -#define SND_KNURK 22 -#define SND_KRACH 23 -#define SND_LACHEN 24 -#define SND_LASER 25 -#define SND_MIEP 26 -#define SND_NETWORK 27 -#define SND_NJAM 28 -#define SND_OEFFNEN 29 -#define SND_PLING 30 -#define SND_PONG 31 -#define SND_PUSCH 32 -#define SND_QUIEK 33 -#define SND_QUIRK 34 -#define SND_RHYTHMLOOP 35 -#define SND_ROAAAR 36 -#define SND_ROEHR 37 -#define SND_RUMMS 38 -#define SND_SCHLOPP 39 -#define SND_SCHLURF 40 -#define SND_SCHRFF 41 -#define SND_SCHWIRR 42 -#define SND_SIRR 43 -#define SND_SLURP 44 -#define SND_SPROING 45 -#define SND_TWILIGHT 46 -#define SND_TYGER 47 -#define SND_VOYAGER 48 -#define SND_WARNTON 49 -#define SND_WHOOSH 50 -#define SND_ZISCH 51 -#define SND_SP_BASE 52 -#define SND_SP_INFOTRON 53 -#define SND_SP_ZONKDOWN 54 -#define SND_SP_ZONKPUSH 55 -#define SND_SP_BUG 56 -#define SND_SP_BOOM 57 -#define SND_SP_BOOOM 58 -#define SND_SP_EXIT 59 -#define SND_EMPTY 60 -#define SND_GATE 61 - -#define NUM_SOUNDS 62 - -/* default input keys */ -#define DEFAULT_KEY_LEFT KEY_Left -#define DEFAULT_KEY_RIGHT KEY_Right -#define DEFAULT_KEY_UP KEY_Up -#define DEFAULT_KEY_DOWN KEY_Down -#define DEFAULT_KEY_SNAP KEY_Shift_L -#define DEFAULT_KEY_BOMB KEY_Shift_R -#define DEFAULT_KEY_OKAY KEY_Return -#define DEFAULT_KEY_CANCEL KEY_Escape - -/* directions for moving */ -#define MV_NO_MOVING 0 -#define MV_LEFT (1 << 0) -#define MV_RIGHT (1 << 1) -#define MV_UP (1 << 2) -#define MV_DOWN (1 << 3) - -/* font types */ -#define FS_SMALL 0 -#define FS_BIG 1 -#define FS_MEDIUM 2 -/* font colors */ -#define FC_RED 0 -#define FC_BLUE 1 -#define FC_GREEN 2 -#define FC_YELLOW 3 -#define FC_SPECIAL1 4 -#define FC_SPECIAL2 5 -#define FC_SPECIAL3 6 +#define SND_AMOEBE 0 +#define SND_ANTIGRAV 1 +#define SND_AUTSCH 2 +#define SND_BLURB 3 +#define SND_BONG 4 +#define SND_BUING 5 +#define SND_DENG 6 +#define SND_FUEL 7 +#define SND_GONG 8 +#define SND_HALLOFFAME 9 +#define SND_HOLZ 10 +#define SND_HUI 11 +#define SND_KABUMM 12 +#define SND_KINK 13 +#define SND_KLAPPER 14 +#define SND_KLING 15 +#define SND_KLOPF 16 +#define SND_KLUMPF 17 +#define SND_KNACK 18 +#define SND_KNURK 19 +#define SND_KRACH 20 +#define SND_LACHEN 21 +#define SND_LASER 22 +#define SND_MIEP 23 +#define SND_NJAM 24 +#define SND_OEFFNEN 25 +#define SND_PLING 26 +#define SND_PONG 27 +#define SND_PUSCH 28 +#define SND_QUIEK 29 +#define SND_QUIRK 30 +#define SND_RHYTHMLOOP 31 +#define SND_ROAAAR 32 +#define SND_ROEHR 33 +#define SND_RUMMS 34 +#define SND_SCHLOPP 35 +#define SND_SCHLURF 36 +#define SND_SCHRFF 37 +#define SND_SCHWIRR 38 +#define SND_SIRR 39 +#define SND_SLURP 40 +#define SND_SPROING 41 +#define SND_WARNTON 42 +#define SND_WHOOSH 43 +#define SND_ZISCH 44 +#define SND_SP_BASE 45 +#define SND_SP_INFOTRON 46 +#define SND_SP_ZONKDOWN 47 +#define SND_SP_ZONKPUSH 48 +#define SND_SP_BUG 49 +#define SND_SP_BOOM 50 +#define SND_SP_BOOOM 51 +#define SND_SP_EXIT 52 +#define SND_EMPTY 53 +#define SND_GATE 54 + +#define NUM_SOUNDS 55 /* values for game_status */ #define EXITGAME 0 @@ -1632,95 +1448,53 @@ extern char *element_info[]; #define TYPENAME 6 #define HALLOFFAME 7 #define SETUP 8 -#define SETUPINPUT 9 -#define CALIBRATION 10 -#ifndef RO_GAME_DIR -#define RO_GAME_DIR "." -#endif - -#ifndef RW_GAME_DIR -#define RW_GAME_DIR "." -#endif - -#define RO_BASE_PATH RO_GAME_DIR -#define RW_BASE_PATH RW_GAME_DIR +#define PROGRAM_VERSION_MAJOR 2 +#define PROGRAM_VERSION_MINOR 0 +#define PROGRAM_VERSION_PATCH 2 +#define PROGRAM_VERSION_STRING "2.0.2" -#define GRAPHICS_DIRECTORY "graphics" -#define SOUNDS_DIRECTORY "sounds" -#define LEVELS_DIRECTORY "levels" -#define TAPES_DIRECTORY "tapes" -#define SCORES_DIRECTORY "scores" - -#define PROGRAM_VERSION_STRING "1.5.0" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_RIGHTS_STRING "Copyright ^1995-2000 by" +#define PROGRAM_RIGHTS_STRING "Copyright ^1995-2002 by" #define PROGRAM_DOS_PORT_STRING "DOS port done by Guido Schulz" -#define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " PLATFORM_STRING +#define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " TARGET_STRING #define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING #define WINDOW_SUBTITLE_STRING PROGRAM_RIGHTS_STRING " " PROGRAM_AUTHOR_STRING - -/* default name for empty highscore entry */ -#define EMPTY_PLAYER_NAME "no name" - -/* default name for unknown player names */ -#define ANONYMOUS_NAME "anonymous" - -/* default name for new levels */ -#define NAMELESS_LEVEL_NAME "nameless level" - -/* values for button_status */ -#define MB_NOT_PRESSED FALSE -#define MB_RELEASED FALSE -#define MB_PRESSED TRUE -#define MB_MENU_CHOICE FALSE -#define MB_MENU_MARK TRUE -#define MB_MENU_INITIALIZE (-1) -#define MB_LEFTBUTTON 1 -#define MB_MIDDLEBUTTON 2 -#define MB_RIGHTBUTTON 3 - -/* values for redraw_mask */ -#define REDRAW_ALL (1 << 0) -#define REDRAW_FIELD (1 << 1) -#define REDRAW_TILES (1 << 2) -#define REDRAW_DOOR_1 (1 << 3) -#define REDRAW_VIDEO_1 (1 << 4) -#define REDRAW_VIDEO_2 (1 << 5) -#define REDRAW_VIDEO_3 (1 << 6) -#define REDRAW_MICROLEVEL (1 << 7) -#define REDRAW_FROM_BACKBUFFER (1 << 8) -#define REDRAW_DOOR_2 (REDRAW_VIDEO_1 | \ - REDRAW_VIDEO_2 | \ - REDRAW_VIDEO_3) -#define REDRAW_DOOR_3 (1 << 9) -#define REDRAW_DOORS (REDRAW_DOOR_1 | \ - REDRAW_DOOR_2 | \ - REDRAW_DOOR_3) -#define REDRAW_MAIN (REDRAW_FIELD | \ - REDRAW_TILES | \ - REDRAW_MICROLEVEL) -#define REDRAWTILES_THRESHOLD (SCR_FIELDX * SCR_FIELDY / 2) - -/* areas in bitmap PIX_DOOR */ -/* meaning in PIX_DB_DOOR: (3 PAGEs) - PAGEX1: 1. buffer for DOOR_1 - PAGEX2: 2. buffer for DOOR_1 - PAGEX3: buffer for animations +#define ICON_TITLE_STRING PROGRAM_TITLE_STRING +#define UNIX_USERDATA_DIRECTORY ".rocksndiamonds" +#define COOKIE_PREFIX "ROCKSNDIAMONDS" +#define FILENAME_PREFIX "Rocks" + +#define X11_ICON_FILENAME "rocks_icon.xbm" +#define X11_ICONMASK_FILENAME "rocks_iconmask.xbm" +#define MSDOS_POINTER_FILENAME "mouse.pcx" + +/* file version numbers for resource files (levels, tapes, score, setup, etc.) +** currently supported/known file version numbers: +** 1.0 (old) +** 1.2 (still in use) +** 1.4 (still in use) +** 2.0 (actual) */ - -#define DOOR_GFX_PAGESIZE DXSIZE -#define DOOR_GFX_PAGEX1 (0 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX2 (1 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX3 (2 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX4 (3 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX5 (4 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX6 (5 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX7 (6 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX8 (7 * DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEY1 0 -#define DOOR_GFX_PAGEY2 DYSIZE +#define FILE_VERSION_1_0 VERSION_IDENT(1,0,0) +#define FILE_VERSION_1_2 VERSION_IDENT(1,2,0) +#define FILE_VERSION_1_4 VERSION_IDENT(1,4,0) +#define FILE_VERSION_2_0 VERSION_IDENT(2,0,0) + +/* file version does not change for every program version, but is changed + when new features are introduced that are incompatible with older file + versions, so that they can be treated accordingly */ +#define FILE_VERSION_ACTUAL FILE_VERSION_2_0 + +#define GAME_VERSION_1_0 FILE_VERSION_1_0 +#define GAME_VERSION_1_2 FILE_VERSION_1_2 +#define GAME_VERSION_1_4 FILE_VERSION_1_4 +#define GAME_VERSION_2_0 FILE_VERSION_2_0 + +#define GAME_VERSION_ACTUAL VERSION_IDENT(PROGRAM_VERSION_MAJOR, \ + PROGRAM_VERSION_MINOR, \ + PROGRAM_VERSION_PATCH) /* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */ #define ANIM_NORMAL 0