added option to limit debug output to specific debug mode
[rocksndiamonds.git] / src / libgame / system.h
index afb90b7a159a37014a35a43e6f7801876bb2ab9e..d18f0f271df43dc9d20661cfbbd5201133d52f82 100644 (file)
@@ -4,7 +4,7 @@
 // (c) 1995-2014 by Artsoft Entertainment
 //                         Holger Schemel
 //                 info@artsoft.org
-//                 http://www.artsoft.org/
+//                 https://www.artsoft.org/
 // ----------------------------------------------------------------------------
 // system.h
 // ============================================================================
 
 #define VSYNC_MODE_DEFAULT             VSYNC_MODE_OFF
 
+#define VSYNC_MODE_STR_TO_INT(s)                                       \
+  (strEqual((s), STR_VSYNC_MODE_NORMAL)                ? VSYNC_MODE_NORMAL :   \
+   strEqual((s), STR_VSYNC_MODE_ADAPTIVE)      ? VSYNC_MODE_ADAPTIVE : \
+   VSYNC_MODE_OFF)
+
+#define VSYNC_MODE_INT_TO_STR(i)                                       \
+  ((i) == VSYNC_MODE_NORMAL            ? STR_VSYNC_MODE_NORMAL :       \
+   (i) == VSYNC_MODE_ADAPTIVE          ? STR_VSYNC_MODE_ADAPTIVE :     \
+   STR_VSYNC_MODE_OFF)
+
 // values for network server settings
 #define STR_NETWORK_AUTO_DETECT                "auto_detect_network_server"
 #define STR_NETWORK_AUTO_DETECT_SETUP  "(auto detect network server)"
 
 // values for special settings for mobile devices
 #if defined(PLATFORM_ANDROID)
+#define HAS_TOUCH_DEVICE
 #define USE_TOUCH_INPUT_OVERLAY
 #define USE_COMPLETE_DISPLAY
 #define HAS_SCREEN_KEYBOARD
 #define STYLE_REVERSE          (1 << 2)
 
 // values for special event handling style (used for global animation)
-#define STYLE_PASSTHROUGH      (1 << 3)
-#define STYLE_MULTIPLE_ACTIONS (1 << 4)
+#define STYLE_BLOCK            (1 << 3)
+#define STYLE_PASSTHROUGH      (1 << 4)
+#define STYLE_MULTIPLE_ACTIONS (1 << 5)
 
 #define STYLE_DEFAULT          STYLE_NONE
 
+// values for special global animation delay types
+#define ANIM_DELAY_UNDEFINED   -1
+#define ANIM_DELAY_NONE                0
+#define ANIM_DELAY_INIT                1
+#define ANIM_DELAY_ANIM                2
+#define ANIM_DELAY_POST                3
+
+// values for special global animation delay actions
+#define ANIM_DELAY_ACTION_NONE -1
+
 // values for special global animation events
+#define ANIM_EVENT_UNDEFINED   -1
 #define ANIM_EVENT_NONE                0
 #define ANIM_EVENT_SELF                (1 << 16)
 #define ANIM_EVENT_ANY         (1 << 17)
-
+#define ANIM_EVENT_CLICK       (1 << 18)
+#define ANIM_EVENT_INIT                (1 << 19)
+#define ANIM_EVENT_START       (1 << 20)
+#define ANIM_EVENT_END         (1 << 21)
+#define ANIM_EVENT_POST                (1 << 22)
+#define ANIM_EVENT_UNCLICK_ANY (1 << 23)
+
+// anim number: bits 0-7
+// part number: bits 8-15
 #define ANIM_EVENT_ANIM_BIT    0
 #define ANIM_EVENT_PART_BIT    8
 
 
 #define FADE_MODE_DEFAULT      FADE_MODE_FADE
 
+#define AUTO_DELAY_UNIT_MS     0
+#define AUTO_DELAY_UNIT_FRAMES 1
+
+#define AUTO_DELAY_UNIT_DEFAULT        AUTO_DELAY_UNIT_MS
+
 // values for toon positions
 #define POS_UNDEFINED          -1
 #define POS_LEFT               0
                                 y >= gfx.ey && y < gfx.ey + gfx.eysize)
 
 // values for mouse cursor
+#define CURSOR_UNDEFINED       -1
 #define CURSOR_DEFAULT         0
 #define CURSOR_NONE            1
 #define CURSOR_PLAYFIELD       2
@@ -942,6 +979,11 @@ struct NetworkInfo
 
 };
 
