added support for more event types for global animations (yet to be added)
[rocksndiamonds.git] / src / libgame / system.h
index 6bf12a6670d2a58f781810a7a1099e7ecac7713d..d0584d4b922d331048d2cbea3ca265ccdb8fe928 100644 (file)
@@ -27,7 +27,7 @@
 #include "sdl.h"
 
 
-/* the additional 'b' is needed for Win32 to open files in binary mode */
+// the additional 'b' is needed for Win32 to open files in binary mode
 #define MODE_READ                      "rb"
 #define MODE_WRITE                     "wb"
 #define MODE_APPEND                    "ab"
 #define BLIT_INVERSE                   2
 #define BLIT_ON_BACKGROUND             3
 
-/* values for fullscreen status */
+// values for fullscreen status
 #define FULLSCREEN_NOT_AVAILABLE       FALSE
 #define FULLSCREEN_AVAILABLE           TRUE
 
-/* values for window scaling */
+// values for window scaling
 #define WINDOW_SCALING_NOT_AVAILABLE   FALSE
 #define WINDOW_SCALING_AVAILABLE       TRUE
 
 #define MAX_WINDOW_SCALING_PERCENT     400
 #define STEP_WINDOW_SCALING_PERCENT    10
 
-/* values for window scaling quality */
+// values for window scaling quality
 #define SCALING_QUALITY_NEAREST                "nearest"
 #define SCALING_QUALITY_LINEAR         "linear"
 #define SCALING_QUALITY_BEST           "best"
 
 #define SCALING_QUALITY_DEFAULT                SCALING_QUALITY_LINEAR
 
-/* values for screen rendering mode */
+// values for screen rendering mode
 #define STR_SPECIAL_RENDERING_OFF      "stream_texture_only"
 #define STR_SPECIAL_RENDERING_BITMAP   "bitmap_and_stream_texture"
 #define STR_SPECIAL_RENDERING_TARGET   "target_texture_only"
 #define STR_SPECIAL_RENDERING_DOUBLE   "stream_and_target_texture"
 
-#if defined(TARGET_SDL2)
 #define STR_SPECIAL_RENDERING_DEFAULT  STR_SPECIAL_RENDERING_DOUBLE
-#else
-#define STR_SPECIAL_RENDERING_DEFAULT  STR_SPECIAL_RENDERING_BITMAP
-#endif
 
 #define SPECIAL_RENDERING_OFF          0
 #define SPECIAL_RENDERING_BITMAP       1
 #define SPECIAL_RENDERING_TARGET       2
 #define SPECIAL_RENDERING_DOUBLE       3
 
-#if defined(TARGET_SDL2)
 #define SPECIAL_RENDERING_DEFAULT      SPECIAL_RENDERING_DOUBLE
-#else
-#define SPECIAL_RENDERING_DEFAULT      SPECIAL_RENDERING_BITMAP
-#endif
 
-/* values for touch control */
+// values for vertical screen retrace synchronization (vsync)
+#define STR_VSYNC_MODE_OFF             "off"
+#define STR_VSYNC_MODE_NORMAL          "normal"
+#define STR_VSYNC_MODE_ADAPTIVE                "adaptive"
+
+#define STR_VSYNC_MODE_DEFAULT         STR_VSYNC_MODE_OFF
+
+#define VSYNC_MODE_OFF                 0
+#define VSYNC_MODE_NORMAL              1
+#define VSYNC_MODE_ADAPTIVE            -1
+
+#define VSYNC_MODE_DEFAULT             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 touch control
 #define TOUCH_CONTROL_OFF              "off"
 #define TOUCH_CONTROL_VIRTUAL_BUTTONS  "virtual_buttons"
 #define TOUCH_CONTROL_WIPE_GESTURES    "wipe_gestures"
 
 #define TOUCH_MOVE_DISTANCE_DEFAULT    2
 #define TOUCH_DROP_DISTANCE_DEFAULT    5
+#define TOUCH_TRANSPARENCY_DEFAULT     50
 
+#define ALPHA_FROM_TRANSPARENCY(x)     ((100 - x) * SDL_ALPHA_OPAQUE / 100)
+#define ALPHA_FADING_STEPSIZE(x)       ((x) / 25)
 
-/* values for special settings for mobile devices */
+// values for special settings for mobile devices
 #if defined(PLATFORM_ANDROID)
 #define USE_TOUCH_INPUT_OVERLAY
 #define USE_COMPLETE_DISPLAY
 #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 */
+// default input keys
 #define DEFAULT_KEY_LEFT               KSYM_Left
 #define DEFAULT_KEY_RIGHT              KSYM_Right
 #define DEFAULT_KEY_UP                 KSYM_Up
 #define DEFAULT_KEY_OKAY               KSYM_Return
 #define DEFAULT_KEY_CANCEL             KSYM_Escape
 
-/* default shortcut keys */
+// default shortcut keys
 #define DEFAULT_KEY_SAVE_GAME          KSYM_F1
 #define DEFAULT_KEY_LOAD_GAME          KSYM_F2
 #define DEFAULT_KEY_TOGGLE_PAUSE       KSYM_space
 #define DEFAULT_KEY_SNAP_UP            KSYM_UNDEFINED
 #define DEFAULT_KEY_SNAP_DOWN          KSYM_UNDEFINED
 
