core: Add support for game settings overrides (#6)
* core: Add support for game settings overrides --------- Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com> Co-authored-by: zhang wei <zwdreams@gmail.com>
This commit is contained in:
parent
2dd8d09c7b
commit
b7a3146c2f
1 changed files with 42 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
@ -114,6 +114,8 @@ struct System::Impl {
|
||||||
: kernel{system}, fs_controller{system}, hid_core{}, room_network{}, cpu_manager{system},
|
: kernel{system}, fs_controller{system}, hid_core{}, room_network{}, cpu_manager{system},
|
||||||
reporter{system}, applet_manager{system}, frontend_applets{system}, profile_manager{} {}
|
reporter{system}, applet_manager{system}, frontend_applets{system}, profile_manager{} {}
|
||||||
|
|
||||||
|
u64 program_id;
|
||||||
|
|
||||||
void Initialize(System& system) {
|
void Initialize(System& system) {
|
||||||
device_memory = std::make_unique<Core::DeviceMemory>();
|
device_memory = std::make_unique<Core::DeviceMemory>();
|
||||||
|
|
||||||
|
@ -301,6 +303,38 @@ struct System::Impl {
|
||||||
return SystemResultStatus::Success;
|
return SystemResultStatus::Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LoadOverrides(u64 programId) const {
|
||||||
|
std::string vendor = gpu_core->Renderer().GetDeviceVendor();
|
||||||
|
LOG_INFO(Core, "GPU Vendor: {}", vendor);
|
||||||
|
|
||||||
|
// Insert PC overrides here
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
// Example on how to set a setting based on the program ID and vendor
|
||||||
|
if (programId == 0x010028600EBDA000 && vendor == "Mali") { // Mario 3d World
|
||||||
|
// Settings::values.example = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example array of program IDs
|
||||||
|
const std::array<u64, 10> example_array = {
|
||||||
|
//0xprogramId
|
||||||
|
0x0004000000033400, // Game 1
|
||||||
|
0x0004000000033500 // Game 2
|
||||||
|
// And so on
|
||||||
|
};
|
||||||
|
|
||||||
|
for (auto id : example_array) {
|
||||||
|
if (programId == id) {
|
||||||
|
// Settings::values.example = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
SystemResultStatus Load(System& system, Frontend::EmuWindow& emu_window,
|
SystemResultStatus Load(System& system, Frontend::EmuWindow& emu_window,
|
||||||
const std::string& filepath,
|
const std::string& filepath,
|
||||||
Service::AM::FrontendAppletParameters& params) {
|
Service::AM::FrontendAppletParameters& params) {
|
||||||
|
@ -381,6 +415,12 @@ struct System::Impl {
|
||||||
if (metadata.first != nullptr) {
|
if (metadata.first != nullptr) {
|
||||||
title_version = metadata.first->GetVersionString();
|
title_version = metadata.first->GetVersionString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (app_loader->ReadProgramId(program_id) != Loader::ResultStatus::Success) {
|
||||||
|
LOG_ERROR(Core, "Failed to find program id for ROM");
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadOverrides(program_id);
|
||||||
if (auto room_member = room_network.GetRoomMember().lock()) {
|
if (auto room_member = room_network.GetRoomMember().lock()) {
|
||||||
Network::GameInfo game_info;
|
Network::GameInfo game_info;
|
||||||
game_info.name = name;
|
game_info.name = name;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue