X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=1416f231739ebf3fa9aad5f505f654b3d868dc3a;hb=4a137589031aa2c7effd6b020170098a976c566b;hp=8115319308b9967195d20d05f59eedcf5b370529;hpb=1100054eec7c45458359fd56072341bd661f4a9c;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 81153193..1416f231 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2000 Artsoft Entertainment * +* (c) 1994-2001 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -28,20 +28,42 @@ #endif -/* contant definitions */ +/* the additional 'b' is needed for Win32 to open files in binary mode */ +#define MODE_READ "rb" +#define MODE_WRITE "wb" +#define MODE_APPEND "ab" -#define DEFAULT_DEPTH 0 +#define DEFAULT_DEPTH 0 -#define FULLSCREEN_NOT_AVAILABLE FALSE -#define FULLSCREEN_AVAILABLE TRUE +#define FULLSCREEN_NOT_AVAILABLE FALSE +#define FULLSCREEN_AVAILABLE TRUE -/* values for button_status */ +/* default input keys */ +#define DEFAULT_KEY_LEFT KSYM_Left +#define DEFAULT_KEY_RIGHT KSYM_Right +#define DEFAULT_KEY_UP KSYM_Up +#define DEFAULT_KEY_DOWN KSYM_Down +#define DEFAULT_KEY_SNAP KSYM_Shift_L +#define DEFAULT_KEY_BOMB KSYM_Shift_R +#define DEFAULT_KEY_OKAY KSYM_Return +#define DEFAULT_KEY_CANCEL KSYM_Escape + +/* values for move directions */ +#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) + +/* values for button status */ #define MB_NOT_PRESSED FALSE +#define MB_NOT_RELEASED TRUE #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_MENU_LEAVE (-2) #define MB_LEFTBUTTON 1 #define MB_MIDDLEBUTTON 2 #define MB_RIGHTBUTTON 3 @@ -71,6 +93,11 @@ #define REDRAW_FPS (1 << 11) #define REDRAWTILES_THRESHOLD (SCR_FIELDX * SCR_FIELDY / 2) +/* maximum number of parallel players supported by libgame functions */ +#define MAX_PLAYERS 4 + +/* maximum allowed length of player name */ +#define MAX_PLAYER_NAME_LEN 10 /* default name for empty highscore entry */ #define EMPTY_PLAYER_NAME "no name" @@ -94,6 +121,7 @@ #define RW_BASE_PATH RW_GAME_DIR #define GRAPHICS_DIRECTORY "graphics" +#define MUSIC_DIRECTORY "music" #define SOUNDS_DIRECTORY "sounds" #define LEVELS_DIRECTORY "levels" #define TAPES_DIRECTORY "tapes" @@ -118,9 +146,14 @@ #define DOOR_GFX_PAGEY1 (0) #define DOOR_GFX_PAGEY2 (gfx.dysize) +/* functions for version handling */ +#define VERSION_IDENT(x,y,z) ((x) * 10000 + (y) * 100 + (z)) +#define VERSION_MAJOR(x) ((x) / 10000) +#define VERSION_MINOR(x) (((x) % 10000) / 100) +#define VERSION_PATCH(x) ((x) % 100) -/* type definitions */ +/* type definitions */ typedef int (*EventFilter)(const Event *); @@ -134,10 +167,18 @@ struct ProgramInfo char *program_title; char *window_title; char *icon_title; + char *x11_icon_filename; char *x11_iconmask_filename; char *msdos_pointer_filename; + char *cookie_prefix; + char *filename_prefix; /* prefix to cut off from DOS filenames */ + + int version_major; + int version_minor; + int version_patch; + void (*exit_function)(int); }; @@ -149,6 +190,9 @@ struct OptionInfo char *ro_base_directory; char *rw_base_directory; char *level_directory; + char *graphics_directory; + char *sounds_directory; + char *music_directory; boolean serveronly; boolean network; boolean verbose; @@ -166,12 +210,19 @@ struct VideoSystemInfo struct AudioSystemInfo { boolean sound_available; + boolean music_available; boolean loops_available; + boolean mods_available; boolean sound_enabled; + int soundserver_pipe[2]; int soundserver_pid; char *device_name; int device_fd; + + int channels; + int music_channel; + int music_nr; }; struct GfxInfo @@ -187,6 +238,73 @@ struct GfxInfo int vx, vy; int vxsize, vysize; + + boolean draw_deactivation_mask; +}; + +struct ArtworkInfo +{ + char *custom_artwork; + char *custom_graphics; + char *custom_sounds; + char *custom_music; +}; + +struct JoystickInfo +{ + int status; + int fd[MAX_PLAYERS]; /* file descriptor of player's joystick */ +}; + +struct SetupJoystickInfo +{ + char *device_name; /* device name of player's joystick */ + + 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 LevelDirInfo @@ -228,26 +346,30 @@ extern struct OptionInfo options; extern struct VideoSystemInfo video; extern struct AudioSystemInfo audio; extern struct GfxInfo gfx; +extern struct ArtworkInfo artwork; +extern struct JoystickInfo joystick; +extern struct SetupInfo setup; extern struct LevelDirInfo *leveldir_first; extern struct LevelDirInfo *leveldir_current; +extern int level_nr; -extern Display *display; -extern Visual *visual; -extern int screen; -extern Colormap cmap; +extern Display *display; +extern Visual *visual; +extern int screen; +extern Colormap cmap; -extern DrawWindow *window; -extern DrawBuffer *backbuffer; -extern DrawBuffer *drawto; +extern DrawWindow *window; +extern DrawBuffer *backbuffer; +extern DrawBuffer *drawto; -extern int button_status; -extern boolean motion_status; +extern int button_status; +extern boolean motion_status; -extern int redraw_mask; -extern int redraw_tiles; +extern int redraw_mask; +extern int redraw_tiles; -extern int FrameCounter; +extern int FrameCounter; /* function definitions */ @@ -255,15 +377,19 @@ extern int FrameCounter; void InitCommandName(char *); void InitExitFunction(void (*exit_function)(int)); void InitPlatformDependantStuff(void); +void ClosePlatformDependantStuff(void); -void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *); +void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, + char *, char *, 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); +void SetDrawDeactivationMask(int ); inline void InitVideoDisplay(void); +inline void CloseVideoDisplay(void); inline void InitVideoBuffer(DrawBuffer **,DrawWindow **, int,int,int, boolean); inline Bitmap *CreateBitmapStruct(void); inline Bitmap *CreateBitmap(int, int, int); @@ -275,6 +401,7 @@ inline void SetClipOrigin(Bitmap *, GC, int, int); inline void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); inline void DrawSimpleWhiteLine(Bitmap *, int, int, int, int); inline void DrawLines(Bitmap *, struct XY *, int, Pixel); +inline Pixel GetPixel(Bitmap *, int, int); inline Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int); inline Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int); @@ -286,8 +413,11 @@ inline boolean PointerInWindow(DrawWindow *); inline boolean SetVideoMode(boolean); inline boolean ChangeVideoModeIfNeeded(boolean); -inline boolean OpenAudio(struct AudioSystemInfo *); -inline void CloseAudio(struct AudioSystemInfo *); +Bitmap *LoadImage(char *); +Bitmap *LoadCustomImage(char *); + +inline void OpenAudio(void); +inline void CloseAudio(void); inline void SetAudioMode(boolean); inline void InitEventFilter(EventFilter); @@ -296,4 +426,7 @@ inline void NextEvent(Event *event); inline Key GetEventKey(KeyEvent *, boolean); inline boolean CheckCloseWindowEvent(ClientMessageEvent *); +inline void InitJoysticks(); +inline boolean ReadJoystick(int, int *, int *, boolean *, boolean *); + #endif /* SYSTEM_H */