-/* default debug setup keys and values */
+// default debug setup keys and values
 #define DEFAULT_FRAME_DELAY_0          20              // 100 % speed
 #define DEFAULT_FRAME_DELAY_1          500             // 4 % speed
 #define DEFAULT_FRAME_DELAY_2          250             // 8 % speed
 #define DEFAULT_FRAME_DELAY_USE_MOD_KEY        FALSE
 #define DEFAULT_FRAME_DELAY_GAME_ONLY  TRUE
 
-/* values for key_status */
+// values for key_status
 #define KEY_NOT_PRESSED                        FALSE
 #define KEY_RELEASED                   FALSE
 #define KEY_PRESSED                    TRUE
 
-/* values for button status */
+// values for button status
 #define MB_NOT_PRESSED                 FALSE
 #define MB_NOT_RELEASED                        TRUE
 #define MB_RELEASED                    FALSE
                                         (b) == MB_MIDDLEBUTTON ?  5 :  \
                                         (b) == MB_RIGHTBUTTON  ? 10 : 1)
 
-/* values for move directions */
+// values for move directions
 #define MV_BIT_LEFT                    0
 #define MV_BIT_RIGHT                   1
 #define MV_BIT_UP                      2
 
 #define NUM_DIRECTIONS                 4
 
-/* diagonal movement directions are used in a different contect than buttons */
+// diagonal movement directions are used in a different contect than buttons
 #define MV_BIT_UPLEFT                  4
 #define MV_BIT_UPRIGHT                 5
 #define MV_BIT_DOWNLEFT                        6
 
 #define NUM_DIRECTIONS_FULL            8
 
-/* values for special "button" bitmasks */
+// values for special "button" bitmasks
 #define BUTTON_1                       4
 #define BUTTON_2                       5
 
 #define NUM_PLAYER_ACTIONS             6
 
-/* values for special "focus player" bitmasks */
+// values for special "focus player" bitmasks
 #define BIT_SET_FOCUS                  6
 
-/* values for drawing stages for global animations */
+// values for drawing stages for global animations
 #define DRAW_GLOBAL_ANIM_STAGE_1       1
 #define DRAW_GLOBAL_ANIM_STAGE_2       2
 
-/* values for drawing target (various functions) */
+// values for drawing target (various functions)
 #define DRAW_TO_BACKBUFFER             0
 #define DRAW_TO_FIELDBUFFER            1
 #define DRAW_TO_SCREEN                 2
 #define DRAW_TO_FADE_SOURCE            3
 #define DRAW_TO_FADE_TARGET            4
 
-/* values for move directions and special "button" key bitmasks */
+// values for move directions and special "button" key bitmasks
 #define MV_NONE                        0
 #define MV_LEFT                        (1 << MV_BIT_LEFT)
 #define MV_RIGHT               (1 << MV_BIT_RIGHT)
                                 (x) == MV_DOWNRIGHT ? MV_UPLEFT    : \
                                 MV_NONE)
 
-/* values for animation mode (frame order and direction) */
-/* (stored in level files -- never change existing values) */
+// values for animation mode (frame order and direction)
+// (stored in level files -- never change existing values)
 #define ANIM_NONE              0
 #define ANIM_LOOP              (1 << 0)
 #define ANIM_LINEAR            (1 << 1)
 #define ANIM_REVERSE           (1 << 8)
 #define ANIM_OPAQUE_PLAYER     (1 << 9)
 
-/* values for special (non game element) animation modes */
-/* (not stored in level files -- can be changed, if needed) */
+// values for special (non game element) animation modes
+// (not stored in level files -- can be changed, if needed)
 #define ANIM_HORIZONTAL                (1 << 10)
 #define ANIM_VERTICAL          (1 << 11)
 #define ANIM_CENTERED          (1 << 12)
 
 #define ANIM_DEFAULT           ANIM_LOOP
 
-/* values for special drawing styles (currently only for crumbled graphics) */
+// values for special drawing styles (currently only for crumbled graphics)
 #define STYLE_NONE             0
 #define STYLE_ACCURATE_BORDERS (1 << 0)
 #define STYLE_INNER_CORNERS    (1 << 1)
 #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_DEFAULT          STYLE_NONE
 
-/* values for special global animation events */
+// 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)
 
+// anim number: bits 0-7
+// part number: bits 8-15
 #define ANIM_EVENT_ANIM_BIT    0
 #define ANIM_EVENT_PART_BIT    8
 
 
 #define ANIM_EVENT_DEFAULT     ANIM_EVENT_NONE
 
-/* values for fade mode */
+// values for special global animation event actions
+#define ANIM_EVENT_ACTION_NONE -1
+
+// values for fade mode
 #define FADE_TYPE_NONE         0
 #define FADE_TYPE_FADE_IN      (1 << 0)
 #define FADE_TYPE_FADE_OUT     (1 << 1)
 
 #define FADE_MODE_DEFAULT      FADE_MODE_FADE
 
-/* values for toon positions */
+// values for toon positions
 #define POS_UNDEFINED          -1
 #define POS_LEFT               0
 #define POS_RIGHT              1
 #define POS_ANY                        7
 #define POS_LAST               8
 
-/* values for text alignment */
+// values for text alignment
 #define ALIGN_LEFT             (1 << 0)
 #define ALIGN_RIGHT            (1 << 1)
 #define ALIGN_CENTER           (1 << 2)
                                 (v) == VALIGN_BOTTOM ? (y) - (h) : (y))
 #define ALIGNED_TEXT_XPOS(p)   ALIGNED_XPOS((p)->x, (p)->width,  (p)->align)
 #define ALIGNED_TEXT_YPOS(p)   ALIGNED_YPOS((p)->y, (p)->height, (p)->valign)
