sub_3C6E0
Some checks failed
CI / build (push) Has been cancelled

This commit is contained in:
Marcus Huderle 2025-08-08 08:12:26 -05:00
parent 4c3ce8fbff
commit c8f45917ae
4 changed files with 130 additions and 608 deletions

View File

@ -10942,610 +10942,3 @@ _0803C6D0: .4byte 0x00001290
_0803C6D4: .4byte 0x000004C9
_0803C6D8: .4byte gMPlayInfo_BGM
_0803C6DC: .4byte 0x0000FFFF
thumb_func_start sub_3C6E0
sub_3C6E0: @ 0x0803C6E0
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
ldr r7, _0803C820 @ =gMain+0x17D0 @gMain.spriteGroups[29]
ldrh r0, [r7]
ldr r1, _0803C824 @ =gCurrentPinballGame
mov sl, r1
cmp r0, #0
bne _0803C6FA
b _0803CA2E
_0803C6FA:
ldr r1, _0803C828 @ =gUnknown_086AF140
mov r2, sl
ldr r4, [r2]
ldr r3, _0803C82C @ =0x000003E2
adds r0, r4, r3
movs r6, #0
ldrsh r0, [r0, r6]
lsls r0, r0, #2
adds r0, r0, r1
ldrh r0, [r0]
mov r8, r0
movs r6, #0xfa
lsls r6, r6, #2
adds r0, r4, r6
movs r1, #0
ldrsh r0, [r0, r1]
movs r1, #0xa
bl __divsi3
adds r0, #0x64
adds r4, #0x58
ldrh r1, [r4]
subs r0, r0, r1
strh r0, [r7, #2]
mov r2, sl
ldr r4, [r2]
ldr r5, _0803C830 @ =0x000003EA
adds r0, r4, r5
movs r3, #0
ldrsh r0, [r0, r3]
movs r1, #0xa
bl __divsi3
adds r0, #0x54
adds r4, #0x5a
ldrh r1, [r4]
subs r0, r0, r1
strh r0, [r7, #4]
mov r0, sl
ldr r4, [r0]
adds r6, r4, r6
movs r1, #0
ldrsh r0, [r6, r1]
movs r1, #0xa
bl __divsi3
adds r0, #0x76
movs r2, #0xa2
lsls r2, r2, #2
adds r1, r4, r2
strh r0, [r1]
adds r5, r4, r5
movs r3, #0
ldrsh r0, [r5, r3]
movs r1, #0xa
bl __divsi3
adds r0, #0x3c
ldr r2, _0803C834 @ =0x0000028A
adds r1, r4, r2
strh r0, [r1]
movs r3, #0
ldrsh r0, [r6, r3]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0xf
adds r0, #0xb8
movs r6, #0xfc
lsls r6, r6, #2
adds r1, r4, r6
strh r0, [r1]
movs r1, #0
ldrsh r0, [r5, r1]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0xf
adds r0, #0x9c
ldr r2, _0803C838 @ =0x000003F2
adds r4, r4, r2
strh r0, [r4]
movs r3, #4
ldrsh r1, [r7, r3]
movs r0, #0x3c
rsbs r0, r0, #0
cmp r1, r0
bge _0803C7B2
ldr r0, _0803C83C @ =0x0000FFC4
strh r0, [r7, #4]
_0803C7B2:
movs r4, #4
ldrsh r0, [r7, r4]
cmp r0, #0xb4
ble _0803C7BE
movs r0, #0xb4
strh r0, [r7, #4]
_0803C7BE:
mov r6, sl
ldr r0, [r6]
ldr r1, _0803C840 @ =0x00000389
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #9
ble _0803C84C
movs r2, #0
ldr r4, _0803C844 @ =gOamBuffer
ldr r3, _0803C848 @ =0xFFFFFE00
mov r8, r3
movs r6, #0xb0
_0803C7DA:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r7, r0
ldrh r2, [r5]
lsls r2, r2, #3
adds r2, r2, r4
ldrh r1, [r2, #2]
mov r0, r8
ands r0, r1
movs r1, #0xf0
orrs r0, r1
strh r0, [r2, #2]
ldrh r0, [r5]
lsls r0, r0, #3
adds r0, r0, r4
movs r1, #0xb4
strb r1, [r0]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r4
ldrb r2, [r1, #5]
movs r0, #0xf
ands r0, r2
orrs r0, r6
strb r0, [r1, #5]
adds r3, #1
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #0x12
ble _0803C7DA
b _0803CA2E
.align 2, 0
_0803C820: .4byte gMain+0x17D0 @gMain.spriteGroups[29]
_0803C824: .4byte gCurrentPinballGame
_0803C828: .4byte gUnknown_086AF140
_0803C82C: .4byte 0x000003E2
_0803C830: .4byte 0x000003EA
_0803C834: .4byte 0x0000028A
_0803C838: .4byte 0x000003F2
_0803C83C: .4byte 0x0000FFC4
_0803C840: .4byte 0x00000389
_0803C844: .4byte gOamBuffer
_0803C848: .4byte 0xFFFFFE00
_0803C84C:
cmp r0, #1
bne _0803C8FC
movs r2, #0
mov r4, r8
lsls r0, r4, #0x10
ldr r6, _0803C8EC @ =gOamBuffer
asrs r1, r0, #0x10
movs r0, #0x72
adds r3, r1, #0
muls r3, r0, r3
mov r8, r3
ldr r4, _0803C8F0 @ =0xFFFFFE00
mov ip, r4
movs r0, #0xe0
mov sb, r0
_0803C86A:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r7, r0
ldrh r0, [r5]
lsls r0, r0, #3
adds r2, r0, r6
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
ldr r1, _0803C8F4 @ =gUnknown_086B65EA
adds r0, r0, r1
mov r4, r8
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
adds r2, r2, r6
ldrh r0, [r2, #2]
lsls r1, r0, #0x17
lsrs r1, r1, #0x17
str r1, [sp]
movs r4, #2
ldrsh r1, [r7, r4]
ldr r0, [sp]
adds r1, r0, r1
ldr r4, _0803C8F8 @ =0x000001FF
ands r1, r4
mov r0, ip
ldrh r4, [r2, #2]
ands r0, r4
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r6
ldrb r0, [r7, #4]
ldrb r2, [r1]
adds r0, r0, r2
strb r0, [r1]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r6
ldrb r2, [r1, #5]
movs r0, #0xf
ands r0, r2
mov r4, sb
orrs r0, r4
strb r0, [r1, #5]
adds r3, #1
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #0x12
ble _0803C86A
b _0803CA2E
.align 2, 0
_0803C8EC: .4byte gOamBuffer
_0803C8F0: .4byte 0xFFFFFE00
_0803C8F4: .4byte gUnknown_086B65EA
_0803C8F8: .4byte 0x000001FF
_0803C8FC:
cmp r0, #3
bne _0803C9AC
movs r2, #0
mov r6, r8
lsls r0, r6, #0x10
ldr r6, _0803C99C @ =gOamBuffer
asrs r1, r0, #0x10
movs r0, #0x72
adds r3, r1, #0
muls r3, r0, r3
mov r8, r3
ldr r4, _0803C9A0 @ =0xFFFFFE00
mov ip, r4
movs r0, #0xb0
mov sb, r0
_0803C91A:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r7, r0
ldrh r0, [r5]
lsls r0, r0, #3
adds r2, r0, r6
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
ldr r1, _0803C9A4 @ =gUnknown_086B65EA
adds r0, r0, r1
mov r4, r8
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
adds r2, r2, r6
ldrh r0, [r2, #2]
lsls r1, r0, #0x17
lsrs r1, r1, #0x17
str r1, [sp]
movs r4, #2
ldrsh r1, [r7, r4]
ldr r0, [sp]
adds r1, r0, r1
ldr r4, _0803C9A8 @ =0x000001FF
ands r1, r4
mov r0, ip
ldrh r4, [r2, #2]
ands r0, r4
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r6
ldrb r0, [r7, #4]
ldrb r2, [r1]
adds r0, r0, r2
strb r0, [r1]
ldrh r1, [r5]
lsls r1, r1, #3
adds r1, r1, r6
ldrb r2, [r1, #5]
movs r0, #0xf
ands r0, r2
mov r4, sb
orrs r0, r4
strb r0, [r1, #5]
adds r3, #1
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #0x12
ble _0803C91A
b _0803CA2E
.align 2, 0
_0803C99C: .4byte gOamBuffer
_0803C9A0: .4byte 0xFFFFFE00
_0803C9A4: .4byte gUnknown_086B65EA
_0803C9A8: .4byte 0x000001FF
_0803C9AC:
movs r2, #0
mov r6, r8
lsls r0, r6, #0x10
ldr r1, _0803CB6C @ =gOamBuffer
mov sb, r1
asrs r1, r0, #0x10
movs r0, #0x72
adds r3, r1, #0
muls r3, r0, r3
mov r8, r3
ldr r4, _0803CB70 @ =0xFFFFFE00
mov ip, r4
_0803C9C4:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r7, r0
ldrh r0, [r5]
lsls r0, r0, #3
mov r6, sb
adds r2, r0, r6
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
ldr r1, _0803CB74 @ =gUnknown_086B65EA
adds r0, r0, r1
mov r4, r8
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, sb
ldrh r4, [r2, #2]
lsls r1, r4, #0x17
lsrs r1, r1, #0x17
movs r6, #2
ldrsh r0, [r7, r6]
adds r1, r1, r0
ldr r6, _0803CB78 @ =0x000001FF
adds r0, r6, #0
ands r1, r0
mov r0, ip
ands r0, r4
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r5]
lsls r1, r1, #3
add r1, sb
ldrb r0, [r7, #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, #0x12
ble _0803C9C4
_0803CA2E:
ldr r7, _0803CB7C @ =gMain+0x1380 @gMain.spriteGroups[23]
ldrh r0, [r7]
cmp r0, #0
bne _0803CA38
b _0803CB98
_0803CA38:
mov r3, sl
ldr r0, [r3]
ldr r4, _0803CB80 @ =0x0000047E
adds r1, r0, r4
ldrb r2, [r1]
movs r0, #0
ldrsb r0, [r1, r0]
cmp r0, #0
ble _0803CA5E
subs r0, r2, #1
strb r0, [r1]
ldr r0, [r3]
adds r0, r0, r4
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bne _0803CA5E
strh r0, [r7]
_0803CA5E:
mov r6, sl
ldr r4, [r6]
ldr r1, _0803CB84 @ =0x0000047D
adds r0, r4, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
lsls r0, r0, #1
adds r1, r0, #1
ldr r2, _0803CB80 @ =0x0000047E
adds r0, r4, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
bge _0803CA80
adds r0, #3
_0803CA80:
asrs r0, r0, #2
subs r0, r1, r0
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r8, r0
movs r3, #0xfa
lsls r3, r3, #2
adds r0, r4, r3
movs r6, #0
ldrsh r0, [r0, r6]
movs r1, #0xa
bl __divsi3
adds r0, #0x64
adds r1, r4, #0
adds r1, #0x58
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r7, #2]
ldr r1, _0803CB88 @ =0x000003EA
adds r0, r4, r1
movs r2, #0
ldrsh r0, [r0, r2]
movs r1, #0xa
bl __divsi3
adds r0, #0x54
adds r1, r4, #0
adds r1, #0x5a
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r7, #4]
movs r2, #0
ldr r3, _0803CB8C @ =gUnknown_086B6512
mov sb, r3
mov r4, r8
lsls r1, r4, #0x10
asrs r1, r1, #0x10
lsls r0, r1, #3
adds r0, r0, r1
lsls r0, r0, #2
mov r8, r0
ldr r6, _0803CB70 @ =0xFFFFFE00
mov ip, r6
_0803CAD8:
lsls r3, r2, #0x10
asrs r3, r3, #0x10
lsls r0, r3, #3
adds r0, #8
adds r5, r7, r0
ldrh r0, [r5]
lsls r0, r0, #3
ldr r1, _0803CB6C @ =gOamBuffer
adds r2, r0, r1
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
add r0, sb
mov r4, r8
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 r6, _0803CB6C @ =gOamBuffer
adds r2, r2, r6
ldrh r4, [r2, #2]
lsls r1, r4, #0x17
lsrs r1, r1, #0x17
movs r6, #2
ldrsh r0, [r7, r6]
adds r1, r1, r0
ldr r6, _0803CB78 @ =0x000001FF
adds r0, r6, #0
ands r1, r0
mov r0, ip
ands r0, r4
orrs r0, r1
strh r0, [r2, #2]
ldrh r1, [r5]
lsls r1, r1, #3
ldr r0, _0803CB6C @ =gOamBuffer
adds r1, r1, r0
ldrb r0, [r7, #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, #5
ble _0803CAD8
mov r3, sl
ldr r0, [r3]
ldr r4, _0803CB90 @ =0x000005A4
adds r0, r0, r4
ldrb r0, [r0]
cmp r0, #2
bne _0803CBAE
ldr r0, _0803CB94 @ =gMain
movs r6, #0x9c
lsls r6, r6, #5
adds r0, r0, r6
movs r2, #0
movs r1, #0
strh r1, [r0]
ldr r0, [r3]
ldr r1, _0803CB80 @ =0x0000047E
adds r0, r0, r1
strb r2, [r0]
b _0803CBAE
.align 2, 0
_0803CB6C: .4byte gOamBuffer
_0803CB70: .4byte 0xFFFFFE00
_0803CB74: .4byte gUnknown_086B65EA
_0803CB78: .4byte 0x000001FF
_0803CB7C: .4byte gMain+0x1380 @gMain.spriteGroups[23]
_0803CB80: .4byte 0x0000047E
_0803CB84: .4byte 0x0000047D
_0803CB88: .4byte 0x000003EA
_0803CB8C: .4byte gUnknown_086B6512
_0803CB90: .4byte 0x000005A4
_0803CB94: .4byte gMain
_0803CB98:
mov r2, sl
ldr r0, [r2]
ldr r3, _0803CBC0 @ =0x0000047E
adds r0, r0, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #8
bne _0803CBAE
movs r0, #1
strh r0, [r7]
_0803CBAE:
add sp, #8
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
_0803CBC0: .4byte 0x0000047E

Binary file not shown.

View File

@ -432,7 +432,7 @@ struct PinballGame
/*0x46C*/ struct Vector16 unk46C[4];
/*0x47C*/ u8 filler47C[0x1];
/*0x47D*/ s8 unk47D;
/*0x47E*/ u8 filler47E[0x1];
/*0x47E*/ s8 unk47E;
/*0x47F*/ s8 unk47F;
/*0x480*/ u16 unk480;
/*0x482*/ u16 unk482;

View File

@ -123,6 +123,8 @@ extern const s16 gUnknown_086AF3B2[];
extern const s16 gUnknown_086AF3BE[];
extern const u16 gUnknown_086AF3C6[];
extern const u16 gUnknown_086B63AA[][2][3];
extern const u16 gUnknown_086B65EA[][19][3];
extern const u16 gUnknown_086B6512[][6][3];
extern const u16 gUnknown_086B63F2[][4][3];
extern const u16 gUnknown_086B8AE0[][10][3];
extern const s16 gUnknown_086AF3AC[];
@ -131,6 +133,7 @@ extern const s8 gUnknown_084A11EC[][0x300];
extern const u16 gUnknown_086AF2DC[][2];
extern const struct Vector16 gUnknown_086AF2CC[];
extern const s16 gUnknown_086AEE20[];
extern const s16 gUnknown_086AF140[][2];
struct Unk_086AFAC0
{
@ -155,6 +158,132 @@ extern u8 gUnknown_0200FBB0[];
extern u8 gUnknown_020030A0[];
void sub_3C6E0(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
u16 *dst;
const u16 *src;
s16 var0;
int palette;
group = &gMain.spriteGroups[29];
if (group->available)
{
var0 = gUnknown_086AF140[gCurrentPinballGame->unk3E2][0];
group->baseX = gCurrentPinballGame->unk3E8 / 10 + 100u - gCurrentPinballGame->unk58;
group->baseY = gCurrentPinballGame->unk3EA / 10 + 84u - gCurrentPinballGame->unk5A;
gCurrentPinballGame->unk288 = gCurrentPinballGame->unk3E8 / 10 + 118;
gCurrentPinballGame->unk28A = gCurrentPinballGame->unk3EA / 10 + 60;
gCurrentPinballGame->unk3F0 = (gCurrentPinballGame->unk3E8 / 10) * 2 + 184;
gCurrentPinballGame->unk3F2 = (gCurrentPinballGame->unk3EA / 10) * 2 + 156;
if (group->baseY < -60)
group->baseY = -60;
if (group->baseY > 180)
group->baseY = 180;
if (gCurrentPinballGame->unk389 > 9)
{
palette = 11;
for (i = 0; i < 19; i++)
{
oamSimple = &group->oam[i];
gOamBuffer[oamSimple->oamId].x = 240;
gOamBuffer[oamSimple->oamId].y = 180;
gOamBuffer[oamSimple->oamId].paletteNum = palette;
}
}
else if (gCurrentPinballGame->unk389 == 1)
{
palette = 14;
for (i = 0; i < 19; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B65EA[var0][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
gOamBuffer[oamSimple->oamId].paletteNum = palette;
}
}
else if (gCurrentPinballGame->unk389 == 3)
{
palette = 11;
for (i = 0; i < 19; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B65EA[var0][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
gOamBuffer[oamSimple->oamId].paletteNum = palette;
}
}
else
{
for (i = 0; i < 19; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B65EA[var0][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
}
}
group = &gMain.spriteGroups[23];
if (group->available)
{
if (gCurrentPinballGame->unk47E > 0)
{
gCurrentPinballGame->unk47E--;
if (gCurrentPinballGame->unk47E == 0)
group->available = 0;
}
var0 = gCurrentPinballGame->unk47D * 2 - (gCurrentPinballGame->unk47E / 4 - 1);
group->baseX = gCurrentPinballGame->unk3E8 / 10 + 100u - gCurrentPinballGame->unk58;
group->baseY = gCurrentPinballGame->unk3EA / 10 + 84u - gCurrentPinballGame->unk5A;
for (i = 0; i < 6; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B6512[var0][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
}
if (gCurrentPinballGame->unk5A4 == 2)
{
gMain.spriteGroups[23].available = 0;
gCurrentPinballGame->unk47E = 0;
}
}
else
{
if (gCurrentPinballGame->unk47E == 8)
group->available = 1;
}
}
void sub_3CBC4(void)
{
s16 i, j;