added program config file support for run-time special edition support
[rocksndiamonds.git] / src / libgame / system.h
index e9b4cb510802a73c9dfbce395eae22919321b50b..d0a22f24ff030bc9d609626e9ea94782d69847ed 100644 (file)
@@ -1,15 +1,13 @@
-/***********************************************************
-* Artsoft Retro-Game Library                               *
-*----------------------------------------------------------*
-* (c) 1994-2006 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* system.h                                                 *
-***********************************************************/
+// ============================================================================
+// Artsoft Retro-Game Library
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+//                         Holger Schemel
+//                 info@artsoft.org
+//                 http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// system.h
+// ============================================================================
 
 #ifndef SYSTEM_H
 #define SYSTEM_H
                                         (b) <= MB_WHEEL_DOWN)
 #define DEFAULT_WHEEL_STEPS            3
 
+#define BUTTON_STEPSIZE(b)             ((b) == MB_LEFTBUTTON   ?  1 :  \
+                                        (b) == MB_MIDDLEBUTTON ?  5 :  \
+                                        (b) == MB_RIGHTBUTTON  ? 10 : 1)
+
 /* values for move directions */
 #define MV_BIT_LEFT                    0
 #define MV_BIT_RIGHT                   1
 /* default value for undefined filename */
 #define UNDEFINED_FILENAME     "[NONE]"
 
+/* default value for undefined levelset */
+#define UNDEFINED_LEVELSET     "[NONE]"
+
 /* default value for undefined parameter */
 #define ARG_DEFAULT            "[DEFAULT]"
 
 #define SND_CLASSIC_SUBDIR     "snd_classic"
 #define MUS_CLASSIC_SUBDIR     "mus_classic"
 
-#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
-#define GFX_DEFAULT_SUBDIR     "jue0"
-#define SND_DEFAULT_SUBDIR     "jue0"
-#define MUS_DEFAULT_SUBDIR     "jue0"
-#else
-#define GFX_DEFAULT_SUBDIR     GFX_CLASSIC_SUBDIR
-#define SND_DEFAULT_SUBDIR     SND_CLASSIC_SUBDIR
-#define MUS_DEFAULT_SUBDIR     MUS_CLASSIC_SUBDIR
-#endif
+#define GFX_DEFAULT_SUBDIR     (setup.internal.default_graphics_set)
+#define SND_DEFAULT_SUBDIR     (setup.internal.default_sounds_set)
+#define MUS_DEFAULT_SUBDIR     (setup.internal.default_music_set)
 
-#if defined(CREATE_SPECIAL_EDITION)
-#define GFX_FALLBACK_FILENAME  "fallback.pcx"
-#define SND_FALLBACK_FILENAME  "fallback.wav"
-#define MUS_FALLBACK_FILENAME  "fallback.wav"
-#endif
+#define GFX_FALLBACK_FILENAME  (setup.internal.fallback_graphics_file)
+#define SND_FALLBACK_FILENAME  (setup.internal.fallback_sounds_file)
+#define MUS_FALLBACK_FILENAME  (setup.internal.fallback_music_file)
+
+#define DEFAULT_LEVELSET       (setup.internal.default_level_series)
 
 /* file names and filename extensions */
 #define LEVELSETUP_DIRECTORY   "levelsetup"
 
 #define ERROR_BASENAME         "stderr.txt"
 
+#define STRING_PARENT_DIRECTORY                ".."
+#define STRING_TOP_DIRECTORY           "/"
+
 #define CHAR_PATH_SEPARATOR_UNIX       '/'
 #define CHAR_PATH_SEPARATOR_DOS                '\\'
 
@@ -659,6 +661,8 @@ struct ProgramInfo
   char *command_basepath;      /* path to the program binary */
   char *command_basename;      /* base filename of the program binary */
 
+  char *config_filename;       /* optional global program config filename */
+
   char *maindata_path;         /* main game data (installation) directory */
 
   char *userdata_subdir;       /* personal user game data directory */
@@ -709,7 +713,6 @@ struct OptionInfo
   boolean network;
   boolean verbose;
   boolean debug;
-  boolean debug_x11_sync;
 };
 
 struct ScreenModeInfo
@@ -732,6 +735,8 @@ struct VideoSystemInfo
   boolean window_scaling_available;
   int window_scaling_percent;
   char *window_scaling_quality;
+
+  boolean initialized;
 };
 
 struct AudioSystemInfo
@@ -775,6 +780,8 @@ struct GfxInfo
   int full_sxsize, full_sysize;
   int scrollbuffer_width, scrollbuffer_height;
 
+  int game_tile_size, standard_tile_size;
+
   int dx, dy;
   int dxsize, dysize;
 
@@ -789,6 +796,8 @@ struct GfxInfo
   int draw_deactivation_mask;
   int draw_background_mask;
 
+  boolean drawing_area_changed;
+
   Bitmap *field_save_buffer;
 
   Bitmap *background_bitmap;
@@ -812,6 +821,8 @@ struct GfxInfo
   int anim_random_frame;
 
   void (*draw_busy_anim_function)(void);
