X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsystem.h;h=11c88762ff96f9fbd2dd275050b57fd1bbe25d9d;hb=746d91a67b5059c607e8e6bd0453e6e0738ffe45;hp=02f396d773bf79c30544e4fa26d53276732e328d;hpb=888ee0497f046c51100416e0a033ec35d77fb45c;p=rocksndiamonds.git diff --git a/src/libgame/system.h b/src/libgame/system.h index 02f396d7..11c88762 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 // ============================================================================ @@ -22,6 +22,8 @@ #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,36 @@ #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_RENAME "/api/players/rename" + +#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" @@ -341,16 +371,21 @@ #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_BLOCK (1 << 3) -#define STYLE_PASSTHROUGH (1 << 4) -#define STYLE_MULTIPLE_ACTIONS (1 << 5) +// 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 @@ -498,6 +533,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 @@ -561,6 +599,9 @@ JOY_BUTTON_2 : \ JOY_NO_ACTION) +// maximum number of level sets in the level set history +#define MAX_LEVELDIR_HISTORY 12 + // default name for empty highscore entry #define EMPTY_PLAYER_NAME "no name" @@ -582,6 +623,9 @@ // default value for undefined levelset #define UNDEFINED_LEVELSET "[NONE]" +// default value for undefined password +#define UNDEFINED_PASSWORD "[undefined]" + // default value for undefined parameter #define ARG_DEFAULT "[DEFAULT]" @@ -592,18 +636,11 @@ // default value for off-screen positions #define POS_OFFSCREEN (-1000000) -// definitions for game sub-directories -#ifndef RO_GAME_DIR -#define RO_GAME_DIR "." +// definitions for game base path and sub-directories +#ifndef BASE_PATH +#define BASE_PATH "." #endif -#ifndef RW_GAME_DIR -#define RW_GAME_DIR "." -#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" @@ -615,6 +652,7 @@ #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" @@ -633,8 +671,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" @@ -744,9 +784,15 @@ #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 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" @@ -754,8 +800,15 @@ #define INFOTEXT_MUSIC_DIR "Custom Music" #define INFOTEXT_LEVEL_DIR "Level Sets" #define INFOTEXT_LEVEL_NR "Levels" +#define INFOTEXT_PLAYER_NAME "Players & Teams" + +#define BACKLINK_TEXT_MAIN ".. (main menu)" +#define BACKLINK_TEXT_SETUP ".. (setup menu)" +#define BACKLINK_TEXT_PARENT ".. (parent directory)" -#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 : \ @@ -767,6 +820,10 @@ INFOTEXT_MUSIC_DIR : \ INFOTEXT_UNDEFINED) +#define TREE_BACKLINK_TEXT(t) ((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 ? \ @@ -854,6 +911,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 : \ @@ -952,8 +1023,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; }; @@ -967,11 +1037,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 @@ -979,8 +1053,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; @@ -989,8 +1062,14 @@ 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; boolean mytapes; boolean serveronly; @@ -1146,6 +1225,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 @@ -1239,6 +1320,8 @@ struct SetupEditorInfo boolean show_element_token; + boolean show_read_only_warning; + boolean use_template_for_new_levels; }; @@ -1247,6 +1330,11 @@ struct SetupAutoSetupInfo int editor_zoom_tilesize; }; +struct SetupLevelSetupInfo +{ + char *last_level_series[MAX_LEVELDIR_HISTORY + 1]; +}; + struct SetupEditorCascadeInfo { boolean el_bd; @@ -1296,6 +1384,7 @@ struct SetupShortcutInfo struct SetupSystemInfo { + char *sdl_renderdriver; char *sdl_videodriver; char *sdl_audiodriver; int audio_fragment_size; @@ -1350,11 +1439,16 @@ 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; + + boolean multiple_users; boolean sound; boolean sound_loops; @@ -1375,7 +1469,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; @@ -1385,15 +1480,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; @@ -1410,7 +1510,15 @@ 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 provide_uploading_tapes; + struct SetupAutoSetupInfo auto_setup; + struct SetupLevelSetupInfo level_setup; + struct SetupEditorInfo editor; struct SetupEditorCascadeInfo editor_cascade; struct SetupShortcutInfo shortcut; @@ -1423,6 +1531,11 @@ struct SetupInfo struct OptionInfo options; }; +struct UserInfo +{ + int nr; +}; + struct TreeInfo { struct TreeInfo **node_top; // topmost node in tree @@ -1479,6 +1592,7 @@ struct TreeInfo 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 @@ -1743,6 +1857,7 @@ 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; @@ -1774,7 +1889,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)); @@ -1799,6 +1913,7 @@ 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); @@ -1862,6 +1977,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 **); @@ -1895,4 +2011,7 @@ boolean ReadJoystick(int, int *, int *, boolean *, boolean *); boolean CheckJoystickOpened(int); void ClearJoystickState(void); +void InitEmscriptenFilesystem(void); +void SyncEmscriptenFilesystem(void); + #endif // SYSTEM_H