2019-04-14 00:21:56 +08:00
|
|
|
/* Copyright (C) 2019 Mr Goldberg
|
|
|
|
This file is part of the Goldberg Emulator
|
|
|
|
|
|
|
|
The Goldberg Emulator is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 3 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
The Goldberg Emulator is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with the Goldberg Emulator; if not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
#ifndef SETTINGS_INCLUDE
|
|
|
|
#define SETTINGS_INCLUDE
|
|
|
|
|
2020-07-16 17:56:24 +08:00
|
|
|
#include "base.h"
|
|
|
|
|
2021-05-31 06:18:19 +08:00
|
|
|
struct IP_PORT;
|
|
|
|
|
2019-04-14 00:21:56 +08:00
|
|
|
struct DLC_entry {
|
|
|
|
AppId_t appID;
|
|
|
|
std::string name;
|
|
|
|
bool available;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Mod_entry {
|
|
|
|
PublishedFileId_t id;
|
|
|
|
std::string title;
|
|
|
|
std::string path;
|
2023-08-21 11:58:55 +08:00
|
|
|
|
|
|
|
std::string previewURL;
|
|
|
|
EWorkshopFileType fileType;
|
|
|
|
std::string description;
|
|
|
|
uint64 steamIDOwner;
|
|
|
|
uint32 timeCreated;
|
|
|
|
uint32 timeUpdated;
|
|
|
|
uint32 timeAddedToUserList;
|
|
|
|
ERemoteStoragePublishedFileVisibility visibility;
|
|
|
|
bool banned;
|
|
|
|
bool acceptedForUse;
|
|
|
|
bool tagsTruncated;
|
|
|
|
std::string tags;
|
|
|
|
// file/url information
|
|
|
|
UGCHandle_t handleFile = k_UGCHandleInvalid;
|
|
|
|
UGCHandle_t handlePreviewFile = k_UGCHandleInvalid;
|
|
|
|
std::string primaryFileName;
|
|
|
|
int32 primaryFileSize;
|
|
|
|
std::string previewFileName;
|
|
|
|
int32 previewFileSize;
|
|
|
|
std::string workshopItemURL;
|
|
|
|
// voting information
|
|
|
|
uint32 votesUp;
|
|
|
|
uint32 votesDown;
|
|
|
|
float score;
|
|
|
|
// collection details
|
|
|
|
uint32 numChildren;
|
2019-04-14 00:21:56 +08:00
|
|
|
};
|
|
|
|
|
2019-08-04 06:55:08 +08:00
|
|
|
struct Leaderboard_config {
|
|
|
|
enum ELeaderboardSortMethod sort_method;
|
|
|
|
enum ELeaderboardDisplayType display_type;
|
|
|
|
};
|
|
|
|
|
2019-08-27 01:01:45 +08:00
|
|
|
enum Stat_Type {
|
|
|
|
STAT_TYPE_INT,
|
|
|
|
STAT_TYPE_FLOAT,
|
|
|
|
STAT_TYPE_AVGRATE
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Stat_config {
|
|
|
|
enum Stat_Type type;
|
|
|
|
union {
|
|
|
|
float default_value_float;
|
|
|
|
uint32 default_value_int;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2019-09-07 21:39:41 +08:00
|
|
|
struct Image_Data {
|
|
|
|
uint32 width;
|
|
|
|
uint32 height;
|
|
|
|
std::string data;
|
|
|
|
};
|
|
|
|
|
2019-09-11 02:54:54 +08:00
|
|
|
struct Controller_Settings {
|
2019-09-11 11:58:27 +08:00
|
|
|
std::map<std::string, std::map<std::string, std::pair<std::set<std::string>, std::string>>> action_sets;
|
2019-09-11 02:54:54 +08:00
|
|
|
std::map<std::string, std::string> action_set_layer_parents;
|
|
|
|
std::map<std::string, std::map<std::string, std::pair<std::set<std::string>, std::string>>> action_set_layers;
|
|
|
|
};
|
|
|
|
|
2023-08-21 11:58:55 +08:00
|
|
|
struct Group_Clans {
|
|
|
|
CSteamID id;
|
|
|
|
std::string name;
|
|
|
|
std::string tag;
|
|
|
|
};
|
|
|
|
|
2023-08-25 01:59:01 +08:00
|
|
|
struct Overlay_Appearance {
|
|
|
|
float font_size = 16.0;
|
2023-11-10 23:25:36 +08:00
|
|
|
float icon_size = 64.0;
|
2023-11-13 05:09:17 +08:00
|
|
|
float notification_r = 0.16;
|
|
|
|
float notification_g = 0.29;
|
|
|
|
float notification_b = 0.48;
|
|
|
|
float notification_a = 1.0;
|
|
|
|
float background_r = -1.0;
|
|
|
|
float background_g = -1.0;
|
|
|
|
float background_b = -1.0;
|
|
|
|
float background_a = -1.0;
|
|
|
|
float element_r = -1.0;
|
|
|
|
float element_g = -1.0;
|
|
|
|
float element_b = -1.0;
|
|
|
|
float element_a = -1.0;
|
|
|
|
float element_hovered_r = -1.0;
|
|
|
|
float element_hovered_g = -1.0;
|
|
|
|
float element_hovered_b = -1.0;
|
|
|
|
float element_hovered_a = -1.0;
|
|
|
|
float element_active_r = -1.0;
|
|
|
|
float element_active_g = -1.0;
|
|
|
|
float element_active_b = -1.0;
|
|
|
|
float element_active_a = -1.0;
|
2023-08-25 01:59:01 +08:00
|
|
|
};
|
|
|
|
|
2019-04-14 00:21:56 +08:00
|
|
|
class Settings {
|
|
|
|
CSteamID steam_id;
|
|
|
|
CGameID game_id;
|
|
|
|
std::string name, language;
|
|
|
|
CSteamID lobby_id;
|
|
|
|
|
|
|
|
bool unlockAllDLCs;
|
2019-04-22 04:47:45 +08:00
|
|
|
bool offline;
|
2019-04-14 00:21:56 +08:00
|
|
|
std::vector<struct DLC_entry> DLCs;
|
|
|
|
std::vector<struct Mod_entry> mods;
|
2019-05-09 20:10:03 +08:00
|
|
|
std::map<AppId_t, std::string> app_paths;
|
2019-08-04 06:55:08 +08:00
|
|
|
std::map<std::string, Leaderboard_config> leaderboards;
|
2019-08-27 01:01:45 +08:00
|
|
|
std::map<std::string, Stat_config> stats;
|
2019-08-04 06:55:08 +08:00
|
|
|
bool create_unknown_leaderboards;
|
2019-08-27 01:01:45 +08:00
|
|
|
uint16 port;
|
2019-05-09 20:10:03 +08:00
|
|
|
|
2019-04-14 00:21:56 +08:00
|
|
|
public:
|
2019-04-17 05:58:08 +08:00
|
|
|
#ifdef LOBBY_CONNECT
|
|
|
|
static const bool is_lobby_connect = true;
|
|
|
|
#else
|
|
|
|
static const bool is_lobby_connect = false;
|
|
|
|
#endif
|
2019-04-14 00:21:56 +08:00
|
|
|
static std::string sanitize(std::string name);
|
2019-04-22 04:47:45 +08:00
|
|
|
Settings(CSteamID steam_id, CGameID game_id, std::string name, std::string language, bool offline);
|
2019-04-14 00:21:56 +08:00
|
|
|
CSteamID get_local_steam_id();
|
|
|
|
CGameID get_local_game_id();
|
|
|
|
const char *get_local_name();
|
2022-08-05 14:09:43 +08:00
|
|
|
void set_local_name(char *name);
|
2019-04-14 00:21:56 +08:00
|
|
|
const char *get_language();
|
2022-08-05 14:09:43 +08:00
|
|
|
void set_language(char *language);
|
|
|
|
|
2019-04-14 00:21:56 +08:00
|
|
|
void set_game_id(CGameID game_id);
|
|
|
|
void set_lobby(CSteamID lobby_id);
|
|
|
|
CSteamID get_lobby();
|
2019-04-22 04:47:45 +08:00
|
|
|
bool is_offline() {return offline; }
|
2019-08-27 01:01:45 +08:00
|
|
|
uint16 get_port() {return port;}
|
|
|
|
void set_port(uint16 port) { this->port = port;}
|
2019-04-14 00:21:56 +08:00
|
|
|
|
|
|
|
//DLC stuff
|
|
|
|
void unlockAllDLC(bool value);
|
|
|
|
void addDLC(AppId_t appID, std::string name, bool available);
|
|
|
|
unsigned int DLCCount();
|
|
|
|
bool hasDLC(AppId_t appID);
|
|
|
|
bool getDLC(unsigned int index, AppId_t &appID, bool &available, std::string &name);
|
2023-12-18 21:03:14 +08:00
|
|
|
bool allDLCUnlocked() const;
|
2019-04-14 00:21:56 +08:00
|
|
|
|
2020-02-01 03:31:29 +08:00
|
|
|
//Depots
|
|
|
|
std::vector<DepotId_t> depots;
|
|
|
|
|
2019-05-09 20:10:03 +08:00
|
|
|
//App Install paths
|
|
|
|
void setAppInstallPath(AppId_t appID, std::string path);
|
|
|
|
std::string getAppInstallPath(AppId_t appID);
|
|
|
|
|
2019-04-14 00:21:56 +08:00
|
|
|
//mod stuff
|
|
|
|
void addMod(PublishedFileId_t id, std::string title, std::string path);
|
2023-08-21 11:58:55 +08:00
|
|
|
void addModDetails(PublishedFileId_t id, Mod_entry details);
|
2019-04-14 00:21:56 +08:00
|
|
|
Mod_entry getMod(PublishedFileId_t id);
|
|
|
|
bool isModInstalled(PublishedFileId_t id);
|
|
|
|
std::set<PublishedFileId_t> modSet();
|
2019-08-04 06:55:08 +08:00
|
|
|
|
|
|
|
//leaderboards
|
|
|
|
void setLeaderboard(std::string leaderboard, enum ELeaderboardSortMethod sort_method, enum ELeaderboardDisplayType display_type);
|
|
|
|
std::map<std::string, Leaderboard_config> getLeaderboards() { return leaderboards; }
|
|
|
|
void setCreateUnknownLeaderboards(bool enable) {create_unknown_leaderboards = enable;}
|
|
|
|
bool createUnknownLeaderboards() { return create_unknown_leaderboards; }
|
2019-08-27 01:01:45 +08:00
|
|
|
|
|
|
|
//custom broadcasts
|
2021-05-31 06:18:19 +08:00
|
|
|
std::set<IP_PORT> custom_broadcasts;
|
2019-08-27 01:01:45 +08:00
|
|
|
|
|
|
|
//stats
|
|
|
|
std::map<std::string, Stat_config> getStats() { return stats; }
|
2022-07-12 13:09:27 +08:00
|
|
|
void setStatDefiniton(std::string name, struct Stat_config stat_config) {stats[ascii_to_lowercase(name)] = stat_config; }
|
2023-11-13 05:09:17 +08:00
|
|
|
// bypass to make SetAchievement() always return true, prevent some games from breaking
|
|
|
|
bool achievement_bypass = false;
|
2019-09-07 21:39:41 +08:00
|
|
|
|
2020-06-21 09:15:26 +08:00
|
|
|
//subscribed lobby/group ids
|
|
|
|
std::set<uint64> subscribed_groups;
|
2023-08-21 11:58:55 +08:00
|
|
|
std::vector<Group_Clans> subscribed_groups_clans;
|
2020-06-21 09:15:26 +08:00
|
|
|
|
2019-09-07 21:39:41 +08:00
|
|
|
//images
|
|
|
|
std::map<int, struct Image_Data> images;
|
|
|
|
int add_image(std::string data, uint32 width, uint32 height);
|
2023-08-21 11:58:55 +08:00
|
|
|
bool disable_account_avatar = false;
|
2019-09-11 02:54:54 +08:00
|
|
|
|
2023-12-18 11:08:23 +08:00
|
|
|
//installed app ids, Steam_Apps::BIsAppInstalled()
|
|
|
|
std::set<AppId_t> installed_app_ids;
|
|
|
|
bool assume_any_app_installed = true;
|
|
|
|
bool appIsInstalled(AppId_t appID);
|
|
|
|
|
2023-12-18 11:21:31 +08:00
|
|
|
//is playing on beta branch + current/forced branch name
|
|
|
|
bool is_beta_branch = false;
|
|
|
|
std::string current_branch_name = "public";
|
|
|
|
|
2019-09-11 02:54:54 +08:00
|
|
|
//controller
|
|
|
|
struct Controller_Settings controller_settings;
|
2019-12-12 01:06:19 +08:00
|
|
|
std::string glyphs_directory;
|
2019-10-06 03:39:50 +08:00
|
|
|
|
|
|
|
//networking
|
|
|
|
bool disable_networking = false;
|
2020-01-20 01:55:14 +08:00
|
|
|
|
2023-08-21 11:58:55 +08:00
|
|
|
//gameserver source query
|
|
|
|
bool disable_source_query = false;
|
|
|
|
|
2020-01-20 01:55:14 +08:00
|
|
|
//overlay
|
|
|
|
bool disable_overlay = false;
|
2023-08-21 11:58:55 +08:00
|
|
|
bool disable_overlay_achievement_notification = false;
|
2023-08-25 01:59:01 +08:00
|
|
|
bool disable_overlay_friend_notification = false;
|
2023-11-13 05:09:17 +08:00
|
|
|
bool disable_overlay_warning = false;
|
2023-08-25 01:59:01 +08:00
|
|
|
Overlay_Appearance overlay_appearance;
|
2021-08-07 13:46:10 +08:00
|
|
|
|
|
|
|
//app build id
|
|
|
|
int build_id = 10;
|
|
|
|
|
2022-08-14 02:40:55 +08:00
|
|
|
//supported languages
|
|
|
|
std::set<std::string> supported_languages;
|
|
|
|
|
2021-08-07 13:46:10 +08:00
|
|
|
//make lobby creation fail in the matchmaking interface
|
|
|
|
bool disable_lobby_creation = false;
|
2022-08-05 14:09:43 +08:00
|
|
|
|
|
|
|
//warn people who use force_ settings
|
|
|
|
bool warn_forced = false;
|
|
|
|
|
|
|
|
//warn people who use local save
|
|
|
|
bool warn_local_save = false;
|
2023-10-30 05:48:51 +08:00
|
|
|
std::string local_save;
|
2023-08-21 11:58:55 +08:00
|
|
|
|
|
|
|
//steamhttp external download support
|
|
|
|
bool http_online = false;
|
2023-11-10 23:25:36 +08:00
|
|
|
|
|
|
|
//steam deck flag
|
|
|
|
bool steam_deck = false;
|
2023-12-22 03:25:37 +08:00
|
|
|
|
|
|
|
// can use GC token for generation
|
|
|
|
bool use_gc_token = false;
|
|
|
|
|
|
|
|
// use new app_ticket auth instead of old one
|
|
|
|
bool enable_new_app_ticket = false;
|
2019-04-14 00:21:56 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|