mirror of
				https://github.com/N64Recomp/N64ModernRuntime.git
				synced 2025-10-30 08:02:29 +00:00 
			
		
		
		
	Compare commits
	
		
			4 commits
		
	
	
		
			3069d33446
			...
			bf05c8d9a5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bf05c8d9a5 | ||
|   | 31462bf08b | ||
|   | 7cabbf8333 | ||
|   | b87f1e5412 | 
					 3 changed files with 17 additions and 42 deletions
				
			
		|  | @ -544,7 +544,7 @@ namespace recomp { | ||||||
|         void reset_hooks(); |         void reset_hooks(); | ||||||
|         void run_hook(uint8_t* rdram, recomp_context* ctx, size_t hook_slot_index); |         void run_hook(uint8_t* rdram, recomp_context* ctx, size_t hook_slot_index); | ||||||
| 
 | 
 | ||||||
|         ModOpenError parse_manifest(ModManifest &ret, const std::vector<char> &manifest_data, std::string &error_param, recomp::config::Config *config); |         ModOpenError parse_manifest(ModManifest &ret, const std::vector<char> &manifest_data, std::string &error_param, recomp::config::Config *config = nullptr); | ||||||
|         CodeModLoadError validate_api_version(uint32_t api_version, std::string& error_param); |         CodeModLoadError validate_api_version(uint32_t api_version, std::string& error_param); | ||||||
| 
 | 
 | ||||||
|         void initialize_mods(); |         void initialize_mods(); | ||||||
|  |  | ||||||
|  | @ -148,9 +148,6 @@ void Config::add_enum_option( | ||||||
| 
 | 
 | ||||||
|     ConfigOptionEnum option_enum = {{}, default_value}; |     ConfigOptionEnum option_enum = {{}, default_value}; | ||||||
| 
 | 
 | ||||||
|     // Note: this is a bit too predictive since this calls add_option
 |  | ||||||
|     size_t option_index = schema.options.size(); |  | ||||||
| 
 |  | ||||||
|     for (const auto &option : options) { |     for (const auto &option : options) { | ||||||
|         assert(option_enum.can_add_option(option.key, option.value) && "Duplicate enum option key or value."); |         assert(option_enum.can_add_option(option.key, option.value) && "Duplicate enum option key or value."); | ||||||
|         option_enum.options.push_back(option); |         option_enum.options.push_back(option); | ||||||
|  | @ -282,10 +279,10 @@ void Config::try_call_option_change_callback(const std::string& option_id, Confi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Config::set_option_value(const std::string& option_id, ConfigValueVariant value) { | void Config::set_option_value(const std::string& option_id, ConfigValueVariant value) { | ||||||
|     ConfigStorage &storage = requires_confirmation ? temp_storage : storage; |     ConfigStorage &conf_storage = requires_confirmation ? temp_storage : storage; | ||||||
| 
 | 
 | ||||||
|     auto it = storage.value_map.find(option_id); |     auto it = conf_storage.value_map.find(option_id); | ||||||
|     if (it != storage.value_map.end()) { |     if (it != conf_storage.value_map.end()) { | ||||||
|         ConfigValueVariant prev_value = it->second; |         ConfigValueVariant prev_value = it->second; | ||||||
|         it->second = value; |         it->second = value; | ||||||
| 
 | 
 | ||||||
|  | @ -338,6 +335,9 @@ nlohmann::json Config::get_storage_json() const { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         switch (option.type) { |         switch (option.type) { | ||||||
|  |         case ConfigOptionType::None: { | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|         case ConfigOptionType::Enum: { |         case ConfigOptionType::Enum: { | ||||||
|             auto &option_enum = std::get<ConfigOptionEnum>(option.variant); |             auto &option_enum = std::get<ConfigOptionEnum>(option.variant); | ||||||
|             auto found_opt = option_enum.find_option_from_value(std::get<uint32_t>(value)); |             auto found_opt = option_enum.find_option_from_value(std::get<uint32_t>(value)); | ||||||
|  | @ -469,7 +469,10 @@ bool Config::load_config(std::function<bool(nlohmann::json &)> validate_callback | ||||||
|         if (requires_confirmation) { |         if (requires_confirmation) { | ||||||
|             revert_temp_config(); |             revert_temp_config(); | ||||||
|         } |         } | ||||||
|         save_config(); |         if (!is_mod_config) { | ||||||
|  |             // Only save default config for non-mod configs
 | ||||||
|  |             save_config(); | ||||||
|  |         } | ||||||
|         derive_all_config_option_dependencies(); |         derive_all_config_option_dependencies(); | ||||||
|         clear_config_option_updates(); |         clear_config_option_updates(); | ||||||
|         loaded_config = true; |         loaded_config = true; | ||||||
|  |  | ||||||
|  | @ -6,35 +6,6 @@ | ||||||
| #include "librecomp/files.hpp" | #include "librecomp/files.hpp" | ||||||
| #include "librecomp/mods.hpp" | #include "librecomp/mods.hpp" | ||||||
| 
 | 
 | ||||||
| static bool read_json(std::ifstream input_file, nlohmann::json &json_out) { |  | ||||||
|     if (!input_file.good()) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     try { |  | ||||||
|         input_file >> json_out; |  | ||||||
|     } |  | ||||||
|     catch (nlohmann::json::parse_error &) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static bool read_json_with_backups(const std::filesystem::path &path, nlohmann::json &json_out) { |  | ||||||
|     // Try reading and parsing the base file.
 |  | ||||||
|     if (read_json(std::ifstream{ path }, json_out)) { |  | ||||||
|         return true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Try reading and parsing the backup file.
 |  | ||||||
|     if (read_json(recomp::open_input_backup_file(path), json_out)) { |  | ||||||
|         return true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Both reads failed.
 |  | ||||||
|     return false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| recomp::mods::ZipModFileHandle::~ZipModFileHandle() { | recomp::mods::ZipModFileHandle::~ZipModFileHandle() { | ||||||
|     if (file_handle) { |     if (file_handle) { | ||||||
|         fclose(file_handle); |         fclose(file_handle); | ||||||
|  | @ -716,11 +687,6 @@ recomp::mods::ModOpenError recomp::mods::parse_manifest(ModManifest& ret, const | ||||||
|         return current_error; |         return current_error; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (config != nullptr) { |  | ||||||
|         config->set_id(ret.mod_id); |  | ||||||
|         config->set_mod_version(ret.version.to_string()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Authors
 |     // Authors
 | ||||||
|     current_error = try_get_vec<json::string_t>(ret.authors, manifest_json, authors_key, true, error_param); |     current_error = try_get_vec<json::string_t>(ret.authors, manifest_json, authors_key, true, error_param); | ||||||
|     if (current_error != ModOpenError::Good) { |     if (current_error != ModOpenError::Good) { | ||||||
|  | @ -943,6 +909,8 @@ recomp::mods::ModOpenError recomp::mods::ModContext::open_mod_from_manifest(ModM | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     mod_config.set_id(manifest.mod_id); | ||||||
|  |     mod_config.set_mod_version(manifest.version.to_string()); | ||||||
|     // Read the mod config if it exists.
 |     // Read the mod config if it exists.
 | ||||||
|     parse_mod_config_storage(manifest.mod_id, mod_config); |     parse_mod_config_storage(manifest.mod_id, mod_config); | ||||||
| 
 | 
 | ||||||
|  | @ -1051,6 +1019,10 @@ std::string recomp::mods::error_to_string(ModOpenError error) { | ||||||
|             return "Duplicate mod found"; |             return "Duplicate mod found"; | ||||||
|         case ModOpenError::WrongGame: |         case ModOpenError::WrongGame: | ||||||
|             return "Mod is for a different game"; |             return "Mod is for a different game"; | ||||||
|  |         case ModOpenError::InvalidDisableOptionDependency: | ||||||
|  |             return "Invalid disable option dependency in mod.json"; | ||||||
|  |         case ModOpenError::InvalidHiddenOptionDependency: | ||||||
|  |             return "Invalid hidden option dependency in mod.json"; | ||||||
|         case ModOpenError::DuplicateEnumStrings: |         case ModOpenError::DuplicateEnumStrings: | ||||||
|             return "Duplicate enum strings found in mod.json (enum strings are case insensitive)"; |             return "Duplicate enum strings found in mod.json (enum strings are case insensitive)"; | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue