From fd4201b62ed9bfc36ca8fd1768d571af20ef8740 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Wed, 2 Jul 2025 19:48:51 +0200 Subject: [PATCH 1/4] start both `TouchControl.cpp` --- config/eur/arm9/delinks.txt | 3 + config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov008/symbols.txt | 2 +- config/usa/arm9/delinks.txt | 3 + config/usa/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov008/symbols.txt | 2 +- include/Player/TouchControl.hpp | 9 +- src/00_Core/Player/TouchControl.cpp | 161 ++++++++++++++++++--- src/Main/Player/TouchControl.cpp | 24 ++- 9 files changed, 180 insertions(+), 28 deletions(-) diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt index 81ef62d3..da3de737 100644 --- a/config/eur/arm9/delinks.txt +++ b/config/eur/arm9/delinks.txt @@ -59,3 +59,6 @@ src/Main/Unknown/UnkStruct_02063220.cpp: .text start:0x0202f3f0 end:0x0202f8e8 .rodata start:0x020562e0 end:0x02056300 .data start:0x0205772c end:0x02057808 + +src/Main/Player/TouchControl.cpp: + .text start:0x0202b864 end:0x0202b8e4 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 89f2dd21..7bc9458a 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -3926,7 +3926,7 @@ data_ov000_020df330 kind:data(any) addr:0x020df330 __sinit_ov000_020df338 kind:function(arm,size=0x14) addr:0x020df338 __sinit_ov000_020df34c kind:function(arm,size=0x2c) addr:0x020df34c __sinit_ov000_020df378 kind:function(arm,size=0x14) addr:0x020df378 -__sinit_ov000_020df38c kind:function(arm,size=0x2c) addr:0x020df38c +__sinit_TouchControl.cpp kind:function(arm,size=0x2c) addr:0x020df38c __sinit_ov000_020df3b8 kind:function(arm,size=0x14) addr:0x020df3b8 __sinit_ov000_020df3cc kind:function(arm,size=0x14) addr:0x020df3cc __sinit_ov000_020df3e0 kind:function(arm,size=0x14) addr:0x020df3e0 diff --git a/config/eur/arm9/overlays/ov008/symbols.txt b/config/eur/arm9/overlays/ov008/symbols.txt index f2618df0..e8bdc37c 100644 --- a/config/eur/arm9/overlays/ov008/symbols.txt +++ b/config/eur/arm9/overlays/ov008/symbols.txt @@ -7,7 +7,7 @@ func_ov008_02112e84 kind:function(arm,size=0x4) addr:0x02112e84 func_ov008_02112e88 kind:function(arm,size=0x58) addr:0x02112e88 func_ov008_02112ee0 kind:function(arm,size=0x48) addr:0x02112ee0 func_ov008_02112f28 kind:function(arm,size=0x158) addr:0x02112f28 -func_ov008_02113080 kind:function(arm,size=0x50) addr:0x02113080 +_ZN12TouchControlC1Ev kind:function(arm,size=0x50) addr:0x02113080 func_ov008_021130d0 kind:function(arm,size=0x80) addr:0x021130d0 func_ov008_02113150 kind:function(arm,size=0x5c) addr:0x02113150 func_ov008_021131ac kind:function(arm,size=0xd8) addr:0x021131ac diff --git a/config/usa/arm9/delinks.txt b/config/usa/arm9/delinks.txt index 25601a31..f46e6c2d 100644 --- a/config/usa/arm9/delinks.txt +++ b/config/usa/arm9/delinks.txt @@ -59,3 +59,6 @@ src/Main/Unknown/UnkStruct_02063220.cpp: .text start:0x0202f3ec end:0x0202f8e4 .rodata start:0x0205629c end:0x020562bc .data start:0x020576e4 end:0x020577c0 + +src/Main/Player/TouchControl.cpp: + .text start:0x0202b84c end:0x0202b8cc diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 166d6c89..8c0c9be8 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -3926,7 +3926,7 @@ data_ov000_020df330 kind:data(any) addr:0x020df2d0 __sinit_ov000_020df338 kind:function(arm,size=0x14) addr:0x020df2d8 __sinit_ov000_020df34c kind:function(arm,size=0x2c) addr:0x020df2ec __sinit_ov000_020df378 kind:function(arm,size=0x14) addr:0x020df318 -__sinit_ov000_020df38c kind:function(arm,size=0x2c) addr:0x020df32c +__sinit_TouchControl.cpp kind:function(arm,size=0x2c) addr:0x020df32c __sinit_ov000_020df3b8 kind:function(arm,size=0x14) addr:0x020df358 __sinit_ov000_020df3cc kind:function(arm,size=0x14) addr:0x020df36c __sinit_ov000_020df3e0 kind:function(arm,size=0x14) addr:0x020df380 diff --git a/config/usa/arm9/overlays/ov008/symbols.txt b/config/usa/arm9/overlays/ov008/symbols.txt index abba5bb6..0c423905 100644 --- a/config/usa/arm9/overlays/ov008/symbols.txt +++ b/config/usa/arm9/overlays/ov008/symbols.txt @@ -7,7 +7,7 @@ func_ov008_02112e84 kind:function(arm,size=0x4) addr:0x02112e04 func_ov008_02112e88 kind:function(arm,size=0x58) addr:0x02112e08 func_ov008_02112ee0 kind:function(arm,size=0x48) addr:0x02112e60 func_ov008_02112f28 kind:function(arm,size=0x158) addr:0x02112ea8 -func_ov008_02113080 kind:function(arm,size=0x50) addr:0x02113000 +_ZN12TouchControlC1Ev kind:function(arm,size=0x50) addr:0x02113000 func_ov008_021130d0 kind:function(arm,size=0x80) addr:0x02113050 func_ov008_02113150 kind:function(arm,size=0x5c) addr:0x021130d0 func_ov008_021131ac kind:function(arm,size=0xd8) addr:0x0211312c diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index 8970c032..a44fdcbb 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -9,6 +9,7 @@ extern u16 *data_0207aecc; typedef u16 TouchFlags; enum TouchFlag_ { + TouchFlag_None = 0x0000, TouchFlag_TouchedNow = 0x0001, TouchFlag_UntouchedNow = 0x0002, TouchFlag_Repeat = 0x0004, @@ -19,11 +20,11 @@ class TouchControl { /* 00 */ u16 mSpeed; /* 02 */ u16 mTimeBetweenTouches; // gets set to mTimeSinceTouch when touching the screen /* 04 */ u16 mTimeSinceTouch; // increases by mSpeed every frame - /* 06 */ unk16 mRepeatStart; - /* 08 */ unk16 mRepeatLoop; + /* 06 */ u16 mRepeatStart; + /* 08 */ u16 mRepeatLoop; // mRepeatTimer starts at mRepeatStart, decreases by mSpeed while touching the screen. // if equal to 0, mRepeatTimer gets set to mRepeatLoop and the Repeat flag is set - /* 0a */ unk16 mRepeatTimer; + /* 0a */ u16 mRepeatTimer; /* 0c */ bool mTouch; /* 10 */ s32 mTouchX; /* 14 */ s32 mTouchY; @@ -51,4 +52,4 @@ class TouchControl { static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3); }; -void Fill16(int value, unsigned short *dst, int size); // TODO: Replace with header file +extern TouchControl gTouchControl; diff --git a/src/00_Core/Player/TouchControl.cpp b/src/00_Core/Player/TouchControl.cpp index 9630de1a..6edc1b16 100644 --- a/src/00_Core/Player/TouchControl.cpp +++ b/src/00_Core/Player/TouchControl.cpp @@ -1,39 +1,164 @@ #include "Player/TouchControl.hpp" +#include "global.h" -TouchControl::TouchControl() {} +//! TODO: Replace with header file +extern "C" void Fill16(int value, unsigned short *dst, int size); -void TouchControl::IncreaseSpeed(s16 increase) { - this->mFlags = 0; +TouchControl gTouchControl; + +THUMB TouchControl::TouchControl() { + this->mSpeed = 1; + this->mTimeBetweenTouches = -1; + this->mTimeSinceTouch = -1; + this->mRepeatStart = 20; + this->mRepeatLoop = 6; + this->mRepeatTimer = this->mRepeatStart; + this->mTouch = false; + this->mTouchX = -1; + this->mTouchY = -1; + this->mTouchPrev = false; + this->mTouchPrevX = -1; + this->mTouchPrevY = -1; + this->mTouchLastX = 128; + this->mTouchLastY = 96; + this->mTouchStartX = -1; + this->mTouchStartY = -1; + this->mFlags = TouchFlag_None; +} + +ARM void TouchControl::IncreaseSpeed(s16 increase) { + this->mFlags = TouchFlag_None; this->mSpeed += increase; } -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::UpdateFlags(u16 speed) { + this->mFlags = TouchFlag_None; + + if (this->mTouchPrev == false && this->mTouch == true) { + this->mFlags |= TouchFlag_TouchedNow; + } + + if (this->mTouchPrev == true && this->mTouch == false) { + this->mFlags |= TouchFlag_UntouchedNow; + } + + if (this->mSpeed < speed) { + this->mSpeed = speed; + } + + if (this->mFlags & TouchFlag_TouchedNow) { + this->mFlags |= TouchFlag_Repeat; + this->mRepeatTimer = this->mRepeatStart; + } else { + if (this->mTouch != false) { + if (this->mRepeatTimer - this->mSpeed > 1) { + this->mRepeatTimer -= this->mSpeed; + } else { + this->mFlags |= TouchFlag_Repeat; + this->mRepeatTimer = this->mRepeatLoop; + } + } + } + + if (this->mTimeSinceTouch + this->mSpeed < 0xFFFF) { + this->mTimeSinceTouch += this->mSpeed; + } else { + this->mTimeSinceTouch = -1; + } + + if (this->mFlags & TouchFlag_TouchedNow) { + this->mTimeBetweenTouches = this->mTimeSinceTouch; + this->mTimeSinceTouch = 0; + this->mTouchStartX = this->mTouchX; + this->mTouchStartY = this->mTouchY; + } + + this->mSpeed = speed; + + if (this->mTouch) { + this->mTouchLastX = this->mTouchX; + this->mTouchLastY = this->mTouchY; + } +} + +ARM void TouchControl::UpdateWithStateFlags(TouchStateFlags *state, u16 speed) { + this->mTouchPrev = this->mTouch; + this->mTouchPrevX = this->mTouchX; + this->mTouchPrevY = this->mTouchY; + + if (state->touch == 1) { + if (state->flags == 0) { + this->mTouch = true; + this->mTouchX = state->touchX; + this->mTouchY = state->touchY; + } else { + this->mTouchX = (state->flags & 1) ? this->mTouchPrevX : state->touchX; + this->mTouchY = (state->flags & 2) ? this->mTouchPrevY : state->touchY; + + if (this->mTouchX >= 0 && this->mTouchX < 0x100 && this->mTouchY >= 0 && this->mTouchY < 0xC0) { + this->mTouch = true; + } else { + this->mTouch = false; + this->mTouchX = -1; + this->mTouchY = -1; + } + } + } else { + this->mTouch = false; + this->mTouchX = -1; + this->mTouchY = -1; + } + + this->UpdateFlags(speed); +} + +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); } -void TouchControl::UpdateConditionally(TouchState *state, u16 speed) {} -void TouchControl::func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease) { +ARM bool TouchControl::func_ov00_0207aeac() { + return ((*((u16 *) 0x027FFFA8) & 0x8000) >> 15) == 1; +} + +ARM void TouchControl::UpdateConditionally(TouchState *state, u16 speed) { + TouchState newState; + + if (TouchControl::func_ov00_0207aeac()) { + newState.touch = false; + newState.touchX = -1; + newState.touchY = -1; + } else { + newState.touch = state->touch; + newState.touchX = state->touchX; + newState.touchY = state->touchY; + } + + this->Update(&newState, speed); +} + +ARM void TouchControl::func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease) { TouchStateFlags touchState; if (shouldIncrease) { - IncreaseSpeed(speedIncrease); /* TODO: IncreaseSpeed expects an s16 variable, - while speedIncrease is a u16. As a result, the function - performs a conversion that is not present in the binary. */ + //! TODO: `IncreaseSpeed` expects an s16 variable, while `speedIncrease` is a u16. + //! As a result, the function performs a conversion that is not present in the binary. + this->IncreaseSpeed(speedIncrease); return; } - u32 result = TouchControl::func_ov00_0207aeac(); - if (result != 0) { + if (TouchControl::func_ov00_0207aeac()) { Fill16(0, &touchState.touchX, 8); } else { - GetTouchStateFlags(&touchState); } - UpdateWithStateFlags(&touchState, speedIncrease); + this->UpdateWithStateFlags(&touchState, speedIncrease); } -TouchControl::~TouchControl() {} +ARM TouchControl::~TouchControl() {} diff --git a/src/Main/Player/TouchControl.cpp b/src/Main/Player/TouchControl.cpp index 0212f591..4f4c81c1 100644 --- a/src/Main/Player/TouchControl.cpp +++ b/src/Main/Player/TouchControl.cpp @@ -1,4 +1,24 @@ #include "Player/TouchControl.hpp" +#include "global.h" -bool TouchControl::func_0202b864(Vec3p *param1, s32 size, unk8 param3) {} -bool TouchControl::func_0202b894(Vec3p *param1, s32 size, unk8 param3) {} +extern "C" bool func_0202b8f8(Vec3p *, s32, s32, s32, unk8); + +ARM bool TouchControl::func_0202b864(Vec3p *param1, s32 size, unk8 param3) { + if (gTouchControl.mFlags & TouchFlag_TouchedNow) { + return func_0202b8f8(param1, size, gTouchControl.mTouchX, gTouchControl.mTouchY, param3); + } + + return false; +} + +ARM bool TouchControl::func_0202b894(Vec3p *param1, s32 size, unk8 param3) { + if (gTouchControl.mTouch) { + return func_0202b8f8(param1, size, gTouchControl.mTouchX, gTouchControl.mTouchY, param3); + } + + if (gTouchControl.mFlags & TouchFlag_UntouchedNow) { + return func_0202b8f8(param1, size, gTouchControl.mTouchPrevX, gTouchControl.mTouchPrevY, param3); + } + + return false; +} From a4220160fd36e5a252f0a1792edab3cfcf9a2e81 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 23 Sep 2025 00:19:07 +0200 Subject: [PATCH 2/4] fix build issues --- config/eur/arm9/overlays/ov000/delinks.txt | 2 +- config/usa/arm9/overlays/ov000/delinks.txt | 2 +- src/00_Core/Player/{TouchControl.cpp => TouchControl_00.cpp} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename src/00_Core/Player/{TouchControl.cpp => TouchControl_00.cpp} (100%) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 83d6cf72..ac28b8bf 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -142,7 +142,7 @@ src/00_Core/Player/PlayerControl.cpp: .data start:0x020e6104 end:0x020e6150 .sbss start:0x020ee198 end:0x020ee1a0 -src/00_Core/Player/TouchControl.cpp: +src/00_Core/Player/TouchControl_00.cpp: .text start:0x0207ac24 end:0x0207afa0 .init start:0x020df38c end:0x020df3b8 .ctor start:0x020e1e90 end:0x020e1e94 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 3e020e05..1d2497b4 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -142,7 +142,7 @@ src/00_Core/Player/PlayerControl.cpp: .data start:0x020e60a4 end:0x020e60f0 .sbss start:0x020ee138 end:0x020ee140 -src/00_Core/Player/TouchControl.cpp: +src/00_Core/Player/TouchControl_00.cpp: .text start:0x0207abc4 end:0x0207af40 .init start:0x020df32c end:0x020df358 .ctor start:0x020e1e30 end:0x020e1e34 diff --git a/src/00_Core/Player/TouchControl.cpp b/src/00_Core/Player/TouchControl_00.cpp similarity index 100% rename from src/00_Core/Player/TouchControl.cpp rename to src/00_Core/Player/TouchControl_00.cpp From 321ccf92867bb27b9c8793396f584810989885e1 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:59:40 +0100 Subject: [PATCH 3/4] complete touchcontrol --- config/eur/arm9/overlays/ov000/delinks.txt | 4 ++-- config/eur/arm9/overlays/ov000/symbols.txt | 8 ++++---- config/eur/arm9/overlays/ov008/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/delinks.txt | 4 ++-- config/usa/arm9/overlays/ov000/symbols.txt | 8 ++++---- config/usa/arm9/overlays/ov008/symbols.txt | 2 +- include/Player/TouchControl.hpp | 5 ++--- include/lib/touch.h | 2 ++ src/00_Core/Player/TouchControl_00.cpp | 8 +++----- 9 files changed, 21 insertions(+), 22 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 615ff80b..5be51f0b 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -144,7 +144,7 @@ src/00_Core/Player/PlayerControl.cpp: src/00_Core/Player/TouchControl_00.cpp: .text start:0x0207ac24 end:0x0207afa0 .init start:0x020df38c end:0x020df3b8 - .ctor start:0x020e1e90 end:0x020e1e94 + .ctor start:0x020e1e94 end:0x020e1e98 src/00_Core/Save/AdventureFlags.cpp: .text start:0x02097628 end:0x020980f4 @@ -156,4 +156,4 @@ src/00_Core/Game/GameModePlay.cpp: src/00_Core/Render/ModelRender.cpp: .text start:0x020a956c end:0x020a99e0 - .data start:0x020e5818 end:0x020e5860 \ No newline at end of file + .data start:0x020e5818 end:0x020e5860 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 66d6d796..d2166e0c 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -180,7 +180,7 @@ func_ov000_0207a938 kind:function(thumb,size=0x18) addr:0x0207a938 func_ov000_0207a950 kind:function(arm,size=0x29c) addr:0x0207a950 func_ov000_0207abec kind:function(arm,size=0x38) addr:0x0207abec _ZN12TouchControl4InitEv kind:function(thumb,size=0x3c) addr:0x0207ac24 -_ZN12TouchControl13IncreaseSpeedEs kind:function(arm,size=0x18) addr:0x0207ac60 +_ZN12TouchControl13IncreaseSpeedEt kind:function(arm,size=0x18) addr:0x0207ac60 _ZN12TouchControl11UpdateFlagsEt kind:function(arm,size=0x118) addr:0x0207ac78 _ZN12TouchControl20UpdateWithStateFlagsEP15TouchStateFlagst kind:function(arm,size=0xdc) addr:0x0207ad90 _ZN12TouchControl6UpdateEP10TouchStatet kind:function(arm,size=0x40) addr:0x0207ae6c @@ -3928,7 +3928,7 @@ data_ov000_020df330 kind:data(any) addr:0x020df330 __sinit_ov000_020df338 kind:function(arm,size=0x14) addr:0x020df338 __sinit_ov000_020df34c kind:function(arm,size=0x2c) addr:0x020df34c __sinit_ov000_020df378 kind:function(arm,size=0x14) addr:0x020df378 -__sinit_TouchControl.cpp kind:function(arm,size=0x2c) addr:0x020df38c +__sinit_TouchControl_00.cpp kind:function(arm,size=0x2c) addr:0x020df38c __sinit_ov000_020df3b8 kind:function(arm,size=0x14) addr:0x020df3b8 __sinit_ov000_020df3cc kind:function(arm,size=0x14) addr:0x020df3cc __sinit_ov000_020df3e0 kind:function(arm,size=0x14) addr:0x020df3e0 @@ -3983,8 +3983,8 @@ __sinit_ov000_020e1e60 kind:function(arm,size=0x14) addr:0x020e1e60 __sinit_ov000_020e1e74 kind:function(arm,size=0x14) addr:0x020e1e74 .p__sinit_ov000_020df338 kind:data(word) addr:0x020e1e88 .p__sinit_ov000_020df34c kind:data(word) addr:0x020e1e8c -.p__sinit_ov000_020df378 kind:data(word) addr:0x020e1e90 -.p__sinit_ov000_020df38c kind:data(word) addr:0x020e1e94 +.p__sinit_ov000_020e1e90.cpp kind:data(word) addr:0x020e1e90 +.p__sinit_TouchControl_00.cpp kind:data(word) addr:0x020e1e94 .p__sinit_ov000_020df3b8 kind:data(word) addr:0x020e1e98 .p__sinit_ov000_020df3cc kind:data(word) addr:0x020e1e9c .p__sinit_ov000_020df3e0 kind:data(word) addr:0x020e1ea0 diff --git a/config/eur/arm9/overlays/ov008/symbols.txt b/config/eur/arm9/overlays/ov008/symbols.txt index b9064696..736c29fa 100644 --- a/config/eur/arm9/overlays/ov008/symbols.txt +++ b/config/eur/arm9/overlays/ov008/symbols.txt @@ -7,7 +7,7 @@ _ZN9GameStart8vfunc_10EPt kind:function(arm,size=0x4) addr:0x02112e84 _ZN9GameStart19func_ov008_02112e88Ev kind:function(arm,size=0x58) addr:0x02112e88 _ZN18UnkStruct_027e0d54C1Ev kind:function(arm,size=0x48) addr:0x02112ee0 _ZN18UnkStruct_027e0d5419func_ov008_02112f28Ev kind:function(arm,size=0x158) addr:0x02112f28 -_ZN12TouchControlC2Ev kind:function(arm,size=0x50) addr:0x02113080 +_ZN12TouchControlC1Ev kind:function(arm,size=0x50) addr:0x02113080 _ZN18UnkStruct_020ee698C2Ev kind:function(arm,size=0x80) addr:0x021130d0 _ZN18UnkStruct_020ee734C2Ev kind:function(arm,size=0x5c) addr:0x02113150 _ZN18UnkStruct_020ee73419func_ov008_021131acEv kind:function(arm,size=0xd8) addr:0x021131ac diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 7d58ddbe..a93dda37 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -144,7 +144,7 @@ src/00_Core/Player/PlayerControl.cpp: src/00_Core/Player/TouchControl_00.cpp: .text start:0x0207abc4 end:0x0207af40 .init start:0x020df32c end:0x020df358 - .ctor start:0x020e1e30 end:0x020e1e34 + .ctor start:0x020e1e34 end:0x020e1e38 src/00_Core/Save/AdventureFlags.cpp: .text start:0x020975c8 end:0x02098094 @@ -156,4 +156,4 @@ src/00_Core/Game/GameModePlay.cpp: src/00_Core/Render/ModelRender.cpp: .text start:0x020a950c end:0x020a9980 - .data start:0x020e57b8 end:0x020e5800 \ No newline at end of file + .data start:0x020e57b8 end:0x020e5800 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 0cd0c316..2b0059c3 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -180,7 +180,7 @@ func_ov000_0207a938 kind:function(thumb,size=0x18) addr:0x0207a8d8 func_ov000_0207a950 kind:function(arm,size=0x29c) addr:0x0207a8f0 func_ov000_0207abec kind:function(arm,size=0x38) addr:0x0207ab8c _ZN12TouchControl4InitEv kind:function(thumb,size=0x3c) addr:0x0207abc4 -_ZN12TouchControl13IncreaseSpeedEs kind:function(arm,size=0x18) addr:0x0207ac00 +_ZN12TouchControl13IncreaseSpeedEt kind:function(arm,size=0x18) addr:0x0207ac00 _ZN12TouchControl11UpdateFlagsEt kind:function(arm,size=0x118) addr:0x0207ac18 _ZN12TouchControl20UpdateWithStateFlagsEP15TouchStateFlagst kind:function(arm,size=0xdc) addr:0x0207ad30 _ZN12TouchControl6UpdateEP10TouchStatet kind:function(arm,size=0x40) addr:0x0207ae0c @@ -3928,7 +3928,7 @@ data_ov000_020df330 kind:data(any) addr:0x020df2d0 __sinit_ov000_020df338 kind:function(arm,size=0x14) addr:0x020df2d8 __sinit_ov000_020df34c kind:function(arm,size=0x2c) addr:0x020df2ec __sinit_ov000_020df378 kind:function(arm,size=0x14) addr:0x020df318 -__sinit_TouchControl.cpp kind:function(arm,size=0x2c) addr:0x020df32c +__sinit_TouchControl_00.cpp kind:function(arm,size=0x2c) addr:0x020df32c __sinit_ov000_020df3b8 kind:function(arm,size=0x14) addr:0x020df358 __sinit_ov000_020df3cc kind:function(arm,size=0x14) addr:0x020df36c __sinit_ov000_020df3e0 kind:function(arm,size=0x14) addr:0x020df380 @@ -3983,8 +3983,8 @@ __sinit_ov000_020e1e60 kind:function(arm,size=0x14) addr:0x020e1e00 __sinit_ov000_020e1e74 kind:function(arm,size=0x14) addr:0x020e1e14 .p__sinit_ov000_020df338 kind:data(word) addr:0x020e1e28 .p__sinit_ov000_020df34c kind:data(word) addr:0x020e1e2c -.p__sinit_ov000_020df378 kind:data(word) addr:0x020e1e30 -.p__sinit_ov000_020df38c kind:data(word) addr:0x020e1e34 +.p__sinit_ov000_020e1e30.cpp kind:data(word) addr:0x020e1e30 +.p__sinit_TouchControl_00.cpp kind:data(word) addr:0x020e1e34 .p__sinit_ov000_020df3b8 kind:data(word) addr:0x020e1e38 .p__sinit_ov000_020df3cc kind:data(word) addr:0x020e1e3c .p__sinit_ov000_020df3e0 kind:data(word) addr:0x020e1e40 diff --git a/config/usa/arm9/overlays/ov008/symbols.txt b/config/usa/arm9/overlays/ov008/symbols.txt index 97af093d..f9527d4f 100644 --- a/config/usa/arm9/overlays/ov008/symbols.txt +++ b/config/usa/arm9/overlays/ov008/symbols.txt @@ -7,7 +7,7 @@ _ZN9GameStart8vfunc_10EPt kind:function(arm,size=0x4) addr:0x02112e04 _ZN9GameStart19func_ov008_02112e88Ev kind:function(arm,size=0x58) addr:0x02112e08 _ZN18UnkStruct_027e0d54C1Ev kind:function(arm,size=0x48) addr:0x02112e60 _ZN18UnkStruct_027e0d5419func_ov008_02112f28Ev kind:function(arm,size=0x158) addr:0x02112ea8 -_ZN12TouchControlC2Ev kind:function(arm,size=0x50) addr:0x02113000 +_ZN12TouchControlC1Ev kind:function(arm,size=0x50) addr:0x02113000 _ZN18UnkStruct_020ee698C2Ev kind:function(arm,size=0x80) addr:0x02113050 _ZN18UnkStruct_020ee734C2Ev kind:function(arm,size=0x5c) addr:0x021130d0 _ZN18UnkStruct_020ee73419func_ov008_021131acEv kind:function(arm,size=0xd8) addr:0x0211312c diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index 6ed9d45e..efe18d97 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -35,7 +35,7 @@ class TouchControl { /* 28 */ s32 mTouchLastY; /* 2c */ s32 mTouchStartX; /* 30 */ s32 mTouchStartY; - /* 34 */ TouchFlags mFlags; + /* 34 */ volatile TouchFlags mFlags; /* 36 */ TouchControl(); @@ -43,7 +43,7 @@ class TouchControl { ~TouchControl(); void Init(); - void IncreaseSpeed(s16 increase); + void IncreaseSpeed(u16 increase); void UpdateFlags(u16 speed); void UpdateWithStateFlags(TouchStateFlags *state, u16 speed); void Update(TouchState *state, u16 speed); @@ -54,7 +54,6 @@ class TouchControl { static bool func_0202b864(Vec3p *param1, s32 size, unk8 param3); static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3); }; -extern TouchControl gTouchControl; extern TouchControl gTouchControl; diff --git a/include/lib/touch.h b/include/lib/touch.h index 4bc0ed30..e5848f5f 100644 --- a/include/lib/touch.h +++ b/include/lib/touch.h @@ -16,5 +16,7 @@ struct TouchState { s32 touchY; }; +extern "C" { void WaitForTouchUpdate(u16 param1); bool GetTouchStateFlags(TouchStateFlags *pState); +} diff --git a/src/00_Core/Player/TouchControl_00.cpp b/src/00_Core/Player/TouchControl_00.cpp index 13fc98a8..e5305759 100644 --- a/src/00_Core/Player/TouchControl_00.cpp +++ b/src/00_Core/Player/TouchControl_00.cpp @@ -1,11 +1,9 @@ #include "Player/TouchControl.hpp" #include "global.h" -void TouchControl::Init() {} - TouchControl gTouchControl; -THUMB TouchControl::TouchControl() { +THUMB void TouchControl::Init() { this->mSpeed = 1; this->mTimeBetweenTouches = -1; this->mTimeSinceTouch = -1; @@ -25,7 +23,7 @@ THUMB TouchControl::TouchControl() { this->mFlags = TouchFlag_None; } -ARM void TouchControl::IncreaseSpeed(s16 increase) { +ARM void TouchControl::IncreaseSpeed(u16 increase) { this->mFlags = TouchFlag_None; this->mSpeed += increase; } @@ -50,7 +48,7 @@ ARM void TouchControl::UpdateFlags(u16 speed) { this->mRepeatTimer = this->mRepeatStart; } else { if (this->mTouch != false) { - if (this->mRepeatTimer - this->mSpeed > 1) { + if (this->mRepeatTimer - this->mSpeed > 0) { this->mRepeatTimer -= this->mSpeed; } else { this->mFlags |= TouchFlag_Repeat; From 875ff061e36f18d0c78e365821d3840933467cd5 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:02:30 +0100 Subject: [PATCH 4/4] remove useless comment --- src/00_Core/Player/TouchControl_00.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/00_Core/Player/TouchControl_00.cpp b/src/00_Core/Player/TouchControl_00.cpp index e5305759..b2ef607c 100644 --- a/src/00_Core/Player/TouchControl_00.cpp +++ b/src/00_Core/Player/TouchControl_00.cpp @@ -143,8 +143,6 @@ ARM void TouchControl::func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease TouchStateFlags touchState; if (shouldIncrease) { - //! TODO: `IncreaseSpeed` expects an s16 variable, while `speedIncrease` is a u16. - //! As a result, the function performs a conversion that is not present in the binary. this->IncreaseSpeed(speedIncrease); return; }