// (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 SCREEN_KEYBOARD_POS(h) ((h) / 2)
#endif
+// values for drag-and-drop support (some parts not added before SDL 2.0.5)
+#if !SDL_VERSION_ATLEAST(2,0,5)
+#define SDL_DROPTEXT (SDL_DROPFILE + 1)
+#define SDL_DROPBEGIN (SDL_DROPFILE + 2)
+#define SDL_DROPCOMPLETE (SDL_DROPFILE + 3)
+#endif
+
// default input keys
#define DEFAULT_KEY_LEFT KSYM_Left
#define DEFAULT_KEY_RIGHT KSYM_Right
#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
getUserMusicDir() : \
NULL)
+#define TREE_FIRST_NODE_PTR(t) ((t) == TREE_TYPE_LEVEL_DIR ? \
+ &leveldir_first : \
+ (t) == TREE_TYPE_GRAPHICS_DIR ? \
+ &artwork.gfx_first : \
+ (t) == TREE_TYPE_SOUNDS_DIR ? \
+ &artwork.snd_first : \
+ (t) == TREE_TYPE_MUSIC_DIR ? \
+ &artwork.mus_first : \
+ NULL)
+
+#define TREE_FIRST_NODE(t) ((t) == TREE_TYPE_LEVEL_DIR ? \
+ leveldir_first : \
+ (t) == TREE_TYPE_GRAPHICS_DIR ? \
+ artwork.gfx_first : \
+ (t) == TREE_TYPE_SOUNDS_DIR ? \
+ artwork.snd_first : \
+ (t) == TREE_TYPE_MUSIC_DIR ? \
+ artwork.mus_first : \
+ NULL)
+
// values for artwork handling
#define LEVELDIR_ARTWORK_SET_PTR(leveldir, type) \
((type) == ARTWORK_TYPE_GRAPHICS ? \
(type) == ARTWORK_TYPE_MUSIC ? \
options.music_directory : "")
+#define USER_ARTWORK_DIRECTORY(type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ getUserGraphicsDir() : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ getUserSoundsDir() : \
+ (type) == ARTWORK_TYPE_MUSIC ? \
+ getUserMusicDir() : "")
+
+#define ARTWORK_DEFAULT_SUBDIR(type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ GFX_DEFAULT_SUBDIR : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ SND_DEFAULT_SUBDIR : \
+ MUS_DEFAULT_SUBDIR)
+
#define UPDATE_BUSY_STATE() \
{ \
if (gfx.draw_busy_anim_function != NULL) \
char *server_host;
int server_port;
+ SDL_Thread *server_thread;
+ boolean is_server_thread;
+};
+
+struct RuntimeInfo
+{
+ boolean uses_touch_device;
};
struct OptionInfo
char *execute_command;
char *special_flags;
+ char *debug_mode;
boolean mytapes;
boolean serveronly;
int screen_rendering_mode;
int vsync_mode;
+ unsigned int frame_counter;
unsigned int frame_delay;
unsigned int frame_delay_value;
void (*draw_tile_cursor_function)(int);
int cursor_mode;
+ int cursor_mode_override;
+ int cursor_mode_final;
+ int mouse_x, mouse_y;
};
struct TileCursorInfo
struct SetupSystemInfo
{
+ char *sdl_renderdriver;
char *sdl_videodriver;
char *sdl_audiodriver;
int audio_fragment_size;
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;
+ boolean menu_artwork;
+ boolean menu_input;
+ boolean menu_touch;
+ boolean menu_shortcuts;
+ boolean menu_exit;
+ boolean menu_save_and_exit;
};
struct SetupDebugInfo
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;
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;
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)
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
int tile_size; // special case for list of network players
int border_size; // special case for list of preview players
int vertical; // special case for list of preview players
+
+ boolean redefined; // redefined by custom artwork
};
struct MouseActionInfo
extern struct ProgramInfo program;
extern struct NetworkInfo network;
+extern struct RuntimeInfo runtime;
extern struct OptionInfo options;
extern struct VideoSystemInfo video;
extern struct AudioSystemInfo audio;
extern boolean motion_status;
extern int wheel_steps;
extern boolean keyrepeat_status;
+extern boolean textinput_status;
extern int redraw_mask;
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);
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);
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 *);