From 92e3723bb2fdb3d0364c47d8650e4ccef6e2e9b9 Mon Sep 17 00:00:00 2001 From: Chris P Date: Fri, 5 Jul 2024 11:14:35 -0400 Subject: [PATCH] Add memory addresses and toggle for multiplayer inputs --- src/frontend/qt_sdl/Config.cpp | 2 + src/frontend/qt_sdl/Config.h | 2 + src/frontend/qt_sdl/EmuThread.cpp | 49 +++++++++++++++++-- .../qt_sdl/InputConfig/InputConfigDialog.cpp | 2 + .../qt_sdl/InputConfig/InputConfigDialog.ui | 20 ++++++++ 5 files changed, 71 insertions(+), 4 deletions(-) diff --git a/src/frontend/qt_sdl/Config.cpp b/src/frontend/qt_sdl/Config.cpp index 6b32e5b279..1da54bd875 100644 --- a/src/frontend/qt_sdl/Config.cpp +++ b/src/frontend/qt_sdl/Config.cpp @@ -162,6 +162,7 @@ bool GdbARM9BreakOnStartup; int MetroidAimSensitivity; int MetroidVirtualStylusSensitivity; +int MetroidVsPlayerInput; CameraConfig Camera[2]; @@ -404,6 +405,7 @@ ConfigEntry ConfigFile[] = {"MetroidAimSensitivity", 0, &MetroidAimSensitivity, MetroidAimSensitivityDefault, false}, {"MetroidVirtualStylusSensitivity", 0, &MetroidVirtualStylusSensitivity, MetroidVirtualStylusSensitivityDefault, false}, + {"MetroidVsPlayerInput", 0, &MetroidVsPlayerInput, MetroidVsPlayerInputDefault, false}, // TODO!! // we need a more elegant way to deal with this diff --git a/src/frontend/qt_sdl/Config.h b/src/frontend/qt_sdl/Config.h index 890bf4c407..c6b61e55cc 100644 --- a/src/frontend/qt_sdl/Config.h +++ b/src/frontend/qt_sdl/Config.h @@ -236,9 +236,11 @@ extern bool GdbARM9BreakOnStartup; extern int MetroidAimSensitivity; extern int MetroidVirtualStylusSensitivity; +extern int MetroidVsPlayerInput; const int MetroidAimSensitivityDefault = 30; const int MetroidVirtualStylusSensitivityDefault = 20; +const int MetroidVsPlayerInputDefault = 1; void Load(); void Save(); diff --git a/src/frontend/qt_sdl/EmuThread.cpp b/src/frontend/qt_sdl/EmuThread.cpp index c423ab4f7f..ec5e766907 100644 --- a/src/frontend/qt_sdl/EmuThread.cpp +++ b/src/frontend/qt_sdl/EmuThread.cpp @@ -694,15 +694,16 @@ void EmuThread::run() #define FN_INPUT_PRESS(i) Input::InputMask.setBit(i, false); #define FN_INPUT_RELEASE(i) Input::InputMask.setBit(i, true); + melonDS::u32 aimXAddr; + melonDS::u32 aimYAddr; + #define METROID_US_1_1 1 #ifdef METROID_US_1_1 - const melonDS::u32 aimXAddr = 0x020DEDA6; - const melonDS::u32 aimYAddr = 0x020DEDAE; + const bool metroidUSRev1 = true; const melonDS::u32 inBallAddr = 0x020DB098; const melonDS::u32 inVisorOrMapAddr = 0x020D9A7D; // my best guess #else - const melonDS::u32 aimXAddr = 0x020DE526; - const melonDS::u32 aimYAddr = 0x020DE52E; + const bool metroidUSRev1 = true; const melonDS::u32 inBallAddr = 0x020DA818; #endif @@ -935,6 +936,46 @@ void EmuThread::run() processMoveInput(); + // aim addresses for version and player number + if(metroidUSRev1) { + switch(Config::MetroidVsPlayerInput) { + case 2: + aimXAddr = 0x020DEDEE; + aimYAddr = 0x020DEDF6; + break; + case 3: + aimXAddr = 0x020DEE36; + aimYAddr = 0x020DEE3E; + break; + case 4: + aimXAddr = 0x020DEE7E; + aimYAddr = 0x020DEE86; + break; + default: + aimXAddr = 0x020DEDA6; + aimYAddr = 0x020DEDAE; + } + } + else { + switch(Config::MetroidVsPlayerInput) { + case 2: + aimXAddr = 0x020DF66E; + aimYAddr = 0x020DF676; + break; + case 3: + aimXAddr = 0x020DF6B6; + aimYAddr = 0x020DF6BE; + break; + case 4: + aimXAddr = 0x020DF626; + aimYAddr = 0x020DF706; + break; + default: + aimXAddr = 0x020DE526; + aimYAddr = 0x020DE52E; + } + } + // cursor looking if (abs(mouseRel.x()) > 0) { diff --git a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.cpp b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.cpp index 3ecfb64dc5..e59901e69b 100644 --- a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.cpp +++ b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.cpp @@ -94,6 +94,7 @@ InputConfigDialog::InputConfigDialog(QWidget* parent) : QDialog(parent), ui(new ui->metroidAimSensitvitySpinBox->setValue(Config::MetroidAimSensitivity); ui->metroidVirtualStylusSensitvitySpinBox->setValue(Config::MetroidVirtualStylusSensitivity); + ui->metroidVsPlayerInputSpinBox->setValue(Config::MetroidVsPlayerInput); } void InputConfigDialog::switchTabToAddons() { @@ -215,6 +216,7 @@ void InputConfigDialog::on_InputConfigDialog_accepted() Config::MetroidAimSensitivity = ui->metroidAimSensitvitySpinBox->value(); Config::MetroidVirtualStylusSensitivity = ui->metroidVirtualStylusSensitvitySpinBox->value(); + Config::MetroidVsPlayerInput = ui->metroidVsPlayerInputSpinBox->value(); Config::Save(); diff --git a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.ui b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.ui index 2000a2035f..50ba28bf68 100644 --- a/src/frontend/qt_sdl/InputConfig/InputConfigDialog.ui +++ b/src/frontend/qt_sdl/InputConfig/InputConfigDialog.ui @@ -2328,6 +2328,26 @@ Reset sensitivity values + + + + + Vs. mode player input: + + + + + + + 1 + + + 4 + + + 0 + +