X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=26565af0ac320ce16d0f805a12461f24ea93fbfe;hb=3d07b68a314ce189f207e42d95f786979662410d;hp=a16fb4c5561e9e1974f09dd1cebc2bdb3d8b2474;hpb=49221e59bff18cdfbef8c877b588280266ae5037;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index a16fb4c5..26565af0 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -15,9 +15,8 @@ #ifndef SYSTEM_H #define SYSTEM_H -/* -#include "libgame.h" -*/ +#include "platform.h" +#include "types.h" #if defined(PLATFORM_MSDOS) #include "msdos.h" @@ -73,6 +72,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 *); @@ -82,13 +128,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 @@ -117,6 +167,7 @@ struct AudioSystemInfo { boolean sound_available; boolean loops_available; + boolean sound_enabled; int soundserver_pipe[2]; int soundserver_pid; char *device_name; @@ -138,6 +189,35 @@ struct GfxInfo 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 */ @@ -149,6 +229,9 @@ extern struct VideoSystemInfo video; extern struct AudioSystemInfo audio; extern struct GfxInfo gfx; +extern struct LevelDirInfo *leveldir_first; +extern struct LevelDirInfo *leveldir_current; + extern Display *display; extern Visual *visual; extern int screen; @@ -169,13 +252,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 InitGfxFieldInfo(int, int, int, int, int, int, int, int); -inline void InitGfxDoor1Info(int, int, int, int); -inline void InitGfxDoor2Info(int, int, int, int); -inline void InitGfxScrollbufferInfo(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); @@ -198,6 +284,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);