diff --git a/src/xenia/emulator.cc b/src/xenia/emulator.cc index adb58570f..120839b51 100644 --- a/src/xenia/emulator.cc +++ b/src/xenia/emulator.cc @@ -1526,7 +1526,8 @@ X_STATUS Emulator::CompleteLaunch(const std::filesystem::path& path, if (cvars::allow_plugins) { if (plugin_loader_->IsAnyPluginForTitleAvailable(title_id_.value(), module->hash().value())) { - plugin_loader_->LoadTitlePlugins(title_id_.value()); + plugin_loader_->LoadTitlePlugins(title_id_.value(), + module->hash().value()); } } diff --git a/src/xenia/patcher/plugin_loader.cc b/src/xenia/patcher/plugin_loader.cc index 8bdd48380..002708080 100644 --- a/src/xenia/patcher/plugin_loader.cc +++ b/src/xenia/patcher/plugin_loader.cc @@ -174,13 +174,18 @@ bool PluginLoader::IsAnyPluginForTitleAvailable( return result != plugin_configs_.cend(); } -void PluginLoader::LoadTitlePlugins(const uint32_t title_id) { +void PluginLoader::LoadTitlePlugins(const uint32_t title_id, + const uint64_t module_hash) { std::vector title_plugins; std::copy_if(plugin_configs_.cbegin(), plugin_configs_.cend(), std::back_inserter(title_plugins), - [title_id](const PluginInfoEntry& entry) { - return entry.is_enabled && entry.title_id == title_id; + [title_id, module_hash](const PluginInfoEntry& entry) { + const auto hash_exists = + std::find(entry.hashes.cbegin(), entry.hashes.cend(), + module_hash) != entry.hashes.cend(); + return entry.is_enabled && entry.title_id == title_id && + hash_exists; }); if (title_plugins.empty()) { diff --git a/src/xenia/patcher/plugin_loader.h b/src/xenia/patcher/plugin_loader.h index dd068c629..46cb763be 100644 --- a/src/xenia/patcher/plugin_loader.h +++ b/src/xenia/patcher/plugin_loader.h @@ -31,7 +31,7 @@ class PluginLoader { PluginLoader(kernel::KernelState* kernel_state, const std::filesystem::path plugins_root); - void LoadTitlePlugins(const uint32_t title_id); + void LoadTitlePlugins(const uint32_t title_id, const uint64_t module_hash); bool IsAnyPluginForTitleAvailable(const uint32_t title_id, const uint64_t module_hash) const; bool IsAnyPluginLoaded() { return is_any_plugin_loaded_; }