diff options
| author | Aetias <144526980+AetiasHax@users.noreply.github.com> | 2025-04-20 08:09:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-20 08:09:41 +0200 |
| commit | ce91ed02c0a000bc1536762093e4a9c6d7a65560 (patch) | |
| tree | b285610b9cce342a59ce166a3ee082f659507910 | |
| parent | abc53b54ecb15e06a54634ea67be9369b858e9ec (diff) | |
| parent | 19137c94e2091786b98e96128362e96c11a5fdf3 (diff) | |
Merge pull request #77 from Ozero4/main
Partial decompilation of TouchControl
| -rw-r--r-- | include/Player/TouchControl.hpp | 6 | ||||
| -rw-r--r-- | src/00_Core/Player/TouchControl.cpp | 34 |
2 files changed, 36 insertions, 4 deletions
diff --git a/include/Player/TouchControl.hpp b/include/Player/TouchControl.hpp index 1301e144..8970c032 100644 --- a/include/Player/TouchControl.hpp +++ b/include/Player/TouchControl.hpp @@ -5,6 +5,8 @@ #include "nds/math.h" #include "types.h" +extern u16 *data_0207aecc; + typedef u16 TouchFlags; enum TouchFlag_ { TouchFlag_TouchedNow = 0x0001, @@ -42,9 +44,11 @@ public: void Update(TouchState *state, u16 speed); bool func_ov00_0207aeac(); void UpdateConditionally(TouchState *state, u16 speed); - void func_ov00_0207af38(u16 speed, bool param2); + void func_ov00_0207af38(u16 speedIncrease, bool shouldIncrease); ~TouchControl(); static bool func_0202b864(Vec3p *param1, s32 size, unk8 param3); static bool func_0202b894(Vec3p *param1, s32 size, unk8 param3); }; + +void Fill16(int value, unsigned short *dst, int size); // TODO: Replace with header file diff --git a/src/00_Core/Player/TouchControl.cpp b/src/00_Core/Player/TouchControl.cpp index 5cae75a5..9630de1a 100644 --- a/src/00_Core/Player/TouchControl.cpp +++ b/src/00_Core/Player/TouchControl.cpp @@ -1,11 +1,39 @@ #include "Player/TouchControl.hpp" TouchControl::TouchControl() {} -void TouchControl::IncreaseSpeed(s16 increase) {} + +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() {} +bool TouchControl::func_ov00_0207aeac() { + return ((*data_0207aecc & 0x8000) >> 15) == 1; +} void TouchControl::UpdateConditionally(TouchState *state, u16 speed) {} -void TouchControl::func_ov00_0207af38(u16 speed, bool param2) {} + +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() {} |
