X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=0a6c35e16755dfc94706fcec31b618d49d67e842;hb=HEAD;hp=50dc573630763b6f3459a795a7f1b72e1898a217;hpb=85019a08c195ac31e548b0549053fbc9f71b427f;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 50dc5736..73d50ddc 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -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 // ============================================================================ @@ -16,12 +16,14 @@ #include "types.h" -#if defined(PLATFORM_MACOSX) +#if defined(PLATFORM_MAC) #include "macosx.h" -#elif defined(PLATFORM_WIN32) +#elif defined(PLATFORM_WINDOWS) #include "windows.h" #elif defined(PLATFORM_ANDROID) #include "android.h" +#elif defined(PLATFORM_EMSCRIPTEN) +#include "emscripten.h" #endif #include "sdl.h" @@ -65,15 +67,17 @@ #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" @@ -87,10 +91,38 @@ #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 API server settings +#define API_SERVER_HOSTNAME "api.artsoft.org" +#define API_SERVER_PORT 80 +#define API_SERVER_METHOD "POST" +#define API_SERVER_URI_ADD "/api/scores/add" +#define API_SERVER_URI_GET "/api/scores/get" +#define API_SERVER_URI_GETTAPE "/api/scores/gettape" +#define API_SERVER_URI_RENAME "/api/players/rename" +#define API_SERVER_URI_RESETUUID "/api/players/resetuuid" + +#if defined(TESTING) +#undef API_SERVER_HOSTNAME +#define API_SERVER_HOSTNAME "api-test.artsoft.org" +#define TEST_PREFIX "test." +#else +#define TEST_PREFIX "" +#endif + // values for touch control #define TOUCH_CONTROL_OFF "off" #define TOUCH_CONTROL_VIRTUAL_BUTTONS "virtual_buttons" @@ -112,10 +144,11 @@ // 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) +#define SCREEN_KEYBOARD_POS(h) ((h) * 40 / 100) #endif // values for drag-and-drop support (some parts not added before SDL 2.0.5) @@ -130,7 +163,7 @@ #define DEFAULT_KEY_RIGHT KSYM_Right #define DEFAULT_KEY_UP KSYM_Up #define DEFAULT_KEY_DOWN KSYM_Down -#if defined(PLATFORM_MACOSX) +#if defined(PLATFORM_MAC) #define DEFAULT_KEY_SNAP KSYM_Control_L #define DEFAULT_KEY_DROP KSYM_KP_Enter #else @@ -143,6 +176,8 @@ // default shortcut keys #define DEFAULT_KEY_SAVE_GAME KSYM_F1 #define DEFAULT_KEY_LOAD_GAME KSYM_F2 +#define DEFAULT_KEY_RESTART_GAME KSYM_F3 +#define DEFAULT_KEY_PAUSE_BEFORE_END KSYM_F4 #define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space #define DEFAULT_KEY_FOCUS_PLAYER_1 KSYM_F5 #define DEFAULT_KEY_FOCUS_PLAYER_2 KSYM_F6 @@ -205,6 +240,7 @@ #define MB_MENU_MARK TRUE #define MB_MENU_INITIALIZE (-1) #define MB_MENU_LEAVE (-2) +#define MB_MENU_CONTINUE (-3) #define MB_LEFTBUTTON 1 #define MB_MIDDLEBUTTON 2 #define MB_RIGHTBUTTON 3 @@ -252,6 +288,8 @@ // values for drawing stages for global animations #define DRAW_GLOBAL_ANIM_STAGE_1 1 #define DRAW_GLOBAL_ANIM_STAGE_2 2 +#define DRAW_GLOBAL_ANIM_STAGE_3 3 +#define DRAW_GLOBAL_ANIM_STAGE_RESTART 4 // values for drawing target (various functions) #define DRAW_TO_BACKBUFFER 0 @@ -328,39 +366,47 @@ #define ANIM_CE_DELAY (1 << 7) #define ANIM_REVERSE (1 << 8) #define ANIM_OPAQUE_PLAYER (1 << 9) +#define ANIM_LEVEL_NR (1 << 10) // 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_STATIC_PANEL (1 << 13) -#define ANIM_ALL (1 << 14) -#define ANIM_ONCE (1 << 15) +#define ANIM_HORIZONTAL (1 << 11) +#define ANIM_VERTICAL (1 << 12) +#define ANIM_CENTERED (1 << 13) +#define ANIM_STATIC_PANEL (1 << 14) +#define ANIM_ALL (1 << 15) +#define ANIM_ONCE (1 << 16) +#define ANIM_TILED (1 << 17) +#define ANIM_RANDOM_STATIC (1 << 18) #define ANIM_DEFAULT ANIM_LOOP -// 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 +#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_ANIM_BIT 0 -#define ANIM_EVENT_PART_BIT 8 - +#define ANIM_EVENT_SELF (1 << 0) +#define ANIM_EVENT_ANY (1 << 1) +#define ANIM_EVENT_CLICK (1 << 2) +#define ANIM_EVENT_INIT (1 << 3) +#define ANIM_EVENT_START (1 << 4) +#define ANIM_EVENT_END (1 << 5) +#define ANIM_EVENT_POST (1 << 6) +#define ANIM_EVENT_UNCLICK_ANY (1 << 7) +#define ANIM_EVENT_CE_CHANGE (1 << 8) + +// event mask: bits 0-15 +// CE number: bits 16-23 +// anim number: bits 16-23 +// page number: bits 24-31 +// part number: bits 24-31 +#define ANIM_EVENT_CE_BIT 16 +#define ANIM_EVENT_ANIM_BIT 16 +#define ANIM_EVENT_PAGE_BIT 24 +#define ANIM_EVENT_PART_BIT 24 + +#define ANIM_EVENT_CE_MASK (0xff << ANIM_EVENT_CE_BIT) #define ANIM_EVENT_ANIM_MASK (0xff << ANIM_EVENT_ANIM_BIT) +#define ANIM_EVENT_PAGE_MASK (0xff << ANIM_EVENT_PAGE_BIT) #define ANIM_EVENT_PART_MASK (0xff << ANIM_EVENT_PART_BIT) #define ANIM_EVENT_DEFAULT ANIM_EVENT_NONE @@ -368,6 +414,35 @@ // values for special global animation event actions #define ANIM_EVENT_ACTION_NONE -1 +// 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 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 used for global animations +#define STYLE_BLOCK (1 << 4) +#define STYLE_PASSTHROUGH (1 << 5) +#define STYLE_MULTIPLE_ACTIONS (1 << 6) +#define STYLE_CONSUME_CE_EVENT (1 << 7) + +#define STYLE_DEFAULT STYLE_NONE + // values for fade mode #define FADE_TYPE_NONE 0 #define FADE_TYPE_FADE_IN (1 << 0) @@ -391,6 +466,11 @@ #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 @@ -401,7 +481,9 @@ #define POS_LOWER 5 #define POS_BOTTOM 6 #define POS_ANY 7 -#define POS_LAST 8 +#define POS_CE 8 +#define POS_CE_TRIGGER 9 +#define POS_LAST 10 // values for text alignment #define ALIGN_LEFT (1 << 0) @@ -414,9 +496,9 @@ #define VALIGN_MIDDLE (1 << 2) #define VALIGN_DEFAULT VALIGN_TOP -#define ALIGNED_XPOS(x,w,a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \ +#define ALIGNED_XPOS(x, w, a) ((a) == ALIGN_CENTER ? (x) - (w) / 2 : \ (a) == ALIGN_RIGHT ? (x) - (w) : (x)) -#define ALIGNED_YPOS(y,h,v) ((v) == VALIGN_MIDDLE ? (y) - (h) / 2 : \ +#define ALIGNED_YPOS(y, h, v) ((v) == VALIGN_MIDDLE ? (y) - (h) / 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) @@ -450,6 +532,7 @@ 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 @@ -471,6 +554,9 @@ // 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 @@ -534,6 +620,9 @@ JOY_BUTTON_2 : \ JOY_NO_ACTION) +// maximum number of level sets in the level set history +#define MAX_LEVELDIR_HISTORY 100 + // default name for empty highscore entry #define EMPTY_PLAYER_NAME "no name" @@ -555,28 +644,27 @@ // default value for undefined levelset #define UNDEFINED_LEVELSET "[NONE]" -// default value for undefined parameter +// default value for undefined password +#define UNDEFINED_PASSWORD "[undefined]" + +// default value for undefined string parameter +#define ARG_UNDEFINED_STRING "[undefined]" + +// default value for default string parameter #define ARG_DEFAULT "[DEFAULT]" -// default values for undefined configuration file parameters +// default values for undefined numerical parameter (as string and integer) #define ARG_UNDEFINED "-1000000" #define ARG_UNDEFINED_VALUE (-1000000) // default value for off-screen positions #define POS_OFFSCREEN (-1000000) -// definitions for game sub-directories -#ifndef RO_GAME_DIR -#define RO_GAME_DIR "." -#endif - -#ifndef RW_GAME_DIR -#define RW_GAME_DIR "." +// definitions for game base path and sub-directories +#ifndef BASE_PATH +#define BASE_PATH "." #endif -#define RO_BASE_PATH RO_GAME_DIR -#define RW_BASE_PATH RW_GAME_DIR - // directory names #define GRAPHICS_DIRECTORY "graphics" #define SOUNDS_DIRECTORY "sounds" @@ -585,9 +673,15 @@ #define TAPES_DIRECTORY "tapes" #define SCORES_DIRECTORY "scores" #define DOCS_DIRECTORY "docs" +#define ELEMENTS_DIRECTORY "elements" +#define CREDITS_DIRECTORY "credits" +#define PROGRAM_INFO_DIRECTORY "program" +#define LEVELSET_INFO_DIRECTORY "levelset" #define CACHE_DIRECTORY "cache" #define CONF_DIRECTORY "conf" #define NETWORK_DIRECTORY "network" +#define USERS_DIRECTORY "users" +#define PERSISTENT_DIRECTORY "/persistent" #define GFX_CLASSIC_SUBDIR "gfx_classic" #define SND_CLASSIC_SUBDIR "snd_classic" @@ -606,8 +700,10 @@ // 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 SERVERSETUP_FILENAME "serversetup.conf" #define EDITORSETUP_FILENAME "editorsetup.conf" #define EDITORCASCADE_FILENAME "editorcascade.conf" #define HELPANIM_FILENAME "helpanim.conf" @@ -618,18 +714,14 @@ #define MUSICINFO_FILENAME "musicinfo.conf" #define ARTWORKINFO_CACHE_FILE "artworkinfo.cache" #define LEVELTEMPLATE_FILENAME "template.level" +#define UPLOADED_FILENAME ".uploaded" #define LEVELFILE_EXTENSION "level" #define TAPEFILE_EXTENSION "tape" #define SCOREFILE_EXTENSION "score" #define GAMECONTROLLER_BASENAME "gamecontrollerdb.txt" -#define LOG_OUT_BASENAME "stdout.txt" -#define LOG_ERR_BASENAME "stderr.txt" - -#define LOG_OUT_ID 0 -#define LOG_ERR_ID 1 -#define NUM_LOGS 2 +#define FALLBACK_TEXT_FILENAME "fallback.txt" #define STRING_PARENT_DIRECTORY ".." #define STRING_TOP_DIRECTORY "/" @@ -643,7 +735,7 @@ #define STRING_NEWLINE_UNIX "\n" #define STRING_NEWLINE_DOS "\r\n" -#if defined(PLATFORM_WIN32) +#if defined(PLATFORM_WINDOWS) #define CHAR_PATH_SEPARATOR CHAR_PATH_SEPARATOR_DOS #define STRING_PATH_SEPARATOR STRING_PATH_SEPARATOR_DOS #define STRING_NEWLINE STRING_NEWLINE_DOS @@ -717,9 +809,16 @@ #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 TREE_TYPE_SCORE_ENTRY 6 #define NUM_BASE_TREE_TYPES 4 -#define NUM_TREE_TYPES 5 +#define NUM_TREE_TYPES 7 + +#define TREE_TYPE_IS_DIR(type) ((type) == TREE_TYPE_GRAPHICS_DIR || \ + (type) == TREE_TYPE_SOUNDS_DIR || \ + (type) == TREE_TYPE_MUSIC_DIR || \ + (type) == TREE_TYPE_LEVEL_DIR) #define INFOTEXT_UNDEFINED "" #define INFOTEXT_GRAPHICS_DIR "Custom Graphics" @@ -727,8 +826,20 @@ #define INFOTEXT_MUSIC_DIR "Custom Music" #define INFOTEXT_LEVEL_DIR "Level Sets" #define INFOTEXT_LEVEL_NR "Levels" - -#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_LEVEL_NR ? \ +#define INFOTEXT_PLAYER_NAME "Players & Teams" +#define INFOTEXT_SCORE_ENTRY "Hall of Fame" + +#define BACKLINK_TEXT_MAIN ".. (main menu)" +#define BACKLINK_TEXT_SETUP ".. (setup menu)" +#define BACKLINK_TEXT_PARENT ".. (parent directory)" +#define BACKLINK_TEXT_BACK "back" +#define BACKLINK_TEXT_NEXT "next" + +#define TREE_INFOTEXT(t) ((t) == TREE_TYPE_SCORE_ENTRY ? \ + INFOTEXT_SCORE_ENTRY : \ + (t) == TREE_TYPE_PLAYER_NAME ? \ + INFOTEXT_PLAYER_NAME : \ + (t) == TREE_TYPE_LEVEL_NR ? \ INFOTEXT_LEVEL_NR : \ (t) == TREE_TYPE_LEVEL_DIR ? \ INFOTEXT_LEVEL_DIR : \ @@ -740,6 +851,12 @@ INFOTEXT_MUSIC_DIR : \ INFOTEXT_UNDEFINED) +#define TREE_BACKLINK_TEXT(t) ((t) == TREE_TYPE_SCORE_ENTRY ? \ + BACKLINK_TEXT_BACK : \ + (t) == TREE_TYPE_LEVEL_DIR ? \ + BACKLINK_TEXT_MAIN : \ + BACKLINK_TEXT_SETUP) + #define TREE_USERDIR(t) ((t) == TREE_TYPE_LEVEL_DIR ? \ getUserLevelDir(NULL) : \ (t) == TREE_TYPE_GRAPHICS_DIR ? \ @@ -827,6 +944,20 @@ (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 : \ @@ -883,7 +1014,12 @@ #define UPDATE_BUSY_STATE() \ { \ if (gfx.draw_busy_anim_function != NULL) \ - gfx.draw_busy_anim_function(); \ + gfx.draw_busy_anim_function(TRUE); \ +} +#define UPDATE_BUSY_STATE_NOT_LOADING() \ +{ \ + if (gfx.draw_busy_anim_function != NULL) \ + gfx.draw_busy_anim_function(FALSE); \ } @@ -901,17 +1037,17 @@ struct ProgramInfo char *userdata_subdir; // personal user game data directory char *userdata_path; // resulting full path to game data directory + char *program_basename; char *program_title; char *window_title; - char *icon_title; char *icon_filename; 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; // filename for log messages + FILE *log_file; // file handle for log files + FILE *log_file_default; // default log file handle int version_super; int version_major; @@ -925,8 +1061,7 @@ struct ProgramInfo void (*exit_message_function)(char *, va_list); void (*exit_function)(int); - boolean global_scores; - boolean many_scores_per_name; + int api_thread_count; boolean headless; }; @@ -940,11 +1075,15 @@ struct NetworkInfo char *server_host; int server_port; + SDL_Thread *server_thread; + boolean is_server_thread; }; struct RuntimeInfo { boolean uses_touch_device; + + boolean use_api_server; }; struct OptionInfo @@ -952,8 +1091,7 @@ struct OptionInfo char *server_host; int server_port; - char *ro_base_directory; - char *rw_base_directory; + char *base_directory; char *level_directory; char *graphics_directory; char *sounds_directory; @@ -962,8 +1100,16 @@ struct OptionInfo char *conf_directory; char *execute_command; + char *tape_log_filename; char *special_flags; + char *debug_mode; + + char *player_name; + char *identifier; + char *level_nr; + + int display_nr; boolean mytapes; boolean serveronly; @@ -991,14 +1137,13 @@ struct VideoSystemInfo int screen_rendering_mode; int vsync_mode; - unsigned int frame_delay; - unsigned int frame_delay_value; + unsigned int frame_counter; + DelayCounter frame_delay; boolean shifted_up; int shifted_up_pos; int shifted_up_pos_last; - unsigned int shifted_up_delay; - unsigned int shifted_up_delay_value; + DelayCounter shifted_up_delay; boolean initialized; }; @@ -1093,15 +1238,21 @@ struct GfxInfo struct FontBitmapInfo *font_bitmap_info; int (*select_font_function)(int); int (*get_font_from_token_function)(char *); + char * (*get_token_from_font_function)(int); int anim_random_frame; + int anim_first_level; - void (*draw_busy_anim_function)(void); + void (*draw_busy_anim_function)(boolean); void (*draw_global_anim_function)(int, int); void (*draw_global_border_function)(int); - void (*draw_tile_cursor_function)(int); + void (*draw_tile_cursor_function)(int, int); + void (*draw_envelope_request_function)(int); int cursor_mode; + int cursor_mode_override; + int cursor_mode_final; + int mouse_x, mouse_y; }; struct TileCursorInfo @@ -1115,6 +1266,8 @@ struct TileCursorInfo 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 @@ -1170,6 +1323,8 @@ struct SetupTouchInfo boolean draw_pressed; boolean grid_initialized; + + boolean overlay_buttons; }; struct SetupInputInfo @@ -1208,6 +1363,8 @@ struct SetupEditorInfo boolean show_element_token; + boolean show_read_only_warning; + boolean use_template_for_new_levels; }; @@ -1216,6 +1373,11 @@ struct SetupAutoSetupInfo int editor_zoom_tilesize; }; +struct SetupLevelSetupInfo +{ + char *last_level_series[MAX_LEVELDIR_HISTORY + 1]; +}; + struct SetupEditorCascadeInfo { boolean el_bd; @@ -1232,6 +1394,7 @@ struct SetupEditorCascadeInfo boolean el_steel_chars; boolean el_ce; boolean el_ge; + boolean el_es; boolean el_ref; boolean el_user; boolean el_dynamic; @@ -1241,6 +1404,8 @@ struct SetupShortcutInfo { Key save_game; Key load_game; + Key restart_game; + Key pause_before_end; Key toggle_pause; Key focus_player[MAX_PLAYERS]; @@ -1265,6 +1430,7 @@ struct SetupShortcutInfo struct SetupSystemInfo { + char *sdl_renderdriver; char *sdl_videodriver; char *sdl_audiodriver; int audio_fragment_size; @@ -1297,8 +1463,11 @@ struct SetupInternalInfo boolean choose_from_top_leveldir; boolean show_scaling_in_title; + boolean create_user_levelset; + boolean info_screens_from_main; boolean menu_game; + boolean menu_engines; boolean menu_editor; boolean menu_graphics; boolean menu_sound; @@ -1308,6 +1477,21 @@ struct SetupInternalInfo boolean menu_shortcuts; boolean menu_exit; boolean menu_save_and_exit; + + boolean menu_shortcuts_various; + boolean menu_shortcuts_focus; + boolean menu_shortcuts_tape; + boolean menu_shortcuts_sound; + boolean menu_shortcuts_snap; + + boolean info_title; + boolean info_elements; + boolean info_music; + boolean info_credits; + boolean info_program; + boolean info_version; + boolean info_levelset; + boolean info_exit; }; struct SetupDebugInfo @@ -1317,23 +1501,33 @@ struct SetupDebugInfo 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; + char *player_uuid; + int player_version; + + boolean multiple_users; boolean sound; boolean sound_loops; boolean sound_music; boolean sound_simple; boolean toons; + boolean global_animations; 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 autorecord; + boolean autorecord_after_replay; + boolean auto_pause_on_start; boolean show_titlescreen; boolean quick_doors; boolean team_mode; @@ -1341,7 +1535,8 @@ struct SetupInfo boolean skip_levels; boolean increment_levels; boolean auto_play_next_level; - boolean skip_scores_after_game; + boolean count_score_after_game; + boolean show_scores_after_game; boolean time_limit; boolean fullscreen; int window_scaling_percent; @@ -1351,14 +1546,20 @@ struct SetupInfo boolean ask_on_escape; boolean ask_on_escape_editor; boolean ask_on_game_over; + boolean ask_on_quit_game; + boolean ask_on_quit_program; 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; boolean small_game_graphics; - boolean show_snapshot_buttons; + boolean show_load_save_buttons; + boolean show_undo_redo_buttons; + char *scores_in_highscore_list; char *graphics_set; char *sounds_set; @@ -1375,7 +1576,18 @@ struct SetupInfo int network_player_nr; char *network_server_hostname; + boolean use_api_server; + char *api_server_hostname; + char *api_server_password; + boolean ask_for_uploading_tapes; + boolean ask_for_remaining_tapes; + boolean provide_uploading_tapes; + boolean ask_for_using_api_server; + boolean has_remaining_tapes; + struct SetupAutoSetupInfo auto_setup; + struct SetupLevelSetupInfo level_setup; + struct SetupEditorInfo editor; struct SetupEditorCascadeInfo editor_cascade; struct SetupShortcutInfo shortcut; @@ -1388,6 +1600,11 @@ struct SetupInfo struct OptionInfo options; }; +struct UserInfo +{ + int nr; +}; + struct TreeInfo { struct TreeInfo **node_top; // topmost node in tree @@ -1422,6 +1639,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) @@ -1433,21 +1652,30 @@ struct TreeInfo char *special_flags; // flags for special actions performed on level file + char *empty_level_name; // name pattern if level title is "nameless level" + boolean force_level_name; // force also renaming non-nameless level titles + 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 + int pos; // custom position information of node in tree 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 is_copy; // this entry is a copy of another entry in the tree 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 time_limit; // level set has no time limit 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" + boolean info_screens_from_main; // can invoke info screens from main menu + 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 @@ -1700,10 +1928,10 @@ extern struct AudioSystemInfo audio; extern struct GfxInfo gfx; extern struct TileCursorInfo tile_cursor; extern struct OverlayInfo overlay; -extern struct AnimInfo anim; 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; @@ -1721,6 +1949,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; @@ -1734,7 +1963,6 @@ void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *, void InitNetworkInfo(boolean, boolean, boolean, char *, int); void InitRuntimeInfo(void); -void InitScoresInfo(void); void SetWindowTitle(void); void InitWindowTitleFunction(char *(*window_title_function)(void)); @@ -1751,14 +1979,16 @@ void InitGfxDoor3Info(int, int, int, int); void InitGfxWindowInfo(int, int); void InitGfxScrollbufferInfo(int, int); void InitGfxClipRegion(boolean, int, int, int, int); -void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)); +void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(boolean)); 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 InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int, int)); +void InitGfxDrawEnvelopeRequestFunction(void (*draw_envelope_request_function)(int)); void InitGfxCustomArtworkInfo(void); void InitGfxOtherSettings(void); void InitTileCursorInfo(void); void InitOverlayInfo(void); +void SetOverlayGridSizeAndButtons(void); void SetTileCursorEnabled(boolean); void SetTileCursorActive(boolean); void SetTileCursorTargetXY(int, int); @@ -1772,9 +2002,7 @@ boolean GetOverlayActive(void); void SetDrawDeactivationMask(int); int GetDrawDeactivationMask(void); void SetDrawBackgroundMask(int); -void SetWindowBackgroundBitmap(Bitmap *); -void SetMainBackgroundBitmap(Bitmap *); -void SetDoorBackgroundBitmap(Bitmap *); +void SetBackgroundBitmap(Bitmap *, int, int, int, int, int); void SetRedrawMaskFromArea(int, int, int, int); void LimitScreenUpdates(boolean); @@ -1783,12 +2011,14 @@ void InitVideoDefaults(void); void InitVideoDisplay(void); void CloseVideoDisplay(void); void InitVideoBuffer(int, int, int, boolean); +void ResetBitmapAlpha(Bitmap *); Bitmap *CreateBitmapStruct(void); Bitmap *CreateBitmap(int, int, int); void ReCreateBitmap(Bitmap **, int, int); void FreeBitmap(Bitmap *); +void SetBitmapAlphaNextBlit(Bitmap *, int); void BlitBitmap(Bitmap *, Bitmap *, int, int, int, int, int, int); -void BlitBitmapTiled(Bitmap *, Bitmap *, int, int, int, int, int, int, int,int); +void BlitBitmapTiled(Bitmap *, Bitmap *, int, int, int, int, int, int, int, int); void FadeRectangle(int, int, int, int, int, int, int, void (*draw_border_function)(void)); void FillRectangle(Bitmap *, int, int, int, int, Pixel); @@ -1796,7 +2026,7 @@ void ClearRectangle(Bitmap *, int, int, int, int); void ClearRectangleOnBackground(Bitmap *, int, int, int, int); void BlitBitmapMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); boolean DrawingDeactivatedField(void); -boolean DrawingDeactivated(int, int, int, int); +boolean DrawingDeactivated(int, int); boolean DrawingOnBackground(int, int); boolean DrawingAreaChanged(void); void BlitBitmapOnBackground(Bitmap *, Bitmap *, int, int, int, int, int, int); @@ -1804,12 +2034,10 @@ void BlitTexture(Bitmap *, int, int, int, int, int, int); void BlitTextureMasked(Bitmap *, int, int, int, int, int, int); void BlitToScreen(Bitmap *, int, int, int, int, int, int); void BlitToScreenMasked(Bitmap *, int, int, int, int, int, int); -void DrawSimpleBlackLine(Bitmap *, int, int, int, int); void DrawSimpleWhiteLine(Bitmap *, int, int, int, int); void DrawLines(Bitmap *, struct XY *, int, Pixel); Pixel GetPixel(Bitmap *, int, int); -Pixel GetPixelFromRGB(Bitmap *, unsigned int,unsigned int,unsigned int); -Pixel GetPixelFromRGBcompact(Bitmap *, unsigned int); +Pixel GetPixelFromRGB(Bitmap *, unsigned int, unsigned int, unsigned int); void KeyboardAutoRepeatOn(void); void KeyboardAutoRepeatOff(void); @@ -1822,6 +2050,7 @@ Bitmap *LoadImage(char *); Bitmap *LoadCustomImage(char *); void ReloadCustomImage(Bitmap *, char *); +Bitmap *ZoomBitmap(Bitmap *, int, int); void ReCreateGameTileSizeBitmap(Bitmap **); void CreateBitmapWithSmallBitmaps(Bitmap **, int, int); void CreateBitmapTextures(Bitmap **); @@ -1829,26 +2058,34 @@ 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); +Key GetEventKey(KeyEvent *); KeyMod HandleKeyModState(Key, int); KeyMod GetKeyModState(void); KeyMod GetKeyModStateFromEvents(void); void StartTextInput(int, int, int, int); void StopTextInput(void); -boolean CheckCloseWindowEvent(ClientMessageEvent *); +void PushUserEvent(int, int, int); +boolean PendingEscapeKeyEvent(void); void InitJoysticks(void); boolean ReadJoystick(int, int *, int *, boolean *, boolean *); boolean CheckJoystickOpened(int); void ClearJoystickState(void); +void InitEmscriptenFilesystem(void); +void SyncEmscriptenFilesystem(void); + #endif // SYSTEM_H