sub_395D8

This commit is contained in:
Marcus Huderle 2025-08-10 19:42:06 -05:00
parent 1289521541
commit 8f6d9df0cd
3 changed files with 127 additions and 539 deletions

View File

@ -5017,542 +5017,3 @@ _080395C8: .4byte gSpeciesInfo
_080395CC: .4byte 0x00001278
_080395D0: .4byte gMPlayInfo_BGM
_080395D4: .4byte 0x0000FFFF
thumb_func_start sub_395D8
sub_395D8: @ 0x080395D8
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
ldr r7, _08039648 @ =gMain+0x1210 @gMain.spriteGroups[21]
ldrh r0, [r7]
cmp r0, #0
bne _080395EE
b _080398D0
_080395EE:
ldr r1, _0803964C @ =gCurrentPinballGame
ldr r0, [r1]
ldr r2, _08039650 @ =0x000003DF
adds r3, r0, r2
movs r5, #0
ldrsb r5, [r3, r5]
ldr r4, _08039654 @ =gUnknown_086AEAF8
adds r2, #3
adds r0, r0, r2
movs r6, #0
ldrsh r1, [r0, r6]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #1
adds r1, r4, #4
adds r0, r0, r1
ldrh r0, [r0]
strb r0, [r3]
ldr r1, _0803964C @ =gCurrentPinballGame
ldr r0, [r1]
adds r0, r0, r2
movs r2, #0
ldrsh r1, [r0, r2]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #1
adds r0, r0, r4
ldrh r0, [r0]
mov r8, r0
cmp r5, #0xe
bgt _08039668
ldr r2, _08039658 @ =0x040000D4
lsls r0, r5, #1
adds r0, r0, r5
lsls r0, r0, #2
subs r0, r0, r5
lsls r0, r0, #7
ldr r1, _0803965C @ =gUnknown_0849664C
adds r0, r0, r1
str r0, [r2]
ldr r0, _08039660 @ =0x06010FA0
str r0, [r2, #4]
ldr r0, _08039664 @ =0x800002C0
b _08039684
.align 2, 0
_08039648: .4byte gMain+0x1210 @gMain.spriteGroups[21]
_0803964C: .4byte gCurrentPinballGame
_08039650: .4byte 0x000003DF
_08039654: .4byte gUnknown_086AEAF8
_08039658: .4byte 0x040000D4
_0803965C: .4byte gUnknown_0849664C
_08039660: .4byte 0x06010FA0
_08039664: .4byte 0x800002C0
_08039668:
ldr r2, _08039720 @ =0x040000D4
adds r1, r5, #0
subs r1, #0xf
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #2
subs r0, r0, r1
lsls r0, r0, #6
ldr r1, _08039724 @ =gUnknown_0849B8CC
adds r0, r0, r1
str r0, [r2]
ldr r0, _08039728 @ =0x06010FA0
str r0, [r2, #4]
ldr r0, _0803972C @ =0x80000260
_08039684:
str r0, [r2, #8]
ldr r0, [r2, #8]
ldr r3, _08039730 @ =gCurrentPinballGame
ldr r4, [r3]
movs r6, #0xfa
lsls r6, r6, #2
adds r5, r4, r6
movs r1, #0
ldrsh r0, [r5, r1]
movs r1, #0xa
bl __divsi3
adds r0, #0x48
adds r1, r4, #0
adds r1, #0x58
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r7, #2]
ldr r2, _08039734 @ =0x000003EA
adds r6, r4, r2
movs r3, #0
ldrsh r0, [r6, r3]
movs r1, #0xa
bl __divsi3
adds r0, #0x42
adds r1, r4, #0
adds r1, #0x5a
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r7, #4]
movs r1, #0
ldrsh r0, [r5, r1]
movs r1, #0xa
bl __divsi3
adds r0, #0x78
movs r2, #0xa2
lsls r2, r2, #2
adds r1, r4, r2
strh r0, [r1]
movs r3, #0
ldrsh r0, [r6, r3]
movs r1, #0xa
bl __divsi3
adds r0, #0x32
ldr r2, _08039738 @ =0x0000028A
adds r1, r4, r2
strh r0, [r1]
ldr r3, _0803973C @ =0x00000387
adds r0, r4, r3
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #2
bne _08039740
movs r1, #0
ldrsh r0, [r5, r1]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0xf
adds r0, #0xc0
movs r2, #0xfc
lsls r2, r2, #2
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, #0x86
b _08039796
.align 2, 0
_08039720: .4byte 0x040000D4
_08039724: .4byte gUnknown_0849B8CC
_08039728: .4byte 0x06010FA0
_0803972C: .4byte 0x80000260
_08039730: .4byte gCurrentPinballGame
_08039734: .4byte 0x000003EA
_08039738: .4byte 0x0000028A
_0803973C: .4byte 0x00000387
_08039740:
cmp r0, #3
bne _0803976E
movs r1, #0
ldrsh r0, [r5, r1]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0xf
adds r0, #0xc0
movs r2, #0xfc
lsls r2, r2, #2
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, #0x96
b _08039796
_0803976E:
movs r1, #0
ldrsh r0, [r5, r1]
movs r1, #0xa
bl __divsi3
lsls r0, r0, #0x10
asrs r0, r0, #0xf
adds r0, #0xb4
movs r2, #0xfc
lsls r2, r2, #2
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, #0x74
_08039796:
ldr r6, _080397FC @ =0x000003F2
adds r1, r4, r6
strh r0, [r1]
ldr r1, _08039800 @ =gCurrentPinballGame
ldr r0, [r1]
ldr r2, _08039804 @ =0x00000389
adds r0, r0, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #9
ble _08039810
movs r2, #0
ldr r4, _08039808 @ =gOamBuffer
ldr r3, _0803980C @ =0xFFFFFE00
mov r8, r3
movs r6, #0xb0
_080397B8:
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, #9
ble _080397B8
b _080398D0
.align 2, 0
_080397FC: .4byte 0x000003F2
_08039800: .4byte gCurrentPinballGame
_08039804: .4byte 0x00000389
_08039808: .4byte gOamBuffer
_0803980C: .4byte 0xFFFFFE00
_08039810:
cmp r0, #1
bne _0803981C
movs r3, #0xe
mov r4, r8
lsls r0, r4, #0x10
b _0803983C
_0803981C:
cmp r0, #3
bne _08039828
movs r3, #0xb
mov r6, r8
lsls r0, r6, #0x10
b _0803983C
_08039828:
mov r1, r8
lsls r0, r1, #0x10
asrs r1, r0, #0x10
movs r3, #4
cmp r1, #0x14
beq _0803983C
movs r3, #0xf
cmp r1, #0x15
bne _0803983C
movs r3, #3
_0803983C:
movs r2, #0
lsls r3, r3, #4
mov r8, r3
ldr r3, _080399BC @ =gUnknown_086B92FC
mov sl, r3
ldr r6, _080399C0 @ =gOamBuffer
asrs r1, r0, #0x10
lsls r0, r1, #4
subs r0, r0, r1
lsls r0, r0, #2
mov ip, r0
ldr r4, _080399C4 @ =0xFFFFFE00
mov sb, r4
_08039856:
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, r6
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #1
add r0, sl
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, [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, _080399C8 @ =0x000001FF
ands r1, r4
mov r0, sb
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, r8
orrs r0, r4
strb r0, [r1, #5]
adds r3, #1
lsls r3, r3, #0x10
lsrs r2, r3, #0x10
asrs r3, r3, #0x10
cmp r3, #9
ble _08039856
_080398D0:
ldr r7, _080399CC @ =gMain+0x15A8 @gMain.spriteGroups[26]
ldrh r0, [r7]
cmp r0, #0
bne _080398DA
b _08039A08
_080398DA:
ldr r6, _080399D0 @ =gCurrentPinballGame
ldr r4, [r6]
movs r1, #0xfa
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, #0x6c
subs r0, r0, r1
strh r0, [r7, #2]
ldr r4, [r6]
ldr r3, _080399D4 @ =0x000003EA
adds r0, r4, r3
movs r6, #0
ldrsh r0, [r0, r6]
movs r1, #0xa
bl __divsi3
adds r4, #0x5a
ldrh r1, [r4]
subs r1, #0x52
subs r0, r0, r1
strh r0, [r7, #4]
lsls r0, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #0xc7
ble _0803991E
movs r0, #0xc8
strh r0, [r7, #4]
_0803991E:
ldr r4, _080399D8 @ =gUnknown_086AEDCC
ldr r1, _080399D0 @ =gCurrentPinballGame
ldr r0, [r1]
ldr r2, _080399DC @ =0x00000456
adds r0, r0, r2
ldrh r0, [r0]
movs r1, #0x54
bl __umodsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r1, #6
bl __udivsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0xf
adds r0, r0, r4
ldr r2, _080399E0 @ =0x040000D4
movs r3, #0
ldrsh r1, [r0, r3]
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #6
ldr r1, _080399E4 @ =gUnknown_083C13AC
adds r0, r0, r1
str r0, [r2]
ldr r0, _080399E8 @ =0x06012420
str r0, [r2, #4]
ldr r0, _080399EC @ =0x80000060
str r0, [r2, #8]
ldr r0, [r2, #8]
movs r2, #0
ldr r6, _080399C0 @ =gOamBuffer
ldr r4, _080399C4 @ =0xFFFFFE00
mov r8, r4
_08039964:
lsls r4, r2, #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 r0, #2
ldrsh r1, [r5, r0]
movs r2, #2
ldrsh r0, [r7, r2]
adds r1, r1, r0
ldr r2, _080399C8 @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r3, #2]
mov r0, r8
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 r2, r4, #0x10
asrs r4, r4, #0x10
cmp r4, #1
ble _08039964
ldr r3, _080399D0 @ =gCurrentPinballGame
ldr r0, [r3]
ldr r6, _080399DC @ =0x00000456
adds r4, r0, r6
ldrh r0, [r4]
cmp r0, #0x52
bhi _080399F0
adds r0, #1
strh r0, [r4]
b _08039A2C
.align 2, 0
_080399BC: .4byte gUnknown_086B92FC
_080399C0: .4byte gOamBuffer
_080399C4: .4byte 0xFFFFFE00
_080399C8: .4byte 0x000001FF
_080399CC: .4byte gMain+0x15A8 @gMain.spriteGroups[26]
_080399D0: .4byte gCurrentPinballGame
_080399D4: .4byte 0x000003EA
_080399D8: .4byte gUnknown_086AEDCC
_080399DC: .4byte 0x00000456
_080399E0: .4byte 0x040000D4
_080399E4: .4byte gUnknown_083C13AC
_080399E8: .4byte 0x06012420
_080399EC: .4byte 0x80000060
_080399F0:
movs r1, #0
strh r1, [r4]
ldr r0, _08039A00 @ =gMain
ldr r2, _08039A04 @ =0x000015A8
adds r0, r0, r2
strh r1, [r0]
b _08039A2C
.align 2, 0
_08039A00: .4byte gMain
_08039A04: .4byte 0x000015A8
_08039A08:
ldr r3, _08039A3C @ =gCurrentPinballGame
ldr r1, [r3]
movs r4, #0xf7
lsls r4, r4, #2
adds r0, r1, r4
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0xb
bne _08039A2C
movs r6, #0xf9
lsls r6, r6, #2
adds r0, r1, r6
ldrh r0, [r0]
cmp r0, #0xda
bne _08039A2C
movs r0, #1
strh r0, [r7]
_08039A2C:
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
_08039A3C: .4byte gCurrentPinballGame

Binary file not shown.

View File

@ -124,6 +124,7 @@ extern const u16 gUnknown_086AF3C6[];
extern const u16 gUnknown_086B63AA[][2][3];
extern const u16 gUnknown_086B65EA[][19][3];
extern const u16 gUnknown_086B91AC[][4][3];
extern const u16 gUnknown_086B92FC[][10][3];
extern const u16 gUnknown_086B6512[][6][3];
extern const u16 gUnknown_086B63F2[][4][3];
extern const u16 gUnknown_086B8AE0[][10][3];
@ -150,6 +151,11 @@ extern const s16 gUnknown_086AEE5E[][3];
extern const u8 gUnknown_083C1A6C[][0x3C0];
extern const struct Vector16 gUnknown_086AEDE8[];
extern const u8 gUnknown_084FF90C[][0x200];
extern const s16 gUnknown_086AEAF8[][3];
extern const u8 gUnknown_0849664C[][0x580];
extern const u8 gUnknown_0849B8CC[][0x4C0];
extern const s16 gUnknown_086AEDCC[];
extern const u8 gUnknown_083C13AC[][0xC0];
struct Unk_086AFAC0
{
@ -178,6 +184,127 @@ extern u8 gUnknown_0200FBB0[];
extern u8 gUnknown_020030A0[];
void sub_395D8(void)
{
s16 i;
struct SpriteGroup *group;
struct OamDataSimple *oamSimple;
u16 *dst;
const u16 *src;
s16 var2;
s16 index;
s16 palette;
group = &gMain.spriteGroups[21];
if (group->available)
{
index = gCurrentPinballGame->unk3DF;
gCurrentPinballGame->unk3DF = gUnknown_086AEAF8[gCurrentPinballGame->unk3E2][2];
var2 = gUnknown_086AEAF8[gCurrentPinballGame->unk3E2][0];
if (index < 15)
{
DmaCopy16(3, gUnknown_0849664C[index], (void *)0x06010FA0, 0x580);
}
else
{
index -= 15;
DmaCopy16(3, gUnknown_0849B8CC[index], (void *)0x06010FA0, 0x4C0);
}
group->baseX = gCurrentPinballGame->unk3E8 / 10 + 72u - gCurrentPinballGame->unk58;
group->baseY = gCurrentPinballGame->unk3EA / 10 + 66u - gCurrentPinballGame->unk5A;
gCurrentPinballGame->unk288 = gCurrentPinballGame->unk3E8 / 10 + 120;
gCurrentPinballGame->unk28A = gCurrentPinballGame->unk3EA / 10 + 50;
if (gCurrentPinballGame->unk387 == 2)
{
gCurrentPinballGame->unk3F0 = (gCurrentPinballGame->unk3E8 / 10) * 2 + 192;
gCurrentPinballGame->unk3F2 = (gCurrentPinballGame->unk3EA / 10) * 2 + 134;
}
else if (gCurrentPinballGame->unk387 == 3)
{
gCurrentPinballGame->unk3F0 = (gCurrentPinballGame->unk3E8 / 10) * 2 + 192;
gCurrentPinballGame->unk3F2 = (gCurrentPinballGame->unk3EA / 10) * 2 + 150;
}
else
{
gCurrentPinballGame->unk3F0 = (gCurrentPinballGame->unk3E8 / 10) * 2 + 180;
gCurrentPinballGame->unk3F2 = (gCurrentPinballGame->unk3EA / 10) * 2 + 116;
}
if (gCurrentPinballGame->unk389 > 9)
{
palette = 11;
for (i = 0; i < 10; 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;
else if (gCurrentPinballGame->unk389 == 3)
palette = 11;
else if (var2 == 20)
palette = 4;
else if (var2 == 21)
palette = 3;
else
palette = 15;
for (i = 0; i < 10; i++)
{
oamSimple = &group->oam[i];
dst = (u16*)&gOamBuffer[oamSimple->oamId];
src = gUnknown_086B92FC[var2][i];
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;
gOamBuffer[oamSimple->oamId].x += group->baseX;
gOamBuffer[oamSimple->oamId].y += group->baseY;
gOamBuffer[oamSimple->oamId].paletteNum = palette;
}
}
}
group = &gMain.spriteGroups[26];
if (group->available)
{
group->baseX = gCurrentPinballGame->unk3E8 / 10 + 108 - gCurrentPinballGame->unk58;
group->baseY = gCurrentPinballGame->unk3EA / 10 + 82 - gCurrentPinballGame->unk5A;
if (group->baseY >= 200)
group->baseY = 200;
index = gUnknown_086AEDCC[(gCurrentPinballGame->unk456 % 84) / 6];
DmaCopy16(3, gUnknown_083C13AC[index], (void *)0x06012420, 0xC0);
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;
}
if (gCurrentPinballGame->unk456 < 83)
{
gCurrentPinballGame->unk456++;
}
else
{
gCurrentPinballGame->unk456 = 0;
gMain.spriteGroups[26].available = 0;
}
}
else
{
if (gCurrentPinballGame->unk3DC == 11 && gCurrentPinballGame->unk3E4 == 218)
group->available = 1;
}
}
void sub_39A40(void)
{
s16 i, j;