sub_1F698

This commit is contained in:
Marcus Huderle 2025-08-29 08:03:16 -05:00
parent a7a01ea759
commit e3534b2954
4 changed files with 128 additions and 456 deletions

View File

@ -4026,457 +4026,3 @@ _0801F688: .4byte 0x80000090
_0801F68C: .4byte gOamBuffer
_0801F690: .4byte 0xFFFFFE00
_0801F694: .4byte 0x000001FF
thumb_func_start sub_1F698
sub_1F698: @ 0x0801F698
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
movs r2, #0
ldr r7, _0801F6EC @ =gMain+0xD08 @gMain.spriteGroups[14]
ldr r0, _0801F6F0 @ =gCurrentPinballGame
ldr r4, [r0]
movs r1, #0xaf
lsls r1, r1, #2
adds r3, r4, r1
ldrh r1, [r3]
mov sb, r0
cmp r1, #0x3b
bhi _0801F712
adds r0, r1, #0
subs r0, #0x1b
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x13
bhi _0801F704
ldrh r0, [r3]
subs r0, #0x1b
movs r1, #5
bl __divsi3
ldr r2, _0801F6F4 @ =0x040000D4
lsls r0, r0, #0x10
asrs r0, r0, #8
ldr r1, _0801F6F8 @ =gUnknown_083C562C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0801F6FC @ =0x06014280
str r0, [r2, #4]
ldr r0, _0801F700 @ =0x80000080
str r0, [r2, #8]
ldr r0, [r2, #8]
adds r0, r4, #0
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xb0
b _0801F760
.align 2, 0
_0801F6EC: .4byte gMain+0xD08 @gMain.spriteGroups[14]
_0801F6F0: .4byte gCurrentPinballGame
_0801F6F4: .4byte 0x040000D4
_0801F6F8: .4byte gUnknown_083C562C
_0801F6FC: .4byte 0x06014280
_0801F700: .4byte 0x80000080
_0801F704:
strh r2, [r7]
mov r2, sb
ldr r0, [r2]
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xb0
b _0801F760
_0801F712:
adds r0, r1, #0
subs r0, #0x64
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x13
bhi _0801F754
ldrh r0, [r3]
subs r0, #0x64
movs r1, #5
bl __divsi3
ldr r2, _0801F744 @ =0x040000D4
lsls r0, r0, #0x10
asrs r0, r0, #8
ldr r1, _0801F748 @ =gUnknown_083C562C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0801F74C @ =0x06014280
str r0, [r2, #4]
ldr r0, _0801F750 @ =0x80000080
str r0, [r2, #8]
ldr r0, [r2, #8]
adds r0, r4, #0
b _0801F75A
.align 2, 0
_0801F744: .4byte 0x040000D4
_0801F748: .4byte gUnknown_083C562C
_0801F74C: .4byte 0x06014280
_0801F750: .4byte 0x80000080
_0801F754:
strh r2, [r7]
mov r3, sb
ldr r0, [r3]
_0801F75A:
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0x20
_0801F760:
subs r0, r0, r1
strh r0, [r7, #2]
ldrh r0, [r7]
ldr r1, _0801F880 @ =gMain+0xC50 @gMain.spriteGroups[13]
mov r8, r1
cmp r0, #0
beq _0801F7D8
mov r2, sb
ldr r0, [r2]
adds r0, #0x5a
ldrh r1, [r0]
movs r3, #0x94
lsls r3, r3, #1
adds r0, r3, #0
subs r0, r0, r1
strh r0, [r7, #4]
lsls r0, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0xb4
ble _0801F78C
movs r0, #0xb4
strh r0, [r7, #4]
_0801F78C:
movs r0, #0
ldr r6, _0801F884 @ =gOamBuffer
ldr r1, _0801F888 @ =0xFFFFFE00
mov ip, r1
_0801F794:
lsls r4, r0, #0x10
asrs r4, r4, #0x10
lsls r0, r4, #3
adds r0, #8
adds r5, r7, r0
ldrh r3, [r5]
lsls r3, r3, #3
adds r3, r3, r6
movs r2, #2
ldrsh r1, [r5, r2]
movs r2, #2
ldrsh r0, [r7, r2]
adds r1, r1, r0
ldr r2, _0801F88C @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r3, #2]
mov r0, ip
ands r0, r2
orrs r0, r1
strh r0, [r3, #2]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r6
ldrb r0, [r7, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
adds r4, #1
lsls r4, r4, #0x10
lsrs r0, r4, #0x10
asrs r4, r4, #0x10
cmp r4, #1
ble _0801F794
_0801F7D8:
mov r7, r8
ldrh r0, [r7]
cmp r0, #0
bne _0801F7E2
b _0801FA26
_0801F7E2:
mov r0, sb
ldr r3, [r0]
movs r6, #0xaf
lsls r6, r6, #2
adds r1, r3, r6
ldrh r0, [r1]
cmp r0, #0x77
bls _0801F7F4
b _0801F990
_0801F7F4:
movs r1, #7
ands r0, r1
cmp r0, #0
bne _0801F802
movs r0, 0xC6 @=SE_UNKNOWN_0xC6
bl m4aSongNumStart
_0801F802:
mov r1, sb
ldr r0, [r1]
adds r0, r0, r6
ldrh r0, [r0]
movs r1, #0xf
ands r0, r1
ldr r2, _0801F890 @ =0x040000D4
lsrs r0, r0, #2
lsls r0, r0, #7
ldr r1, _0801F894 @ =gUnknown_083C542C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0801F898 @ =0x06014200
str r0, [r2, #4]
ldr r0, _0801F89C @ =0x80000040
str r0, [r2, #8]
ldr r0, [r2, #8]
mov r2, sb
ldr r4, [r2]
adds r5, r4, r6
ldrh r0, [r5]
lsls r0, r0, #0x10
movs r1, #0x5a
bl __divsi3
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
movs r3, #0xae
lsls r3, r3, #2
adds r0, r4, r3
ldrh r1, [r0]
subs r1, #2
strh r1, [r0]
movs r0, #0xad
lsls r0, r0, #2
adds r4, r4, r0
ldrh r0, [r4]
adds r0, r0, r1
strh r0, [r4]
ldrh r0, [r5]
cmp r0, #0x1d
bhi _0801F8A8
adds r0, r2, #0
bl Sin
adds r1, r0, #0
mov r2, sb
ldr r4, [r2]
adds r5, r4, r6
lsls r1, r1, #0x10
asrs r1, r1, #0x10
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #3
ldr r1, _0801F8A0 @ =0x00004E20
bl __divsi3
ldrh r1, [r5]
adds r1, r1, r0
ldr r3, _0801F8A4 @ =0x000002B6
adds r4, r4, r3
strh r1, [r4]
b _0801F8CC
.align 2, 0
_0801F880: .4byte gMain+0xC50 @gMain.spriteGroups[13]
_0801F884: .4byte gOamBuffer
_0801F888: .4byte 0xFFFFFE00
_0801F88C: .4byte 0x000001FF
_0801F890: .4byte 0x040000D4
_0801F894: .4byte gUnknown_083C542C
_0801F898: .4byte 0x06014200
_0801F89C: .4byte 0x80000040
_0801F8A0: .4byte 0x00004E20
_0801F8A4: .4byte 0x000002B6
_0801F8A8:
adds r0, r2, #0
bl Sin
adds r1, r0, #0
mov r0, sb
ldr r4, [r0]
lsls r1, r1, #0x10
asrs r1, r1, #0x10
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #3
ldr r1, _0801F910 @ =0x00004E20
bl __divsi3
adds r0, #0x1e
ldr r1, _0801F914 @ =0x000002B6
adds r4, r4, r1
strh r0, [r4]
_0801F8CC:
ldr r2, _0801F918 @ =gCurrentPinballGame
ldr r1, [r2]
movs r3, #0xaf
lsls r3, r3, #2
adds r1, r1, r3
ldrh r0, [r1]
adds r0, #1
strh r0, [r1]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sb, r2
cmp r0, #0x1b
bne _0801F934
ldr r0, _0801F91C @ =gMain
ldr r1, _0801F920 @ =0x00000D08
adds r0, r0, r1
movs r1, #1
strh r1, [r0]
movs r0, 0xC7 @=SE_UNKNOWN_0xC7
bl m4aSongNumStart
mov r2, sb
ldr r0, [r2]
movs r3, #0xb9
lsls r3, r3, #2
adds r1, r0, r3
ldrb r2, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
ble _0801F924
adds r0, r2, #1
strb r0, [r1]
b _0801F934
.align 2, 0
_0801F910: .4byte 0x00004E20
_0801F914: .4byte 0x000002B6
_0801F918: .4byte gCurrentPinballGame
_0801F91C: .4byte gMain
_0801F920: .4byte 0x00000D08
_0801F924:
movs r0, #2
strb r0, [r1]
mov r1, sb
ldr r0, [r1]
ldr r2, _0801F96C @ =0x000002EA
adds r0, r0, r2
movs r1, #0xbe
strh r1, [r0]
_0801F934:
mov r3, sb
ldr r0, [r3]
movs r1, #0xaf
lsls r1, r1, #2
adds r0, r0, r1
ldrh r0, [r0]
cmp r0, #0x64
bne _0801F9B6
ldr r0, _0801F970 @ =gMain
ldr r2, _0801F974 @ =0x00000D08
adds r0, r0, r2
movs r1, #1
strh r1, [r0]
movs r0, 0xC7 @=SE_UNKNOWN_0xC7
bl m4aSongNumStart
mov r3, sb
ldr r0, [r3]
ldr r2, _0801F978 @ =0x000002E3
adds r1, r0, r2
ldrb r2, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
ble _0801F97C
adds r0, r2, #1
strb r0, [r1]
b _0801F9B6
.align 2, 0
_0801F96C: .4byte 0x000002EA
_0801F970: .4byte gMain
_0801F974: .4byte 0x00000D08
_0801F978: .4byte 0x000002E3
_0801F97C:
movs r0, #2
strb r0, [r1]
mov r3, sb
ldr r0, [r3]
movs r1, #0xba
lsls r1, r1, #2
adds r0, r0, r1
movs r1, #0xbe
strh r1, [r0]
b _0801F9B6
_0801F990:
movs r2, #0
strh r2, [r1]
movs r1, #0xad
lsls r1, r1, #2
adds r0, r3, r1
strh r2, [r0]
ldr r0, _0801FA34 @ =0x000002B6
adds r1, r3, r0
movs r0, #0xbe
strh r0, [r1]
movs r0, #0xae
lsls r0, r0, #2
adds r1, r3, r0
movs r0, #0x64
strh r0, [r1]
ldr r1, _0801FA38 @ =0x000002BA
adds r0, r3, r1
strh r2, [r0]
strh r2, [r7]
_0801F9B6:
mov r2, sb
ldr r4, [r2]
movs r3, #0xad
lsls r3, r3, #2
adds r0, r4, r3
movs r1, #0
ldrsh r0, [r0, r1]
movs r1, #0x14
bl __divsi3
adds r0, #0x47
adds r1, r4, #0
adds r1, #0x58
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r7, #2]
ldr r2, _0801FA34 @ =0x000002B6
adds r0, r4, r2
ldrh r0, [r0]
adds r0, #0xf8
adds r4, #0x5a
ldrh r1, [r4]
subs r0, r0, r1
strh r0, [r7, #4]
lsls r0, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0xbe
ble _0801F9F2
movs r0, #0xbe
strh r0, [r7, #4]
_0801F9F2:
adds r5, r7, #0
adds r5, #8
ldr r4, _0801FA3C @ =gOamBuffer
ldrh r2, [r7, #8]
lsls r2, r2, #3
adds r2, r2, r4
movs r3, #2
ldrsh r1, [r5, r3]
movs r3, #2
ldrsh r0, [r7, r3]
adds r1, r1, r0
ldr r3, _0801FA40 @ =0x000001FF
adds r0, r3, #0
ands r1, r0
ldrh r3, [r2, #2]
ldr r0, _0801FA44 @ =0xFFFFFE00
ands r0, r3
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r7, #8]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r0, [r7, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
_0801FA26:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0801FA34: .4byte 0x000002B6
_0801FA38: .4byte 0x000002BA
_0801FA3C: .4byte gOamBuffer
_0801FA40: .4byte 0x000001FF
_0801FA44: .4byte 0xFFFFFE00

Binary file not shown.

View File

@ -373,8 +373,8 @@ struct PinballGame
/*0x2B0*/ u16 unk2B0;
/*0x2B2*/ s8 unk2B2;
/*0x2B3*/ u8 filler2B3[0x1];
/*0x2B4*/ u16 unk2B4;
/*0x2B6*/ u16 unk2B6;
/*0x2B4*/ s16 unk2B4;
/*0x2B6*/ s16 unk2B6;
/*0x2B8*/ u16 unk2B8;
/*0x2BA*/ u16 unk2BA;
/*0x2BC*/ u16 unk2BC;

View File

@ -11,8 +11,134 @@ extern const u16 gUnknown_086B2FC0[][18];
extern const u8 gUnknown_08447A8C[][0x180];
extern const s16 gUnknown_086ADA58[];
extern const u8 gUnknown_083C3C2C[][0x300];
extern const u8 gUnknown_083C562C[][0x100];
extern const u8 gUnknown_083C542C[][0x80];
void sub_1F698(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
s16 index;
s16 var0;
index = 0;
group = &gMain.spriteGroups[14];
if (gCurrentPinballGame->unk2BC < 60)
{
if (gCurrentPinballGame->unk2BC >= 27 && gCurrentPinballGame->unk2BC < 47)
{
index = (gCurrentPinballGame->unk2BC - 27) / 5;
DmaCopy16(3, gUnknown_083C562C[index], (void *)0x06014280, 0x100);
group->baseX = 176 - gCurrentPinballGame->unk58;
}
else
{
group->available = 0;
group->baseX = 176 - gCurrentPinballGame->unk58;
}
}
else
{
if (gCurrentPinballGame->unk2BC >= 100 && gCurrentPinballGame->unk2BC < 120)
{
index = (gCurrentPinballGame->unk2BC - 100) / 5;
DmaCopy16(3, gUnknown_083C562C[index], (void *)0x06014280, 0x100);
group->baseX = 32 - gCurrentPinballGame->unk58;
}
else
{
group->available = 0;
group->baseX = 32 - gCurrentPinballGame->unk58;
}
}
if (group->available)
{
group->baseY = 296 - gCurrentPinballGame->unk5A;
if (group->baseY > 180)
group->baseY = 180;
for (i = 0; i < 2; i++)
{
oamSimple = &group->oam[i];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}
group = &gMain.spriteGroups[13];
if (group->available)
{
if (gCurrentPinballGame->unk2BC < 120)
{
if (gCurrentPinballGame->unk2BC % 8 == 0)
m4aSongNumStart(SE_UNKNOWN_0xC6);
index = (gCurrentPinballGame->unk2BC % 16) / 4;
DmaCopy16(3, gUnknown_083C542C[index], (void *)0x06014200, 0x80);
var0 = (gCurrentPinballGame->unk2BC << 0x10) / 90;
gCurrentPinballGame->unk2B8 -= 2;
gCurrentPinballGame->unk2B4 += gCurrentPinballGame->unk2B8;
if (gCurrentPinballGame->unk2BC < 30)
gCurrentPinballGame->unk2B6 = gCurrentPinballGame->unk2BC + (Sin(var0) * 24) / 20000;
else
gCurrentPinballGame->unk2B6 = 30 + (Sin(var0) * 24) / 20000;
gCurrentPinballGame->unk2BC++;
if (gCurrentPinballGame->unk2BC == 27)
{
gMain.spriteGroups[14].available = 1;
m4aSongNumStart(SE_UNKNOWN_0xC7);
if (gCurrentPinballGame->unk2E3[1] > 0)
{
gCurrentPinballGame->unk2E3[1]++;
}
else
{
gCurrentPinballGame->unk2E3[1] = 2;
gCurrentPinballGame->unk2E8[1] = 190;
}
}
if (gCurrentPinballGame->unk2BC == 100)
{
gMain.spriteGroups[14].available = 1;
m4aSongNumStart(SE_UNKNOWN_0xC7);
if (gCurrentPinballGame->unk2E3[0] > 0)
{
gCurrentPinballGame->unk2E3[0]++;
}
else
{
gCurrentPinballGame->unk2E3[0] = 2;
gCurrentPinballGame->unk2E8[0] = 190;
}
}
}
else
{
gCurrentPinballGame->unk2BC = 0;
gCurrentPinballGame->unk2B4 = 0;
gCurrentPinballGame->unk2B6 = 190;
gCurrentPinballGame->unk2B8 = 100;
gCurrentPinballGame->unk2BA = 0;
group->available = 0;
}
group->baseX = (gCurrentPinballGame->unk2B4 / 20) + 71u - gCurrentPinballGame->unk58;
group->baseY = gCurrentPinballGame->unk2B6 + 248u - gCurrentPinballGame->unk5A;
if (group->baseY > 190)
group->baseY = 190;
oamSimple = &group->oam[0];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}
void sub_1FA48(void)
{
s16 i;