sub_4B280
Some checks are pending
CI / build (push) Waiting to run

This commit is contained in:
Marcus Huderle 2025-02-16 15:17:07 -06:00
parent 4be4a3328e
commit 2cbab2489a
6 changed files with 98 additions and 170 deletions

View File

@ -6,103 +6,6 @@
.text
thumb_func_start sub_4B280
sub_4B280: @ 0x0804B280
push {r4, r5, lr}
movs r3, #0
ldr r4, _0804B2F8 @ =gCurrentPinballGame
ldr r0, _0804B2FC @ =gMain
mov ip, r0
adds r2, r4, #0
movs r1, #0
_0804B28E:
ldr r0, [r2]
adds r0, #4
adds r0, r0, r3
strb r1, [r0]
ldr r0, [r2]
adds r0, #9
adds r0, r0, r3
strb r1, [r0]
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, #4
bls _0804B28E
mov r1, ip
ldrb r0, [r1, #0xf]
cmp r0, #0
bne _0804B32E
movs r3, #0
movs r5, #1
_0804B2B4:
lsls r2, r3, #2
mov r1, ip
adds r1, #0x60
adds r1, r2, r1
mov r0, ip
adds r0, #0x62
adds r2, r2, r0
ldrh r1, [r1]
ldrh r0, [r2]
orrs r1, r0
ldr r2, _0804B300 @ =0x000003FF
adds r0, r2, #0
ands r1, r0
mov r2, ip
ldrh r0, [r2, #0x1c]
ands r0, r1
cmp r1, r0
bne _0804B304
ldr r1, [r4]
adds r0, r1, #0
adds r0, #0xe
adds r0, r0, r3
ldrb r0, [r0]
cmp r0, #0
bne _0804B2EC
adds r0, r1, #4
adds r0, r0, r3
strb r5, [r0]
_0804B2EC:
ldr r0, [r4]
adds r0, #0xe
adds r0, r0, r3
strb r5, [r0]
b _0804B324
.align 2, 0
_0804B2F8: .4byte gCurrentPinballGame
_0804B2FC: .4byte gMain
_0804B300: .4byte 0x000003FF
_0804B304:
ldr r1, [r4]
adds r0, r1, #0
adds r0, #0xe
adds r0, r0, r3
ldrb r0, [r0]
cmp r0, #0
beq _0804B31A
adds r0, r1, #0
adds r0, #9
adds r0, r0, r3
strb r5, [r0]
_0804B31A:
ldr r0, [r4]
adds r0, #0xe
adds r0, r0, r3
movs r1, #0
strb r1, [r0]
_0804B324:
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, #4
bls _0804B2B4
_0804B32E:
pop {r4, r5}
pop {r0}
bx r0
thumb_func_start sub_4B334
sub_4B334: @ 0x0804B334
push {r4, r5, r6, r7, lr}

Binary file not shown.

View File

@ -66,8 +66,6 @@
#define TEST_BUTTON_EXACT(field, button) (((field) & (button)) == (button))
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
#define JOY_NEW_EXACT(button) TEST_BUTTON_EXACT(gMain.newKeys, button)
#define JOY_HELD_EXACT(button) TEST_BUTTON_EXACT(gMain.heldKeys, button)
struct UnkPinballGame1334
{
@ -90,7 +88,10 @@ struct UnkPinballGame1334
struct PinballGame
{
/*0x000*/ u8 filler0[0x13];
/*0x000*/ u8 filler0[0x4];
/*0x004*/ u8 unk4[5];
/*0x009*/ u8 unk9[5];
/*0x00E*/ u8 unkE[5];
/*0x013*/ s8 unk13;
/*0x014*/ s8 unk14;
/*0x015*/ u8 filler15;

View File

@ -97,16 +97,7 @@ struct Main
/*0x54*/ u8 filler54[0x4];
/*0x58*/ u32 unk58;
/*0x5C*/ u32 unk5C;
/*0x60*/ u16 unk60;
/*0x62*/ u16 unk62;
/*0x64*/ u16 unk64;
/*0x66*/ u16 unk66;
/*0x68*/ u16 unk68;
/*0x6A*/ u16 unk6A;
/*0x6C*/ u16 unk6C;
/*0x6E*/ u16 unk6E;
/*0x70*/ u16 unk70;
/*0x72*/ u16 unk72;
/*0x60*/ u16 buttonConfigs[5][2];
// This field must be accessed using the following macro to produce matching code.
#define gMain_saveData (*(struct SaveData *)(&gMain.saveData))

View File

@ -1635,16 +1635,16 @@ void sub_525CC(s8 buttonConfigType)
switch (buttonConfigType)
{
case BUTTON_CONFIG_RESET:
gMain.unk60 = gUnknown_086BB910[5][0];
gMain.unk62 = gUnknown_086BB910[10][0];
gMain.unk64 = gUnknown_086BB910[0][0];
gMain.unk66 = gUnknown_086BB910[10][0];
gMain.unk68 = gUnknown_086BB910[9][0];
gMain.unk6A = gUnknown_086BB910[10][0];
gMain.unk6C = gUnknown_086BB910[8][0];
gMain.unk6E = gUnknown_086BB910[10][0];
gMain.unk70 = gUnknown_086BB910[9][0];
gMain.unk72 = gUnknown_086BB910[8][0];
gMain.buttonConfigs[0][0] = gUnknown_086BB910[5][0];
gMain.buttonConfigs[0][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[1][0] = gUnknown_086BB910[0][0];
gMain.buttonConfigs[1][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[2][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[2][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[3][0] = gUnknown_086BB910[8][0];
gMain.buttonConfigs[3][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[4][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[4][1] = gUnknown_086BB910[8][0];
gMain_saveData.customButtonConfig[PINBALL_INPUT_LEFT_FLIPPER][0] = gUnknown_086BB910[1][0];
gMain_saveData.customButtonConfig[PINBALL_INPUT_LEFT_FLIPPER][1] = gUnknown_086BB910[10][0];
gMain_saveData.customButtonConfig[PINBALL_INPUT_RIGHT_FLIPPER][0] = gUnknown_086BB910[0][0];
@ -1659,64 +1659,64 @@ void sub_525CC(s8 buttonConfigType)
gUnknown_02031B18[i] = gUnknown_08527EFE[i];
break;
case BUTTON_CONFIG_TYPE_A:
gMain.unk60 = gUnknown_086BB910[5][0];
gMain.unk62 = gUnknown_086BB910[10][0];
gMain.unk64 = gUnknown_086BB910[0][0];
gMain.unk66 = gUnknown_086BB910[10][0];
gMain.unk68 = gUnknown_086BB910[9][0];
gMain.unk6A = gUnknown_086BB910[10][0];
gMain.unk6C = gUnknown_086BB910[8][0];
gMain.unk6E = gUnknown_086BB910[10][0];
gMain.unk70 = gUnknown_086BB910[9][0];
gMain.unk72 = gUnknown_086BB910[8][0];
gMain.buttonConfigs[0][0] = gUnknown_086BB910[5][0];
gMain.buttonConfigs[0][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[1][0] = gUnknown_086BB910[0][0];
gMain.buttonConfigs[1][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[2][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[2][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[3][0] = gUnknown_086BB910[8][0];
gMain.buttonConfigs[3][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[4][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[4][1] = gUnknown_086BB910[8][0];
break;
case BUTTON_CONFIG_TYPE_B:
gMain.unk60 = gUnknown_086BB910[5][0];
gMain.unk62 = gUnknown_086BB910[10][0];
gMain.unk64 = gUnknown_086BB910[0][0];
gMain.unk66 = gUnknown_086BB910[10][0];
gMain.unk68 = gUnknown_086BB910[9][0];
gMain.unk6A = gUnknown_086BB910[10][0];
gMain.unk6C = gUnknown_086BB910[8][0];
gMain.unk6E = gUnknown_086BB910[10][0];
gMain.unk70 = gUnknown_086BB910[1][0];
gMain.unk72 = gUnknown_086BB910[10][0];
gMain.buttonConfigs[0][0] = gUnknown_086BB910[5][0];
gMain.buttonConfigs[0][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[1][0] = gUnknown_086BB910[0][0];
gMain.buttonConfigs[1][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[2][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[2][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[3][0] = gUnknown_086BB910[8][0];
gMain.buttonConfigs[3][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[4][0] = gUnknown_086BB910[1][0];
gMain.buttonConfigs[4][1] = gUnknown_086BB910[10][0];
break;
case BUTTON_CONFIG_TYPE_C:
gMain.unk60 = gUnknown_086BB910[9][0];
gMain.unk62 = gUnknown_086BB910[10][0];
gMain.unk64 = gUnknown_086BB910[8][0];
gMain.unk66 = gUnknown_086BB910[10][0];
gMain.unk68 = gUnknown_086BB910[5][0];
gMain.unk6A = gUnknown_086BB910[10][0];
gMain.unk6C = gUnknown_086BB910[0][0];
gMain.unk6E = gUnknown_086BB910[10][0];
gMain.unk70 = gUnknown_086BB910[5][0];
gMain.unk72 = gUnknown_086BB910[0][0];
gMain.buttonConfigs[0][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[0][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[1][0] = gUnknown_086BB910[8][0];
gMain.buttonConfigs[1][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[2][0] = gUnknown_086BB910[5][0];
gMain.buttonConfigs[2][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[3][0] = gUnknown_086BB910[0][0];
gMain.buttonConfigs[3][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[4][0] = gUnknown_086BB910[5][0];
gMain.buttonConfigs[4][1] = gUnknown_086BB910[0][0];
break;
case BUTTON_CONFIG_TYPE_D:
gMain.unk60 = gUnknown_086BB910[9][0];
gMain.unk62 = gUnknown_086BB910[10][0];
gMain.unk64 = gUnknown_086BB910[8][0];
gMain.unk66 = gUnknown_086BB910[10][0];
gMain.unk68 = gUnknown_086BB910[5][0];
gMain.unk6A = gUnknown_086BB910[10][0];
gMain.unk6C = gUnknown_086BB910[4][0];
gMain.unk6E = gUnknown_086BB910[10][0];
gMain.unk70 = gUnknown_086BB910[6][0];
gMain.unk72 = gUnknown_086BB910[10][0];
gMain.buttonConfigs[0][0] = gUnknown_086BB910[9][0];
gMain.buttonConfigs[0][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[1][0] = gUnknown_086BB910[8][0];
gMain.buttonConfigs[1][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[2][0] = gUnknown_086BB910[5][0];
gMain.buttonConfigs[2][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[3][0] = gUnknown_086BB910[4][0];
gMain.buttonConfigs[3][1] = gUnknown_086BB910[10][0];
gMain.buttonConfigs[4][0] = gUnknown_086BB910[6][0];
gMain.buttonConfigs[4][1] = gUnknown_086BB910[10][0];
break;
case BUTTON_CONFIG_TYPE_EDIT:
gMain.unk60 = gMain_saveData.customButtonConfig[PINBALL_INPUT_LEFT_FLIPPER][0];
gMain.unk62 = gMain_saveData.customButtonConfig[PINBALL_INPUT_LEFT_FLIPPER][1];
gMain.unk64 = gMain_saveData.customButtonConfig[PINBALL_INPUT_RIGHT_FLIPPER][0];
gMain.unk66 = gMain_saveData.customButtonConfig[PINBALL_INPUT_RIGHT_FLIPPER][1];
gMain.unk68 = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_LEFT][0];
gMain.unk6A = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_LEFT][1];
gMain.unk6C = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_RIGHT][0];
gMain.unk6E = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_RIGHT][1];
gMain.unk70 = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_UP][0];
gMain.unk72 = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_UP][1];
gMain.buttonConfigs[0][0] = gMain_saveData.customButtonConfig[PINBALL_INPUT_LEFT_FLIPPER][0];
gMain.buttonConfigs[0][1] = gMain_saveData.customButtonConfig[PINBALL_INPUT_LEFT_FLIPPER][1];
gMain.buttonConfigs[1][0] = gMain_saveData.customButtonConfig[PINBALL_INPUT_RIGHT_FLIPPER][0];
gMain.buttonConfigs[1][1] = gMain_saveData.customButtonConfig[PINBALL_INPUT_RIGHT_FLIPPER][1];
gMain.buttonConfigs[2][0] = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_LEFT][0];
gMain.buttonConfigs[2][1] = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_LEFT][1];
gMain.buttonConfigs[3][0] = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_RIGHT][0];
gMain.buttonConfigs[3][1] = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_RIGHT][1];
gMain.buttonConfigs[4][0] = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_UP][0];
gMain.buttonConfigs[4][1] = gMain_saveData.customButtonConfig[PINBALL_INPUT_TILT_UP][1];
break;
}
}

View File

@ -843,3 +843,36 @@ void sub_4B20C(void)
void nullsub_19(void)
{
}
void sub_4B280(void)
{
u16 i;
for (i = 0; i < 5; i++)
{
gCurrentPinballGame->unk4[i] = 0;
gCurrentPinballGame->unk9[i] = 0;
}
if (gMain.unkF)
return;
for (i = 0; i < 5; i++)
{
int buttonConfigKeyMask = (gMain.buttonConfigs[i][0] | gMain.buttonConfigs[i][1]) & KEYS_MASK;
if (buttonConfigKeyMask == JOY_HELD(buttonConfigKeyMask))
{
if (gCurrentPinballGame->unkE[i] == 0)
gCurrentPinballGame->unk4[i] = 1;
gCurrentPinballGame->unkE[i] = 1;
}
else
{
if (gCurrentPinballGame->unkE[i])
gCurrentPinballGame->unk9[i] = 1;
gCurrentPinballGame->unkE[i] = 0;
}
}
}