summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYanis <35189056+Yanis002@users.noreply.github.com>2026-01-30 18:36:20 +0100
committerGitHub <noreply@github.com>2026-01-30 18:36:20 +0100
commit98cc0af690719f10bd7b67c1c11d207bfcdbbfe7 (patch)
tree106937a3d0b6476d44872d8ccf2cfc6b0a6a03df
parente5701a754e910812061cdd7aa2012feca050a6c4 (diff)
Started `TouchControl.cpp` (#111)
* start both `TouchControl.cpp` * fix build issues * complete touchcontrol * remove useless comment --------- Co-authored-by: Yanis002 <Yanis002@users.noreply.github.com>
-rw-r--r--config/eur/arm9/delinks.txt3
-rw-r--r--config/eur/arm9/overlays/ov000/delinks.txt6
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt8
-rw-r--r--config/eur/arm9/overlays/ov008/symbols.txt2
-rw-r--r--config/usa/arm9/delinks.txt3
-rw-r--r--config/usa/arm9/overlays/ov000/delinks.txt6
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt8
-rw-r--r--config/usa/arm9/overlays/ov008/symbols.txt2
-rw-r--r--include/Player/TouchControl.hpp12
-rw-r--r--include/lib/touch.h2
-rw-r--r--src/00_Core/Player/TouchControl.cpp39
-rw-r--r--src/00_Core/Player/TouchControl_00.cpp159
-rw-r--r--src/Main/Player/TouchControl.cpp24
13 files changed, 212 insertions, 62 deletions
diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt
index 3d2d1925..3b906b15 100644
--- a/config/eur/arm9/delinks.txt
+++ b/config/eur/arm9/delinks.txt
@@ -64,6 +64,9 @@ src/Main/Unknown/UnkStruct_02063220.cpp:
.rodata start:0x020562e0 end:0x02056300
.data start:0x0205772c end:0x02057808
+src/Main/Player/TouchControl.cpp:
+ .text start:0x0202b864 end:0x0202b8e4
+
src/Main/Game/Game.cpp:
.text start:0x0202c6c8 end:0x0202d0cc
.rodata start:0x020561f4 end:0x020562d4
diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt
index fdd47cf9..5be51f0b 100644
--- a/config/eur/arm9/overlays/ov000/delinks.txt
+++ b/config/eur/arm9/overlays/ov000/delinks.txt
@@ -141,10 +141,10 @@ 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
+ .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 4ed2a2d1..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_ov000_020df38c 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/delinks.txt b/config/usa/arm9/delinks.txt
index 640d7195..5f43dfcb 100644
--- a/config/usa/arm9/delinks.txt
+++ b/config/usa/arm9/delinks.txt
@@ -61,6 +61,9 @@ src/Main/Unknown/UnkStruct_02063220.cpp:
.rodata start:0x0205629c end:0x020562bc
.data start:0x020576e4 end:0x020577c0
+src/Main/Player/TouchControl.cpp:
+ .text start:0x0202b84c end:0x0202b8cc
+
src/Main/Game/Game.cpp:
.text start:0x0202c6b0 end:0x0202d0b4
.rodata start:0x020561b0 end:0x02056290
diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt
index cae2e579..a93dda37 100644
--- a/config/usa/arm9/overlays/ov000/delinks.txt
+++ b/config/usa/arm9/overlays/ov000/delinks.txt
@@ -141,10 +141,10 @@ 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
+ .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 25db19b7..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_ov000_020df38c 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 ee63a3ee..efe18d97 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 @@ public:
/* 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;
@@ -34,7 +35,7 @@ public:
/* 28 */ s32 mTouchLastY;
/* 2c */ s32 mTouchStartX;
/* 30 */ s32 mTouchStartY;
- /* 34 */ TouchFlags mFlags;
+ /* 34 */ volatile TouchFlags mFlags;
/* 36 */
TouchControl();
@@ -42,7 +43,7 @@ public:
~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);
@@ -53,6 +54,7 @@ public:
static bool func_0202b864(Vec3p *param1, s32 size, unk8 param3);
static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3);
};
+
extern TouchControl gTouchControl;
extern "C" void Fill16(int value, unsigned short *dst, int size); // TODO: Replace with header file
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.cpp b/src/00_Core/Player/TouchControl.cpp
deleted file mode 100644
index c4a586bc..00000000
--- a/src/00_Core/Player/TouchControl.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "Player/TouchControl.hpp"
-
-void TouchControl::Init() {}
-
-void TouchControl::IncreaseSpeed(s16 increase) {
- this->mFlags = 0;
- 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;
-}
-void TouchControl::UpdateConditionally(TouchState *state, u16 speed) {}
-
-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. */
- return;
- }
-
- u32 result = TouchControl::func_ov00_0207aeac();
- if (result != 0) {
- Fill16(0, &touchState.touchX, 8);
- } else {
-
- GetTouchStateFlags(&touchState);
- }
-
- UpdateWithStateFlags(&touchState, speedIncrease);
-}
-
-TouchControl::~TouchControl() {}
diff --git a/src/00_Core/Player/TouchControl_00.cpp b/src/00_Core/Player/TouchControl_00.cpp
new file mode 100644
index 00000000..b2ef607c
--- /dev/null
+++ b/src/00_Core/Player/TouchControl_00.cpp
@@ -0,0 +1,159 @@
+#include "Player/TouchControl.hpp"
+#include "global.h"
+
+TouchControl gTouchControl;
+
+THUMB void TouchControl::Init() {
+ 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(u16 increase) {
+ this->mFlags = TouchFlag_None;
+ this->mSpeed += increase;
+}
+
+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 > 0) {
+ 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);
+}
+
+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) {
+ this->IncreaseSpeed(speedIncrease);
+ return;
+ }
+
+ if (TouchControl::func_ov00_0207aeac()) {
+ Fill16(0, &touchState.touchX, 8);
+ } else {
+ GetTouchStateFlags(&touchState);
+ }
+
+ this->UpdateWithStateFlags(&touchState, speedIncrease);
+}
+
+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;
+}