Decompile sub_19490 (#119)
Some checks are pending
CI / build (push) Waiting to run

* Fixed wrong DmaCopy in sub_93F8

* Decompile sub_19490

* Removed expected_obj

* Added sane tile mapping constants instead of magic values.

* cleanup

---------

Co-authored-by: Marcus Huderle <huderlem@gmail.com>
This commit is contained in:
Smileynator 2025-06-28 01:56:03 +02:00 committed by GitHub
parent a99816b8d5
commit e6ffbd8312
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 40 additions and 151 deletions

View File

@ -8654,155 +8654,7 @@ _08018778: .4byte 0x000004B4
_0801877C: .4byte 0x000004B6
_08018780: .4byte 0x000004A4
.section .text19490
thumb_func_start sub_19490
sub_19490: @ 0x08019490
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
ldr r4, _080194DC @ =gMain
ldrb r1, [r4, #0xf]
movs r0, #1
ands r0, r1
cmp r0, #0
bne _080194A8
bl sub_195C4
_080194A8:
movs r3, #0
ldr r0, _080194E0 @ =gCurrentPinballGame
mov r8, r0
ldr r1, _080194E4 @ =0x00000A28
adds r1, r1, r4
mov sb, r1
ldr r7, _080194E8 @ =0x040000D4
ldr r2, _080194EC @ =gOamBuffer
mov ip, r2
_080194BA:
mov r0, r8
ldr r2, [r0]
lsls r3, r3, #0x10
asrs r1, r3, #0x10
lsls r0, r1, #1
adds r0, r0, r1
lsls r0, r0, #2
adds r2, r2, r0
ldr r1, _080194F0 @ =0x000013BC
adds r2, r2, r1
movs r0, #0
ldrsb r0, [r2, r0]
cmp r0, #0xa
ble _080194F4
movs r0, #0xa
b _080194FA
.align 2, 0
_080194DC: .4byte gMain
_080194E0: .4byte gCurrentPinballGame
_080194E4: .4byte 0x00000A28
_080194E8: .4byte 0x040000D4
_080194EC: .4byte gOamBuffer
_080194F0: .4byte 0x000013BC
_080194F4:
cmp r0, #0
bge _080194FC
movs r0, #0
_080194FA:
strb r0, [r2]
_080194FC:
asrs r6, r3, #0x10
movs r0, #0xb8
muls r0, r6, r0
mov r2, sb
adds r5, r0, r2
ldrh r0, [r5]
cmp r0, #0
beq _0801958A
mov r0, r8
ldr r4, [r0]
lsls r3, r6, #1
adds r0, r3, r6
lsls r0, r0, #2
adds r0, r4, r0
ldr r1, _080195A4 @ =0x000013BC
adds r0, r0, r1
movs r2, #0
ldrsb r2, [r0, r2]
lsrs r0, r2, #0x1f
adds r2, r2, r0
ldr r0, _080195A8 @ =gUnknown_086ACEF4
adds r3, r3, r0
adds r1, r4, #0
adds r1, #0x58
ldrh r0, [r3]
ldrh r1, [r1]
subs r0, r0, r1
strh r0, [r5, #2]
ldr r0, _080195AC @ =gUnknown_02031520
adds r4, #0x5a
ldrh r0, [r0, #0x1c]
ldrh r1, [r4]
subs r0, r0, r1
strh r0, [r5, #4]
asrs r2, r2, #1
lsls r2, r2, #9
ldr r0, _080195B0 @ =gUnknown_083FE44C
adds r2, r2, r0
str r2, [r7]
lsls r0, r6, #9
ldr r2, _080195B4 @ =0x06010000
adds r0, r0, r2
str r0, [r7, #4]
ldr r0, _080195B8 @ =0x80000100
str r0, [r7, #8]
ldr r0, [r7, #8]
adds r4, r5, #0
adds r4, #8
ldrh r3, [r5, #8]
lsls r3, r3, #3
add r3, ip
movs r0, #2
ldrsh r1, [r4, r0]
movs r2, #2
ldrsh r0, [r5, r2]
adds r1, r1, r0
ldr r2, _080195BC @ =0x000001FF
adds r0, r2, #0
ands r1, r0
ldrh r2, [r3, #2]
ldr r0, _080195C0 @ =0xFFFFFE00
ands r0, r2
orrs r0, r1
strh r0, [r3, #2]
ldrh r1, [r5, #8]
lsls r1, r1, #3
add r1, ip
ldrb r0, [r5, #4]
ldrb r4, [r4, #4]
adds r0, r0, r4
strb r0, [r1]
_0801958A:
adds r0, r6, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #1
ble _080194BA
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_080195A4: .4byte 0x000013BC
_080195A8: .4byte gUnknown_086ACEF4
_080195AC: .4byte gUnknown_02031520
_080195B0: .4byte gUnknown_083FE44C
_080195B4: .4byte 0x06010000
_080195B8: .4byte 0x80000100
_080195BC: .4byte 0x000001FF
_080195C0: .4byte 0xFFFFFE00
.section .text195C4
thumb_func_start sub_195C4
sub_195C4: @ 0x080195C4

Binary file not shown.

View File

@ -417,7 +417,7 @@ extern void sub_19288();//gMain.subState = 3
//extern ? sub_19304();
//extern ? sub_1931C();
//extern ? sub_19490();
//extern ? sub_195C4();
extern void sub_195C4(void);
extern void sub_19734();
//extern ? sub_19894();
//extern ? sub_19A20();

View File

@ -574,7 +574,9 @@ extern s32 gUnknown_081B36A4[64];
extern s32 gUnknown_082EE0E0[0x3E0];
extern const u16 gUnknown_08391A4C[0x1000];
extern const u16 gUnknown_08393A4C[0x1000];
extern u8 gUnknown_083FE44C[][0x200];
extern const s16 gUnknown_086ACDF4[9];
extern struct Unk086ACE8C gUnknown_086ACE8C[13];
extern u16 gUnknown_086ACEF4[2];
#endif // GUARD_GLOBAL_H

View File

@ -51,7 +51,7 @@ SECTIONS
src/rom_17634.o(.text);
asm/rom_11B9C.o(.text176B0);
src/rom_18784.o(.text);
asm/rom_11B9C.o(.text19490);
asm/rom_11B9C.o(.text195C4);
src/rom_19B64.o(.text);
src/rom_19D04.o(.text);
asm/rom_11B9C.o(.text19E10);

View File

@ -558,4 +558,39 @@ void sub_1931C(struct Vector16 arg0)
gCurrentPinballGame->unk13BC[1].unk8 = 1;
else
gCurrentPinballGame->unk13BC[1].unk8 = -1;
}
void sub_19490(void)
{
s16 i;
if ((gMain.unkF & 1) == 0)
sub_195C4();
for (i = 0; i < 2; i++)
{
struct SpriteGroup *spriteGroup;
if (gCurrentPinballGame->unk13BC[i].unk0 > 10)
gCurrentPinballGame->unk13BC[i].unk0 = 10;
else if (gCurrentPinballGame->unk13BC[i].unk0 < 0)
gCurrentPinballGame->unk13BC[i].unk0 = 0;
spriteGroup = &gMain.spriteGroups[10 + i];
if (spriteGroup->available)
{
s8 unk0Signed;
struct OamDataSimple *oamData;
unk0Signed = gCurrentPinballGame->unk13BC[i].unk0 / 2;
spriteGroup->baseX = gUnknown_086ACEF4[i] - gCurrentPinballGame->unk58;
spriteGroup->baseY = gUnknown_02031520.unk1C - gCurrentPinballGame->unk5A;
DmaCopy16(3, gUnknown_083FE44C[unk0Signed], OBJ_VRAM0 + i * 0x200, 0x200);
oamData = &spriteGroup->oam[0];
gOamBuffer[oamData->oamId].x = oamData->xOffset + spriteGroup->baseX;
gOamBuffer[oamData->oamId].y = oamData->yOffset + spriteGroup->baseY;
}
}
}