From 873b7abfecbfbc62ccc484e5251e807ebb1d563f Mon Sep 17 00:00:00 2001 From: WhenGryphonsFly <84215159+WhenGryphonsFly@users.noreply.github.com> Date: Sat, 28 Jun 2025 17:13:43 -0500 Subject: [PATCH] Decompile sub_13B28 (#124) * Decompile sub_13B28 Co-Authored-By: WhenGryphonsFly <84215159+WhenGryphonsFly@users.noreply.github.com> Co-Authored-By: Marcus Huderle * Update rom_1332C.c --------- Co-authored-by: colecovision <4404252+colecovision@users.noreply.github.com> Co-authored-by: Marcus Huderle --- asm/rom_11B9C.s | 259 -------------------------------------- expected_objs/sub_13B28.o | Bin 2456 -> 0 bytes include/global.h | 7 +- ld_script.txt | 1 - src/rom_1332C.c | 79 ++++++++++++ 5 files changed, 84 insertions(+), 262 deletions(-) delete mode 100644 expected_objs/sub_13B28.o diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index 3a6a676..893d6de 100644 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -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 diff --git a/expected_objs/sub_13B28.o b/expected_objs/sub_13B28.o deleted file mode 100644 index 27ad2d0e8d4c5b5b38831107031d50f1ee457b3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2456 zcma)+UuauZ9LIm>=H_3UZnjI^tp?V##ib(g=FjQ{|B&39+$LQ&!kpEobqNc$v#VQr zt5bwthK{W4p+k|XV;~6DJyobr>qaXI`sDD<5+UNiJ#5eiWg@cpJ5A5+uK{5P4(I#% z{X2i|Id?8QYBI(^GzJmaA%MDf%i~UN4H0OEHrV{;Rr9EsHR~%MEZe4Z1^U-d{OFbj zV0_Kp5pWyQwR2U!tX6#nTj-Lnm^l-I7tFWnk&&+yzZ?l3JiMlWyf@%AG#P>{ls2@W zCuACG$ghM)s)`Mb2M-${rvit~o*=v4AL7iGU_cuGEu4pWU8*Vhc^x*G4b@Z+$Pnnx zcck3L(?PbBu3o}fx^nJRhY`X0xS@?Xb-mLxV|HYl);e{wU_-zBVQdg;@78@en6T&e z)^U@6H5zaiJJcF4J>+8p+t%ixHvlpVx(4^uGG^}tiv{Fx@HC!8BG_CnMDE{az4C(m z2@Do)@6WM`V`c#g85`P_;Hc6A;q=(Pql-PzcVWzzL_QB5c>K~6IRj)*!1Xai4*eR) zzos*nSv zTZQ5D0SqXXi=|0m-6-AZV@IAlo;i{SkK|*1dUbfIUCp)YW&yZBYVo^TSZ>LX@lyjl z<;)_(9%RkQl0iXTBix6&PWTzrcL)!mo+q3_eV6bE>dSFeB?^WJO#?6}F6XAQ{}=%xq~qmeAuG zynL==H8H7cNqF6utyId>R$+3wRGgX`E}kiGd($R*UzvVm`pvhe@!W^fMux|?Scag4 z-?~i&;P1UH)_lWK9H0xoUt6Mi=Q;DYAtjr4S~}Fcd)yAunRm`u#S)HIr8!OrWtGoc z5It42iV!W$%s{kKo{Dl~ERjeU(3Hufra=_{#?hi>RVGWbR(S@?K5Bas1Nl`GHyoF^ ztBGqEMl09iPyK&!2QkL?2yu91&ig?LyxzZJGSo6RV&ng9KlT)M-g4fi=5z2E-no7r zJ4pvsLIY{SXQB=Fa8|f@T(1BeMI0Y#i2}k&Oyp~M7CWDpzjMywOi;qIoBjuP>UFln ORdF9unk123 = 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; + } +}