sub_4DFA0

This commit is contained in:
Marcus Huderle 2025-08-14 17:12:09 -05:00
parent 25b307e0fd
commit a006edfe57
4 changed files with 133 additions and 442 deletions

View File

@ -2079,442 +2079,3 @@ _0804DF90: .4byte 0x000002F6
_0804DF94: .4byte 0x000002AA
_0804DF98: .4byte 0x00000121
_0804DF9C: .4byte 0x000005FC
thumb_func_start sub_4DFA0
sub_4DFA0: @ 0x0804DFA0
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #8
ldr r3, _0804E0C8 @ =gCurrentPinballGame
ldr r2, [r3]
adds r0, r2, #0
adds r0, #0x25
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _0804E084
ldr r1, _0804E0CC @ =0x000005A4
adds r0, r2, r1
ldrb r0, [r0]
cmp r0, #2
beq _0804E084
ldr r4, _0804E0D0 @ =0x0000061C
adds r0, r2, r4
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _0804E084
ldrb r0, [r2, #6]
cmp r0, #0
beq _0804E008
movs r1, #0x95
lsls r1, r1, #1
adds r0, r2, r1
ldrb r1, [r0]
cmp r1, #0
bne _0804E008
ldr r4, _0804E0D4 @ =0x00000129
adds r0, r2, r4
strb r1, [r0]
ldr r0, [r3]
movs r2, #0x94
lsls r2, r2, #1
adds r1, r0, r2
ldrb r0, [r1]
cmp r0, #0
bne _0804E008
movs r0, #4
strb r0, [r1]
movs r0, SE_UNKNOWN_0x78
bl m4aSongNumStart
movs r0, #8
bl sub_11B0
_0804E008:
ldr r2, _0804E0C8 @ =gCurrentPinballGame
ldr r1, [r2]
ldrb r0, [r1, #7]
cmp r0, #0
beq _0804E044
movs r3, #0x95
lsls r3, r3, #1
adds r0, r1, r3
ldrb r0, [r0]
cmp r0, #0
bne _0804E044
ldr r4, _0804E0D4 @ =0x00000129
adds r1, r1, r4
movs r0, #1
strb r0, [r1]
ldr r0, [r2]
movs r2, #0x94
lsls r2, r2, #1
adds r1, r0, r2
ldrb r0, [r1]
cmp r0, #0
bne _0804E044
movs r0, #4
strb r0, [r1]
movs r0, SE_UNKNOWN_0x78
bl m4aSongNumStart
movs r0, #8
bl sub_11B0
_0804E044:
ldr r0, _0804E0C8 @ =gCurrentPinballGame
ldr r3, [r0]
ldrb r1, [r3, #8]
mov r8, r0
cmp r1, #0
beq _0804E084
movs r4, #0x95
lsls r4, r4, #1
adds r0, r3, r4
ldrb r0, [r0]
cmp r0, #0
bne _0804E084
ldr r0, _0804E0D4 @ =0x00000129
adds r1, r3, r0
movs r0, #2
strb r0, [r1]
mov r1, r8
ldr r0, [r1]
movs r2, #0x94
lsls r2, r2, #1
adds r1, r0, r2
ldrb r0, [r1]
cmp r0, #0
bne _0804E096
movs r0, #4
strb r0, [r1]
movs r0, SE_UNKNOWN_0x78
bl m4aSongNumStart
movs r0, #8
bl sub_11B0
_0804E084:
ldr r0, _0804E0C8 @ =gCurrentPinballGame
ldr r1, [r0]
movs r3, #0x94
lsls r3, r3, #1
adds r1, r1, r3
ldrb r1, [r1]
mov r8, r0
cmp r1, #0
beq _0804E174
_0804E096:
mov r4, r8
ldr r0, [r4]
movs r2, #0x94
lsls r2, r2, #1
adds r0, r0, r2
ldrb r1, [r0]
subs r1, #1
strb r1, [r0]
ldr r1, [r4]
adds r2, r1, r2
ldrb r3, [r2]
cmp r3, #0
bne _0804E174
ldr r2, _0804E0D4 @ =0x00000129
adds r0, r1, r2
movs r2, #0
ldrsb r2, [r0, r2]
cmp r2, #1
beq _0804E10C
cmp r2, #1
bgt _0804E0D8
cmp r2, #0
beq _0804E0DE
b _0804E166
.align 2, 0
_0804E0C8: .4byte gCurrentPinballGame
_0804E0CC: .4byte 0x000005A4
_0804E0D0: .4byte 0x0000061C
_0804E0D4: .4byte 0x00000129
_0804E0D8:
cmp r2, #2
beq _0804E13C
b _0804E166
_0804E0DE:
movs r3, #0x8c
lsls r3, r3, #1
adds r0, r1, r3
movs r2, #6
strb r2, [r0]
mov r4, r8
ldr r0, [r4]
movs r1, #0x8e
lsls r1, r1, #1
adds r0, r0, r1
movs r1, #0xff
strb r1, [r0]
ldr r0, [r4]
adds r3, #2
adds r0, r0, r3
strb r2, [r0]
ldr r0, [r4]
movs r4, #0x8f
lsls r4, r4, #1
adds r1, r0, r4
movs r0, #1
strb r0, [r1]
b _0804E166
_0804E10C:
ldr r3, _0804E134 @ =0x00000119
adds r0, r1, r3
movs r1, #6
strb r1, [r0]
mov r4, r8
ldr r0, [r4]
adds r3, #4
adds r0, r0, r3
strb r2, [r0]
ldr r0, [r4]
ldr r4, _0804E138 @ =0x0000011B
adds r0, r0, r4
strb r1, [r0]
mov r1, r8
ldr r0, [r1]
adds r3, #2
adds r0, r0, r3
strb r2, [r0]
b _0804E166
.align 2, 0
_0804E134: .4byte 0x00000119
_0804E138: .4byte 0x0000011B
_0804E13C:
movs r4, #0x8d
lsls r4, r4, #1
adds r1, r1, r4
movs r0, #6
strb r0, [r1]
mov r1, r8
ldr r0, [r1]
movs r2, #0x8f
lsls r2, r2, #1
adds r0, r0, r2
movs r1, #1
strb r1, [r0]
mov r4, r8
ldr r0, [r4]
subs r2, #3
adds r0, r0, r2
strb r3, [r0]
ldr r0, [r4]
ldr r3, _0804E1CC @ =0x0000011F
adds r0, r0, r3
strb r1, [r0]
_0804E166:
mov r4, r8
ldr r0, [r4]
movs r2, #0x95
lsls r2, r2, #1
adds r1, r0, r2
movs r0, #0x18
strb r0, [r1]
_0804E174:
mov r3, r8
ldr r0, [r3]
movs r4, #0x95
lsls r4, r4, #1
adds r1, r0, r4
ldrb r0, [r1]
cmp r0, #0
beq _0804E188
subs r0, #1
strb r0, [r1]
_0804E188:
movs r5, #0
mov ip, r8
movs r7, #0x8c
lsls r7, r7, #1
movs r6, #0x8e
lsls r6, r6, #1
mov r4, sp
_0804E196:
mov r1, ip
ldr r0, [r1]
adds r0, r0, r7
adds r1, r0, r5
ldrb r2, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
ble _0804E1AC
subs r0, r2, #1
strb r0, [r1]
_0804E1AC:
mov r2, ip
ldr r1, [r2]
adds r0, r1, r7
adds r3, r0, r5
movs r0, #0
ldrsb r0, [r3, r0]
cmp r0, #2
bgt _0804E1D0
adds r0, r1, r6
adds r0, r0, r5
movs r1, #0
ldrsb r1, [r0, r1]
movs r0, #0
ldrsb r0, [r3, r0]
muls r0, r1, r0
b _0804E1E2
.align 2, 0
_0804E1CC: .4byte 0x0000011F
_0804E1D0:
adds r0, r1, r6
adds r0, r0, r5
movs r2, #0
ldrsb r2, [r0, r2]
movs r1, #0
ldrsb r1, [r3, r1]
movs r0, #6
subs r0, r0, r1
muls r0, r2, r0
_0804E1E2:
strh r0, [r4]
adds r4, #2
adds r5, #1
cmp r5, #3
ble _0804E196
mov r3, r8
ldr r1, [r3]
mov r2, sp
mov r0, sp
ldrh r0, [r0, #2]
ldrb r2, [r2]
adds r0, r0, r2
movs r3, #0x90
lsls r3, r3, #1
adds r1, r1, r3
strb r0, [r1]
mov r4, r8
ldr r2, [r4]
mov r1, sp
mov r0, sp
ldrb r0, [r0, #6]
ldrb r1, [r1, #4]
adds r0, r0, r1
ldr r4, _0804E254 @ =0x00000121
adds r1, r2, r4
strb r0, [r1]
mov r0, r8
ldr r2, [r0]
adds r0, r2, r3
ldrh r1, [r0]
cmp r1, #0
bne _0804E232
adds r4, #5
adds r0, r2, r4
strb r1, [r0]
mov r2, r8
ldr r0, [r2]
adds r4, #1
adds r0, r0, r4
strb r1, [r0]
_0804E232:
mov r0, r8
ldr r1, [r0]
adds r0, r1, r3
movs r2, #0
ldrsb r2, [r0, r2]
cmp r2, #0
ble _0804E258
movs r3, #0x91
lsls r3, r3, #1
adds r1, r1, r3
ldrb r3, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r2, r0
bge _0804E270
subs r0, r3, #1
b _0804E26E
.align 2, 0
_0804E254: .4byte 0x00000121
_0804E258:
cmp r2, #0
bge _0804E270
movs r4, #0x91
lsls r4, r4, #1
adds r1, r1, r4
ldrb r3, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r2, r0
ble _0804E270
adds r0, r3, #1
_0804E26E:
strb r0, [r1]
_0804E270:
mov r0, r8
ldr r1, [r0]
ldr r2, _0804E294 @ =0x00000121
adds r0, r1, r2
movs r2, #0
ldrsb r2, [r0, r2]
cmp r2, #0
ble _0804E29C
ldr r3, _0804E298 @ =0x00000123
adds r1, r1, r3
ldrb r3, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r2, r0
bge _0804E2B2
subs r0, r3, #1
b _0804E2B0
.align 2, 0
_0804E294: .4byte 0x00000121
_0804E298: .4byte 0x00000123
_0804E29C:
cmp r2, #0
bge _0804E2B2
ldr r4, _0804E2F4 @ =0x00000123
adds r1, r1, r4
ldrb r3, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r2, r0
ble _0804E2B2
adds r0, r3, #1
_0804E2B0:
strb r0, [r1]
_0804E2B2:
mov r0, r8
ldr r1, [r0]
movs r2, #0x93
lsls r2, r2, #1
adds r0, r1, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _0804E2E6
movs r3, #0x90
lsls r3, r3, #1
adds r0, r1, r3
ldrb r0, [r0]
movs r4, #0x91
lsls r4, r4, #1
adds r1, r1, r4
strb r0, [r1]
mov r0, r8
ldr r1, [r0]
subs r2, #5
adds r0, r1, r2
ldrb r0, [r0]
adds r3, #3
adds r1, r1, r3
strb r0, [r1]
_0804E2E6:
add sp, #8
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0804E2F4: .4byte 0x00000123

Binary file not shown.

View File

@ -199,7 +199,9 @@ struct PinballGame
/*0x10E*/ s16 unk10E;
/*0x110*/ s32 unk110;
/*0x114*/ s32 unk114;
/*0x118*/ u8 filler118[0x9];
/*0x118*/ s8 unk118[4];
/*0x11C*/ s8 unk11C[4];
/*0x120*/ s8 unk120;
/*0x121*/ s8 unk121;
/*0x122*/ s8 unk122;
/*0x123*/ s8 unk123;
@ -208,8 +210,8 @@ struct PinballGame
/*0x126*/ s8 unk126;
/*0x127*/ s8 unk127;
/*0x128*/ u8 unk128;
/*0x129*/ u8 unk129;
/*0x12A*/ u8 filler12A;
/*0x129*/ s8 unk129;
/*0x12A*/ u8 unk12A;
/*0x12B*/ s8 forceSpecialMons; // When on, force next catch mode species to be special mons
/*0x12C*/ s8 forcePichuEgg; // When on, force next egg mode species to be Pichu
/*0x12D*/ u8 filler12D;

View File

@ -3,6 +3,134 @@
#include "main.h"
#include "constants/bg_music.h"
void sub_4DFA0(void)
{
int i;
s16 sp0[4];
if (gCurrentPinballGame->unk25 == 0 && gCurrentPinballGame->unk5A4 != 2 && gCurrentPinballGame->unk61C == 0)
{
if (gCurrentPinballGame->newButtonActions[2])
{
if (gCurrentPinballGame->unk12A == 0)
{
gCurrentPinballGame->unk129 = 0;
if (gCurrentPinballGame->unk128 == 0)
{
gCurrentPinballGame->unk128 = 4;
m4aSongNumStart(SE_UNKNOWN_0x78);
sub_11B0(8);
}
}
}
if (gCurrentPinballGame->newButtonActions[3] && gCurrentPinballGame->unk12A == 0)
{
gCurrentPinballGame->unk129 = 1;
if (gCurrentPinballGame->unk128 == 0)
{
gCurrentPinballGame->unk128 = 4;
m4aSongNumStart(SE_UNKNOWN_0x78);
sub_11B0(8);
}
}
if (gCurrentPinballGame->newButtonActions[4] && gCurrentPinballGame->unk12A == 0)
{
gCurrentPinballGame->unk129 = 2;
if (gCurrentPinballGame->unk128 == 0)
{
gCurrentPinballGame->unk128 = 4;
m4aSongNumStart(SE_UNKNOWN_0x78);
sub_11B0(8);
}
}
}
if (gCurrentPinballGame->unk128)
{
gCurrentPinballGame->unk128--;
if (gCurrentPinballGame->unk128 == 0)
{
switch (gCurrentPinballGame->unk129)
{
case 0:
gCurrentPinballGame->unk118[0] = 6;
gCurrentPinballGame->unk11C[0] = -1;
gCurrentPinballGame->unk118[2] = 6;
gCurrentPinballGame->unk11C[2] = 1;
break;
case 1:
gCurrentPinballGame->unk118[1] = 6;
gCurrentPinballGame->unk11C[1] = 1;
gCurrentPinballGame->unk118[3] = 6;
gCurrentPinballGame->unk11C[3] = 1;
break;
case 2:
gCurrentPinballGame->unk118[2] = 6;
gCurrentPinballGame->unk11C[2] = 1;
gCurrentPinballGame->unk118[3] = 0;
gCurrentPinballGame->unk11C[3] = 1;
break;
}
gCurrentPinballGame->unk12A = 24;
}
}
if (gCurrentPinballGame->unk12A)
gCurrentPinballGame->unk12A--;
for (i = 0; i < 4; i++)
{
if (gCurrentPinballGame->unk118[i] > 0)
gCurrentPinballGame->unk118[i]--;
if (gCurrentPinballGame->unk118[i] < 3)
sp0[i] = gCurrentPinballGame->unk11C[i] * gCurrentPinballGame->unk118[i];
else
sp0[i] = gCurrentPinballGame->unk11C[i] * (6 - gCurrentPinballGame->unk118[i]);
}
gCurrentPinballGame->unk120 = sp0[0] + sp0[1];
gCurrentPinballGame->unk121 = sp0[2] + sp0[3];
if (gCurrentPinballGame->unk120 == 0 && gCurrentPinballGame->unk121 == 0)
{
gCurrentPinballGame->unk126 = 0;
gCurrentPinballGame->unk127 = 0;
}
if (gCurrentPinballGame->unk120 > 0)
{
if (gCurrentPinballGame->unk120 < gCurrentPinballGame->unk122)
gCurrentPinballGame->unk122--;
}
else if (gCurrentPinballGame->unk120 < 0)
{
if (gCurrentPinballGame->unk120 > gCurrentPinballGame->unk122)
gCurrentPinballGame->unk122++;
}
if (gCurrentPinballGame->unk121 > 0)
{
if (gCurrentPinballGame->unk121 < gCurrentPinballGame->unk123)
gCurrentPinballGame->unk123--;
}
else if (gCurrentPinballGame->unk121 < 0)
{
if (gCurrentPinballGame->unk121 > gCurrentPinballGame->unk123)
gCurrentPinballGame->unk123++;
}
if (gCurrentPinballGame->unk126 == 0)
{
gCurrentPinballGame->unk122 = gCurrentPinballGame->unk120;
gCurrentPinballGame->unk123 = gCurrentPinballGame->unk121;
}
}
void sub_4E2F8(void)
{
struct BallState *unk1334;