mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-03 06:18:45 -05:00
207 lines
5.4 KiB
C
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
|
|
}
|