From 605ef7de2674a69222f5fa62090b2b0bb7fb3d31 Mon Sep 17 00:00:00 2001 From: Smileynator Date: Sun, 27 Jul 2025 21:45:20 +0200 Subject: [PATCH] Decomp sub_17C1C (#139) * Updated all global values and the changes the resulting refactor. * decomp sub_17C1C * removed expected objects --- asm/rom_11B9C.s | 402 +------------------------------------- expected_objs/sub_179D0.o | Bin 3124 -> 0 bytes expected_objs/sub_17C1C.o | Bin 3324 -> 0 bytes include/global.h | 9 +- ld_script.txt | 2 +- src/rom_17634.c | 151 ++++++++++++++ src/rom_356A0.c | 6 +- 7 files changed, 162 insertions(+), 408 deletions(-) delete mode 100644 expected_objs/sub_179D0.o delete mode 100644 expected_objs/sub_17C1C.o diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s index 2514a20..10616fe 100644 --- a/asm/rom_11B9C.s +++ b/asm/rom_11B9C.s @@ -5914,407 +5914,7 @@ _08017628: .4byte 0x000003AB _0801762C: .4byte 0x000003DA _08017630: .4byte 0x000003A2 - .section .text17C1C - - thumb_func_start sub_17C1C -sub_17C1C: @ 0x08017C1C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r3, r0, #0 - ldr r0, _08017CF8 @ =gCurrentPinballGame - ldr r1, [r0] - movs r2, #0xfe - lsls r2, r2, #2 - adds r1, r1, r2 - movs r2, #1 - strb r2, [r1] - movs r1, #0 - ldrsh r4, [r3, r1] - adds r1, r4, #0 - mov ip, r0 - cmp r4, #0 - bge _08017C42 - adds r1, r4, #7 -_08017C42: - asrs r1, r1, #3 - lsls r0, r1, #0x10 - lsrs r0, r0, #0x10 - ldr r2, _08017CFC @ =0xFFFF0000 - mov r8, r2 - ands r6, r2 - orrs r6, r0 - movs r0, #2 - ldrsh r3, [r3, r0] - adds r0, r3, #0 - cmp r3, #0 - bge _08017C5C - adds r0, r3, #7 -_08017C5C: - asrs r0, r0, #3 - lsls r2, r0, #0x10 - ldr r5, _08017D00 @ =0x0000FFFF - ands r6, r5 - lsls r1, r1, #3 - subs r1, r4, r1 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - mov r4, r8 - ands r7, r4 - orrs r7, r1 - lsls r0, r0, #3 - subs r0, r3, r0 - lsls r0, r0, #0x10 - ands r7, r5 - orrs r7, r0 - orrs r6, r2 - asrs r4, r2, #0x10 - adds r2, r4, #0 - cmp r4, #0 - bge _08017C88 - adds r2, #0x3f -_08017C88: - asrs r2, r2, #6 - mov r0, ip - ldr r0, [r0] - mov r8, r0 - adds r0, #0x24 - movs r3, #0 - ldrsb r3, [r0, r3] - lsls r1, r2, #6 - subs r1, r4, r1 - lsls r1, r1, #0x10 - ands r6, r5 - ldr r4, _08017D04 @ =gUnknown_02031520 - adds r3, r3, r2 - lsls r3, r3, #2 - adds r2, r4, #0 - adds r2, #0x38 - adds r2, r3, r2 - lsls r0, r6, #0x10 - asrs r0, r0, #0x10 - asrs r1, r1, #0xa - adds r1, r1, r0 - ldr r0, [r2] - lsls r1, r1, #1 - adds r1, r1, r0 - movs r0, #0 - ldrsh r2, [r1, r0] - asrs r1, r7, #0x10 - lsls r0, r7, #0x10 - asrs r0, r0, #0x10 - lsls r1, r1, #3 - lsls r2, r2, #6 - adds r1, r1, r2 - adds r1, r1, r0 - adds r4, #0x58 - adds r3, r3, r4 - ldr r0, [r3] - adds r0, r0, r1 - ldrb r1, [r0] - lsrs r1, r1, #4 - movs r0, #0x80 - lsls r0, r0, #3 - add r0, r8 - ldrh r3, [r0] - ldr r2, _08017D08 @ =0x00000402 - add r2, r8 - ldrh r4, [r2] - adds r0, r1, #0 - subs r0, #8 - cmp r0, #4 - bls _08017CEE - b _08017F18 -_08017CEE: - lsls r0, r0, #2 - ldr r1, _08017D0C @ =_08017D10 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08017CF8: .4byte gCurrentPinballGame -_08017CFC: .4byte 0xFFFF0000 -_08017D00: .4byte 0x0000FFFF -_08017D04: .4byte gUnknown_02031520 -_08017D08: .4byte 0x00000402 -_08017D0C: .4byte _08017D10 -_08017D10: @ jump table - .4byte _08017D24 @ case 0 - .4byte _08017D74 @ case 1 - .4byte _08017DBE @ case 2 - .4byte _08017E9C @ case 3 - .4byte _08017EEC @ case 4 -_08017D24: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017D50 - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x38 - bgt _08017D40 - mov r3, ip - ldr r0, [r3] - ldr r4, _08017D3C @ =0x0000041C - b _08017F0A - .align 2, 0 -_08017D3C: .4byte 0x0000041C -_08017D40: - mov r1, ip - ldr r0, [r1] - ldr r2, _08017D4C @ =0x0000041D - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017D4C: .4byte 0x0000041D -_08017D50: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x63 - bgt _08017D64 - mov r3, ip - ldr r0, [r3] - ldr r4, _08017D60 @ =0x0000041F - b _08017F0A - .align 2, 0 -_08017D60: .4byte 0x0000041F -_08017D64: - mov r1, ip - ldr r0, [r1] - ldr r2, _08017D70 @ =0x0000041E - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017D70: .4byte 0x0000041E -_08017D74: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017DA0 - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017D90 - mov r3, ip - ldr r0, [r3] - ldr r4, _08017D8C @ =0x00000427 - b _08017F0A - .align 2, 0 -_08017D8C: .4byte 0x00000427 -_08017D90: - mov r1, ip - ldr r0, [r1] - ldr r2, _08017D9C @ =0x00000425 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017D9C: .4byte 0x00000425 -_08017DA0: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017DB2 - mov r3, ip - ldr r0, [r3] - movs r4, #0x85 - lsls r4, r4, #3 - b _08017F0A -_08017DB2: - mov r1, ip - ldr r0, [r1] - movs r2, #0x84 - lsls r2, r2, #3 - adds r1, r0, r2 - b _08017F0C -_08017DBE: - mov r3, ip - ldr r0, [r3] - movs r4, #0xfe - lsls r4, r4, #2 - adds r0, r0, r4 - movs r1, #0 - strb r1, [r0] - ldr r2, [r3] - ldr r1, _08017E10 @ =0x00000412 - adds r0, r2, r1 - movs r3, #0 - ldrsh r0, [r0, r3] - cmp r0, #0 - bne _08017E18 - adds r4, #8 - adds r0, r2, r4 - ldr r1, [r0] - ldr r3, _08017E14 @ =0x00000434 - adds r0, r2, r3 - ldr r0, [r0] - cmp r1, r0 - bne _08017DEC - b _08017F18 -_08017DEC: - adds r4, #0x2e - adds r1, r2, r4 - movs r0, #0x11 - strb r0, [r1] - mov r0, ip - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r1, r2 - ldrh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - subs r3, #0x32 - adds r0, r1, r3 - ldrh r0, [r0] - adds r4, #8 - b _08017E90 - .align 2, 0 -_08017E10: .4byte 0x00000412 -_08017E14: .4byte 0x00000434 -_08017E18: - cmp r0, #8 - bne _08017E58 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r2, r1 - ldr r1, [r0] - movs r3, #0x87 - lsls r3, r3, #3 - adds r0, r2, r3 - ldr r0, [r0] - cmp r1, r0 - beq _08017F18 - ldr r4, _08017E54 @ =0x0000042F - adds r1, r2, r4 - movs r0, #0x11 - strb r0, [r1] - mov r0, ip - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r1, r2 - ldrh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - subs r3, #0x36 - adds r0, r1, r3 - ldrh r0, [r0] - adds r4, #0xb - b _08017E90 - .align 2, 0 -_08017E54: .4byte 0x0000042F -_08017E58: - cmp r0, #0x10 - bne _08017F18 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r2, r1 - ldr r1, [r0] - ldr r3, _08017E98 @ =0x0000043C - adds r0, r2, r3 - ldr r0, [r0] - cmp r1, r0 - beq _08017F18 - movs r4, #0x86 - lsls r4, r4, #3 - adds r1, r2, r4 - movs r0, #0x11 - strb r0, [r1] - mov r0, ip - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r1, r2 - ldrh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - subs r3, #0x3a - adds r0, r1, r3 - ldrh r0, [r0] - adds r4, #0xe -_08017E90: - adds r1, r1, r4 - strh r0, [r1] - b _08017F18 - .align 2, 0 -_08017E98: .4byte 0x0000043C -_08017E9C: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017EC8 - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017EBC - mov r1, ip - ldr r0, [r1] - ldr r2, _08017EB8 @ =0x00000429 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017EB8: .4byte 0x00000429 -_08017EBC: - mov r3, ip - ldr r0, [r3] - ldr r4, _08017EC4 @ =0x00000422 - b _08017F0A - .align 2, 0 -_08017EC4: .4byte 0x00000422 -_08017EC8: - lsls r0, r4, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x45 - bgt _08017EE0 - mov r1, ip - ldr r0, [r1] - ldr r2, _08017EDC @ =0x00000426 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017EDC: .4byte 0x00000426 -_08017EE0: - mov r3, ip - ldr r0, [r3] - ldr r4, _08017EE8 @ =0x00000421 - b _08017F0A - .align 2, 0 -_08017EE8: .4byte 0x00000421 -_08017EEC: - lsls r0, r3, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0x72 - bgt _08017F04 - mov r1, ip - ldr r0, [r1] - ldr r2, _08017F00 @ =0x00000424 - adds r1, r0, r2 - b _08017F0C - .align 2, 0 -_08017F00: .4byte 0x00000424 -_08017F04: - mov r3, ip - ldr r0, [r3] - ldr r4, _08017F24 @ =0x00000423 -_08017F0A: - adds r1, r0, r4 -_08017F0C: - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - bgt _08017F18 - movs r0, #0x18 - strb r0, [r1] -_08017F18: - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08017F24: .4byte 0x00000423 + .section .text17F28 thumb_func_start sub_17F28 sub_17F28: @ 0x08017F28 diff --git a/expected_objs/sub_179D0.o b/expected_objs/sub_179D0.o deleted file mode 100644 index 8bf272af7736a1c60fb05afe11b3997b9a54bcb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3124 zcma)8U1%It6h71JCc8%BCjD{1*rZKbw>B=5X1m#-LS`nLACpMcwhD@M*DOvjZNp{* z_Nl=ijG?}$Xdf!HPYU+MVnMKA5fmc@Qw_z|C?mcqs1GXQgWuV?_vUml=qWen`_4Jv zId|^fDRZ(gF>F~DX|pIz>x}5iEwxNMTXShjQi4(!sgYU|53~k}@nt(1G%rmoS^1VU zU2pqgfnsBWHU%#aM;&`M6S3CYwDFon{zI(4uvRg=y{^`d(Uwa3wzW?9d^*0C3al~D zz81E}h=9jeLZUl?IsdfDe-?JA{AJ{~1Is=IQ+FY}OVyo6-7eLqkd9%_OFNdyv(JU8 z;Ki2RXrv1{w}Xg^89d*@lRR< z#p)_7L0FK@j4qD{nFW>LTESd!1 zyB?WEj{@+$kIbSX0KWs8KMTO`gXWx){pP_>t1Qnu34BWMSAZ7d2)-3KD>&~*<~b$x z9SF>b`aQr?g7*Ojf^)x;;0&eyegw{n{0Q)A!5;!XBRKbaQ*ee-|2P6yM7|8XA~@^6 z5S*dB@5d4NTjWmw|04Jcz&{Dj{Uqm|@FCyTG{Kw!ug7ZAdSug9C5g4tjmmKBB8YoU*qn>-PwE=yn33!Tw z-Bmi`9CI~uwDM$xYoZr)@)vllbhb=PA?>+6T|9Nopk<3$JJnQ301R(O4ShSz5l z{YGJ)$jceUfI(&lo^N8l(R%AK)45=>Lnd3$S$}<}!#eBt=4o!ebOb-=kVDV-^OZ{Z zSoOg4u~KnnW~6wu%s+V=Ytv!eEB3e#S>^M}->3Yb@sZg<5(%tbitDeB1bH&@2to1o*ynB}u}*vkV}CSe%|eZE|9oD!*$(fJ*% zsmf8a%8Yv>bgA-6j>_5-7G;jQg?;!JRzMyv(RDx*o3aDr9gLiZXcEIhm%&KIR1kAK zQaZKUwKCNCOTG#@Y1hmc9V1pgPgD)gn%!FSU4Es|d=1SCa9PjM+H?6eLi-7{tBUoU zh!v5&s)JB{=t&oI_I2ukNln z`fY+Ul>4~=jw2$z1UM`BO5g#(xxeHblKQo9w>od-xT~I z;2VNJ3Op%zFK~9we*Y!n3}w9oaBLF#L*Q}2`Fa}#=X|Mu7LKPyob^u$&U*QLz5vIE zBK{iqTY|q0{)XUO?}Xr7PwG#>@qvi5UUJsUerMqLLg+sO9~YeS&k4@?Qa=I5S0c`O z$yqPY-?wmF6Z#*)uL{ojKMBtHQvWL)rhW|;-XD@fuC0Vh=}+jn2HRqwe-r`tV=U6W z3Y@}O+8K+->Y9>nTp_z&AvdW|gF>lTO!?v}BNelYzEn*4l8#gKxpm5yiX|z$M@j2c zp;Wz2Z_=n$r8~{4wc{w1YS6j1MjKVsjkTyA_N-5#RHN?EsB@b%YSE}!qqxr1Ye}`L zO>*>gIQl}JI^9FB+0pf!2DKqhgVH(8+LzR*RrPgRwJ)hN9JM|trFD+dx%!s4`i8mK z=b_=Aow(U`N!ptn9vtlL&u-n<-;?g^YfJC%rM(aLKhb~S$^Mr9!Mxw|o@t>YC z=W#ykOpH}Uu1X{nfS--EZ0j&sufliJ@n%9ZfN9297c63)R6U->F{NG59V;c82mf{q fULT)jz6RA3kfyPS8j+~#Rm{unk3F8 = 1; + vec1.x = arg0->x / 8; + vec1.y = arg0->y / 8; + vec2.x = arg0->x % 8; + vec2.y = arg0->y % 8; + unk1 = vec1.y / 64; + unk2 = gCurrentPinballGame->unk24; + vec1.y %= 64; + unk0 = gUnknown_02031520.unk14.unk38[unk2 + unk1][vec1.y * 64 + vec1.x]; + sp00 = gUnknown_02031520.unk14.unk48[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x]; + sp02 = gUnknown_02031520.unk14.unk58[unk2 + unk1][unk0 * 64 + vec2.y * 8 + vec2.x]; + + some_enum = (sp02 >> 2) >> 2; + + x = gCurrentPinballGame->unk400.x; + y = gCurrentPinballGame->unk400.y; + + switch (some_enum) + { + case 8: + if (x <= 0x72) + { + if (y <= 0x38) + { + if (gCurrentPinballGame->unk41C[0] <= 0) + gCurrentPinballGame->unk41C[0] = 0x18; + } + else + { + if (gCurrentPinballGame->unk41C[1] <= 0) + gCurrentPinballGame->unk41C[1] = 0x18; + } + } + else if (y <= 0x63) + { + if (gCurrentPinballGame->unk41C[3] <= 0) + gCurrentPinballGame->unk41C[3] = 0x18; + } + else + { + if (gCurrentPinballGame->unk41C[2] <= 0) + gCurrentPinballGame->unk41C[2] = 0x18; + } + break; + case 9: + if (x <= 0x72) + { + if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[7] <= 0) + gCurrentPinballGame->unk420[7] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[5] <= 0) + gCurrentPinballGame->unk420[5] = 0x18; + } + } + else if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[8] <= 0) + gCurrentPinballGame->unk420[8] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[0] <= 0) + gCurrentPinballGame->unk420[0] = 0x18; + } + break; + case 10: + gCurrentPinballGame->unk3F8 = 0; + if (gCurrentPinballGame->unk412 == 0) + { + if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk434.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk434.y) + { + gCurrentPinballGame->unk42A[4] = 0x11; + gCurrentPinballGame->unk434.x = gCurrentPinballGame->unk400.x; + gCurrentPinballGame->unk434.y = gCurrentPinballGame->unk400.y; + } + } + else if (gCurrentPinballGame->unk412 == 8) + { + if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk438.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk438.y) + { + gCurrentPinballGame->unk42A[5] = 0x11; + gCurrentPinballGame->unk438.x = gCurrentPinballGame->unk400.x; + gCurrentPinballGame->unk438.y = gCurrentPinballGame->unk400.y; + } + } + else if (gCurrentPinballGame->unk412 == 16) + { + if (gCurrentPinballGame->unk400.x != gCurrentPinballGame->unk43C.x || gCurrentPinballGame->unk400.y != gCurrentPinballGame->unk43C.y) + { + gCurrentPinballGame->unk42A[6] = 0x11; + gCurrentPinballGame->unk43C.x = gCurrentPinballGame->unk400.x; + gCurrentPinballGame->unk43C.y = gCurrentPinballGame->unk400.y; + } + } + break; + case 11: + if (x <= 0x72) + { + if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[9] <= 0) + gCurrentPinballGame->unk420[9] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[2] <= 0) + gCurrentPinballGame->unk420[2] = 0x18; + } + } + else if (y <= 0x45) + { + if (gCurrentPinballGame->unk420[6] <= 0) + gCurrentPinballGame->unk420[6] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[1] <= 0) + gCurrentPinballGame->unk420[1] = 0x18; + } + break; + case 12: + if (x <= 0x72) + { + if (gCurrentPinballGame->unk420[4] <= 0) + gCurrentPinballGame->unk420[4] = 0x18; + } + else + { + if (gCurrentPinballGame->unk420[3] <= 0) + gCurrentPinballGame->unk420[3] = 0x18; + } + break; + } } \ No newline at end of file diff --git a/src/rom_356A0.c b/src/rom_356A0.c index aa3779a..9a1bb04 100644 --- a/src/rom_356A0.c +++ b/src/rom_356A0.c @@ -183,7 +183,7 @@ void sub_35860(void) gCurrentPinballGame->unk42A[i] = 0; gCurrentPinballGame->unk1A = 0; - gCurrentPinballGame->unk402 = gCurrentPinballGame->unk3EA / 10 + 58; + gCurrentPinballGame->unk400.y = gCurrentPinballGame->unk3EA / 10 + 58; sub_38218(); gCurrentPinballGame->unk387 = 1; sub_35D54(); @@ -892,8 +892,8 @@ void sub_36CB4(void) gCurrentPinballGame->unk387 = 1; } - gCurrentPinballGame->unk400 = (gCurrentPinballGame->unk3E8 / 10) + 120; - gCurrentPinballGame->unk402 = (gCurrentPinballGame->unk3EA / 10) + 58; + gCurrentPinballGame->unk400.x = (gCurrentPinballGame->unk3E8 / 10) + 120; + gCurrentPinballGame->unk400.y = (gCurrentPinballGame->unk3EA / 10) + 58; if (gCurrentPinballGame->unk40E > 7) gCurrentPinballGame->unk3F7 = 1; else if (gCurrentPinballGame->unk3FA > 15)