X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=19fdf64538fb42b88e55bac7d30f759065366305;hb=066b410c0573fe64a1783116daf9d64883e9f03e;hp=c0fb030b671f4412eb5adf2ee739ed514000b606;hpb=a7d7881a5abf250befa4c59e1c336e7b40f9b2fb;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index c0fb030b..19fdf645 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -48,6 +48,10 @@ #define DEFAULT_KEY_OKAY KSYM_Return #define DEFAULT_KEY_CANCEL KSYM_Escape +/* default shortcut keys */ +#define DEFAULT_KEY_SAVE_GAME KSYM_F1 +#define DEFAULT_KEY_LOAD_GAME KSYM_F2 + /* values for move directions */ #define MV_NO_MOVING 0 #define MV_LEFT (1 << 0) @@ -121,12 +125,22 @@ #define RW_BASE_PATH RW_GAME_DIR #define GRAPHICS_DIRECTORY "graphics" -#define MUSIC_DIRECTORY "music" #define SOUNDS_DIRECTORY "sounds" +#define MUSIC_DIRECTORY "music" #define LEVELS_DIRECTORY "levels" #define TAPES_DIRECTORY "tapes" #define SCORES_DIRECTORY "scores" +#if !defined(PLATFORM_MSDOS) +#define GRAPHICS_SUBDIR "gfx_classic" +#define SOUNDS_SUBDIR "snd_classic" +#define MUSIC_SUBDIR "mus_classic" +#else +#define GRAPHICS_SUBDIR "gfx_orig" +#define SOUNDS_SUBDIR "snd_orig" +#define MUSIC_SUBDIR "mus_orig" +#endif + /* areas in bitmap PIX_DOOR */ /* meaning in PIX_DB_DOOR: (3 PAGEs) PAGEX1: 1. buffer for DOOR_1 @@ -238,14 +252,8 @@ struct GfxInfo int vx, vy; int vxsize, vysize; -}; -struct ArtworkInfo -{ - char *custom_artwork; - char *custom_graphics; - char *custom_sounds; - char *custom_music; + boolean draw_deactivation_mask; }; struct JoystickInfo @@ -281,6 +289,12 @@ struct SetupInputInfo struct SetupKeyboardInfo key; }; +struct SetupShortcutInfo +{ + Key save_game; + Key load_game; +}; + struct SetupInfo { char *player_name; @@ -301,12 +315,36 @@ struct SetupInfo boolean handicap; boolean time_limit; boolean fullscreen; + boolean ask_on_escape; + char *graphics_set; + char *sounds_set; + char *music_set; + + struct SetupShortcutInfo shortcut; struct SetupInputInfo input[MAX_PLAYERS]; }; -struct LevelDirInfo +#define TREE_TYPE_GENERIC 0 +#define TREE_TYPE_LEVEL_DIR 1 +#define TREE_TYPE_GRAPHICS_DIR 2 +#define TREE_TYPE_SOUNDS_DIR 3 +#define TREE_TYPE_MUSIC_DIR 4 + +struct TreeInfo { + struct TreeInfo **node_top; /* topmost node in tree */ + struct TreeInfo *node_parent; /* parent level directory info */ + struct TreeInfo *node_group; /* level group sub-directory info */ + struct TreeInfo *next; /* next level series structure node */ + + int cl_first; /* internal control field for setup screen */ + int cl_cursor; /* internal control field for setup screen */ + + int type; /* type of tree content */ + + /* fields for "type == TREE_TYPE_LEVEL_DIR" */ + char *filename; /* level series single directory name */ char *fullpath; /* complete path relative to level directory */ char *basepath; /* absolute base path of level directory */ @@ -326,12 +364,26 @@ struct LevelDirInfo 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 */ +}; + +typedef struct TreeInfo TreeInfo; +typedef struct TreeInfo LevelDirTree; +typedef struct TreeInfo GraphicsDirTree; +typedef struct TreeInfo SoundsDirTree; +typedef struct TreeInfo MusicDirTree; - 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 */ +struct ArtworkInfo +{ + GraphicsDirTree *gfx_first; + GraphicsDirTree *gfx_current; + SoundsDirTree *snd_first; + SoundsDirTree *snd_current; + MusicDirTree *mus_first; + MusicDirTree *mus_current; + + char *graphics_set_current; + char *sounds_set_current; + char *music_set_current; }; @@ -348,8 +400,8 @@ extern struct ArtworkInfo artwork; extern struct JoystickInfo joystick; extern struct SetupInfo setup; -extern struct LevelDirInfo *leveldir_first; -extern struct LevelDirInfo *leveldir_current; +extern LevelDirTree *leveldir_first; +extern LevelDirTree *leveldir_current; extern int level_nr; extern Display *display; @@ -384,12 +436,14 @@ 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); +inline void TransferBitmapPointers(Bitmap *, Bitmap *); inline void FreeBitmap(Bitmap *); inline void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int); inline void ClearRectangle(Bitmap *, int, int, int, int); @@ -412,6 +466,7 @@ inline boolean ChangeVideoModeIfNeeded(boolean); Bitmap *LoadImage(char *); Bitmap *LoadCustomImage(char *); +Bitmap *ReloadCustomImage(Bitmap **, char *); inline void OpenAudio(void); inline void CloseAudio(void);