From 8e6bdfcc06e0b633b080ae0876d7eb1bd516a5d5 Mon Sep 17 00:00:00 2001 From: Ozero4 Date: Mon, 22 Sep 2025 23:53:40 +0200 Subject: [PATCH 1/2] Decomp TouchControl (43%) --- src/00_Core/Player/TouchControl.cpp | 67 +++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/src/00_Core/Player/TouchControl.cpp b/src/00_Core/Player/TouchControl.cpp index c4a586bc..5e0e8456 100644 --- a/src/00_Core/Player/TouchControl.cpp +++ b/src/00_Core/Player/TouchControl.cpp @@ -1,21 +1,72 @@ #include "Player/TouchControl.hpp" -void TouchControl::Init() {} +#define REG_027fffa8 (*(volatile u16 *) 0x027fffa8) -void TouchControl::IncreaseSpeed(s16 increase) { +THUMB void TouchControl::Init() { + this->mSpeed = 1; + this->mTimeBetweenTouches = 0xffff; + this->mTimeSinceTouch = 0xffff; + this->mRepeatStart = 0x14; + this->mRepeatLoop = 6; + this->mRepeatTimer = *(u16 *) &this->mRepeatStart; + this->mTouch = false; + this->mTouchX = -1; + this->mTouchY = -1; + this->mTouchPrev = false; + this->mTouchPrevX = -1; + this->mTouchPrevY = -1; + this->mTouchLastX = 0x80; + this->mTouchLastY = 0x60; + this->mTouchStartX = -1; + this->mTouchStartY = -1; + this->mFlags = 0; + return; +} + +ARM void TouchControl::IncreaseSpeed(s16 increase) { this->mFlags = 0; this->mSpeed += increase; } -void TouchControl::UpdateFlags(u16 speed) {} +ARM void TouchControl::UpdateFlags(u16 speed) {} + void TouchControl::UpdateWithStateFlags(TouchStateFlags *state, u16 speed) {} -void TouchControl::Update(TouchState *state, u16 speed) {} -bool TouchControl::func_ov00_0207aeac() { - return ((*data_0207aecc & 0x8000) >> 15) == 1; + +ARM void TouchControl::Update(TouchState *state, u16 speed) { + this->mTouchPrev = this->mTouch; + this->mTouchPrevX = this->mTouchX; + this->mTouchPrevY = this->mTouchY; + this->mTouch = state->touch; + this->mTouchX = state->touchX; + this->mTouchY = state->touchY; + this->UpdateFlags(speed); + return; +} + +ARM bool TouchControl::func_ov00_0207aeac() { + return ((REG_027fffa8 & 0x8000) >> 15) == 1; +} + +ARM void TouchControl::UpdateConditionally(TouchState *state, u16 speed) { + int iVar1; + TouchState local_20; + + iVar1 = func_ov00_0207aeac(); + if (iVar1) { + local_20.touch = false; + local_20.touchX = -1; + local_20.touchY = -1; + } else { + local_20.touch = state->touch; + local_20.touchX = state->touchX; + local_20.touchY = state->touchY; + } + Update(&local_20, speed); + return; } -void TouchControl::UpdateConditionally(TouchState *state, u16 speed) {} -void TouchControl::func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease) { +// non-matching +ARM void TouchControl::func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease) { TouchStateFlags touchState; if (shouldIncrease) { From 5c2726b6f15859aa8f4ab9d47d43a557e4789b34 Mon Sep 17 00:00:00 2001 From: Ozero4 <114027116+Ozero4@users.noreply.github.com> Date: Mon, 22 Sep 2025 23:59:50 +0200 Subject: [PATCH 2/2] Update TouchControl.hpp --- include/Player/TouchControl.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index ee63a3ee..f034f57b 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -41,14 +41,14 @@ class TouchControl { TouchControl(unk32 param_1); ~TouchControl(); - void Init(); - void IncreaseSpeed(s16 increase); - void UpdateFlags(u16 speed); - void UpdateWithStateFlags(TouchStateFlags *state, u16 speed); - void Update(TouchState *state, u16 speed); - bool func_ov00_0207aeac(); - void UpdateConditionally(TouchState *state, u16 speed); - void func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease); + THUMB void Init(); + ARM void IncreaseSpeed(s16 increase); + ARM void UpdateFlags(u16 speed); + ARM void UpdateWithStateFlags(TouchStateFlags *state, u16 speed); + ARM void Update(TouchState *state, u16 speed); + ARM bool func_ov00_0207aeac(); + ARM void UpdateConditionally(TouchState *state, u16 speed); + ARM void func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease); static bool func_0202b864(Vec3p *param1, s32 size, unk8 param3); static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3);