pmd-red/src/input.c
Seth Barberee 0d3b11e81a
Data work and decomp some mail/pelipper board (#54)
* data work and decomp some mail/pelipper board

* resuce -> rescue

* label more data
2021-09-24 00:49:43 -05:00

207 lines
5.4 KiB
C

#include "global.h"
#include "input.h"
EWRAM_DATA struct Inputs gRealInputs;
EWRAM_DATA struct UnusedInputStruct gUnusedInputsRelated;
EWRAM_DATA u32 gUnusedScrambledInputJunk;
EWRAM_DATA struct Inputs gBufferedInputs;
EWRAM_DATA struct Inputs gCurrentInputs;
EWRAM_DATA struct Inputs gLastInputs;
EWRAM_DATA struct InputTimers gInputTimers;
void ReadKeyInput(struct Inputs *r0);
void InitInput(void)
{
gRealInputs.held = 0;
gRealInputs.pressed = 0;
gRealInputs.repeated = 0;
gRealInputs.shortPress = 0;
gBufferedInputs.held = 0;
gBufferedInputs.pressed = 0;
gBufferedInputs.repeated = 0;
gBufferedInputs.shortPress = 0;
gUnusedScrambledInputJunk = 0x4a14c1; // seems like random keyboard mashing (see UpdateInput)
gUnusedInputsRelated.unk20 = 0;
gUnusedInputsRelated.unk0 = 0xffff; // probably a mask
gUnusedInputsRelated.unk2 = -1;
gUnusedInputsRelated.unk4 = -1;
gUnusedInputsRelated.unk6 = -1;
gUnusedInputsRelated.unk1C = -1;
gUnusedInputsRelated.unk1E = -1;
gUnusedInputsRelated.unk8 = -1;
gUnusedInputsRelated.unkA = -1;
gUnusedInputsRelated.unkC = -1;
gUnusedInputsRelated.unkE = -1;
gUnusedInputsRelated.unk10 = -1;
gUnusedInputsRelated.unk12 = -1;
gUnusedInputsRelated.unk14 = -1;
gUnusedInputsRelated.unk16 = -1;
gUnusedInputsRelated.unk28 = 0;
gUnusedInputsRelated.unk29 = 0;
gInputTimers.holdTimerB = 0;
gInputTimers.holdTimerR = 0;
}
void LoadBufferedInputs(void)
{
gRealInputs = gBufferedInputs;
gBufferedInputs.held = 0;
gBufferedInputs.pressed = 0;
gBufferedInputs.repeated = 0;
gBufferedInputs.shortPress = 0;
gUnusedInputsRelated.unk0 = 0xffff;
gUnusedInputsRelated.unk2 = -1;
gUnusedInputsRelated.unk4 = -1;
gUnusedInputsRelated.unk6 = -1;
gUnusedInputsRelated.unk8 = -1;
gUnusedInputsRelated.unkA = -1;
gUnusedInputsRelated.unkC = -1;
gUnusedInputsRelated.unkE = -1;
gUnusedInputsRelated.unk10 = -1;
gUnusedInputsRelated.unk12 = -1;
gUnusedInputsRelated.unk14 = -1;
gUnusedInputsRelated.unk16 = -1;
gUnusedInputsRelated.unk28 = 0;
gUnusedInputsRelated.unk29 = 0;
}
// Unused
u8 sub_80048B8(void)
{
return 0;
}
u8 sub_80048BC(void)
{
return 0;
}
// Unused
u8 sub_80048C0(void)
{
return 0;
}
// Unused
u8 sub_80048C4(void)
{
return 0;
}
u8 sub_80048C8(void)
{
return 0;
}
// Unused
u8 sub_80048CC(void)
{
return 0;
}
void ResetRepeatTimers(void)
{
gRealInputs.repeated = 0;
gCurrentInputs.repeatTimerDpad = 0;
gCurrentInputs.heldDpad = 0;
gInputTimers.holdTimerB = 999;
gInputTimers.holdTimerR = 999;
}
void UnpressButtons(void)
{
gRealInputs.pressed = 0;
gBufferedInputs.pressed = 0;
gCurrentInputs.pressed = 0;
}
void ResetUnusedInputStruct(void)
{
gUnusedInputsRelated.unk20 = 0x5;
gUnusedInputsRelated.unk24 = 0;
gUnusedInputsRelated.unk0 = 0xffff;
gUnusedInputsRelated.unk2 = -1;
gUnusedInputsRelated.unk4 = -1;
gUnusedInputsRelated.unk6 = -1;
gUnusedInputsRelated.unk8 = -1;
gUnusedInputsRelated.unkA = -1;
gUnusedInputsRelated.unkC = -1;
gUnusedInputsRelated.unkE = -1;
gUnusedInputsRelated.unk10 = -1;
gUnusedInputsRelated.unk12 = -1;
gUnusedInputsRelated.unk14 = -1;
gUnusedInputsRelated.unk16 = -1;
gUnusedInputsRelated.unk28 = 0;
gUnusedInputsRelated.unk29 = 0;
}
void UpdateInput(void)
{
gLastInputs = gCurrentInputs;
ReadKeyInput(&gCurrentInputs);
gCurrentInputs.pressed = (gLastInputs.held ^ gCurrentInputs.held) & gCurrentInputs.held;
if (gCurrentInputs.held) {
if ((gCurrentInputs.heldDpad & DPAD_ANY) == (gCurrentInputs.held & DPAD_ANY)) {
if (gCurrentInputs.repeatTimerDpad < 50)
gCurrentInputs.repeatTimerDpad++;
} else {
gCurrentInputs.heldDpad = gCurrentInputs.held & DPAD_ANY;
gCurrentInputs.repeatTimerDpad = 1;
}
} else {
gCurrentInputs.repeatTimerDpad = 0;
gCurrentInputs.heldDpad = 0;
}
if (gCurrentInputs.repeatTimerDpad == 1) {
gCurrentInputs.repeated = (gCurrentInputs.heldDpad & DPAD_ANY) | gCurrentInputs.pressed;
} else if (gCurrentInputs.repeatTimerDpad == 48) {
gCurrentInputs.repeatTimerDpad = 43;
gCurrentInputs.repeated = (gCurrentInputs.heldDpad & DPAD_ANY) | gCurrentInputs.pressed;
} else {
gCurrentInputs.repeated = 0;
}
gCurrentInputs.shortPress = 0;
if (gCurrentInputs.held & B_BUTTON) {
if (gInputTimers.holdTimerB < 100)
gInputTimers.holdTimerB++;
} else if (1 < gInputTimers.holdTimerB && gInputTimers.holdTimerB < 12) {
gCurrentInputs.shortPress = B_BUTTON;
gInputTimers.holdTimerB = 0;
} else {
gInputTimers.holdTimerB = 0;
}
if (gCurrentInputs.held & R_BUTTON) {
if (gInputTimers.holdTimerR < 100)
gInputTimers.holdTimerR++;
} else if (1 < gInputTimers.holdTimerR && gInputTimers.holdTimerR < 12) {
gCurrentInputs.shortPress |= R_BUTTON;
gInputTimers.holdTimerR = 0;
} else {
gInputTimers.holdTimerR = 0;
}
gBufferedInputs.held |= gCurrentInputs.held;
gBufferedInputs.pressed |= gCurrentInputs.pressed;
gBufferedInputs.repeated |= gCurrentInputs.repeated;
gBufferedInputs.shortPress |= gCurrentInputs.shortPress;
gUnusedScrambledInputJunk *= gCurrentInputs.held | 0x54a1c41; // very similar to odd constant in InitInput - probably keymashing
}