summaryrefslogtreecommitdiff
path: root/src/input.c
diff options
context:
space:
mode:
authorMateusz Naściszewski <matin1111@wp.pl>2020-12-26 06:57:02 +0100
committerSeth Barberee <seth.barberee@gmail.com>2020-12-28 20:13:22 -0600
commit6362345b04a04fefec25fdb29fd1b1bb9f8da163 (patch)
tree84059fefe70ebab180e8f5efcc5d2208abd28275 /src/input.c
parentb64320b043fe0a774327d7d880e9f16605db54ee (diff)
Decompile UpdateInput
and some other minor stuff.
Diffstat (limited to 'src/input.c')
-rw-r--r--src/input.c99
1 files changed, 81 insertions, 18 deletions
diff --git a/src/input.c b/src/input.c
index 99d894b..91b20ac 100644
--- a/src/input.c
+++ b/src/input.c
@@ -4,23 +4,26 @@
EWRAM_DATA struct Input gUnknown_2025600;
EWRAM_DATA struct UnkInputStruct1 gUnknown_20255F0;
EWRAM_DATA struct UnkInputStruct1 gUnknown_2025638;
-EWRAM_DATA struct UnkInputStruct1 gUnknown_2025648;
+EWRAM_DATA struct UnkInputStruct1 gCurrentInputs;
+EWRAM_DATA struct UnkInputStruct1 gLastInputs;
EWRAM_DATA struct UnkInputStruct2 gUnknown_2025668;
-EWRAM_DATA u32 gUnknown_202562C;
+EWRAM_DATA u32 gUnusedScrambledInputJunk;
+
+void ReadKeyInput(struct UnkInputStruct1 *r0);
void InitInput(void)
{
- gUnknown_20255F0.unk0 = 0;
- gUnknown_20255F0.unk2 = 0;
+ gUnknown_20255F0.held = 0;
+ gUnknown_20255F0.pressed = 0;
gUnknown_20255F0.unk4 = 0;
gUnknown_20255F0.unk6 = 0;
- gUnknown_2025638.unk0 = 0;
- gUnknown_2025638.unk2 = 0;
+ gUnknown_2025638.held = 0;
+ gUnknown_2025638.pressed = 0;
gUnknown_2025638.unk4 = 0;
gUnknown_2025638.unk6 = 0;
- gUnknown_202562C = 4854977; // ????? (0x4a14c1)
+ gUnusedScrambledInputJunk = 0x4a14c1; // seems like random keyboard mashing (see UpdateInput)
gUnknown_2025600.unk20 = 0;
gUnknown_2025600.unk0 = 0xffff; // probably a mask
@@ -40,16 +43,16 @@ void InitInput(void)
gUnknown_2025600.unk28 = 0;
gUnknown_2025600.unk29 = 0;
- gUnknown_2025668.unk0 = 0;
- gUnknown_2025668.unk2 = 0;
+ gUnknown_2025668.holdTimerB = 0;
+ gUnknown_2025668.holdTimerR = 0;
}
void sub_800485C(void)
{
gUnknown_20255F0 = gUnknown_2025638;
- gUnknown_2025638.unk0 = 0;
- gUnknown_2025638.unk2 = 0;
+ gUnknown_2025638.held = 0;
+ gUnknown_2025638.pressed = 0;
gUnknown_2025638.unk4 = 0;
gUnknown_2025638.unk6 = 0;
@@ -107,18 +110,18 @@ u8 sub_80048CC(void)
void sub_80048D0(void)
{
gUnknown_20255F0.unk4 = 0;
- gUnknown_2025648.unkC = 0;
- gUnknown_2025648.unk8 = 0;
- gUnknown_2025668.unk0 = 0x3e7;
- gUnknown_2025668.unk2 = 0x3e7;
+ gCurrentInputs.repeatTimer = 0;
+ gCurrentInputs.unk8 = 0;
+ gUnknown_2025668.holdTimerB = 999;
+ gUnknown_2025668.holdTimerR = 999;
}
void sub_80048F8(void)
{
- gUnknown_20255F0.unk2 = 0;
- gUnknown_2025638.unk2 = 0;
- gUnknown_2025648.unk2 = 0;
+ gUnknown_20255F0.pressed = 0;
+ gUnknown_2025638.pressed = 0;
+ gCurrentInputs.pressed = 0;
}
void sub_8004914(void)
@@ -142,3 +145,63 @@ void sub_8004914(void)
gUnknown_2025600.unk29 = 0;
}
+
+void UpdateInput(void)
+{
+ gLastInputs = gCurrentInputs;
+
+ ReadKeyInput(&gCurrentInputs);
+
+ gCurrentInputs.pressed = (gLastInputs.held ^ gCurrentInputs.held) & gCurrentInputs.held;
+
+ if (gCurrentInputs.held) {
+ // 0xF0 -- DPAD buttons
+ if ((gCurrentInputs.unk8 & 0xf0) == (gCurrentInputs.held & 0xf0)) {
+ if (gCurrentInputs.repeatTimer < 50)
+ gCurrentInputs.repeatTimer = gCurrentInputs.repeatTimer + 1;
+ } else {
+ gCurrentInputs.unk8 = gCurrentInputs.held & 0xf0;
+ gCurrentInputs.repeatTimer = 1;
+ }
+ } else {
+ gCurrentInputs.repeatTimer = 0;
+ gCurrentInputs.unk8 = 0;
+ }
+
+ if (gCurrentInputs.repeatTimer == 1) {
+ gCurrentInputs.unk4 = (gCurrentInputs.unk8 & 0xf0) | gCurrentInputs.pressed;
+ } else if (gCurrentInputs.repeatTimer == 48) {
+ gCurrentInputs.repeatTimer = 43;
+ gCurrentInputs.unk4 = (gCurrentInputs.unk8 & 0xf0) | gCurrentInputs.pressed;
+ } else {
+ gCurrentInputs.unk4 = 0;
+ }
+ gCurrentInputs.unk6 = 0;
+
+ if (gCurrentInputs.held & B_BUTTON) {
+ if (gUnknown_2025668.holdTimerB < 100)
+ gUnknown_2025668.holdTimerB++;
+ } else if (1 < gUnknown_2025668.holdTimerB && gUnknown_2025668.holdTimerB < 12) {
+ gCurrentInputs.unk6 = B_BUTTON;
+ gUnknown_2025668.holdTimerB = 0;
+ } else {
+ gUnknown_2025668.holdTimerB = 0;
+ }
+
+ if (gCurrentInputs.held & R_BUTTON) {
+ if (gUnknown_2025668.holdTimerR < 100)
+ gUnknown_2025668.holdTimerR++;
+ } else if (1 < gUnknown_2025668.holdTimerR && gUnknown_2025668.holdTimerR < 12) {
+ gCurrentInputs.unk6 |= R_BUTTON;
+ gUnknown_2025668.holdTimerR = 0;
+ } else {
+ gUnknown_2025668.holdTimerR = 0;
+ }
+
+ gUnknown_2025638.held |= gCurrentInputs.held;
+ gUnknown_2025638.pressed |= gCurrentInputs.pressed;
+ gUnknown_2025638.unk4 |= gCurrentInputs.unk4;
+ gUnknown_2025638.unk6 |= gCurrentInputs.unk6;
+
+ gUnusedScrambledInputJunk *= gCurrentInputs.held | 0x54a1c41; // very similar to odd constant in InitInput - probably keymashing
+}