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