rnd-20001203-5-src
[rocksndiamonds.git] / src / libgame / system.h
index 9899f7280d5863d9b5b0f23c5701147c81b4a29b..26565af0ac320ce16d0f805a12461f24ea93fbfe 100644 (file)
@@ -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"
 #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 *);
@@ -121,6 +167,7 @@ struct AudioSystemInfo
 {
   boolean sound_available;
   boolean loops_available;
+  boolean sound_enabled;
   int soundserver_pipe[2];
   int soundserver_pid;
   char *device_name;
@@ -142,8 +189,36 @@ 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 */
+};
+
 
-#if 0
 /* ========================================================================= */
 /* exported variables                                                        */
 /* ========================================================================= */
@@ -154,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;
@@ -171,7 +249,6 @@ extern int          redraw_tiles;
 
 extern int             FrameCounter;
 
-#endif
 
 /* function definitions */
 
@@ -207,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);