+struct RuntimeInfo
+{
+  boolean uses_touch_device;
+};
+
 struct OptionInfo
 {
   char *server_host;
@@ -959,6 +1001,7 @@ struct OptionInfo
   char *execute_command;
 
   char *special_flags;
+  char *debug_mode;
 
   boolean mytapes;
   boolean serveronly;
@@ -986,6 +1029,7 @@ struct VideoSystemInfo
   int screen_rendering_mode;
   int vsync_mode;
 
+  unsigned int frame_counter;
   unsigned int frame_delay;
   unsigned int frame_delay_value;
 
@@ -1097,6 +1141,9 @@ struct GfxInfo
   void (*draw_tile_cursor_function)(int);
 
   int cursor_mode;
+  int cursor_mode_override;
+  int cursor_mode_final;
+  int mouse_x, mouse_y;
 };
 
 struct TileCursorInfo
@@ -1260,6 +1307,7 @@ struct SetupShortcutInfo
 
 struct SetupSystemInfo
 {
+  char *sdl_renderdriver;
   char *sdl_videodriver;
   char *sdl_audiodriver;
   int audio_fragment_size;
@@ -1292,8 +1340,10 @@ struct SetupInternalInfo
 
   boolean choose_from_top_leveldir;
   boolean show_scaling_in_title;
+  boolean create_user_levelset;
 
   boolean menu_game;
+  boolean menu_engines;
   boolean menu_editor;
   boolean menu_graphics;
   boolean menu_sound;
@@ -1324,7 +1374,8 @@ struct SetupInfo
   boolean sound_simple;
   boolean toons;
   boolean scroll_delay;
-  boolean scroll_delay_value;
+  boolean forced_scroll_delay;
+  int scroll_delay_value;
   char *engine_snapshot_mode;
   int engine_snapshot_memory;
   boolean fade_screens;
@@ -1349,6 +1400,7 @@ struct SetupInfo
   boolean quick_switch;
   boolean input_on_focus;
   boolean prefer_aga_graphics;
+  boolean prefer_lowpass_sounds;
   boolean game_speed_extended;
   int game_frame_delay;
   boolean sp_show_border_elements;
@@ -1417,6 +1469,8 @@ struct TreeInfo
   char *graphics_set_ecs; // special EMC custom graphics set (ECS graphics)
   char *graphics_set_aga; // special EMC custom graphics set (AGA graphics)
   char *graphics_set;  // optional custom graphics set (level tree only)
+  char *sounds_set_default; // default EMC custom sounds set
+  char *sounds_set_lowpass; // special EMC custom sounds set (lowpass filter)
   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)
@@ -1443,6 +1497,8 @@ struct TreeInfo
   boolean handicap;    // level set has no handicap when set to "false"
   boolean skip_levels; // levels can be skipped when set to "true"
 
+  boolean use_emc_tiles;// use (swapped) V5/V6 EMC tiles when set to "true"
+
   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
@@ -1688,6 +1744,7 @@ struct LevelStats
 
 extern struct ProgramInfo      program;
 extern struct NetworkInfo      network;
+extern struct RuntimeInfo      runtime;
 extern struct OptionInfo       options;
 extern struct VideoSystemInfo  video;
 extern struct AudioSystemInfo  audio;
@@ -1715,6 +1772,7 @@ extern int                        button_status;
 extern boolean                 motion_status;
 extern int                     wheel_steps;
 extern boolean                 keyrepeat_status;
+extern boolean                 textinput_status;
 
 extern int                     redraw_mask;
 
@@ -1726,6 +1784,7 @@ extern int                        FrameCounter;
 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
                     char *, int);
 void InitNetworkInfo(boolean, boolean, boolean, char *, int);
+void InitRuntimeInfo(void);
 
 void InitScoresInfo(void);
 void SetWindowTitle(void);
@@ -1822,14 +1881,18 @@ void FreeBitmapTextures(Bitmap **);
 void ScaleBitmap(Bitmap **, int);
 
 void SetMouseCursor(int);
+void UpdateRawMousePosition(int, int);
+void UpdateMousePosition(void);
 
 void OpenAudio(void);
 void CloseAudio(void);
 void SetAudioMode(boolean);
 
+void InitEventFilter(EventFilter);
 boolean PendingEvent(void);
 void WaitEvent(Event *event);
 void PeekEvent(Event *event);
+void PumpEvents(void);
 void CheckQuitEvent(void);
 Key GetEventKey(KeyEvent *, boolean);
 KeyMod HandleKeyModState(Key, int);
@@ -1837,7 +1900,7 @@ KeyMod GetKeyModState(void);
 KeyMod GetKeyModStateFromEvents(void);
 void StartTextInput(int, int, int, int);
 void StopTextInput(void);
-boolean CheckCloseWindowEvent(ClientMessageEvent *);
+void PushUserEvent(int, int, int);
 
 void InitJoysticks(void);
 boolean ReadJoystick(int, int *, int *, boolean *, boolean *);