sub_45164

This commit is contained in:
Marcus Huderle 2025-07-25 17:12:00 -05:00
parent d4c781c63f
commit e14bdf3fe3
4 changed files with 130 additions and 532 deletions

View File

@ -27935,531 +27935,3 @@ _08045154: .4byte 0x00000591
_08045158: .4byte gMain
_0804515C: .4byte 0x0000132C
_08045160: .4byte 0x0000FFA0
thumb_func_start sub_45164
sub_45164: @ 0x08045164
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
ldr r6, _080452A0 @ =gMain+0x1158 @gMain.spriteGroups[20]
ldrh r0, [r6]
cmp r0, #0
beq _08045234
ldr r0, _080452A4 @ =gCurrentPinballGame
ldr r4, [r0]
movs r1, #0xc8
lsls r1, r1, #2
adds r0, r4, r1
movs r2, #0
ldrsh r0, [r0, r2]
movs r1, #0xa
bl __divsi3
adds r4, #0x58
ldrh r1, [r4]
subs r1, #0x92
subs r0, r0, r1
strh r0, [r6, #2]
ldr r3, _080452A4 @ =gCurrentPinballGame
ldr r4, [r3]
ldr r1, _080452A8 @ =0x00000322
adds r0, r4, r1
movs r2, #0
ldrsh r0, [r0, r2]
movs r1, #0xa
bl __divsi3
adds r5, r0, #0
adds r0, r4, #0
adds r0, #0x5a
ldrh r0, [r0]
subs r0, #0x6e
subs r5, r5, r0
ldr r3, _080452AC @ =0x0000030E
adds r4, r4, r3
movs r1, #0
ldrsh r0, [r4, r1]
movs r1, #0xa
bl __divsi3
adds r5, r5, r0
strh r5, [r6, #4]
ldr r2, _080452A4 @ =gCurrentPinballGame
ldr r0, [r2]
ldr r3, _080452B0 @ =0x00000591
adds r0, r0, r3
ldr r2, _080452B4 @ =0x040000D4
movs r1, #0
ldrsb r1, [r0, r1]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #7
ldr r1, _080452B8 @ =gUnknown_084BB16C
adds r0, r0, r1
str r0, [r2]
ldr r0, _080452BC @ =0x060125A0
str r0, [r2, #4]
ldr r0, _080452C0 @ =0x80000240
str r0, [r2, #8]
ldr r0, [r2, #8]
movs r0, #0
ldr r7, _080452C4 @ =gOamBuffer
ldr r1, _080452C8 @ =0xFFFFFE00
mov r8, r1
_080451F0:
lsls r5, r0, #0x10
asrs r5, r5, #0x10
lsls r3, r5, #3
adds r3, #8
adds r3, r6, r3
ldrh r4, [r3]
lsls r4, r4, #3
adds r4, r4, r7
movs r2, #2
ldrsh r1, [r3, r2]
movs r2, #2
ldrsh r0, [r6, r2]
adds r1, r1, r0
ldr r2, _080452CC @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r4, #2]
mov r0, r8
ands r0, r2
orrs r0, r1
strh r0, [r4, #2]
ldrh r1, [r3]
lsls r1, r1, #3
adds r1, r1, r7
ldrb r0, [r6, #4]
ldrb r3, [r3, #4]
adds r0, r0, r3
strb r0, [r1]
adds r5, #1
lsls r5, r5, #0x10
lsrs r0, r5, #0x10
asrs r5, r5, #0x10
cmp r5, #3
ble _080451F0
_08045234:
ldr r3, _080452A4 @ =gCurrentPinballGame
ldr r4, [r3]
ldr r1, _080452D0 @ =0x00000592
adds r0, r4, r1
ldrh r0, [r0]
cmp r0, #0xfa
bhi _080452F0
cmp r0, #0xfa
beq _08045248
b _08045594
_08045248:
movs r2, #0xc8
lsls r2, r2, #2
adds r1, r4, r2
movs r2, #0
movs r0, #0xe6
lsls r0, r0, #2
strh r0, [r1]
ldr r3, _080452A8 @ =0x00000322
adds r1, r4, r3
ldr r0, _080452D4 @ =0x0000FF9C
strh r0, [r1]
movs r0, #0xc7
lsls r0, r0, #2
adds r1, r4, r0
ldr r0, _080452D8 @ =0x0000FFAE
strh r0, [r1]
ldr r1, _080452DC @ =0x0000031E
adds r0, r4, r1
strh r2, [r0]
subs r3, #0x16
adds r0, r4, r3
strh r2, [r0]
ldr r0, _080452E0 @ =0x00000306
adds r1, r4, r0
movs r0, #8
strb r0, [r1]
ldr r1, _080452A4 @ =gCurrentPinballGame
ldr r0, [r1]
ldr r2, _080452B0 @ =0x00000591
adds r0, r0, r2
movs r1, #0xd
strb r1, [r0]
ldr r0, _080452E4 @ =gMain
ldr r3, _080452E8 @ =0x00001158
adds r0, r0, r3
movs r2, #1
movs r1, #1
strh r1, [r0]
ldr r1, _080452A4 @ =gCurrentPinballGame
ldr r0, [r1]
ldr r3, _080452EC @ =0x000005FA
adds r0, r0, r3
strb r2, [r0]
b _08045594
.align 2, 0
_080452A0: .4byte gMain+0x1158 @gMain.spriteGroups[20]
_080452A4: .4byte gCurrentPinballGame
_080452A8: .4byte 0x00000322
_080452AC: .4byte 0x0000030E
_080452B0: .4byte 0x00000591
_080452B4: .4byte 0x040000D4
_080452B8: .4byte gUnknown_084BB16C
_080452BC: .4byte 0x060125A0
_080452C0: .4byte 0x80000240
_080452C4: .4byte gOamBuffer
_080452C8: .4byte 0xFFFFFE00
_080452CC: .4byte 0x000001FF
_080452D0: .4byte 0x00000592
_080452D4: .4byte 0x0000FF9C
_080452D8: .4byte 0x0000FFAE
_080452DC: .4byte 0x0000031E
_080452E0: .4byte 0x00000306
_080452E4: .4byte gMain
_080452E8: .4byte 0x00001158
_080452EC: .4byte 0x000005FA
_080452F0:
movs r5, #0xc3
lsls r5, r5, #2
adds r0, r4, r5
ldrh r0, [r0]
movs r1, #0x18
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #6
bl __udivsi3
adds r0, #0xd
ldr r2, _0804537C @ =0x00000591
adds r1, r4, r2
strb r0, [r1]
ldr r3, _08045380 @ =gCurrentPinballGame
ldr r0, [r3]
adds r0, r0, r5
ldrh r0, [r0]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x10
bl Sin
adds r1, r0, #0
ldr r0, _08045380 @ =gCurrentPinballGame
ldr r4, [r0]
lsls r1, r1, #0x10
asrs r1, r1, #0x10
lsls r0, r1, #4
subs r0, r0, r1
lsls r0, r0, #4
ldr r1, _08045384 @ =0x00004E20
bl __divsi3
ldr r2, _08045388 @ =0x0000030E
adds r1, r4, r2
strh r0, [r1]
adds r4, r4, r5
ldrh r0, [r4]
cmp r0, #0
bne _0804534A
movs r0, SE_UNKNOWN_0xE4
bl m4aSongNumStart
_0804534A:
ldr r3, _08045380 @ =gCurrentPinballGame
ldr r4, [r3]
adds r0, r4, r5
ldrh r0, [r0]
cmp r0, #0x27
bhi _08045390
movs r0, #0xc8
lsls r0, r0, #2
adds r1, r4, r0
movs r2, #0xc7
lsls r2, r2, #2
adds r0, r4, r2
ldrh r0, [r0]
ldrh r3, [r1]
adds r0, r0, r3
strh r0, [r1]
ldr r0, _0804538C @ =0x00000322
adds r1, r4, r0
adds r2, #2
adds r0, r4, r2
ldrh r0, [r0]
ldrh r3, [r1]
adds r0, r0, r3
strh r0, [r1]
b _0804539A
.align 2, 0
_0804537C: .4byte 0x00000591
_08045380: .4byte gCurrentPinballGame
_08045384: .4byte 0x00004E20
_08045388: .4byte 0x0000030E
_0804538C: .4byte 0x00000322
_08045390:
ldr r0, _0804547C @ =gMain
ldr r1, _08045480 @ =0x00001158
adds r0, r0, r1
movs r1, #0
strh r1, [r0]
_0804539A:
ldr r0, _08045484 @ =gCurrentPinballGame
ldr r2, [r0]
movs r6, #0xc3
lsls r6, r6, #2
adds r1, r2, r6
ldrh r1, [r1]
cmp r1, #0xd
bne _08045416
ldr r5, _08045488 @ =0x0000132C
adds r0, r2, r5
ldr r1, [r0]
movs r0, #0
strb r0, [r1]
ldr r2, _08045484 @ =gCurrentPinballGame
ldr r4, [r2]
movs r3, #0xc5
lsls r3, r3, #2
adds r1, r4, r3
ldr r0, _0804548C @ =0x0000FFF6
strh r0, [r1]
ldr r0, _08045490 @ =0x00000316
adds r1, r4, r0
ldr r0, _08045494 @ =0x0000FFE7
strh r0, [r1]
movs r1, #0xc8
lsls r1, r1, #2
adds r0, r4, r1
movs r2, #0
ldrsh r0, [r0, r2]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0x10
adds r0, #0x9d
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #1
movs r3, #0xc6
lsls r3, r3, #2
adds r0, r4, r3
strh r1, [r0]
ldr r1, _08045498 @ =0x00000322
adds r0, r4, r1
movs r2, #0
ldrsh r0, [r0, r2]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0x10
adds r0, #0x86
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #1
ldr r3, _0804549C @ =0x0000031A
adds r0, r4, r3
strh r1, [r0]
adds r4, r4, r5
ldr r1, [r4]
movs r0, #1
strb r0, [r1, #1]
_08045416:
ldr r0, _08045484 @ =gCurrentPinballGame
ldr r7, [r0]
ldrb r0, [r7, #0x1f]
cmp r0, #0
bne _08045422
b _08045584
_08045422:
adds r0, r7, r6
ldrh r0, [r0]
cmp r0, #0xc
bhi _080454A0
ldr r1, _08045488 @ =0x0000132C
adds r4, r7, r1
ldr r5, [r4]
movs r2, #0xc8
lsls r2, r2, #2
adds r0, r7, r2
movs r3, #0
ldrsh r0, [r0, r3]
movs r1, #0xa
bl __divsi3
adds r0, #0x9d
strh r0, [r5, #0x10]
ldr r5, [r4]
ldr r1, _08045498 @ =0x00000322
adds r0, r7, r1
movs r2, #0
ldrsh r0, [r0, r2]
movs r1, #0xa
bl __divsi3
adds r0, #0x86
strh r0, [r5, #0x12]
ldr r1, [r4]
movs r3, #0x10
ldrsh r0, [r1, r3]
lsls r0, r0, #1
strh r0, [r1, #0x28]
ldr r1, [r4]
movs r2, #0x12
ldrsh r0, [r1, r2]
lsls r0, r0, #1
strh r0, [r1, #0x2a]
ldr r1, [r4]
movs r3, #0x10
ldrsh r0, [r1, r3]
lsls r0, r0, #8
str r0, [r1, #0x34]
ldr r1, [r4]
b _0804557C
.align 2, 0
_0804547C: .4byte gMain
_08045480: .4byte 0x00001158
_08045484: .4byte gCurrentPinballGame
_08045488: .4byte 0x0000132C
_0804548C: .4byte 0x0000FFF6
_08045490: .4byte 0x00000316
_08045494: .4byte 0x0000FFE7
_08045498: .4byte 0x00000322
_0804549C: .4byte 0x0000031A
_080454A0:
ldr r3, _080455B0 @ =0x00000316
adds r1, r7, r3
ldrh r0, [r1]
adds r0, #2
movs r2, #0
mov r8, r2
movs r3, #0
mov sl, r3
strh r0, [r1]
movs r0, #0xc6
lsls r0, r0, #2
adds r2, r7, r0
movs r3, #0xc5
lsls r3, r3, #2
adds r0, r7, r3
ldrh r0, [r0]
ldrh r3, [r2]
adds r0, r0, r3
strh r0, [r2]
ldr r0, _080455B4 @ =0x0000031A
adds r4, r7, r0
ldrh r0, [r1]
ldrh r1, [r4]
adds r0, r0, r1
strh r0, [r4]
ldr r3, _080455B8 @ =0x0000132C
mov sb, r3
adds r5, r7, r3
ldr r6, [r5]
movs r1, #0
ldrsh r0, [r2, r1]
movs r1, #0xa
bl __divsi3
strh r0, [r6, #0x10]
ldr r6, [r5]
movs r2, #0
ldrsh r0, [r4, r2]
movs r1, #0xa
bl __divsi3
strh r0, [r6, #0x12]
ldr r5, [r5]
movs r3, #0x12
ldrsh r0, [r5, r3]
cmp r0, #0xb4
ble _08045556
movs r0, #0xb5
strh r0, [r5, #0x12]
ldr r1, _080455BC @ =0x000005F7
adds r0, r7, r1
mov r2, r8
strb r2, [r0]
ldr r3, _080455C0 @ =gCurrentPinballGame
ldr r0, [r3]
strb r2, [r0, #0x1f]
ldr r1, [r3]
ldr r0, _080455B8 @ =0x0000132C
adds r3, r1, r0
ldr r2, [r3]
ldr r0, _080455C4 @ =0x0000FFF6
strh r0, [r2, #0x30]
ldr r0, [r3]
mov r2, sl
strh r2, [r0, #0x32]
ldr r3, _080455C8 @ =0x000005FA
adds r1, r1, r3
mov r0, r8
strb r0, [r1]
ldr r1, _080455C0 @ =gCurrentPinballGame
ldr r0, [r1]
ldr r2, _080455B8 @ =0x0000132C
adds r0, r0, r2
ldr r1, [r0]
movs r0, #3
strb r0, [r1, #1]
ldr r3, _080455C0 @ =gCurrentPinballGame
ldr r0, [r3]
adds r0, #0x24
mov r1, r8
strb r1, [r0]
ldr r0, [r3]
adds r0, #0x7e
mov r2, sl
strh r2, [r0]
movs r0, SE_UNKNOWN_0xE5
bl m4aSongNumStart
movs r0, #7
bl sub_11B0
_08045556:
ldr r3, _080455C0 @ =gCurrentPinballGame
ldr r1, [r3]
add r1, sb
ldr r2, [r1]
movs r3, #0x10
ldrsh r0, [r2, r3]
lsls r0, r0, #1
strh r0, [r2, #0x28]
ldr r2, [r1]
movs r3, #0x12
ldrsh r0, [r2, r3]
lsls r0, r0, #1
strh r0, [r2, #0x2a]
ldr r2, [r1]
movs r3, #0x10
ldrsh r0, [r2, r3]
lsls r0, r0, #8
str r0, [r2, #0x34]
ldr r1, [r1]
_0804557C:
movs r2, #0x12
ldrsh r0, [r1, r2]
lsls r0, r0, #8
str r0, [r1, #0x38]
_08045584:
ldr r3, _080455C0 @ =gCurrentPinballGame
ldr r1, [r3]
movs r0, #0xc3
lsls r0, r0, #2
adds r1, r1, r0
ldrh r0, [r1]
adds r0, #1
strh r0, [r1]
_08045594:
ldr r2, _080455C0 @ =gCurrentPinballGame
ldr r1, [r2]
ldr r3, _080455CC @ =0x00000592
adds r1, r1, r3
ldrh r0, [r1]
adds r0, #1
strh r0, [r1]
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_080455B0: .4byte 0x00000316
_080455B4: .4byte 0x0000031A
_080455B8: .4byte 0x0000132C
_080455BC: .4byte 0x000005F7
_080455C0: .4byte gCurrentPinballGame
_080455C4: .4byte 0x0000FFF6
_080455C8: .4byte 0x000005FA
_080455CC: .4byte 0x00000592

Binary file not shown.

View File

@ -167,7 +167,9 @@ struct PinballGame
/*0x06F*/ s8 unk6F;
/*0x070*/ s8 unk70;
/*0x071*/ s8 unk71;
/*0x072*/ u8 filler72[0x5A];
/*0x072*/ u8 filler72[0xC];
/*0x07E*/ u16 unk7E;
/*0x080*/ u8 filler80[0x4C];
/*0x0CC*/ u16 unkCC;
/*0x0CE*/ u8 fillerCE[0x2];
/*0x0D0*/ struct Vector16 unkD0[5];
@ -322,9 +324,18 @@ struct PinballGame
/*0x308*/ u16 unk308;
/*0x30A*/ u16 unk30A;
/*0x30C*/ u16 unk30C;
/*0x30E*/ u8 filler30E[0x2];
/*0x30E*/ s16 unk30E;
/*0x310*/ u16 unk310;
/*0x312*/ u8 filler312[0x33];
/*0x312*/ u8 filler312[0x2];
/*0x314*/ s16 unk314;
/*0x316*/ s16 unk316;
/*0x318*/ s16 unk318;
/*0x31A*/ s16 unk31A;
/*0x31C*/ s16 unk31C;
/*0x31E*/ s16 unk31E;
/*0x320*/ s16 unk320;
/*0x322*/ s16 unk322;
/*0x324*/ u8 filler324[0x21];
/*0x345*/ s8 unk345;
/*0x346*/ s8 unk346;
/*0x347*/ u8 filler347[0x23];
@ -426,7 +437,11 @@ struct PinballGame
/*0x566*/ u8 filler566[0xA];
/*0x570*/ struct Vector16 unk570[2];
/*0x578*/ struct Vector16 unk578[2];
/*ox580*/ struct Vector32 unk580[3];
/*0x580*/ struct Vector32 unk580[2];
/*0x590*/ u8 filler590[0x1];
/*0x591*/ s8 unk591;
/*0x592*/ u16 unk592;
/*0x594*/ u8 filler594[0x4];
/*0x598*/ u16 currentSpecies; // Current catch/hatch mode species? Is it evo mode as well?
/*0x59A*/ u8 filler59A[0x2];
/*0x59C*/ u16 lastCatchSpecies; // Previous catch mode species?

View File

@ -90,6 +90,7 @@ extern const u16 gUnknown_0837A4E8[];
extern const u8 gUnknown_0838E028[];
extern const u8 gUnknown_084779EC[];
extern const s16 gUnknown_086AEED6[];
extern const u8 gUnknown_084BB16C[][0x480];
extern struct SongHeader gUnknown_086A2EE4;
extern s16 gUnknown_02030750[];
@ -99,6 +100,116 @@ extern u8 gUnknown_0200FBB0[];
extern u8 gUnknown_020030A0[];
void sub_45164(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
s16 index;
group = &gMain.spriteGroups[20];
if (group->available)
{
group->baseX = (gCurrentPinballGame->unk320 / 10) - (gCurrentPinballGame->unk58 - 146);
group->baseY = (gCurrentPinballGame->unk322 / 10) - (gCurrentPinballGame->unk5A - 110) + (gCurrentPinballGame->unk30E / 10);
index = gCurrentPinballGame->unk591;
DmaCopy16(3, gUnknown_084BB16C[index], (void *)0x060125A0, 0x480);
for (i = 0; i < 4; i++)
{
oamSimple = &group->oam[i];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}
if (gCurrentPinballGame->unk592 <= 250)
{
if (gCurrentPinballGame->unk592 == 250)
{
gCurrentPinballGame->unk320 = 920;
gCurrentPinballGame->unk322 = -100;
gCurrentPinballGame->unk31C = -82;
gCurrentPinballGame->unk31E = 0;
gCurrentPinballGame->unk30C = 0;
gCurrentPinballGame->unk306 = 8;
gCurrentPinballGame->unk591 = 13;
gMain.spriteGroups[20].available = 1;
gCurrentPinballGame->unk5FA = 1;
}
}
else
{
gCurrentPinballGame->unk591 = (gCurrentPinballGame->unk30C % 24) / 6 + 13;
gCurrentPinballGame->unk30E = (Sin(gCurrentPinballGame->unk30C * 0x400) * 240) / 20000;
if (gCurrentPinballGame->unk30C == 0)
m4aSongNumStart(SE_UNKNOWN_0xE4);
if (gCurrentPinballGame->unk30C < 40)
{
gCurrentPinballGame->unk320 += gCurrentPinballGame->unk31C;
gCurrentPinballGame->unk322 += gCurrentPinballGame->unk31E;
}
else
{
gMain.spriteGroups[20].available = 0;
}
if (gCurrentPinballGame->unk30C == 13)
{
gCurrentPinballGame->ball->unk0 = 0;
gCurrentPinballGame->unk314 = -10;
gCurrentPinballGame->unk316 = -25;
gCurrentPinballGame->unk318 = ((gCurrentPinballGame->unk320 / 10) + 157) * 10;
gCurrentPinballGame->unk31A = ((gCurrentPinballGame->unk322 / 10) + 134) * 10;
gCurrentPinballGame->ball->unk1 = 1;
}
if (gCurrentPinballGame->unk1F)
{
if (gCurrentPinballGame->unk30C < 13)
{
gCurrentPinballGame->ball->positionQ0.x = (gCurrentPinballGame->unk320 / 10) + 157;
gCurrentPinballGame->ball->positionQ0.y = (gCurrentPinballGame->unk322 / 10) + 134;
gCurrentPinballGame->ball->positionQ1.x = gCurrentPinballGame->ball->positionQ0.x * 2;
gCurrentPinballGame->ball->positionQ1.y = gCurrentPinballGame->ball->positionQ0.y * 2;
gCurrentPinballGame->ball->positionQ8.x = gCurrentPinballGame->ball->positionQ0.x << 8;
gCurrentPinballGame->ball->positionQ8.y = gCurrentPinballGame->ball->positionQ0.y << 8;
}
else
{
gCurrentPinballGame->unk316 += 2;
gCurrentPinballGame->unk318 += gCurrentPinballGame->unk314;
gCurrentPinballGame->unk31A += gCurrentPinballGame->unk316;
gCurrentPinballGame->ball->positionQ0.x = gCurrentPinballGame->unk318 / 10;
gCurrentPinballGame->ball->positionQ0.y = gCurrentPinballGame->unk31A / 10;
if (gCurrentPinballGame->ball->positionQ0.y >= 181)
{
gCurrentPinballGame->ball->positionQ0.y = 181;
gCurrentPinballGame->unk5F7 = 0;
gCurrentPinballGame->unk1F = 0;
gCurrentPinballGame->ball->velocity.x = -10;
gCurrentPinballGame->ball->velocity.y = 0;
gCurrentPinballGame->unk5FA = 0;
gCurrentPinballGame->ball->unk1 = 3;
gCurrentPinballGame->unk24 = 0;
gCurrentPinballGame->unk7E = 0;
m4aSongNumStart(SE_UNKNOWN_0xE5);
sub_11B0(7);
}
gCurrentPinballGame->ball->positionQ1.x = gCurrentPinballGame->ball->positionQ0.x * 2;
gCurrentPinballGame->ball->positionQ1.y = gCurrentPinballGame->ball->positionQ0.y * 2;
gCurrentPinballGame->ball->positionQ8.x = gCurrentPinballGame->ball->positionQ0.x << 8;
gCurrentPinballGame->ball->positionQ8.y = gCurrentPinballGame->ball->positionQ0.y << 8;
}
}
gCurrentPinballGame->unk30C++;
}
gCurrentPinballGame->unk592++;
}
void sub_455D0(void)
{
s16 i;