sub_5030C

This commit is contained in:
Marcus Huderle 2025-08-13 08:12:10 -05:00
parent e81e2d48c0
commit f16ca87f44
4 changed files with 76 additions and 225 deletions

View File

@ -6220,225 +6220,3 @@ _080502FC: .4byte 0x00000107
_08050300: .4byte 0x040000D4
_08050304: .4byte 0x80000030
_08050308: .4byte 0x80000020
thumb_func_start sub_5030C
sub_5030C: @ 0x0805030C
push {r4, r5, r6, lr}
sub sp, #8
ldr r0, _08050340 @ =gCurrentPinballGame
ldr r2, [r0]
movs r1, #0x13
ldrsb r1, [r2, r1]
adds r5, r0, #0
cmp r1, #2
bgt _08050394
ldr r1, _08050344 @ =0x0000072F
adds r0, r2, r1
movs r3, #0
ldrsb r3, [r0, r3]
cmp r3, #0
bne _0805034C
mov r1, sp
ldr r4, _08050348 @ =0x00000734
adds r0, r2, r4
movs r2, #0
ldrsh r0, [r0, r2]
lsls r0, r0, #1
strh r0, [r1]
mov r0, sp
strh r3, [r0, #2]
strh r3, [r0, #4]
b _080503BA
.align 2, 0
_08050340: .4byte gCurrentPinballGame
_08050344: .4byte 0x0000072F
_08050348: .4byte 0x00000734
_0805034C:
cmp r3, #1
bne _0805036C
mov r1, sp
movs r0, #3
strh r0, [r1]
ldr r3, _08050368 @ =0x00000734
adds r2, r2, r3
ldrh r0, [r2]
adds r0, #1
strh r0, [r1, #2]
movs r4, #0
ldrsh r0, [r2, r4]
lsls r0, r0, #1
b _080503B8
.align 2, 0
_08050368: .4byte 0x00000734
_0805036C:
cmp r3, #2
bne _08050388
mov r0, sp
movs r1, #3
strh r1, [r0]
strh r1, [r0, #2]
mov r1, sp
ldr r3, _08050384 @ =0x00000734
adds r0, r2, r3
ldrh r0, [r0]
adds r0, #2
b _080503B8
.align 2, 0
_08050384: .4byte 0x00000734
_08050388:
mov r0, sp
movs r1, #3
strh r1, [r0]
strh r1, [r0, #2]
strh r1, [r0, #4]
b _080503BA
_08050394:
mov r1, sp
ldr r4, _080504A4 @ =0x00000736
adds r0, r2, r4
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
strh r0, [r1]
ldr r3, _080504A8 @ =0x00000737
adds r0, r2, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
strh r0, [r1, #2]
adds r4, #2
adds r0, r2, r4
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
_080503B8:
strh r0, [r1, #4]
_080503BA:
mov r0, sp
movs r2, #0
ldrsh r1, [r0, r2]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
ldr r3, _080504AC @ =gUnknown_086B14A8
mov ip, r3
adds r3, r0, r3
mov r4, ip
adds r4, #0x30
ldr r0, [r5]
adds r0, #0x6a
movs r2, #0
ldrsh r1, [r0, r2]
ldr r0, _080504B0 @ =0x00000107
cmp r1, r0
bgt _080503F0
ldr r1, _080504B4 @ =0x040000D4
ldr r0, [r3]
str r0, [r1]
mov r2, ip
ldr r0, [r2, #0x30]
str r0, [r1, #4]
ldr r0, _080504B8 @ =0x80000030
str r0, [r1, #8]
ldr r0, [r1, #8]
_080503F0:
ldr r2, _080504B4 @ =0x040000D4
ldr r0, [r3, #4]
str r0, [r2]
ldr r0, [r4, #4]
str r0, [r2, #4]
ldr r6, _080504B8 @ =0x80000030
str r6, [r2, #8]
ldr r0, [r2, #8]
ldr r0, [r3, #8]
str r0, [r2]
ldr r0, [r4, #8]
str r0, [r2, #4]
str r6, [r2, #8]
ldr r0, [r2, #8]
ldr r0, [r5]
adds r5, r0, #0
adds r5, #0x6a
movs r3, #0
ldrsh r0, [r5, r3]
cmp r0, #0x78
ble _08050458
mov r0, sp
movs r4, #2
ldrsh r1, [r0, r4]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
mov r1, ip
adds r1, #0x3c
adds r3, r0, r1
mov r4, ip
adds r4, #0x6c
ldr r0, [r3]
str r0, [r2]
mov r1, ip
ldr r0, [r1, #0x6c]
str r0, [r2, #4]
ldr r1, _080504BC @ =0x80000020
str r1, [r2, #8]
ldr r0, [r2, #8]
ldr r0, [r3, #4]
str r0, [r2]
ldr r0, [r4, #4]
str r0, [r2, #4]
str r1, [r2, #8]
ldr r0, [r2, #8]
ldr r0, [r3, #8]
str r0, [r2]
ldr r0, [r4, #8]
str r0, [r2, #4]
str r6, [r2, #8]
ldr r0, [r2, #8]
_08050458:
movs r3, #0
ldrsh r0, [r5, r3]
cmp r0, #0x88
ble _0805049C
mov r0, sp
movs r4, #4
ldrsh r1, [r0, r4]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
mov r1, ip
adds r1, #0x78
adds r3, r0, r1
mov r4, ip
adds r4, #0xa8
ldr r0, [r3]
str r0, [r2]
ldr r0, [r4]
str r0, [r2, #4]
ldr r1, _080504BC @ =0x80000020
str r1, [r2, #8]
ldr r0, [r2, #8]
ldr r0, [r3, #4]
str r0, [r2]
ldr r0, [r4, #4]
str r0, [r2, #4]
str r6, [r2, #8]
ldr r0, [r2, #8]
ldr r0, [r3, #8]
str r0, [r2]
ldr r0, [r4, #8]
str r0, [r2, #4]
str r1, [r2, #8]
ldr r0, [r2, #8]
_0805049C:
add sp, #8
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_080504A4: .4byte 0x00000736
_080504A8: .4byte 0x00000737
_080504AC: .4byte gUnknown_086B14A8
_080504B0: .4byte 0x00000107
_080504B4: .4byte 0x040000D4
_080504B8: .4byte 0x80000030
_080504BC: .4byte 0x80000020

Binary file not shown.

View File

@ -633,8 +633,11 @@ struct PinballGame
/*0x730*/ u8 unk730;
/*0x731*/ s8 unk731;
/*0x732*/ u8 filler732[0x2];
/*0x734*/ u16 unk734;
/*0x736*/ u8 filler736[0x6];
/*0x734*/ s16 unk734;
/*0x736*/ s8 unk736;
/*0x737*/ s8 unk737;
/*0x738*/ s8 unk738;
/*0x739*/ u8 filler739[0x3];
/*0x73C*/ u8 unk73C; // TODO: unknown type
/*0x73D*/ s8 catchModeArrows; // Affects which encounter table is used per area
/*0x73E*/ u8 filler73E[0x2];

View File

@ -8,8 +8,78 @@ extern const u8 *gUnknown_086B0F9C[][3][2];
extern const u8 *gUnknown_086B12AC[][3];
extern const u8 *gUnknown_086B125C[][4];
extern const u8 *gUnknown_086B12D0[][4];
extern const u8 *gUnknown_086B14A8[][5][3];
void sub_5030C(void)
{
s16 sp0[3];
const u8 **src;
const u8 **dest;
if (gCurrentPinballGame->unk13 < 3)
{
if (gCurrentPinballGame->unk72F == 0)
{
sp0[0] = gCurrentPinballGame->unk734 * 2;
sp0[1] = 0;
sp0[2] = 0;
}
else if (gCurrentPinballGame->unk72F == 1)
{
sp0[0] = 3;
sp0[1] = gCurrentPinballGame->unk734 + 1;
sp0[2] = gCurrentPinballGame->unk734 * 2;
}
else if (gCurrentPinballGame->unk72F == 2)
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = (s16) gCurrentPinballGame->unk734 + 2;
}
else
{
sp0[0] = 3;
sp0[1] = 3;
sp0[2] = 3;
}
}
else
{
sp0[0] = gCurrentPinballGame->unk736;
sp0[1] = gCurrentPinballGame->unk737;
sp0[2] = gCurrentPinballGame->unk738;
}
src = gUnknown_086B14A8[0][sp0[0]];
dest = gUnknown_086B14A8[0][4];
if (gCurrentPinballGame->unk6A < 264)
{
DmaCopy16(3, src[0], dest[0], 0x60);
}
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x60);
if (gCurrentPinballGame->unk6A > 120)
{
src = gUnknown_086B14A8[1][sp0[1]];
dest = gUnknown_086B14A8[1][4];
DmaCopy16(3, src[0], dest[0], 0x40);
DmaCopy16(3, src[1], dest[1], 0x40);
DmaCopy16(3, src[2], dest[2], 0x60);
}
if (gCurrentPinballGame->unk6A > 136)
{
src = gUnknown_086B14A8[2][sp0[2]];
dest = gUnknown_086B14A8[2][4];
DmaCopy16(3, src[0], dest[0], 0x40);
DmaCopy16(3, src[1], dest[1], 0x60);
DmaCopy16(3, src[2], dest[2], 0x40);
}
}
void sub_504C0(void)
{
s16 index;
@ -61,7 +131,7 @@ void sub_505A4(void)
gCurrentPinballGame->unk72A = 0;
if (gCurrentPinballGame->unk72A > 0)
index = gCurrentPinballGame->unk1A5 * 2 - (gCurrentPinballGame->unk734 - 1);
index = gCurrentPinballGame->unk1A5 * 2 + 1 - gCurrentPinballGame->unk734;
else
index = gCurrentPinballGame->unk1A5 * 2;