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; |             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::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); |             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); |             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 ConfigSchema &get_mod_config_schema(const std::string &mod_id) const; | ||||||
|             const std::vector<char> &get_mod_thumbnail(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::filesystem::path get_mods_directory(); | ||||||
|         std::optional<ModDetails> get_details_for_mod(const std::string& mod_id); |         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); |         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); |         void enable_mod(const std::string& mod_id, bool enabled); | ||||||
|         bool is_mod_enabled(const std::string& mod_id); |         bool is_mod_enabled(const std::string& mod_id); | ||||||
|         bool is_mod_auto_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) { | void recomp_free_config_string(uint8_t* rdram, recomp_context* ctx) { | ||||||
|     gpr str_rdram = (gpr)_arg<0, PTR(char)>(rdram, ctx); |     gpr str_rdram = (gpr)_arg<0, PTR(char)>(rdram, ctx); | ||||||
|     gpr offset = str_rdram - 0xFFFFFFFF80000000ULL; |     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_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_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_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); |     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; |     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 { | struct RegeneratedSection { | ||||||
|     uint32_t rom_addr; |     uint32_t rom_addr; | ||||||
|     uint32_t ram_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); |     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) { | 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 }; |     std::lock_guard lock{ mod_context_mutex }; | ||||||
|     return mod_context->set_mod_index(mod_game_id, mod_id, index); |     return mod_context->set_mod_index(mod_game_id, mod_id, index); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Wiseguy
						Wiseguy