X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=e4126a7d6676237789491ff03b760f9563998dec;hb=ff56a43aa3799aa3357f4deca4d6482fc25a6a41;hp=25eb0c66c485d83b157228f48dd009e1cb59d2b8;hpb=621b6a2c4781c9c3e2f5849f9c184a906e0ce5b6;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 25eb0c66..e4126a7d 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -1,23 +1,21 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Artsoft Retro-Game Library * *----------------------------------------------------------* -* ©1995 Artsoft Development * -* Holger Schemel * -* 33659 Bielefeld-Senne * -* Telefon: (0521) 493245 * -* eMail: aeglos@valinor.owl.de * -* aeglos@uni-paderborn.de * -* q99492@pbhrzx.uni-paderborn.de * +* (c) 1994-2000 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* system.h * +* system.h * ***********************************************************/ #ifndef SYSTEM_H #define SYSTEM_H -/* -#include "libgame.h" -*/ +#include "platform.h" +#include "types.h" #if defined(PLATFORM_MSDOS) #include "msdos.h" @@ -37,8 +35,19 @@ #define FULLSCREEN_NOT_AVAILABLE FALSE #define FULLSCREEN_AVAILABLE TRUE +/* 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_NONE (0) #define REDRAW_ALL (1 << 0) #define REDRAW_FIELD (1 << 1) #define REDRAW_TILES (1 << 2) @@ -62,6 +71,53 @@ #define REDRAWTILES_THRESHOLD (SCR_FIELDX * SCR_FIELDY / 2) +/* 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" + +/* definitions for game sub-directories */ +#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 GRAPHICS_DIRECTORY "graphics" +#define SOUNDS_DIRECTORY "sounds" +#define LEVELS_DIRECTORY "levels" +#define TAPES_DIRECTORY "tapes" +#define SCORES_DIRECTORY "scores" + +/* 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 DOOR_GFX_PAGESIZE (gfx.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 (gfx.dysize) + + /* type definitions */ typedef int (*EventFilter)(const Event *); @@ -71,13 +127,17 @@ typedef int (*EventFilter)(const Event *); struct ProgramInfo { - char *command_name; + char *command_basename; + char *userdata_directory; + char *program_title; char *window_title; char *icon_title; char *x11_icon_filename; char *x11_iconmask_filename; char *msdos_pointer_filename; + + void (*exit_function)(int); }; struct OptionInfo @@ -106,13 +166,14 @@ struct AudioSystemInfo { boolean sound_available; boolean loops_available; + boolean sound_enabled; int soundserver_pipe[2]; int soundserver_pid; char *device_name; int device_fd; }; -struct PlayfieldInfo +struct GfxInfo { int sx, sy; int sxsize, sysize; @@ -127,6 +188,35 @@ struct PlayfieldInfo int vxsize, vysize; }; +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 */ +}; + /* ========================================================================= */ /* exported variables */ @@ -136,7 +226,10 @@ extern struct ProgramInfo program; extern struct OptionInfo options; extern struct VideoSystemInfo video; extern struct AudioSystemInfo audio; -extern struct PlayfieldInfo playfield; +extern struct GfxInfo gfx; + +extern struct LevelDirInfo *leveldir_first; +extern struct LevelDirInfo *leveldir_current; extern Display *display; extern Visual *visual; @@ -147,6 +240,9 @@ extern DrawWindow window; extern DrawBuffer backbuffer; extern DrawBuffer drawto; +extern int button_status; +extern boolean motion_status; + extern int redraw_mask; extern int redraw_tiles; @@ -155,13 +251,16 @@ extern int FrameCounter; /* function definitions */ -inline void InitProgramInfo(char *, char *, char *, char *, char *, char *, - char *); +void InitCommandName(char *); +void InitExitFunction(void (*exit_function)(int)); +void InitPlatformDependantStuff(void); + +void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *); -inline void InitPlayfieldInfo(int, int, int, int, int, int, int, int); -inline void InitDoor1Info(int, int, int, int); -inline void InitDoor2Info(int, int, int, int); -inline void InitScrollbufferInfo(int, int); +void InitGfxFieldInfo(int, int, int, int, int, int, int, int); +void InitGfxDoor1Info(int, int, int, int); +void InitGfxDoor2Info(int, int, int, int); +void InitGfxScrollbufferInfo(int, int); inline void InitVideoDisplay(void); inline void InitVideoBuffer(DrawBuffer *,DrawWindow *, int, int, int, boolean); @@ -184,6 +283,7 @@ inline boolean ChangeVideoModeIfNeeded(boolean); inline boolean OpenAudio(struct AudioSystemInfo *); inline void CloseAudio(struct AudioSystemInfo *); +inline void SetAudioMode(boolean); inline void InitEventFilter(EventFilter); inline boolean PendingEvent(void);