Decompile sub_13B28 (#124)
Some checks failed
CI / build (push) Has been cancelled

* Decompile sub_13B28

Co-Authored-By: WhenGryphonsFly <84215159+WhenGryphonsFly@users.noreply.github.com>
Co-Authored-By: Marcus Huderle <huderlem@gmail.com>

* Update rom_1332C.c

---------

Co-authored-by: colecovision <4404252+colecovision@users.noreply.github.com>
Co-authored-by: Marcus Huderle <huderlem@gmail.com>
This commit is contained in:
WhenGryphonsFly 2025-06-28 17:13:43 -05:00 committed by GitHub
parent 88d9ab43bc
commit 873b7abfec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 84 additions and 262 deletions

View File

@ -4,265 +4,6 @@
.syntax unified
.text
.section .text1333C
thumb_func_start sub_13B28
sub_13B28: @ 0x08013B28
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x14
mov r8, r0
str r1, [sp, #8]
movs r3, #0
ldrsh r1, [r0, r3]
lsls r1, r1, #0x17
movs r4, #2
ldrsh r0, [r0, r4]
lsls r0, r0, #0x17
lsrs r5, r1, #0x10
orrs r5, r0
ldr r6, [sp, #8]
ldrh r1, [r6, #2]
lsls r1, r1, #0x10
ldrh r0, [r6]
orrs r0, r1
str r0, [sp, #4]
lsls r2, r2, #0x10
mov sb, r2
mov r0, sb
asrs r0, r0, #0x10
mov sl, r0
b _08013C4E
_08013B60:
ldr r2, _08013C04 @ =0xFFFFF500
adds r1, r5, r2
lsls r1, r1, #0x10
asrs r0, r5, #0x10
ldr r3, _08013C08 @ =0xFFFFE800
adds r0, r0, r3
lsls r0, r0, #0x10
lsrs r7, r1, #0x10
orrs r7, r0
lsls r0, r7, #0x10
asrs r0, r0, #0x10
adds r1, r0, #0
muls r1, r0, r1
asrs r0, r7, #0x10
adds r6, r0, #0
muls r6, r0, r6
adds r0, r6, #0
adds r1, r1, r0
ldr r2, _08013C0C @ =0xFFDC0000
adds r0, r1, r2
lsls r0, r0, #2
bl Sqrt
lsls r0, r0, #0x10
lsrs r0, r0, #0x11
mov r3, sb
asrs r1, r3, #0x10
add r2, sp, #4
adds r3, r4, #0
bl sub_14B84
add r0, sp, #4
movs r4, #0
ldrsh r2, [r0, r4]
movs r1, #0xe1
lsls r1, r1, #1
cmp r2, r1
bgt _08013BB2
ldr r1, _08013C10 @ =0xFFFFFE3E
cmp r2, r1
bge _08013BB4
_08013BB2:
strh r1, [r0]
_08013BB4:
ldrh r0, [r0]
adds r0, r0, r5
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, _08013C14 @ =0xFFFF0000
ands r5, r1
orrs r5, r0
asrs r2, r5, #0x10
add r0, sp, #4
ldrh r1, [r0, #2]
adds r1, r1, r2
lsls r1, r1, #0x10
ldr r0, _08013C18 @ =0x0000FFFF
ands r5, r0
orrs r5, r1
lsls r0, r5, #0x10
asrs r0, r0, #0x10
cmp r0, #0
bge _08013BDC
adds r0, #0x7f
_08013BDC:
asrs r1, r0, #7
mov r6, r8
strh r1, [r6]
asrs r0, r5, #0x10
cmp r0, #0
bge _08013BEA
adds r0, #0x7f
_08013BEA:
asrs r0, r0, #7
mov r2, r8
strh r0, [r2, #2]
movs r3, #0
str r3, [sp, #0x10]
cmp r1, #0x31
bgt _08013BFA
b _08013CF0
_08013BFA:
ldr r0, _08013C1C @ =gCurrentPinballGame
ldr r0, [r0]
ldrb r0, [r0, #0x1e]
b _08013C22
.align 2, 0
_08013C04: .4byte 0xFFFFF500
_08013C08: .4byte 0xFFFFE800
_08013C0C: .4byte 0xFFDC0000
_08013C10: .4byte 0xFFFFFE3E
_08013C14: .4byte 0xFFFF0000
_08013C18: .4byte 0x0000FFFF
_08013C1C: .4byte gCurrentPinballGame
_08013C20:
lsrs r0, r4, #0x10
_08013C22:
lsls r0, r0, #0x10
asrs r1, r0, #0x10
cmp r1, #3
bgt _08013C48
mov r4, r8
ldr r0, [r4]
adds r1, #1
lsls r4, r1, #0x10
asrs r1, r4, #0x10
mov r2, sp
mov r6, sb
asrs r3, r6, #0x10
bl sub_14AF4
lsls r0, r0, #0x10
cmp r0, #0
beq _08013C20
movs r0, #1
str r0, [sp, #0x10]
_08013C48:
ldr r1, [sp, #0x10]
cmp r1, #0
beq _08013CF0
_08013C4E:
ldr r0, _08013CAC @ =gCurrentPinballGame
ldr r1, [r0]
mov r2, sl
lsls r0, r2, #1
add r0, sl
lsls r0, r0, #2
adds r3, r1, r0
ldr r4, _08013CB0 @ =0x000013BC
adds r0, r3, r4
movs r1, #0
ldrsb r1, [r0, r1]
ldr r6, _08013CB4 @ =0x000013BD
adds r0, r3, r6
movs r2, #0
ldrsb r2, [r0, r2]
adds r4, #8
adds r0, r3, r4
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
subs r1, r1, r2
muls r0, r1, r0
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
str r6, [sp, #0xc]
cmp r0, #0
ble _08013CF0
ldr r1, _08013CB8 @ =0x000013BE
adds r0, r3, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #6
bgt _08013CC4
ldr r2, _08013CBC @ =0x000013C1
adds r0, r3, r2
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
subs r0, #1
lsls r0, r0, #2
ldr r3, _08013CC0 @ =gUnknown_086ACD84
adds r0, r0, r3
movs r4, #0x80
lsls r4, r4, #7
adds r1, r4, #0
b _08013CDC
.align 2, 0
_08013CAC: .4byte gCurrentPinballGame
_08013CB0: .4byte 0x000013BC
_08013CB4: .4byte 0x000013BD
_08013CB8: .4byte 0x000013BE
_08013CBC: .4byte 0x000013C1
_08013CC0: .4byte gUnknown_086ACD84
_08013CC4:
ldr r6, _08013CE8 @ =0x000013C1
adds r0, r3, r6
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
adds r0, #1
lsls r0, r0, #2
ldr r1, _08013CEC @ =gUnknown_086ACD86
adds r0, r0, r1
movs r2, #0xc0
lsls r2, r2, #8
adds r1, r2, #0
_08013CDC:
ldrh r0, [r0]
adds r1, r1, r0
lsls r1, r1, #0x10
lsrs r4, r1, #0x10
b _08013B60
.align 2, 0
_08013CE8: .4byte 0x000013C1
_08013CEC: .4byte gUnknown_086ACD86
_08013CF0:
ldr r3, [sp, #0xc]
lsls r0, r3, #0x10
cmp r0, #0
bgt _08013D08
ldr r0, _08013D04 @ =gCurrentPinballGame
ldr r0, [r0]
adds r0, #0x22
movs r1, #5
strb r1, [r0]
b _08013D14
.align 2, 0
_08013D04: .4byte gCurrentPinballGame
_08013D08:
add r0, sp, #4
ldrh r1, [r0]
ldr r4, [sp, #8]
strh r1, [r4]
ldrh r0, [r0, #2]
strh r0, [r4, #2]
_08013D14:
add sp, #0x14
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.section .text14488
thumb_func_start sub_14488

Binary file not shown.

View File

@ -102,9 +102,12 @@ struct BallState
struct UnkPinballGame13BC
{
/*0x00*/ s8 unk0;
/*0x01*/ u8 filler1[0x3];
/*0x01*/ s8 unk1;
/*0x02*/ s8 unk2;
/*0x03*/ s8 filler3[0x1];
/*0x04*/ s8 unk4;
/*0x05*/ u8 filler5[0x3];
/*0x05*/ s8 unk5;
/*0x05*/ u8 filler6[0x2];
/*0x08*/ s8 unk8;
/*0x09*/ u8 filler9[0x3];
};

View File

@ -45,7 +45,6 @@ SECTIONS
src/titlescreen.o(.text);
src/rom_11B9C.o(.text);
src/rom_1332C.o(.text);
asm/rom_11B9C.o(.text1333C);
src/rom_13D24.o(.text);
asm/rom_11B9C.o(.text14488);
src/rom_17634.o(.text);

View File

@ -1,11 +1,14 @@
#include "global.h"
extern u16 gUnknown_086ACD84[][2];
u16 sub_13824(struct Vector16*);
void sub_13D24(u16,struct Vector16*, struct Vector16*);
void sub_13934(struct Vector16 *arg0, struct Vector16 *arg1, u16 angle);
void sub_1493C(void);
u16 sub_14488(struct Vector16*, struct Vector16);
u16 sub_14AF4(struct Vector16 r0, s16 r1, s16 *r2 /* s16 or u16 */, s16 r3);
void sub_14B84(u32 r0, s16 r1, struct Vector16 *r2, u16 r3);
void sub_1332C()
{
@ -249,3 +252,79 @@ void sub_13934(struct Vector16 *arg0, struct Vector16 *arg1, u16 angle)
gCurrentPinballGame->unk123 = 0;
}
}
void sub_13B28(struct Vector16* arg0, struct Vector16* arg1, s16 arg2)
{
struct Vector16 r7;
u16 r4;
s16 sp0;
s16 sp12;
bool32 flag;
s16 i;
int temp;
int xx, yy;
struct Vector16 r5 = { arg0->x * 128, arg0->y * 128 };
struct Vector16 sp4 = { arg1->x, arg1->y };
for (;;)
{
sp12 = gCurrentPinballGame->unk13BC[arg2].unk0 - gCurrentPinballGame->unk13BC[arg2].unk1;
if ((sp12 *= gCurrentPinballGame->unk13BC[arg2].unk8) > 0)
{
if (gCurrentPinballGame->unk13BC[arg2].unk2 < 7)
r4 = gUnknown_086ACD84[gCurrentPinballGame->unk13BC[arg2].unk5 - 1][0] + 0x4000;
else
r4 = gUnknown_086ACD84[gCurrentPinballGame->unk13BC[arg2].unk5 + 1][1] + -0x4000; // This changes compilation, apparently
}
else
{
break;
}
r7.x = r5.x - 22 * 128;
r7.y = r5.y - 48 * 128;
xx = r7.x * r7.x;
yy = r7.y * r7.y;
temp = xx + yy - 0x240000;
temp = Sqrt(temp * 4) / 2;
sub_14B84(temp, arg2, &sp4, r4);
if (sp4.x > 0x1C2)
sp4.x = 0x1C2;
else if (sp4.x < -0x1C2)
sp4.x = -0x1C2;
r5.x += sp4.x;
r5.y += sp4.y;
arg0->x = r5.x / 128;
arg0->y = r5.y / 128;
flag = FALSE;
if (arg0->x < 50)
break;
for (i = gCurrentPinballGame->unk1E; i < 4; i++)
{
if (sub_14AF4(*arg0, i + 1, &sp0, arg2))
{
flag = TRUE;
break;
}
}
if (!flag)
break;
}
if (sp12 <= 0)
{
gCurrentPinballGame->unk22 = 5;
}
else
{
arg1->x = sp4.x;
arg1->y = sp4.y;
}
}