Decomp sub_1931C (#116)
Some checks failed
CI / build (push) Has been cancelled

* Decomp sub_1931C

* Remove comments

---------

Co-authored-by: Marcus Huderle <huderlem@gmail.com>
This commit is contained in:
Smileynator 2025-06-22 15:39:37 +02:00 committed by GitHub
parent 9f79d92a22
commit 8fae79dd62
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 55 additions and 185 deletions

View File

@ -8654,187 +8654,7 @@ _08018778: .4byte 0x000004B4
_0801877C: .4byte 0x000004B6
_08018780: .4byte 0x000004A4
.section .text1931C
thumb_func_start sub_1931C
sub_1931C: @ 0x0801931C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
str r0, [sp]
ldr r0, _080193BC @ =gCurrentPinballGame
mov r8, r0
ldr r1, [r0]
mov sb, r1
ldr r0, _080193C0 @ =0x000013BC
add r0, sb
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
lsls r0, r0, #3
ldr r2, _080193C4 @ =gUnknown_086ACE8C
adds r7, r0, r2
ldrh r0, [r7]
adds r0, #0x53
lsls r0, r0, #0x10
ldr r3, _080193C8 @ =0xFFFF0000
ldr r2, _080193CC @ =gUnknown_02031520
ldrh r1, [r2, #0x1c]
ldrh r2, [r7, #2]
adds r4, r1, r2
lsls r4, r4, #0x10
ldr r2, _080193D0 @ =0x0000FFFF
lsrs r0, r0, #0x10
mov sl, r0
ldrh r0, [r7, #4]
adds r0, #0x53
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ands r6, r3
orrs r6, r0
ldrh r7, [r7, #6]
adds r1, r1, r7
lsls r1, r1, #0x10
ands r6, r2
orrs r6, r1
asrs r1, r1, #0x10
mov r3, sl
orrs r3, r4
mov sl, r3
asrs r4, r4, #0x10
subs r1, r1, r4
ldr r2, [sp]
lsls r0, r2, #0x10
asrs r0, r0, #0x10
lsls r2, r3, #0x10
asrs r2, r2, #0x10
subs r0, r0, r2
muls r1, r0, r1
lsls r0, r1, #4
subs r0, r0, r1
lsls r0, r0, #1
lsls r1, r6, #0x10
asrs r1, r1, #0x10
subs r1, r1, r2
bl __divsi3
ldr r3, [sp]
asrs r1, r3, #0x10
subs r4, r4, r1
lsls r1, r4, #4
subs r1, r1, r4
lsls r1, r1, #1
adds r0, r0, r1
lsls r0, r0, #0x10
mov r2, r8
ldr r3, _080193C4 @ =gUnknown_086ACE8C
ldr r4, _080193CC @ =gUnknown_02031520
cmp r0, #0
blt _080193D8
ldr r1, _080193D4 @ =0x000013C4
add r1, sb
movs r0, #1
b _080193DE
.align 2, 0
_080193BC: .4byte gCurrentPinballGame
_080193C0: .4byte 0x000013BC
_080193C4: .4byte gUnknown_086ACE8C
_080193C8: .4byte 0xFFFF0000
_080193CC: .4byte gUnknown_02031520
_080193D0: .4byte 0x0000FFFF
_080193D4: .4byte 0x000013C4
_080193D8:
ldr r1, _08019460 @ =0x000013C4
add r1, sb
movs r0, #0xff
_080193DE:
strb r0, [r1]
ldr r2, [r2]
mov r8, r2
ldr r0, _08019464 @ =0x000013C8
add r0, r8
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
lsls r0, r0, #3
adds r7, r0, r3
ldrh r3, [r7]
movs r0, #0x9c
subs r3, r0, r3
ldr r1, _08019468 @ =0xFFFF0000
mov sb, r1
ldrh r2, [r4, #0x1c]
ldrh r1, [r7, #2]
adds r4, r2, r1
lsls r4, r4, #0x10
ldr r5, _0801946C @ =0x0000FFFF
ldrh r1, [r7, #4]
subs r0, r0, r1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r1, sb
ands r6, r1
orrs r6, r0
ldrh r7, [r7, #6]
adds r2, r2, r7
lsls r2, r2, #0x10
ands r6, r5
asrs r2, r2, #0x10
asrs r4, r4, #0x10
subs r2, r2, r4
ldr r1, [sp]
lsls r0, r1, #0x10
asrs r0, r0, #0x10
lsls r3, r3, #0x10
asrs r3, r3, #0x10
subs r0, r0, r3
adds r1, r2, #0
muls r1, r0, r1
lsls r0, r1, #4
subs r0, r0, r1
lsls r0, r0, #1
lsls r1, r6, #0x10
asrs r1, r1, #0x10
subs r1, r1, r3
bl __divsi3
ldr r2, [sp]
asrs r1, r2, #0x10
subs r4, r4, r1
lsls r1, r4, #4
subs r1, r1, r4
lsls r1, r1, #1
adds r0, r0, r1
lsls r0, r0, #0x10
cmp r0, #0
blt _08019474
ldr r1, _08019470 @ =0x000013D0
add r1, r8
movs r0, #1
b _0801947A
.align 2, 0
_08019460: .4byte 0x000013C4
_08019464: .4byte 0x000013C8
_08019468: .4byte 0xFFFF0000
_0801946C: .4byte 0x0000FFFF
_08019470: .4byte 0x000013D0
_08019474:
ldr r1, _0801948C @ =0x000013D0
add r1, r8
movs r0, #0xff
_0801947A:
strb r0, [r1]
add sp, #4
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
_0801948C: .4byte 0x000013D0
.section .text19490
thumb_func_start sub_19490
sub_19490: @ 0x08019490

View File

@ -101,9 +101,12 @@ struct BallState
struct UnkPinballGame13BC
{
/*0x00*/ u8 filler0[0x4];
/*0x00*/ s8 unk0;
/*0x01*/ u8 filler1[0x3];
/*0x04*/ s8 unk4;
/*0x05*/ u8 filler5[0x7];
/*0x05*/ u8 filler5[0x3];
/*0x08*/ s8 unk8;
/*0x09*/ u8 filler9[0x3];
};
struct PinballGame
@ -522,7 +525,9 @@ struct Unk02031520
/*0x0A*/ u8 fillerA[0x2];
/*0x0C*/ struct PinballGame *unkC;
/*0x10*/ struct Unk02031520_unk10 *unk10;
/*0x14*/ u8 filler14[0xc];
/*0x14*/ u8 filler14[0x8];
/*0x1C*/ u16 unk1C;
/*0x1E*/ u8 filler1E[0x2];
/*0x20*/ s16 unk20;
/*0x22*/ s16 unk22;
/*0x24*/ s16 unk24;
@ -540,6 +545,14 @@ struct Unk02031590
u8 unk16;
};
struct Unk086ACE8C
{
u16 unk0;
u16 unk2;
u16 unk4;
u16 unk6;
};
extern struct PinballGame *gCurrentPinballGame;
extern const StateFunc gIdlePinballGameStateFuncs[];
extern u32 gUnknown_02031510;
@ -561,5 +574,6 @@ extern s32 gUnknown_082EE0E0[0x3E0];
extern const u16 gUnknown_08391A4C[0x1000];
extern const u16 gUnknown_08393A4C[0x1000];
extern const s16 gUnknown_086ACDF4[9];
extern struct Unk086ACE8C gUnknown_086ACE8C[13];
#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(.text1931C);
asm/rom_11B9C.o(.text19490);
src/rom_19B64.o(.text);
src/rom_19D04.o(.text);
asm/rom_11B9C.o(.text19E10);

View File

@ -522,4 +522,40 @@ void sub_19304(void)
{
if (gMain.selectedField >= FIELD_BONUS_START)
sub_19734();
}
void sub_1931C(struct Vector16 arg0)
{
s16 check;
struct Unk086ACE8C *line;
struct Vector16 point1, point2;
line = &gUnknown_086ACE8C[gCurrentPinballGame->unk13BC[0].unk0];
point1.x = line->unk0 + 0x53;
point1.y = line->unk2 + gUnknown_02031520.unk1C;
point2.x = line->unk4 + 0x53;
point2.y = line->unk6 + gUnknown_02031520.unk1C;
check = (point2.y - point1.y) * (arg0.x - point1.x) * 30 / (point2.x - point1.x) + (point1.y - arg0.y) * 30;
if (check >= 0)
gCurrentPinballGame->unk13BC[0].unk8 = 1;
else
gCurrentPinballGame->unk13BC[0].unk8 = -1;
line = &gUnknown_086ACE8C[gCurrentPinballGame->unk13BC[1].unk0];
point1.x = 0x9C - line->unk0;
point1.y = line->unk2 + gUnknown_02031520.unk1C;
point2.x = 0x9C - line->unk4;
point2.y = line->unk6 + gUnknown_02031520.unk1C;
check = (point2.y - point1.y) * (arg0.x - point1.x) * 30 / (point2.x - point1.x) + (point1.y - arg0.y) * 30;
if (check >= 0)
gCurrentPinballGame->unk13BC[1].unk8 = 1;
else
gCurrentPinballGame->unk13BC[1].unk8 = -1;
}