+#define ALIGNED_VP_XPOS(p)     ALIGNED_TEXT_XPOS(p)
+#define ALIGNED_VP_YPOS(p)     ALIGNED_TEXT_YPOS(p)
 
-/* values for redraw_mask */
+// values for redraw_mask
 #define REDRAW_NONE            (0)
 #define REDRAW_ALL             (1 << 0)
 #define REDRAW_FIELD           (1 << 1)
 #define IN_GFX_DOOR_3(x, y)    (x >= gfx.ex && x < gfx.ex + gfx.exsize && \
                                 y >= gfx.ey && y < gfx.ey + gfx.eysize)
 
-/* values for mouse cursor */
+// values for mouse cursor
 #define CURSOR_DEFAULT         0
 #define CURSOR_NONE            1
 #define CURSOR_PLAYFIELD       2
 
-/* fundamental game speed values */
-#define ONE_SECOND_DELAY       1000    /* delay value for one second */
-#define MENU_FRAME_DELAY       20      /* frame delay in milliseconds */
-#define GAME_FRAME_DELAY       20      /* frame delay in milliseconds */
-#define FFWD_FRAME_DELAY       10      /* 200% speed for fast forward */
+// fundamental game speed values
+#define ONE_SECOND_DELAY       1000    // delay value for one second
+#define MENU_FRAME_DELAY       20      // frame delay in milliseconds
+#define GAME_FRAME_DELAY       20      // frame delay in milliseconds
+#define FFWD_FRAME_DELAY       10      // 200% speed for fast forward
+#define MIN_VSYNC_FRAME_DELAY  15      // minimum value for vsync to keep
+#define MAX_VSYNC_FRAME_DELAY  16      // maximum value for vsync to work
 #define FRAMES_PER_SECOND      (ONE_SECOND_DELAY / GAME_FRAME_DELAY)
 #define FRAMES_PER_SECOND_SP   35
 
-/* maximum playfield size supported by libgame functions */
+// maximum playfield size supported by libgame functions
 #define MAX_PLAYFIELD_WIDTH    128
 #define MAX_PLAYFIELD_HEIGHT   128
 
-/* maximum number of parallel players supported by libgame functions */
+// maximum number of parallel players supported by libgame functions
 #define MAX_PLAYERS            4
 
-/* maximum allowed length of player name */
+// maximum allowed length of player name
 #define MAX_PLAYER_NAME_LEN    10
 
-/* maximum number of levels in a level set */
+// maximum number of levels in a level set
 #define MAX_LEVELS             1000
 
-/* maximum number of global animation and parts */
+// maximum number of global animation and parts
 #define MAX_GLOBAL_ANIMS               32
 #define MAX_GLOBAL_ANIM_PARTS          32
 
-/* default name for empty highscore entry */
+// minimum/maximum/default x/y grid size for virtual buttons
+#define MIN_GRID_XSIZE                 3
+#define MIN_GRID_YSIZE                 3
+#define MAX_GRID_XSIZE                 32
+#define MAX_GRID_YSIZE                 32
+#define GRID_REAL_WIDTH                        MAX(1, MAX(video.screen_width,  \
+                                                  video.screen_height))
+#define GRID_REAL_HEIGHT               MAX(1, MIN(video.screen_width,  \
+                                                  video.screen_height))
+#define DEFAULT_GRID_XSIZE_0           18
+#define DEFAULT_GRID_YSIZE_0           MIN(MAX(MIN_GRID_YSIZE,         \
+                                               DEFAULT_GRID_XSIZE_0 *  \
+                                               GRID_REAL_HEIGHT /      \
+                                               GRID_REAL_WIDTH),       \
+                                           MAX_GRID_YSIZE)
+#define DEFAULT_GRID_XSIZE_1           13
+#define DEFAULT_GRID_YSIZE_1           MIN(MAX(MIN_GRID_YSIZE,         \
+                                               DEFAULT_GRID_XSIZE_1 *  \
+                                               GRID_REAL_WIDTH /       \
+                                               GRID_REAL_HEIGHT),      \
+                                           MAX_GRID_YSIZE)
+
+#define DEFAULT_GRID_XSIZE(n)          ((n) == 0 ? DEFAULT_GRID_XSIZE_0 : \
+                                        DEFAULT_GRID_XSIZE_1)
+#define DEFAULT_GRID_YSIZE(n)          ((n) == 0 ? DEFAULT_GRID_YSIZE_0 : \
+                                        DEFAULT_GRID_YSIZE_1)
+
+#define GRID_ACTIVE_NR()               (video.screen_width >   \
+                                        video.screen_height ? 0 : 1)
+
+// values for grid button characters for virtual buttons
+#define CHAR_GRID_BUTTON_NONE          ' '
+#define CHAR_GRID_BUTTON_LEFT          '<'
+#define CHAR_GRID_BUTTON_RIGHT         '>'
+#define CHAR_GRID_BUTTON_UP            '^'
+#define CHAR_GRID_BUTTON_DOWN          'v'
+#define CHAR_GRID_BUTTON_SNAP          '1'
+#define CHAR_GRID_BUTTON_DROP          '2'
+
+#define GET_ACTION_FROM_GRID_BUTTON(c) ((c) == CHAR_GRID_BUTTON_LEFT ?  \
+                                        JOY_LEFT :                      \
+                                        (c) == CHAR_GRID_BUTTON_RIGHT ? \
+                                        JOY_RIGHT :                     \
+                                        (c) == CHAR_GRID_BUTTON_UP ?    \
+                                        JOY_UP :                        \
+                                        (c) == CHAR_GRID_BUTTON_DOWN ?  \
+                                        JOY_DOWN :                      \
+                                        (c) == CHAR_GRID_BUTTON_SNAP ?  \
+                                        JOY_BUTTON_1 :                  \
+                                        (c) == CHAR_GRID_BUTTON_DROP ?  \
+                                        JOY_BUTTON_2 :                  \
+                                        JOY_NO_ACTION)
+
+// default name for empty highscore entry
 #define EMPTY_PLAYER_NAME      "no name"
 
