mirror of
				https://github.com/N64Recomp/N64ModernRuntime.git
				synced 2025-10-30 08:02:29 +00:00 
			
		
		
		
	Add mod API export to let a mod get its own version (#100)
This commit is contained in:
		
							parent
							
								
									af075623dc
								
							
						
					
					
						commit
						cacb14fee5
					
				
					 4 changed files with 35 additions and 0 deletions
				
			
		|  | @ -343,6 +343,8 @@ namespace recomp { | |||
|             size_t get_mod_order_index(const std::string& mod_id) const; | ||||
|             std::optional<ModDetails> get_details_for_mod(const std::string& mod_id) const; | ||||
|             std::vector<ModDetails> get_all_mod_details(const std::string& mod_game_id); | ||||
|             recomp::Version get_mod_version(size_t mod_index); | ||||
|             std::string get_mod_id(size_t mod_index); | ||||
|             void set_mod_index(const std::string &mod_game_id, const std::string &mod_id, size_t index); | ||||
|             const ConfigSchema &get_mod_config_schema(const std::string &mod_id) const; | ||||
|             const std::vector<char> &get_mod_thumbnail(const std::string &mod_id) const; | ||||
|  | @ -586,6 +588,8 @@ namespace recomp { | |||
|         std::filesystem::path get_mods_directory(); | ||||
|         std::optional<ModDetails> get_details_for_mod(const std::string& mod_id); | ||||
|         std::vector<ModDetails> get_all_mod_details(const std::string& mod_game_id); | ||||
|         recomp::Version get_mod_version(size_t mod_index); | ||||
|         std::string get_mod_id(size_t mod_index); | ||||
|         void enable_mod(const std::string& mod_id, bool enabled); | ||||
|         bool is_mod_enabled(const std::string& mod_id); | ||||
|         bool is_mod_auto_enabled(const std::string& mod_id); | ||||
|  |  | |||
|  | @ -51,6 +51,18 @@ void recomp_get_config_string(uint8_t* rdram, recomp_context* ctx, size_t mod_in | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void recomp_get_mod_version(uint8_t* rdram, recomp_context* ctx, size_t mod_index) { | ||||
|     uint32_t* major_out = _arg<0, uint32_t*>(rdram, ctx); | ||||
|     uint32_t* minor_out = _arg<1, uint32_t*>(rdram, ctx); | ||||
|     uint32_t* patch_out = _arg<2, uint32_t*>(rdram, ctx); | ||||
| 
 | ||||
|     recomp::Version version = recomp::mods::get_mod_version(mod_index); | ||||
| 
 | ||||
|     *major_out = version.major; | ||||
|     *minor_out = version.minor; | ||||
|     *patch_out = version.patch; | ||||
| } | ||||
| 
 | ||||
| void recomp_free_config_string(uint8_t* rdram, recomp_context* ctx) { | ||||
|     gpr str_rdram = (gpr)_arg<0, PTR(char)>(rdram, ctx); | ||||
|     gpr offset = str_rdram - 0xFFFFFFFF80000000ULL; | ||||
|  | @ -62,5 +74,6 @@ void recomp::mods::register_config_exports() { | |||
|     recomp::overlays::register_ext_base_export("recomp_get_config_u32", recomp_get_config_u32); | ||||
|     recomp::overlays::register_ext_base_export("recomp_get_config_double", recomp_get_config_double); | ||||
|     recomp::overlays::register_ext_base_export("recomp_get_config_string", recomp_get_config_string); | ||||
|     recomp::overlays::register_ext_base_export("recomp_get_mod_version", recomp_get_mod_version); | ||||
|     recomp::overlays::register_base_export("recomp_free_config_string", recomp_free_config_string); | ||||
| } | ||||
|  |  | |||
|  | @ -1151,6 +1151,14 @@ std::vector<recomp::mods::ModDetails> recomp::mods::ModContext::get_all_mod_deta | |||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| recomp::Version recomp::mods::ModContext::get_mod_version(size_t mod_index) { | ||||
|     return opened_mods[mod_index].manifest.version; | ||||
| } | ||||
| 
 | ||||
| std::string recomp::mods::ModContext::get_mod_id(size_t mod_index) { | ||||
|     return opened_mods[mod_index].manifest.mod_id; | ||||
| } | ||||
| 
 | ||||
| struct RegeneratedSection { | ||||
|     uint32_t rom_addr; | ||||
|     uint32_t ram_addr; | ||||
|  |  | |||
|  | @ -583,6 +583,16 @@ std::vector<recomp::mods::ModDetails> recomp::mods::get_all_mod_details(const st | |||
|     return mod_context->get_all_mod_details(mod_game_id); | ||||
| } | ||||
| 
 | ||||
| recomp::Version recomp::mods::get_mod_version(size_t mod_index) { | ||||
|     std::lock_guard lock { mod_context_mutex }; | ||||
|     return mod_context->get_mod_version(mod_index); | ||||
| } | ||||
| 
 | ||||
| std::string recomp::mods::get_mod_id(size_t mod_index) { | ||||
|     std::lock_guard lock { mod_context_mutex }; | ||||
|     return mod_context->get_mod_id(mod_index); | ||||
| } | ||||
| 
 | ||||
| void recomp::mods::set_mod_index(const std::string &mod_game_id, const std::string &mod_id, size_t index) { | ||||
|     std::lock_guard lock{ mod_context_mutex }; | ||||
|     return mod_context->set_mod_index(mod_game_id, mod_id, index); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Wiseguy
						Wiseguy