summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar german772023-05-08 22:03:32 -0600
committerGravatar Narr the Reg2023-05-09 17:51:59 -0600
commit1968cc7b106159e2bd2166459c3cb04d5f79601f (patch)
tree733a35691c7db1bdded2cc521b6cc31d0b4ef43e
parentMerge pull request #10183 from liamwhite/mods (diff)
downloadyuzu-1968cc7b106159e2bd2166459c3cb04d5f79601f.tar.gz
yuzu-1968cc7b106159e2bd2166459c3cb04d5f79601f.tar.xz
yuzu-1968cc7b106159e2bd2166459c3cb04d5f79601f.zip
service: nfp: Allow to load with a different amiibo id
Diffstat (limited to '')
-rw-r--r--src/common/settings.h2
-rw-r--r--src/core/hle/service/nfc/common/device.cpp17
-rw-r--r--src/yuzu/configuration/config.cpp2
-rw-r--r--src/yuzu/configuration/configure_input_advanced.cpp2
-rw-r--r--src/yuzu/configuration/configure_input_advanced.ui22
-rw-r--r--src/yuzu_cmd/config.cpp1
6 files changed, 39 insertions, 7 deletions
diff --git a/src/common/settings.h b/src/common/settings.h
index f4eb4e3cd..5f4caaab9 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -535,6 +535,8 @@ struct Values {
535 Setting<bool> enable_ir_sensor{false, "enable_ir_sensor"}; 535 Setting<bool> enable_ir_sensor{false, "enable_ir_sensor"};
536 Setting<std::string> ir_sensor_device{"auto", "ir_sensor_device"}; 536 Setting<std::string> ir_sensor_device{"auto", "ir_sensor_device"};
537 537
538 Setting<bool> random_amiibo_id{false, "random_amiibo_id"};
539
538 // Data Storage 540 // Data Storage
539 Setting<bool> use_virtual_sd{true, "use_virtual_sd"}; 541 Setting<bool> use_virtual_sd{true, "use_virtual_sd"};
540 Setting<bool> gamecard_inserted{false, "gamecard_inserted"}; 542 Setting<bool> gamecard_inserted{false, "gamecard_inserted"};
diff --git a/src/core/hle/service/nfc/common/device.cpp b/src/core/hle/service/nfc/common/device.cpp
index e5de65ce0..9b0685bdb 100644
--- a/src/core/hle/service/nfc/common/device.cpp
+++ b/src/core/hle/service/nfc/common/device.cpp
@@ -227,11 +227,20 @@ Result NfcDevice::GetTagInfo(NFP::TagInfo& tag_info, bool is_mifare) const {
227 return ResultWrongDeviceState; 227 return ResultWrongDeviceState;
228 } 228 }
229 229
230 UniqueSerialNumber uuid = encrypted_tag_data.uuid.uid;
231
232 // Generate random UUID to bypass amiibo load limits
233 if (Settings::values.random_amiibo_id) {
234 Common::TinyMT rng{};
235 rng.GenerateRandomBytes(uuid.data(), sizeof(UniqueSerialNumber));
236 uuid[3] = 0x88 ^ uuid[0] ^ uuid[1] ^ uuid[2];
237 }
238
230 if (is_mifare) { 239 if (is_mifare) {
231 tag_info = { 240 tag_info = {
232 .uuid = encrypted_tag_data.uuid.uid, 241 .uuid = uuid,
233 .uuid_extension = {}, 242 .uuid_extension = {},
234 .uuid_length = static_cast<u8>(encrypted_tag_data.uuid.uid.size()), 243 .uuid_length = static_cast<u8>(uuid.size()),
235 .protocol = NfcProtocol::TypeA, 244 .protocol = NfcProtocol::TypeA,
236 .tag_type = TagType::Type4, 245 .tag_type = TagType::Type4,
237 }; 246 };
@@ -240,9 +249,9 @@ Result NfcDevice::GetTagInfo(NFP::TagInfo& tag_info, bool is_mifare) const {
240 249
241 // Protocol and tag type may change here 250 // Protocol and tag type may change here
242 tag_info = { 251 tag_info = {
243 .uuid = encrypted_tag_data.uuid.uid, 252 .uuid = uuid,
244 .uuid_extension = {}, 253 .uuid_extension = {},
245 .uuid_length = static_cast<u8>(encrypted_tag_data.uuid.uid.size()), 254 .uuid_length = static_cast<u8>(uuid.size()),
246 .protocol = NfcProtocol::TypeA, 255 .protocol = NfcProtocol::TypeA,
247 .tag_type = TagType::Type2, 256 .tag_type = TagType::Type2,
248 }; 257 };
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index a49d12266..b94d36838 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -443,6 +443,7 @@ void Config::ReadControlValues() {
443 ReadBasicSetting(Settings::values.mouse_panning_sensitivity); 443 ReadBasicSetting(Settings::values.mouse_panning_sensitivity);
444 ReadBasicSetting(Settings::values.enable_joycon_driver); 444 ReadBasicSetting(Settings::values.enable_joycon_driver);
445 ReadBasicSetting(Settings::values.enable_procon_driver); 445 ReadBasicSetting(Settings::values.enable_procon_driver);
446 ReadBasicSetting(Settings::values.random_amiibo_id);
446 447
447 ReadBasicSetting(Settings::values.tas_enable); 448 ReadBasicSetting(Settings::values.tas_enable);
448 ReadBasicSetting(Settings::values.tas_loop); 449 ReadBasicSetting(Settings::values.tas_loop);
@@ -1150,6 +1151,7 @@ void Config::SaveControlValues() {
1150 WriteBasicSetting(Settings::values.enable_raw_input); 1151 WriteBasicSetting(Settings::values.enable_raw_input);
1151 WriteBasicSetting(Settings::values.enable_joycon_driver); 1152 WriteBasicSetting(Settings::values.enable_joycon_driver);
1152 WriteBasicSetting(Settings::values.enable_procon_driver); 1153 WriteBasicSetting(Settings::values.enable_procon_driver);
1154 WriteBasicSetting(Settings::values.random_amiibo_id);
1153 WriteBasicSetting(Settings::values.keyboard_enabled); 1155 WriteBasicSetting(Settings::values.keyboard_enabled);
1154 WriteBasicSetting(Settings::values.emulate_analog_keyboard); 1156 WriteBasicSetting(Settings::values.emulate_analog_keyboard);
1155 WriteBasicSetting(Settings::values.mouse_panning_sensitivity); 1157 WriteBasicSetting(Settings::values.mouse_panning_sensitivity);
diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp
index 8d81322f3..f13156434 100644
--- a/src/yuzu/configuration/configure_input_advanced.cpp
+++ b/src/yuzu/configuration/configure_input_advanced.cpp
@@ -140,6 +140,7 @@ void ConfigureInputAdvanced::ApplyConfiguration() {
140 Settings::values.enable_ir_sensor = ui->enable_ir_sensor->isChecked(); 140 Settings::values.enable_ir_sensor = ui->enable_ir_sensor->isChecked();
141 Settings::values.enable_joycon_driver = ui->enable_joycon_driver->isChecked(); 141 Settings::values.enable_joycon_driver = ui->enable_joycon_driver->isChecked();
142 Settings::values.enable_procon_driver = ui->enable_procon_driver->isChecked(); 142 Settings::values.enable_procon_driver = ui->enable_procon_driver->isChecked();
143 Settings::values.random_amiibo_id = ui->random_amiibo_id->isChecked();
143} 144}
144 145
145void ConfigureInputAdvanced::LoadConfiguration() { 146void ConfigureInputAdvanced::LoadConfiguration() {
@@ -176,6 +177,7 @@ void ConfigureInputAdvanced::LoadConfiguration() {
176 ui->enable_ir_sensor->setChecked(Settings::values.enable_ir_sensor.GetValue()); 177 ui->enable_ir_sensor->setChecked(Settings::values.enable_ir_sensor.GetValue());
177 ui->enable_joycon_driver->setChecked(Settings::values.enable_joycon_driver.GetValue()); 178 ui->enable_joycon_driver->setChecked(Settings::values.enable_joycon_driver.GetValue());
178 ui->enable_procon_driver->setChecked(Settings::values.enable_procon_driver.GetValue()); 179 ui->enable_procon_driver->setChecked(Settings::values.enable_procon_driver.GetValue());
180 ui->random_amiibo_id->setChecked(Settings::values.random_amiibo_id.GetValue());
179 181
180 UpdateUIEnabled(); 182 UpdateUIEnabled();
181} 183}
diff --git a/src/yuzu/configuration/configure_input_advanced.ui b/src/yuzu/configuration/configure_input_advanced.ui
index 0eb2b34bc..2e8b13660 100644
--- a/src/yuzu/configuration/configure_input_advanced.ui
+++ b/src/yuzu/configuration/configure_input_advanced.ui
@@ -2728,6 +2728,22 @@
2728 </widget> 2728 </widget>
2729 </item> 2729 </item>
2730 <item row="7" column="0"> 2730 <item row="7" column="0">
2731 <widget class="QCheckBox" name="random_amiibo_id">
2732 <property name="toolTip">
2733 <string>Allows unlimited uses of the same Amiibo in games that would otherwise limit you to one use.</string>
2734 </property>
2735 <property name="minimumSize">
2736 <size>
2737 <width>0</width>
2738 <height>23</height>
2739 </size>
2740 </property>
2741 <property name="text">
2742 <string>Use random Amiibo ID</string>
2743 </property>
2744 </widget>
2745 </item>
2746 <item row="8" column="0">
2731 <widget class="QCheckBox" name="mouse_panning"> 2747 <widget class="QCheckBox" name="mouse_panning">
2732 <property name="minimumSize"> 2748 <property name="minimumSize">
2733 <size> 2749 <size>
@@ -2740,7 +2756,7 @@
2740 </property> 2756 </property>
2741 </widget> 2757 </widget>
2742 </item> 2758 </item>
2743 <item row="7" column="2"> 2759 <item row="8" column="2">
2744 <widget class="QSpinBox" name="mouse_panning_sensitivity"> 2760 <widget class="QSpinBox" name="mouse_panning_sensitivity">
2745 <property name="toolTip"> 2761 <property name="toolTip">
2746 <string>Mouse sensitivity</string> 2762 <string>Mouse sensitivity</string>
@@ -2762,14 +2778,14 @@
2762 </property> 2778 </property>
2763 </widget> 2779 </widget>
2764 </item> 2780 </item>
2765 <item row="8" column="0"> 2781 <item row="9" column="0">
2766 <widget class="QLabel" name="motion_touch"> 2782 <widget class="QLabel" name="motion_touch">
2767 <property name="text"> 2783 <property name="text">
2768 <string>Motion / Touch</string> 2784 <string>Motion / Touch</string>
2769 </property> 2785 </property>
2770 </widget> 2786 </widget>
2771 </item> 2787 </item>
2772 <item row="8" column="2"> 2788 <item row="9" column="2">
2773 <widget class="QPushButton" name="buttonMotionTouch"> 2789 <widget class="QPushButton" name="buttonMotionTouch">
2774 <property name="text"> 2790 <property name="text">
2775 <string>Configure</string> 2791 <string>Configure</string>
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index abe7092fc..dc9a3d68f 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -169,6 +169,7 @@ void Config::ReadValues() {
169 ReadSetting("ControlsGeneral", Settings::values.enable_raw_input); 169 ReadSetting("ControlsGeneral", Settings::values.enable_raw_input);
170 ReadSetting("ControlsGeneral", Settings::values.enable_joycon_driver); 170 ReadSetting("ControlsGeneral", Settings::values.enable_joycon_driver);
171 ReadSetting("ControlsGeneral", Settings::values.enable_procon_driver); 171 ReadSetting("ControlsGeneral", Settings::values.enable_procon_driver);
172 ReadSetting("ControlsGeneral", Settings::values.random_amiibo_id);
172 ReadSetting("ControlsGeneral", Settings::values.emulate_analog_keyboard); 173 ReadSetting("ControlsGeneral", Settings::values.emulate_analog_keyboard);
173 ReadSetting("ControlsGeneral", Settings::values.vibration_enabled); 174 ReadSetting("ControlsGeneral", Settings::values.vibration_enabled);
174 ReadSetting("ControlsGeneral", Settings::values.enable_accurate_vibrations); 175 ReadSetting("ControlsGeneral", Settings::values.enable_accurate_vibrations);