-/* default name for unknown player names */
+// default name for unknown player names
 #define ANONYMOUS_NAME         "anonymous"
 
-/* default for other unknown names */
+// default for other unknown names
 #define UNKNOWN_NAME           "unknown"
 
-/* default name for new levels */
+// default name for new levels
 #define NAMELESS_LEVEL_NAME    "nameless level"
 
-/* default text for non-existant artwork */
+// default text for non-existant artwork
 #define NOT_AVAILABLE          "(not available)"
 
-/* default value for undefined filename */
+// default value for undefined filename
 #define UNDEFINED_FILENAME     "[NONE]"
 
-/* default value for undefined levelset */
+// default value for undefined levelset
 #define UNDEFINED_LEVELSET     "[NONE]"
 
-/* default value for undefined parameter */
+// default value for undefined parameter
 #define ARG_DEFAULT            "[DEFAULT]"
 
-/* default values for undefined configuration file parameters */
+// default values for undefined configuration file parameters
 #define ARG_UNDEFINED          "-1000000"
 #define ARG_UNDEFINED_VALUE    (-1000000)
 
-/* default value for off-screen positions */
+// default value for off-screen positions
 #define POS_OFFSCREEN          (-1000000)
 
-/* definitions for game sub-directories */
+// definitions for game sub-directories
 #ifndef RO_GAME_DIR
 #define RO_GAME_DIR            "."
 #endif
 #define RO_BASE_PATH           RO_GAME_DIR
 #define RW_BASE_PATH           RW_GAME_DIR
 
-/* directory names */
+// directory names
 #define GRAPHICS_DIRECTORY     "graphics"
 #define SOUNDS_DIRECTORY       "sounds"
 #define MUSIC_DIRECTORY                "music"
 #define DOCS_DIRECTORY         "docs"
 #define CACHE_DIRECTORY                "cache"
 #define CONF_DIRECTORY         "conf"
+#define NETWORK_DIRECTORY      "network"
 
 #define GFX_CLASSIC_SUBDIR     "gfx_classic"
 #define SND_CLASSIC_SUBDIR     "snd_classic"
 
 #define DEFAULT_LEVELSET       (setup.internal.default_level_series)
 
-/* file names and filename extensions */
+// file names and filename extensions
 #define LEVELSETUP_DIRECTORY   "levelsetup"
 #define SETUP_FILENAME         "setup.conf"
 #define AUTOSETUP_FILENAME     "autosetup.conf"
 #endif
 
 
-/* areas in bitmap PIX_DOOR */
-/* meaning in PIX_DB_DOOR: (3 PAGEs)
-   PAGEX1: 1. buffer for DOOR_1
-   PAGEX2: 2. buffer for DOOR_1
-   PAGEX3: buffer for animations
-*/
+// areas in bitmap PIX_DOOR
+// meaning in PIX_DB_DOOR: (3 PAGEs)
+// PAGEX1: 1. buffer for DOOR_1
+// PAGEX2: 2. buffer for DOOR_1
+// PAGEX3: buffer for animations
 
-/* these values are hard-coded to be able to use them in initialization */
-#define DOOR_GFX_PAGE_WIDTH    100     /* should be set to "gfx.dxsize" */
-#define DOOR_GFX_PAGE_HEIGHT   280     /* should be set to "gfx.dysize" */
+// these values are hard-coded to be able to use them in initialization
+#define DOOR_GFX_PAGE_WIDTH    100     // should be set to "gfx.dxsize"
+#define DOOR_GFX_PAGE_HEIGHT   280     // should be set to "gfx.dysize"
 
 #define DOOR_GFX_PAGESIZE      (DOOR_GFX_PAGE_WIDTH)
 #define DOOR_GFX_PAGEX1                (0 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEY2                (DOOR_GFX_PAGE_HEIGHT)
 
 
-/* macros for version handling */
+// macros for version handling
 #define VERSION_PART_1(x)      ((x) / 1000000)
 #define VERSION_PART_2(x)      (((x) % 1000000) / 10000)
 #define VERSION_PART_3(x)      (((x) % 10000) / 100)
 #define VERSION_IDENT(a,b,c,d) ((a) * 1000000 + (b) * 10000 + (c) * 100 + (d))
 
 
-/* macros for parent/child process identification */
+// macros for parent/child process identification
 #if defined(PLATFORM_UNIX)
 #define IS_PARENT_PROCESS()    (audio.mixer_pid != getpid())
 #define IS_CHILD_PROCESS()     (audio.mixer_pid == getpid())
 #endif
 
 
-/* values for artwork type */
+// values for artwork type
 #define ARTWORK_TYPE_GRAPHICS  0
 #define ARTWORK_TYPE_SOUNDS    1
 #define ARTWORK_TYPE_MUSIC     2
 #define NUM_ARTWORK_TYPES      3
 
 
-/* values for tree type (chosen to match artwork type) */
+// values for tree type (chosen to match artwork type)
 #define TREE_TYPE_UNDEFINED    -1
 #define TREE_TYPE_GRAPHICS_DIR ARTWORK_TYPE_GRAPHICS
 #define TREE_TYPE_SOUNDS_DIR   ARTWORK_TYPE_SOUNDS
 #define TREE_TYPE_LEVEL_DIR    3
 #define TREE_TYPE_LEVEL_NR     4
 
+#define NUM_BASE_TREE_TYPES    4
 #define NUM_TREE_TYPES         5
 
 #define INFOTEXT_UNDEFINED     ""
                                 INFOTEXT_MUSIC_DIR :                   \
                                 INFOTEXT_UNDEFINED)
 
-/* values for artwork handling */
+#define TREE_USERDIR(t)                ((t) == TREE_TYPE_LEVEL_DIR ?           \
+                                getUserLevelDir(NULL) :                \
+                                (t) == TREE_TYPE_GRAPHICS_DIR ?        \
+                                getUserGraphicsDir() :                 \
+                                (t) == TREE_TYPE_SOUNDS_DIR ?          \
+                                getUserSoundsDir() :                   \
+                                (t) == TREE_TYPE_MUSIC_DIR ?           \
+                                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 ?      \
                                 &(leveldir)->graphics_set :            \
                                 (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)     \
 }
 
 
-/* structure definitions */
+// structure definitions
 
 struct ProgramInfo
 {
-  char *command_basepath;      /* path to the program binary */
-  char *command_basename;      /* base filename of the program binary */
+  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 *config_filename;       // optional global program config filename
 
-  char *maindata_path;         /* main game data (installation) directory */
+  char *maindata_path;         // main game data (installation) directory
 
-  char *userdata_subdir;       /* personal user game data directory */
-  char *userdata_path;         /* resulting full path to game data directory */
+  char *userdata_subdir;       // personal user game data directory
+  char *userdata_path;         // resulting full path to game data directory
 
   char *program_title;
   char *window_title;
@@ -781,9 +913,9 @@ struct ProgramInfo
 
   char *cookie_prefix;
 
-  char *log_filename[NUM_LOGS];                /* log filenames for out/err messages */
-  FILE *log_file[NUM_LOGS];            /* log file handles for out/err files */
-  FILE *log_file_default[NUM_LOGS];    /* default log file handles (out/err) */
+  char *log_filename[NUM_LOGS];                // log filenames for out/err messages
+  FILE *log_file[NUM_LOGS];            // log file handles for out/err files
+  FILE *log_file_default[NUM_LOGS];    // default log file handles (out/err)
 
   int version_super;
   int version_major;
@@ -803,6 +935,22 @@ struct ProgramInfo
   boolean headless;
 };
 
