rnd-20020824-2-src
[rocksndiamonds.git] / src / libgame / system.h
index 4d8940d135125a919641ff08b5e94ddc70b31499..920e464cfa12a5af0ab296bc879c4bbfdc6c88c0 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-* (c) 1994-2001 Artsoft Entertainment                      *
+* (c) 1994-2002 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
 #include "x11.h"
 #endif
 
+#if defined(PLATFORM_MACOSX)
+/* some symbols are already defined on Mac OS X */
+#define Delay Delay_internal
+#define DrawLine DrawLine_internal
+#define DrawText DrawText_internal
+#define GetPixel GetPixel_internal
+#endif
+
 
 /* the additional 'b' is needed for Win32 to open files in binary mode */
 #define MODE_READ              "rb"
 #define DEFAULT_KEY_RIGHT      KSYM_Right
 #define DEFAULT_KEY_UP         KSYM_Up
 #define DEFAULT_KEY_DOWN       KSYM_Down
+#if defined(PLATFORM_MACOSX)
+#define DEFAULT_KEY_SNAP       KSYM_Control_L
+#define DEFAULT_KEY_BOMB       KSYM_KP_Enter
+#else
 #define DEFAULT_KEY_SNAP       KSYM_Shift_L
 #define DEFAULT_KEY_BOMB       KSYM_Shift_R
+#endif
 #define DEFAULT_KEY_OKAY       KSYM_Return
 #define DEFAULT_KEY_CANCEL     KSYM_Escape
 
 /* default name for unknown player names */
 #define ANONYMOUS_NAME         "anonymous"
 
+/* default text for non-existant artwork */
+#define NOT_AVAILABLE          "(not available)"
+
 /* default name for new levels */
 #define NAMELESS_LEVEL_NAME    "nameless level"
 
 #define VERSION_MINOR(x)       (((x) % 10000) / 100)
 #define VERSION_PATCH(x)       ((x) % 100)
 
+/* functions for parent/child process identification */
+#define IS_PARENT_PROCESS(pid) ((pid) > 0)
+#define IS_CHILD_PROCESS(pid)  ((pid) == 0)
+
 
 /* type definitions */
 typedef int (*EventFilter)(const Event *);
@@ -217,6 +237,7 @@ struct OptionInfo
   boolean network;
   boolean verbose;
   boolean debug;
+  char *debug_command;
 };
 
 struct VideoSystemInfo
@@ -236,16 +257,14 @@ struct AudioSystemInfo
   boolean sound_enabled;
   boolean sound_deactivated;   /* for temporarily disabling sound */
 
-  void (*func_reload_sounds)(void);
-  void (*func_reload_music)(void);
-
-  int soundserver_pipe[2];
-  int soundserver_pid;
+  int mixer_pipe[2];
+  int mixer_pid;
   char *device_name;
   int device_fd;
 
-  int channels;
+  int num_channels;
   int music_channel;
+  int first_sound_channel;
 };
 
 struct GfxInfo
@@ -330,6 +349,9 @@ struct SetupInfo
   char *graphics_set;
   char *sounds_set;
   char *music_set;
+  boolean override_level_graphics;
+  boolean override_level_sounds;
+  boolean override_level_music;
 
   struct SetupShortcutInfo shortcut;
   struct SetupInputInfo input[MAX_PLAYERS];
@@ -355,22 +377,32 @@ struct TreeInfo
 
   /* 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 */
-  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 */
+  char *filename;      /* tree info sub-directory basename (may be ".") */
+  char *fullpath;      /* complete path relative to tree base directory */
+  char *basepath;      /* absolute base path of tree base directory */
+  char *identifier;    /* identifier string for configuration files */
+  char *name;          /* tree info name, as displayed in selection menues */
+  char *name_sorting;  /* optional sorting name for correct name sorting */
+  char *author;                /* level or artwork author name */
+  char *imported_from; /* optional comment for imported levels or artwork */
+
+  char *graphics_set;  /* optional custom graphics set (level tree only) */
+  char *sounds_set;    /* optional custom sounds set (level tree only) */
+  char *music_set;     /* optional custom music set (level tree only) */
+  char *graphics_path; /* path to optional custom graphics set (level only) */
+  char *sounds_path;   /* path to optional custom sounds set (level only) */
+  char *music_path;    /* path to optional custom music set (level only) */
+
   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 */
@@ -378,6 +410,7 @@ struct TreeInfo
 
 typedef struct TreeInfo TreeInfo;
 typedef struct TreeInfo LevelDirTree;
+typedef struct TreeInfo ArtworkDirTree;
 typedef struct TreeInfo GraphicsDirTree;
 typedef struct TreeInfo SoundsDirTree;
 typedef struct TreeInfo MusicDirTree;
@@ -391,9 +424,9 @@ struct ArtworkInfo
   MusicDirTree *mus_first;
   MusicDirTree *mus_current;
 
-  char *graphics_set_current;
-  char *sounds_set_current;
-  char *music_set_current;
+  char *gfx_current_identifier;
+  char *snd_current_identifier;
+  char *mus_current_identifier;
 };
 
 
@@ -480,8 +513,6 @@ void ReloadCustomImage(Bitmap *, char *);
 inline void OpenAudio(void);
 inline void CloseAudio(void);
 inline void SetAudioMode(boolean);
-inline void SetAudioReloadFunctions(void (*func_reload_sounds)(void),
-                                   void (*func_reload_music)(void));
 
 inline void InitEventFilter(EventFilter);
 inline boolean PendingEvent(void);