rnd-20020402-1-src
[rocksndiamonds.git] / src / libgame / system.h
index 6800aeaf153f4f414b3d883c7229677aff0aac46..701df603adf356532173c5854f4a573268956ad8 100644 (file)
 #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)
@@ -63,6 +67,7 @@
 #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
@@ -172,6 +177,7 @@ struct ProgramInfo
   char *msdos_pointer_filename;
 
   char *cookie_prefix;
+  char *filename_prefix;       /* prefix to cut off from DOS filenames */
 
   int version_major;
   int version_minor;
@@ -236,6 +242,8 @@ struct GfxInfo
 
   int vx, vy;
   int vxsize, vysize;
+
+  boolean draw_deactivation_mask;
 };
 
 struct JoystickInfo
@@ -271,6 +279,12 @@ struct SetupInputInfo
   struct SetupKeyboardInfo key;
 };
 
+struct SetupShortcutInfo
+{
+  Key save_game;
+  Key load_game;
+};
+
 struct SetupInfo
 {
   char *player_name;
@@ -292,11 +306,29 @@ struct SetupInfo
   boolean time_limit;
   boolean fullscreen;
 
+  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_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 */
@@ -316,12 +348,22 @@ 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;
 };
 
 
@@ -334,11 +376,12 @@ 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 LevelDirTree           *leveldir_first;
+extern LevelDirTree           *leveldir_current;
 extern int                     level_nr;
 
 extern Display                *display;
@@ -367,12 +410,13 @@ void InitPlatformDependantStuff(void);
 void ClosePlatformDependantStuff(void);
 
 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
-                    char *, int);
+                    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);
@@ -400,6 +444,7 @@ inline boolean SetVideoMode(boolean);
 inline boolean ChangeVideoModeIfNeeded(boolean);
 
 Bitmap *LoadImage(char *);
+Bitmap *LoadCustomImage(char *);
 
 inline void OpenAudio(void);
 inline void CloseAudio(void);