sub_2F140

This commit is contained in:
Marcus Huderle 2025-08-22 17:05:50 -05:00
parent 1cc45cec4d
commit 908ef589f1
4 changed files with 38 additions and 146 deletions

View File

@ -6,151 +6,6 @@
.text
thumb_func_start sub_2F140
sub_2F140: @ 0x0802F140
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
ldr r0, _0802F240 @ =gCurrentPinballGame
ldr r5, [r0]
movs r1, #0xa4
lsls r1, r1, #2
adds r0, r5, r1
ldr r0, [r0]
movs r1, #0x1f
ands r0, r1
lsrs r4, r0, #4
ldr r6, _0802F244 @ =gMain+0x38E0 @gMain.spriteGroups[75]
movs r2, #0xbd
lsls r2, r2, #2
adds r1, r5, r2
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
beq _0802F170
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
_0802F170:
ldr r2, _0802F248 @ =gUnknown_086AE462
lsls r0, r4, #0x10
asrs r0, r0, #0xe
adds r1, r0, r2
ldrh r3, [r1]
adds r2, #2
adds r0, r0, r2
ldrh r4, [r0]
adds r0, r5, #0
adds r0, #0x58
ldrh r1, [r0]
movs r0, #0xa4
subs r0, r0, r1
strh r0, [r6, #2]
adds r0, r5, #0
adds r0, #0x5a
ldrh r1, [r0]
movs r0, #0xa6
subs r0, r0, r1
strh r0, [r6, #4]
ldr r2, _0802F24C @ =0x040000D4
lsls r1, r4, #0x10
asrs r1, r1, #0x10
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #8
ldr r1, _0802F250 @ =gUnknown_083FFD8C
adds r0, r0, r1
str r0, [r2]
ldr r0, _0802F254 @ =0x06012720
str r0, [r2, #4]
ldr r0, _0802F258 @ =0x80000180
str r0, [r2, #8]
ldr r0, [r2, #8]
movs r1, #0
ldr r7, _0802F25C @ =gUnknown_086B4A72
mov sb, r7
ldr r0, _0802F260 @ =gOamBuffer
mov sl, r0
lsls r3, r3, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
mov ip, r0
ldr r2, _0802F264 @ =0xFFFFFE00
mov r8, r2
_0802F1CE:
lsls r3, r1, #0x10
asrs r3, r3, #0x10
lsls r4, r3, #3
adds r4, #8
adds r4, r6, r4
ldrh r2, [r4]
lsls r2, r2, #3
add r2, sl
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
add r0, sb
add r0, ip
ldrh r1, [r0]
strh r1, [r2]
adds r0, #2
adds r2, #2
ldrh r1, [r0]
strh r1, [r2]
ldrh r0, [r0, #2]
strh r0, [r2, #2]
ldrh r2, [r4]
lsls r2, r2, #3
add r2, sl
ldrh r5, [r2, #2]
lsls r1, r5, #0x17
lsrs r1, r1, #0x17
movs r7, #2
ldrsh r0, [r6, r7]
adds r1, r1, r0
ldr r7, _0802F268 @ =0x000001FF
adds r0, r7, #0
ands r1, r0
mov r0, r8
ands r0, r5
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r4]
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 r1, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #1
ble _0802F1CE
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
_0802F240: .4byte gCurrentPinballGame
_0802F244: .4byte gMain+0x38E0 @gMain.spriteGroups[75]
_0802F248: .4byte gUnknown_086AE462
_0802F24C: .4byte 0x040000D4
_0802F250: .4byte gUnknown_083FFD8C
_0802F254: .4byte 0x06012720
_0802F258: .4byte 0x80000180
_0802F25C: .4byte gUnknown_086B4A72
_0802F260: .4byte gOamBuffer
_0802F264: .4byte 0xFFFFFE00
_0802F268: .4byte 0x000001FF
thumb_func_start sub_2F26C
sub_2F26C: @ 0x0802F26C
push {r4, r5, r6, lr}

Binary file not shown.

View File

@ -366,7 +366,7 @@ struct PinballGame
/*0x2F0*/ u8 unk2F0;
/*0x2F1*/ u8 unk2F1;
/*0x2F2*/ u8 filler2F2[0x2];
/*0x2F4*/ u8 unk2F4;
/*0x2F4*/ s8 unk2F4;
/*0x2F5*/ s8 unk2F5;
/*0x2F6*/ u16 unk2F6;
/*0x2F8*/ s8 unk2F8;

View File

@ -8,6 +8,9 @@ extern const s16 gUnknown_086AE3DC[][3];
extern const s8 gUnknown_08137CBC[][2];
extern const u8 gUnknown_084BB16C[][0x480];
extern const u16 gUnknown_086B3EF6[][4][3];
extern const s16 gUnknown_086AE462[][2];
extern const u8 gUnknown_083FFD8C[][0x300];
extern const u16 gUnknown_086B4A72[][2][3];
extern struct SongHeader gUnknown_086A11A4;
@ -319,3 +322,37 @@ void sub_2E6AC(void)
}
}
}
void sub_2F140(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
u16 *dst;
const u16 *src;
s16 index;
s16 var0;
index = (gCurrentPinballGame->unk290 % 32) / 16;
group = &gMain.spriteGroups[75];
if (gCurrentPinballGame->unk2F4)
index = gCurrentPinballGame->unk2F4;
var0 = gUnknown_086AE462[index][0];
index = gUnknown_086AE462[index][1];
group->baseX = 164 - gCurrentPinballGame->unk58;
group->baseY = 166 - gCurrentPinballGame->unk5A;
DmaCopy16(3, gUnknown_083FFD8C[index], (void *)0x06012720, 0x300);
for (i = 0; i < 2; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B4A72[var0][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
}