sub_2F504

This commit is contained in:
Marcus Huderle 2025-08-23 08:41:37 -05:00
parent 27d9834e20
commit b39d533616
4 changed files with 77 additions and 321 deletions

View File

@ -6,326 +6,6 @@
.text
thumb_func_start sub_2F504
sub_2F504: @ 0x0802F504
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
ldr r6, _0802F700 @ =gMain+0x15A8 @gMain.spriteGroups[26]
ldrh r0, [r6]
movs r1, #0xb8
adds r1, r1, r6
mov sl, r1
cmp r0, #0
beq _0802F5EC
ldr r3, _0802F704 @ =gCurrentPinballGame
ldr r0, [r3]
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xc6
subs r0, r0, r1
strh r0, [r6, #2]
ldr r1, [r3]
movs r4, #0xe0
lsls r4, r4, #2
adds r2, r1, r4
movs r7, #0x8e
lsls r7, r7, #1
adds r0, r7, #0
ldrh r2, [r2]
adds r0, r0, r2
adds r1, #0x5a
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r6, #4]
ldr r3, [r3]
ldr r1, _0802F708 @ =0x00000379
adds r0, r3, r1
ldr r2, _0802F70C @ =0x040000D4
movs r1, #0
ldrsb r1, [r0, r1]
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #7
ldr r1, _0802F710 @ =gUnknown_08512C4C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0802F714 @ =0x06012A20
str r0, [r2, #4]
ldr r0, _0802F718 @ =0x800001C0
str r0, [r2, #8]
ldr r0, [r2, #8]
ldr r2, _0802F71C @ =0x0000037A
adds r3, r3, r2
movs r2, #0
ldr r4, _0802F720 @ =gUnknown_086B3CA4
mov sb, r4
movs r1, #0
ldrsb r1, [r3, r1]
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #1
mov ip, r0
ldr r7, _0802F724 @ =0xFFFFFE00
mov r8, r7
_0802F580:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r6, r0
ldrh r0, [r5]
lsls r0, r0, #3
ldr r1, _0802F728 @ =gOamBuffer
adds r2, r0, r1
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
add r0, sb
mov r4, ip
adds r1, r4, r0
ldrh r0, [r1]
strh r0, [r2]
adds r1, #2
adds r2, #2
ldrh r0, [r1]
strh r0, [r2]
ldrh r0, [r1, #2]
strh r0, [r2, #2]
ldrh r2, [r5]
lsls r2, r2, #3
ldr r7, _0802F728 @ =gOamBuffer
adds r2, r2, r7
ldrh r4, [r2, #2]
lsls r1, r4, #0x17
lsrs r1, r1, #0x17
movs r7, #2
ldrsh r0, [r6, r7]
adds r1, r1, r0
ldr r7, _0802F72C @ =0x000001FF
adds r0, r7, #0
ands r1, r0
mov r0, r8
ands r0, r4
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r5]
lsls r1, r1, #3
ldr r0, _0802F728 @ =gOamBuffer
adds r1, r1, r0
ldrb r0, [r6, #4]
ldrb r2, [r1]
adds r0, r0, r2
strb r0, [r1]
adds r3, #1
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #2
ble _0802F580
_0802F5EC:
mov r6, sl
ldrh r0, [r6]
cmp r0, #0
beq _0802F69A
ldr r2, _0802F704 @ =gCurrentPinballGame
ldr r0, [r2]
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xc6
subs r0, r0, r1
strh r0, [r6, #2]
ldr r0, [r2]
adds r0, #0x5a
ldrh r1, [r0]
movs r3, #0x8e
lsls r3, r3, #1
adds r0, r3, #0
subs r0, r0, r1
strh r0, [r6, #4]
ldr r0, [r2]
ldr r4, _0802F730 @ =0x0000037B
adds r0, r0, r4
movs r2, #0
ldr r7, _0802F734 @ =gUnknown_086B3B7E
mov sb, r7
ldr r1, _0802F728 @ =gOamBuffer
mov sl, r1
movs r1, #0
ldrsb r1, [r0, r1]
movs r0, #0x2a
adds r3, r1, #0
muls r3, r0, r3
mov ip, r3
ldr r4, _0802F724 @ =0xFFFFFE00
mov r8, r4
_0802F632:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r6, r0
ldrh r0, [r5]
lsls r0, r0, #3
mov r7, sl
adds r2, r0, r7
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
add r0, sb
mov r4, ip
adds r1, r4, r0
ldrh r0, [r1]
strh r0, [r2]
adds r1, #2
adds r2, #2
ldrh r0, [r1]
strh r0, [r2]
ldrh r0, [r1, #2]
strh r0, [r2, #2]
ldrh r2, [r5]
lsls r2, r2, #3
add r2, sl
ldrh r4, [r2, #2]
lsls r1, r4, #0x17
lsrs r1, r1, #0x17
movs r7, #2
ldrsh r0, [r6, r7]
adds r1, r1, r0
ldr r7, _0802F72C @ =0x000001FF
adds r0, r7, #0
ands r1, r0
mov r0, r8
ands r0, r4
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r5]
lsls r1, r1, #3
add r1, sl
ldrb r0, [r6, #4]
ldrb r2, [r1]
adds r0, r0, r2
strb r0, [r1]
adds r3, #1
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #6
ble _0802F632
_0802F69A:
ldr r6, _0802F738 @ =gMain+0x3548 @gMain.spriteGroups[70]
ldrh r0, [r6]
cmp r0, #0
beq _0802F780
ldr r2, _0802F704 @ =gCurrentPinballGame
ldr r0, [r2]
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xce
subs r0, r0, r1
strh r0, [r6, #2]
ldr r1, [r2]
movs r3, #0xdf
lsls r3, r3, #2
adds r0, r1, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
beq _0802F748
adds r0, r1, #0
adds r0, #0x5a
ldrh r1, [r0]
movs r4, #0x82
lsls r4, r4, #1
adds r0, r4, #0
subs r0, r0, r1
strh r0, [r6, #4]
ldr r0, [r2]
movs r7, #0xa4
lsls r7, r7, #2
adds r0, r0, r7
ldr r0, [r0]
movs r1, #0x32
bl __umodsi3
movs r1, #0x19
bl __udivsi3
ldr r2, _0802F70C @ =0x040000D4
lsls r0, r0, #0x10
asrs r0, r0, #7
ldr r1, _0802F73C @ =gUnknown_084ED6CC
adds r0, r0, r1
str r0, [r2]
ldr r0, _0802F740 @ =0x06014FA0
str r0, [r2, #4]
ldr r0, _0802F744 @ =0x80000100
str r0, [r2, #8]
ldr r0, [r2, #8]
b _0802F74C
.align 2, 0
_0802F700: .4byte gMain+0x15A8 @gMain.spriteGroups[26]
_0802F704: .4byte gCurrentPinballGame
_0802F708: .4byte 0x00000379
_0802F70C: .4byte 0x040000D4
_0802F710: .4byte gUnknown_08512C4C
_0802F714: .4byte 0x06012A20
_0802F718: .4byte 0x800001C0
_0802F71C: .4byte 0x0000037A
_0802F720: .4byte gUnknown_086B3CA4
_0802F724: .4byte 0xFFFFFE00
_0802F728: .4byte gOamBuffer
_0802F72C: .4byte 0x000001FF
_0802F730: .4byte 0x0000037B
_0802F734: .4byte gUnknown_086B3B7E
_0802F738: .4byte gMain+0x3548 @gMain.spriteGroups[70]
_0802F73C: .4byte gUnknown_084ED6CC
_0802F740: .4byte 0x06014FA0
_0802F744: .4byte 0x80000100
_0802F748:
movs r0, #0xc8
strh r0, [r6, #4]
_0802F74C:
adds r5, r6, #0
adds r5, #8
ldr r4, _0802F790 @ =gOamBuffer
ldrh r2, [r6, #8]
lsls r2, r2, #3
adds r2, r2, r4
movs r0, #2
ldrsh r1, [r5, r0]
movs r3, #2
ldrsh r0, [r6, r3]
adds r1, r1, r0
ldr r7, _0802F794 @ =0x000001FF
adds r0, r7, #0
ands r1, r0
ldrh r3, [r2, #2]
ldr r0, _0802F798 @ =0xFFFFFE00
ands r0, r3
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r6, #8]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r0, [r6, #4]
ldrb r5, [r5, #4]
adds r0, r0, r5
strb r0, [r1]
_0802F780:
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
_0802F790: .4byte gOamBuffer
_0802F794: .4byte 0x000001FF
_0802F798: .4byte 0xFFFFFE00
thumb_func_start sub_2F79C
sub_2F79C: @ 0x0802F79C
push {r4, r5, r6, r7, lr}

Binary file not shown.

View File

@ -429,7 +429,7 @@ struct PinballGame
/*0x37C*/ s8 unk37C;
/*0x37D*/ s8 unk37D;
/*0x37E*/ u16 unk37E;
/*0x380*/ u8 filler380[0x2];
/*0x380*/ u16 unk380;
/*0x382*/ s8 unk382;
/*0x383*/ s8 unk383;
/*0x384*/ s8 unk384;

View File

@ -13,6 +13,10 @@ extern const u8 gUnknown_083FFD8C[][0x300];
extern const u16 gUnknown_086B4A72[][2][3];
extern const u8 gUnknown_08526DCC[];
extern const s16 gUnknown_086AE496[][3];
extern const u8 gUnknown_08512C4C[][0x380];
extern const u16 gUnknown_086B3CA4[][3][3];
extern const u16 gUnknown_086B3B7E[][7][3];
extern const u8 gUnknown_084ED6CC[][0x200];
extern struct SongHeader gUnknown_086A11A4;
@ -438,3 +442,75 @@ void sub_2F26C(void)
break;
}
}
void sub_2F504(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
u16 *dst;
const u16 *src;
s16 index;
group = &gMain.spriteGroups[26];
if (group->available)
{
group->baseX = 198 - gCurrentPinballGame->unk58;
group->baseY = gCurrentPinballGame->unk380 + 284 - gCurrentPinballGame->unk5A;
index = gCurrentPinballGame->unk379;
DmaCopy16(3, gUnknown_08512C4C[index], (void *)0x06012A20, 0x380);
index = gCurrentPinballGame->unk37A;
for (i = 0; i < 3; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B3CA4[index][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
}
group = &gMain.spriteGroups[27];
if (group->available)
{
group->baseX = 198 - gCurrentPinballGame->unk58;
group->baseY = 284 - gCurrentPinballGame->unk5A;
index = gCurrentPinballGame->unk37B;
for (i = 0; i < 7; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B3B7E[index][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
}
group = &gMain.spriteGroups[70];
if (group->available)
{
group->baseX = 206 - gCurrentPinballGame->unk58;
if (gCurrentPinballGame->unk37C)
{
group->baseY = 260 - gCurrentPinballGame->unk5A;
index = (gCurrentPinballGame->unk290 % 50) / 25;
DmaCopy16(3, &gUnknown_084ED6CC[index], (void *)0x06014FA0, 0x200);
}
else
{
group->baseY = 200;
}
oamSimple = &group->oam[0];
gOamBuffer[oamSimple->oamId].x = oamSimple->xOffset + group->baseX;
gOamBuffer[oamSimple->oamId].y = oamSimple->yOffset + group->baseY;
}
}