+struct NetworkInfo
+{
+  boolean enabled;
+  boolean connected;
+  boolean serveronly;
+
+  char *server_host;
+  int server_port;
+
+};
+
+struct RuntimeInfo
+{
+  boolean uses_touch_device;
+};
+
 struct OptionInfo
 {
   char *server_host;
@@ -845,6 +993,7 @@ struct VideoSystemInfo
   int window_scaling_percent;
   char *window_scaling_quality;
   int screen_rendering_mode;
+  int vsync_mode;
 
   unsigned int frame_delay;
   unsigned int frame_delay_value;
@@ -865,7 +1014,7 @@ struct AudioSystemInfo
   boolean music_available;
 
   boolean sound_enabled;
-  boolean sound_deactivated;   /* for temporarily disabling sound */
+  boolean sound_deactivated;   // for temporarily disabling sound
 
   int mixer_pipe[2];
   int mixer_pid;
@@ -881,14 +1030,14 @@ struct FontBitmapInfo
 {
   Bitmap *bitmap;
 
-  int src_x, src_y;            /* start position of font characters */
-  int width, height;           /* width / height of font characters */
+  int src_x, src_y;            // start position of font characters
+  int width, height;           // width / height of font characters
 
-  int offset_x;                        /* offset to next font character */
-  int offset_y;                        /* offset to next font character */
+  int offset_x;                        // offset to next font character
+  int offset_y;                        // offset to next font character
 
-  int draw_xoffset;            /* offset for drawing font characters */
-  int draw_yoffset;            /* offset for drawing font characters */
+  int draw_xoffset;            // offset for drawing font characters
+  int draw_yoffset;            // offset for drawing font characters
 
   int num_chars;
   int num_chars_per_line;
@@ -961,34 +1110,42 @@ struct GfxInfo
 
 struct TileCursorInfo
 {
-  boolean enabled;             /* tile cursor generally enabled or disabled */
-  boolean active;              /* tile cursor activated (depending on game) */
-  boolean moving;              /* tile cursor moving to target position */
+  boolean enabled;             // tile cursor generally enabled or disabled
+  boolean active;              // tile cursor activated (depending on game)
+  boolean moving;              // tile cursor moving to target position
 
-  int xpos, ypos;              /* tile cursor level playfield position */
-  int x, y;                    /* tile cursor current screen position */
-  int target_x, target_y;      /* tile cursor target screen position */
+  int xpos, ypos;              // tile cursor level playfield position
+  int x, y;                    // tile cursor current screen position
+  int target_x, target_y;      // tile cursor target screen position
 
-  int sx, sy;                  /* tile cursor screen start position */
+  int sx, sy;                  // tile cursor screen start position
 };
 
 struct OverlayInfo
 {
-  boolean enabled;             /* overlay generally enabled or disabled */
-  boolean active;              /* overlay activated (depending on game mode) */
+  boolean enabled;             // overlay generally enabled or disabled
+  boolean active;              // overlay activated (depending on game mode)
 
   boolean show_grid;
+
+  int grid_xsize;
+  int grid_ysize;
+
+  char grid_button[MAX_GRID_XSIZE][MAX_GRID_YSIZE];
+  char grid_button_highlight;
+
+  int grid_button_action;
 };
 
 struct JoystickInfo
 {
   int status;
-  int nr[MAX_PLAYERS];         /* joystick number for each player */
+  int nr[MAX_PLAYERS];         // joystick number for each player
 };
 
 struct SetupJoystickInfo
 {
-  char *device_name;           /* device name of player's joystick */
+  char *device_name;           // device name of player's joystick
 
   int xleft, xmiddle, xright;
   int yupper, ymiddle, ylower;
@@ -1006,6 +1163,17 @@ struct SetupTouchInfo
   char *control_type;
   int move_distance;
   int drop_distance;
+
+  int grid_xsize[2];
+  int grid_ysize[2];
+
+  char grid_button[2][MAX_GRID_XSIZE][MAX_GRID_YSIZE];
+
+  int transparency;            // in percent (0 == opaque, 100 == invisible)
+  boolean draw_outlined;
+  boolean draw_pressed;
+
+  boolean grid_initialized;
 };
 
 struct SetupInputInfo
@@ -1133,6 +1301,17 @@ struct SetupInternalInfo
 
   boolean choose_from_top_leveldir;
   boolean show_scaling_in_title;
+
+  boolean menu_game;
+  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
@@ -1165,16 +1344,21 @@ struct SetupInfo
   boolean handicap;
   boolean skip_levels;
   boolean increment_levels;
+  boolean auto_play_next_level;
+  boolean skip_scores_after_game;
   boolean time_limit;
   boolean fullscreen;
   int window_scaling_percent;
   char *window_scaling_quality;
   char *screen_rendering_mode;
+  char *vsync_mode;
   boolean ask_on_escape;
   boolean ask_on_escape_editor;
+  boolean ask_on_game_over;
   boolean quick_switch;
   boolean input_on_focus;
   boolean prefer_aga_graphics;
+  boolean game_speed_extended;
   int game_frame_delay;
   boolean sp_show_border_elements;
   boolean small_game_graphics;
@@ -1183,14 +1367,18 @@ struct SetupInfo
   char *graphics_set;
   char *sounds_set;
   char *music_set;
-  int override_level_graphics;         /* not boolean -- can also be "AUTO" */
-  int override_level_sounds;           /* not boolean -- can also be "AUTO" */
-  int override_level_music;            /* not boolean -- can also be "AUTO" */
+  int override_level_graphics;         // not boolean -- can also be "AUTO"
+  int override_level_sounds;           // not boolean -- can also be "AUTO"
+  int override_level_music;            // not boolean -- can also be "AUTO"
 
   int volume_simple;
   int volume_loops;
   int volume_music;
 
+  boolean network_mode;
+  int network_player_nr;
+  char *network_server_hostname;
+
   struct SetupAutoSetupInfo auto_setup;
   struct SetupEditorInfo editor;
   struct SetupEditorCascadeInfo editor_cascade;
@@ -1206,69 +1394,69 @@ struct SetupInfo
 
 struct TreeInfo
 {
-  struct TreeInfo **node_top;          /* topmost node in tree */
-  struct TreeInfo *node_parent;                /* parent level directory info */
-  struct TreeInfo *node_group;         /* level group sub-directory info */
-  struct TreeInfo *next;               /* next level series structure node */
-
-  int cl_first;                /* internal control field for setup screen */
-  int cl_cursor;       /* internal control field for setup screen */
-
-  int type;            /* type of tree content */
-
-  /* fields for "type == TREE_TYPE_LEVEL_DIR" */
-
-  char *subdir;                /* 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 *year;          /* optional year of creation for levels or artwork */
-
-  char *program_title;    /* optional alternative text for program title */
-  char *program_copyright; /* optional alternative text for program copyright */
-  char *program_company;   /* optional alternative text for program company */
-
-  char *imported_from; /* optional comment for imported levels or artwork */
-  char *imported_by;   /* optional comment for imported levels or artwork */
-  char *tested_by;     /* optional comment to name people who tested a set */
-
-  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;    /* 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) */
-
-  char *level_filename;        /* filename of level file (for packed level file) */
-  char *level_filetype;        /* type of levels in level directory or level file */
-
-  char *special_flags; /* flags for special actions performed on level file */
-
-  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 latest_engine;/* force level set to use the latest game engine */
-
-  boolean level_group; /* directory contains more level series directories */
-  boolean parent_link; /* entry links back to parent directory */
-  boolean in_user_dir; /* user defined levels are stored in home directory */
-  boolean user_defined;        /* levels in user directory and marked as "private" */
-  boolean readonly;    /* readonly levels can not be changed with editor */
-  boolean handicap;    /* level set has no handicap when set to "false" */
-  boolean skip_levels; /* levels can be skipped 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 */
-
-  char *infotext;      /* optional text to describe the tree type (headline) */
+  struct TreeInfo **node_top;          // topmost node in tree
+  struct TreeInfo *node_parent;                // parent level directory info
+  struct TreeInfo *node_group;         // level group sub-directory info
+  struct TreeInfo *next;               // next level series structure node
+
+  int cl_first;                // internal control field for setup screen
+  int cl_cursor;       // internal control field for setup screen
+
+  int type;            // type of tree content
+
+  // fields for "type == TREE_TYPE_LEVEL_DIR"
+
+  char *subdir;                // 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 *year;          // optional year of creation for levels or artwork
+
+  char *program_title;    // optional alternative text for program title
+  char *program_copyright; // optional alternative text for program copyright
+  char *program_company;   // optional alternative text for program company
+
+  char *imported_from; // optional comment for imported levels or artwork
+  char *imported_by;   // optional comment for imported levels or artwork
+  char *tested_by;     // optional comment to name people who tested a set
+
+  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;    // 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)
+
+  char *level_filename;        // filename of level file (for packed level file)
+  char *level_filetype;        // type of levels in level directory or level file
+
+  char *special_flags; // flags for special actions performed on level file
+
+  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 latest_engine;// force level set to use the latest game engine
+
+  boolean level_group; // directory contains more level series directories
+  boolean parent_link; // entry links back to parent directory
+  boolean in_user_dir; // user defined levels are stored in home directory
+  boolean user_defined;        // levels in user directory and marked as "private"
+  boolean readonly;    // readonly levels can not be changed with editor
+  boolean handicap;    // level set has no handicap when set to "false"
+  boolean skip_levels; // levels can be skipped 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
+
+  char *infotext;      // optional text to describe the tree type (headline)
 };
 
 typedef struct TreeInfo TreeInfo;
@@ -1298,6 +1486,12 @@ struct ValueTextInfo
   char *text;
 };
 
+struct StringValueTextInfo
+{
+  char *value;
+  char *text;
+};
+
 struct ConfigInfo
 {
   char *token;
@@ -1324,8 +1518,8 @@ struct FileInfo
   char *default_filename;
   char *filename;
 
-  char **default_parameter;                    /* array of file parameters */
-  char **parameter;                            /* array of file parameters */
+  char **default_parameter;                    // array of file parameters
+  char **parameter;                            // array of file parameters
 
   boolean redefined;
   boolean fallback_to_default;
@@ -1342,7 +1536,7 @@ struct SetupFileList
 
 struct ListNodeInfo
 {
-  char *source_filename;                       /* primary key for node list */
+  char *source_filename;                       // primary key for node list
   int num_references;
 };
 
@@ -1358,39 +1552,39 @@ struct PropertyMapping
 
 struct ArtworkListInfo
 {
-  int type;                                    /* type of artwork */
+  int type;                                    // type of artwork
 
   int num_file_list_entries;
   int num_dynamic_file_list_entries;
-  struct FileInfo *file_list;                  /* static artwork file array */
-  struct FileInfo *dynamic_file_list;          /* dynamic artwrk file array */
+  struct FileInfo *file_list;                  // static artwork file array
+  struct FileInfo *dynamic_file_list;          // dynamic artwrk file array
 
   int num_suffix_list_entries;
-  struct ConfigTypeInfo *suffix_list;          /* parameter suffixes array */
+  struct ConfigTypeInfo *suffix_list;          // parameter suffixes array
 
   int num_base_prefixes;
   int num_ext1_suffixes;
   int num_ext2_suffixes;
   int num_ext3_suffixes;
-  char **base_prefixes;                                /* base token prefixes array */
-  char **ext1_suffixes;                                /* property suffixes array 1 */
-  char **ext2_suffixes;                                /* property suffixes array 2 */
-  char **ext3_suffixes;                                /* property suffixes array 3 */
+  char **base_prefixes;                                // base token prefixes array
+  char **ext1_suffixes;                                // property suffixes array 1
+  char **ext2_suffixes;                                // property suffixes array 2
+  char **ext3_suffixes;                                // property suffixes array 3
 
   int num_ignore_tokens;
-  char **ignore_tokens;                                /* file tokens to be ignored */
+  char **ignore_tokens;                                // file tokens to be ignored
 
   int num_property_mapping_entries;
-  struct PropertyMapping *property_mapping;    /* mapping token -> artwork */
+  struct PropertyMapping *property_mapping;    // mapping token -> artwork
 
   int sizeof_artwork_list_entry;
 
-  struct ListNodeInfo **artwork_list;          /* static artwork node array */
-  struct ListNodeInfo **dynamic_artwork_list;  /* dynamic artwrk node array */
-  struct ListNode *content_list;               /* dynamic artwork node list */
+  struct ListNodeInfo **artwork_list;          // static artwork node array
+  struct ListNodeInfo **dynamic_artwork_list;  // dynamic artwrk node array
+  struct ListNode *content_list;               // dynamic artwork node list
 
-  void *(*load_artwork)(char *);               /* constructor function */
-  void (*free_artwork)(void *);                        /* destructor function */
+  void *(*load_artwork)(char *);               // constructor function
+  void (*free_artwork)(void *);                        // destructor function
 };
 
 struct XY
@@ -1414,7 +1608,19 @@ struct RectWithBorder
 {
   int x, y;
   int width, height;
+  int min_width, min_height;
+  int max_width, max_height;
+  int margin_left;
+  int margin_right;
+  int margin_top;
+  int margin_bottom;
+  int border_left;
+  int border_right;
+  int border_top;
+  int border_bottom;
   int border_size;
+  int align_size;
+  int align, valign;
 };
 
 struct MenuPosInfo
@@ -1440,20 +1646,27 @@ struct DoorPartPosInfo
 struct TextPosInfo
 {
   int x, y;
-  int xoffset;                 /* special case for tape date and time */
-  int xoffset2;                        /* special case for tape date */
+  int xoffset;                 // special case for tape date and time
+  int xoffset2;                        // special case for tape date
+  int yoffset;                 // special case for list of preview players
   int width, height;
   int align, valign;
-  int size;                    /* also used for suffix ".digits" */
+  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;           /* also used for suffix ".draw_order" */
+  boolean draw_player;         // special case for network player buttons
+  int sort_priority;           // also used for suffix ".draw_order"
   int id;
 
-  int direction;               /* needed for panel time/health graphics */
-  int class;                   /* needed for panel time/health graphics */
-  int style;                   /* needed for panel time/health graphics */
+  int direction;               // needed for panel time/health graphics
+  int class;                   // needed for panel time/health graphics
+  int style;                   // needed for panel time/health graphics
+
+  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
@@ -1463,6 +1676,14 @@ struct MouseActionInfo
   int button_hint;
 };
 
+struct LevelSetInfo
+{
+  int music[MAX_LEVELS];
+
+  char *identifier;
+  int level_nr;
+};
+
 struct LevelStats
 {
   int played;
@@ -1470,11 +1691,13 @@ struct LevelStats
 };
 
 
-/* ========================================================================= */
-/* exported variables                                                        */
-/* ========================================================================= */
+// ============================================================================
+// exported variables
+// ============================================================================
 
 extern struct ProgramInfo      program;
+extern struct NetworkInfo      network;
+extern struct RuntimeInfo      runtime;
 extern struct OptionInfo       options;
 extern struct VideoSystemInfo  video;
 extern struct AudioSystemInfo  audio;
@@ -1491,6 +1714,7 @@ extern LevelDirTree              *leveldir_first;
 extern LevelDirTree           *leveldir_current;
 extern int                     level_nr;
 
+extern struct LevelSetInfo     levelset;
 extern struct LevelStats       level_stats[];
 
 extern DrawWindow             *window;
@@ -1500,22 +1724,22 @@ extern DrawBuffer              *drawto;
 extern int                     button_status;
 extern boolean                 motion_status;
 extern int                     wheel_steps;
-#if defined(TARGET_SDL2)
 extern boolean                 keyrepeat_status;
-#endif
 
 extern int                     redraw_mask;
 
 extern int                     FrameCounter;
 
 
-/* function definitions */
+// function definitions
 
 void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
                     char *, int);
+void InitNetworkInfo(boolean, boolean, boolean, char *, int);
+void InitRuntimeInfo(void);
 
-void InitScoresInfo();
-void SetWindowTitle();
+void InitScoresInfo(void);
+void SetWindowTitle(void);
 
 void InitWindowTitleFunction(char *(*window_title_function)(void));
 void InitExitMessageFunction(void (*exit_message_function)(char *, va_list));
@@ -1535,10 +1759,10 @@ void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void));
 void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int, int));
 void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int));
 void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int));