+
+  int cursor_mode;
 };
 
 struct JoystickInfo
@@ -925,6 +936,28 @@ struct SetupSystemInfo
   int audio_fragment_size;
 };
 
+struct SetupInternalInfo
+{
+  char *program_title;
+  char *program_author;
+  char *program_email;
+  char *program_website;
+  char *program_copyright;
+  char *program_company;
+
+  char *default_graphics_set;
+  char *default_sounds_set;
+  char *default_music_set;
+
+  char *fallback_graphics_file;
+  char *fallback_sounds_file;
+  char *fallback_music_file;
+
+  char *default_level_series;
+
+  boolean choose_from_top_leveldir;
+};
+
 struct SetupInfo
 {
   char *player_name;
@@ -936,6 +969,7 @@ struct SetupInfo
   boolean toons;
   boolean scroll_delay;
   boolean scroll_delay_value;
+  char *engine_snapshot_mode;
   boolean soft_scrolling;
   boolean fade_screens;
   boolean autorecord;
@@ -975,6 +1009,7 @@ struct SetupInfo
   struct SetupInputInfo input[MAX_PLAYERS];
   struct SetupTouchInfo touch;
   struct SetupSystemInfo system;
+  struct SetupInternalInfo internal;
   struct OptionInfo options;
 };
 
@@ -1203,13 +1238,15 @@ struct DoorPartPosInfo
 struct TextPosInfo
 {
   int x, y;
+  int xoffset;                 /* special case for tape date and time */
+  int xoffset2;                        /* special case for tape date */
   int width, height;
   int align, valign;
-  int size;
+  int size;                    /* also used for suffix ".digits" */
   int font, font_alt;
   boolean draw_masked;
   boolean draw_player;         /* special case for network player buttons */
-  int sort_priority;
+  int sort_priority;           /* also used for suffix ".draw_order" */
   int id;
 };
 
@@ -1241,11 +1278,6 @@ extern int                       level_nr;
 
 extern struct LevelStats       level_stats[];
 
-extern Display                *display;
-extern Visual                 *visual;
-extern int                     screen;
-extern Colormap                        cmap;
-
 extern DrawWindow             *window;
 extern DrawBuffer             *backbuffer;
 extern DrawBuffer             *drawto;
@@ -1265,7 +1297,7 @@ extern int                        FrameCounter;
 /* function definitions */
 
 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
-                    int);
+                    char *, int);
 
 void SetWindowTitle();
 
@@ -1276,6 +1308,7 @@ void InitPlatformDependentStuff(void);
 void ClosePlatformDependentStuff(void);
 
 void InitGfxFieldInfo(int, int, int, int, int, int, int, int, Bitmap *);
+void InitGfxTileSizeInfo(int, int);
 void InitGfxDoor1Info(int, int, int, int);
 void InitGfxDoor2Info(int, int, int, int);
 void InitGfxDoor3Info(int, int, int, int);
@@ -1284,6 +1317,7 @@ void InitGfxScrollbufferInfo(int, int);
 void InitGfxClipRegion(boolean, int, int, int, int);
 void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void));
 void InitGfxCustomArtworkInfo();
+void InitGfxOtherSettings();
 void SetDrawDeactivationMask(int);
 void SetDrawBackgroundMask(int);
 void SetWindowBackgroundBitmap(Bitmap *);
@@ -1306,10 +1340,9 @@ void FadeRectangle(Bitmap *bitmap, int, int, int, int, int, int, int,
 void FillRectangle(Bitmap *, int, int, int, int, Pixel);
 void ClearRectangle(Bitmap *, int, int, int, int);
 void ClearRectangleOnBackground(Bitmap *, int, int, int, int);
-void SetClipMask(Bitmap *, GC, Pixmap);
-void SetClipOrigin(Bitmap *, GC, int, int);
 void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int);
 boolean DrawingOnBackground(int, int);
+boolean DrawingAreaChanged();
 void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int);
 void DrawSimpleBlackLine(Bitmap *, int, int, int, int);
 void DrawSimpleWhiteLine(Bitmap *, int, int, int, int);
@@ -1318,8 +1351,6 @@ Pixel GetPixel(Bitmap *, int, int);
 Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int);
 Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int);
 
-void FlushDisplay(void);
-void SyncDisplay(void);
 void KeyboardAutoRepeatOn(void);
 void KeyboardAutoRepeatOff(void);
 boolean PointerInWindow(DrawWindow *);
@@ -1331,8 +1362,9 @@ Bitmap *LoadCustomImage(char *);
 void ReloadCustomImage(Bitmap *, char *);
 
 Bitmap *ZoomBitmap(Bitmap *, int, int);
-void CreateBitmapWithSmallBitmaps(Bitmap *, int);
-void ScaleBitmap(Bitmap *, int);
+void ReCreateGameTileSizeBitmap(Bitmap **);
+void CreateBitmapWithSmallBitmaps(Bitmap **, int, int);
+void ScaleBitmap(Bitmap **, int);
 
 void SetMouseCursor(int);