// (c) 1995-2014 by Artsoft Entertainment
// Holger Schemel
// info@artsoft.org
-// http://www.artsoft.org/
+// https://www.artsoft.org/
// ----------------------------------------------------------------------------
// system.h
// ============================================================================
#define STR_SPECIAL_RENDERING_TARGET "target_texture_only"
#define STR_SPECIAL_RENDERING_DOUBLE "stream_and_target_texture"
+#if defined(PLATFORM_EMSCRIPTEN)
+#define STR_SPECIAL_RENDERING_DEFAULT STR_SPECIAL_RENDERING_BITMAP
+#else
#define STR_SPECIAL_RENDERING_DEFAULT STR_SPECIAL_RENDERING_DOUBLE
+#endif
#define SPECIAL_RENDERING_OFF 0
#define SPECIAL_RENDERING_BITMAP 1
#define SPECIAL_RENDERING_TARGET 2
#define SPECIAL_RENDERING_DOUBLE 3
-#define SPECIAL_RENDERING_DEFAULT SPECIAL_RENDERING_DOUBLE
-
// values for vertical screen retrace synchronization (vsync)
#define STR_VSYNC_MODE_OFF "off"
#define STR_VSYNC_MODE_NORMAL "normal"
#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 ANIM_DEFAULT ANIM_LOOP
-// values for special drawing styles (currently only for crumbled graphics)
+// values for special drawing styles and event handling
#define STYLE_NONE 0
+
+// values used for crumbled graphics
#define STYLE_ACCURATE_BORDERS (1 << 0)
#define STYLE_INNER_CORNERS (1 << 1)
+
+// values used for game panel graphics
#define STYLE_REVERSE (1 << 2)
+#define STYLE_LEFTMOST_POSITION (1 << 3)
-// values for special event handling style (used for global animation)
-#define STYLE_PASSTHROUGH (1 << 3)
-#define STYLE_MULTIPLE_ACTIONS (1 << 4)
+// values used for global animations
+#define STYLE_BLOCK (1 << 4)
+#define STYLE_PASSTHROUGH (1 << 5)
+#define STYLE_MULTIPLE_ACTIONS (1 << 6)
#define STYLE_DEFAULT STYLE_NONE
// maximum number of parallel players supported by libgame functions
#define MAX_PLAYERS 4
+// maximum number of player names
+#define MAX_PLAYER_NAMES 12
+
// maximum allowed length of player name
#define MAX_PLAYER_NAME_LEN 10
#define CACHE_DIRECTORY "cache"
#define CONF_DIRECTORY "conf"
#define NETWORK_DIRECTORY "network"
+#define USERS_DIRECTORY "users"
#define GFX_CLASSIC_SUBDIR "gfx_classic"
#define SND_CLASSIC_SUBDIR "snd_classic"
// file names and filename extensions
#define LEVELSETUP_DIRECTORY "levelsetup"
#define SETUP_FILENAME "setup.conf"
+#define USERSETUP_FILENAME "usersetup.conf"
#define AUTOSETUP_FILENAME "autosetup.conf"
#define LEVELSETUP_FILENAME "levelsetup.conf"
#define EDITORSETUP_FILENAME "editorsetup.conf"
#define TREE_TYPE_MUSIC_DIR ARTWORK_TYPE_MUSIC
#define TREE_TYPE_LEVEL_DIR 3
#define TREE_TYPE_LEVEL_NR 4
+#define TREE_TYPE_PLAYER_NAME 5
#define NUM_BASE_TREE_TYPES 4
-#define NUM_TREE_TYPES 5
+#define NUM_TREE_TYPES 6
#define INFOTEXT_UNDEFINED ""
#define INFOTEXT_GRAPHICS_DIR "Custom Graphics"
#define INFOTEXT_MUSIC_DIR "Custom Music"
#define INFOTEXT_LEVEL_DIR "Level Sets"
#define INFOTEXT_LEVEL_NR "Levels"
+#define INFOTEXT_PLAYER_NAME "Players & Teams"
-#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_LEVEL_NR ? \
+#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_PLAYER_NAME ? \
+ INFOTEXT_PLAYER_NAME : \
+ (t) == TREE_TYPE_LEVEL_NR ? \
INFOTEXT_LEVEL_NR : \
(t) == TREE_TYPE_LEVEL_DIR ? \
INFOTEXT_LEVEL_DIR : \
(artwork).snd_first : \
(artwork).mus_first)
+#define ARTWORK_CURRENT_PTR(artwork, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ &(artwork).gfx_current : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ &(artwork).snd_current : \
+ &(artwork).mus_current)
+
+#define ARTWORK_CURRENT(artwork, type) \
+ ((type) == ARTWORK_TYPE_GRAPHICS ? \
+ (artwork).gfx_current : \
+ (type) == ARTWORK_TYPE_SOUNDS ? \
+ (artwork).snd_current : \
+ (artwork).mus_current)
+
#define ARTWORK_CURRENT_IDENTIFIER_PTR(artwork, type) \
((type) == ARTWORK_TYPE_GRAPHICS ? \
&(artwork).gfx_current_identifier : \
char *server_host;
int server_port;
+ SDL_Thread *server_thread;
+ boolean is_server_thread;
};
struct RuntimeInfo
char *execute_command;
char *special_flags;
+ char *debug_mode;
boolean mytapes;
boolean serveronly;
int target_x, target_y; // tile cursor target screen position
int sx, sy; // tile cursor screen start position
+
+ boolean xsn_debug; // enable or disable XSN debugging
};
struct OverlayInfo
struct SetupSystemInfo
{
+ char *sdl_renderdriver;
char *sdl_videodriver;
char *sdl_audiodriver;
int audio_fragment_size;
boolean create_user_levelset;
boolean menu_game;
+ boolean menu_engines;
boolean menu_editor;
boolean menu_graphics;
boolean menu_sound;
boolean frame_delay_use_mod_key;
boolean frame_delay_game_only;
boolean show_frames_per_second;
+ int xsn_mode;
+ int xsn_percent;
};
struct SetupInfo
{
char *player_name;
+ boolean multiple_users;
+
boolean sound;
boolean sound_loops;
boolean sound_music;
boolean quick_switch;
boolean input_on_focus;
boolean prefer_aga_graphics;
+ boolean prefer_lowpass_sounds;
+ boolean prefer_extra_panel_items;
boolean game_speed_extended;
int game_frame_delay;
boolean sp_show_border_elements;
struct OptionInfo options;
};
+struct UserInfo
+{
+ int nr;
+};
+
struct TreeInfo
{
struct TreeInfo **node_top; // topmost node in tree
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)
extern struct ArtworkInfo artwork;
extern struct JoystickInfo joystick;
extern struct SetupInfo setup;
+extern struct UserInfo user;
extern LevelDirTree *leveldir_first_all;
extern LevelDirTree *leveldir_first;
extern boolean motion_status;
extern int wheel_steps;
extern boolean keyrepeat_status;
+extern boolean textinput_status;
extern int redraw_mask;
void InitGfxOtherSettings(void);
void InitTileCursorInfo(void);
void InitOverlayInfo(void);
+void SetOverlayGridSizeAndButtons(void);
void SetTileCursorEnabled(boolean);
void SetTileCursorActive(boolean);
void SetTileCursorTargetXY(int, int);