-void InitGfxCustomArtworkInfo();
-void InitGfxOtherSettings();
-void InitTileCursorInfo();
-void InitOverlayInfo();
+void InitGfxCustomArtworkInfo(void);
+void InitGfxOtherSettings(void);
+void InitTileCursorInfo(void);
+void InitOverlayInfo(void);
 void SetTileCursorEnabled(boolean);
 void SetTileCursorActive(boolean);
 void SetTileCursorTargetXY(int, int);
@@ -1547,7 +1771,8 @@ void SetTileCursorSXSY(int, int);
 void SetOverlayEnabled(boolean);
 void SetOverlayActive(boolean);
 void SetOverlayShowGrid(boolean);
-boolean GetOverlayActive();
+boolean GetOverlayEnabled(void);
+boolean GetOverlayActive(void);
 void SetDrawDeactivationMask(int);
 int GetDrawDeactivationMask(void);
 void SetDrawBackgroundMask(int);
@@ -1577,7 +1802,7 @@ void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int);
 boolean DrawingDeactivatedField(void);
 boolean DrawingDeactivated(int, int, int, int);
 boolean DrawingOnBackground(int, int);
-boolean DrawingAreaChanged();
+boolean DrawingAreaChanged(void);
 void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int);
 void BlitTexture(Bitmap *, int, int, int, int, int, int);
 void BlitTextureMasked(Bitmap *, int, int, int, int, int, int);
@@ -1594,7 +1819,7 @@ void KeyboardAutoRepeatOn(void);
 void KeyboardAutoRepeatOff(void);
 boolean SetVideoMode(boolean);
 void SetVideoFrameDelay(unsigned int);
-unsigned int GetVideoFrameDelay();
+unsigned int GetVideoFrameDelay(void);
 boolean ChangeVideoModeIfNeeded(boolean);
 
 Bitmap *LoadImage(char *);
@@ -1619,15 +1844,15 @@ void PeekEvent(Event *event);
 void CheckQuitEvent(void);
 Key GetEventKey(KeyEvent *, boolean);
 KeyMod HandleKeyModState(Key, int);
-KeyMod GetKeyModState();
-KeyMod GetKeyModStateFromEvents();
+KeyMod GetKeyModState(void);
+KeyMod GetKeyModStateFromEvents(void);
 void StartTextInput(int, int, int, int);
-void StopTextInput();
+void StopTextInput(void);
 boolean CheckCloseWindowEvent(ClientMessageEvent *);
 
-void InitJoysticks();
+void InitJoysticks(void);
 boolean ReadJoystick(int, int *, int *, boolean *, boolean *);
 boolean CheckJoystickOpened(int);
-void ClearJoystickState();
+void ClearJoystickState(void);
 
-#endif /* SYSTEM_H */
+#endif // SYSTEM_H