From 0989eeb17f37724da86b76d175df91043f8e9e06 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 3 Aug 2025 08:18:41 -0500 Subject: [PATCH] sub_3EB2C --- asm/rom_3219C.s | 330 -------------------------------------- expected_objs/sub_3EB2C.o | Bin 3660 -> 0 bytes include/functions.h | 8 +- include/global.h | 10 +- src/rom_49A34.c | 117 ++++++++++++++ 5 files changed, 127 insertions(+), 338 deletions(-) delete mode 100644 expected_objs/sub_3EB2C.o diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index 487fd0e..d21a7f3 100644 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -15387,333 +15387,3 @@ _0803EB1C: .4byte 0x80000430 _0803EB20: .4byte gUnknown_081B36A4 _0803EB24: .4byte 0x05000320 _0803EB28: .4byte 0x80000010 - - thumb_func_start sub_3EB2C -sub_3EB2C: @ 0x0803EB2C - push {r4, r5, lr} - ldr r0, _0803EB48 @ =gCurrentPinballGame - ldr r0, [r0] - ldrb r0, [r0, #0x13] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #6 - bls _0803EB3E - b _0803ED6C -_0803EB3E: - lsls r0, r0, #2 - ldr r1, _0803EB4C @ =_0803EB50 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803EB48: .4byte gCurrentPinballGame -_0803EB4C: .4byte _0803EB50 -_0803EB50: @ jump table - .4byte _0803EB6C @ case 0 - .4byte _0803ED6C @ case 1 - .4byte _0803EBA4 @ case 2 - .4byte _0803EC0C @ case 3 - .4byte _0803EC8C @ case 4 - .4byte _0803ECE8 @ case 5 - .4byte _0803ED54 @ case 6 -_0803EB6C: - ldr r3, _0803EB98 @ =gCurrentPinballGame - ldr r0, [r3] - ldr r1, _0803EB9C @ =0x000005F7 - adds r0, r0, r1 - movs r4, #0 - movs r1, #1 - strb r1, [r0] - ldr r1, [r3] - ldr r2, _0803EBA0 @ =0x00000506 - adds r0, r1, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - cmp r2, #1 - beq _0803EB8A - b _0803ED6C -_0803EB8A: - adds r0, r1, #0 - adds r0, #0xe6 - strh r4, [r0] - strb r2, [r1, #0x13] - ldr r0, [r3] - strh r4, [r0, #0x18] - b _0803ED6C - .align 2, 0 -_0803EB98: .4byte gCurrentPinballGame -_0803EB9C: .4byte 0x000005F7 -_0803EBA0: .4byte 0x00000506 -_0803EBA4: - ldr r2, _0803EBF0 @ =gCurrentPinballGame - ldr r1, [r2] - movs r3, #0 - movs r0, #3 - strb r0, [r1, #0x13] - ldr r2, [r2] - strh r3, [r2, #0x18] - ldr r3, _0803EBF4 @ =gMain - movs r4, #0xe9 - lsls r4, r4, #3 - adds r0, r3, r4 - movs r4, #1 - movs r1, #1 - strh r1, [r0] - movs r5, #0xd2 - lsls r5, r5, #3 - adds r0, r3, r5 - strh r1, [r0] - ldr r1, _0803EBF8 @ =0x040000D4 - ldr r0, _0803EBFC @ =gUnknown_081408B4 - str r0, [r1] - ldr r0, _0803EC00 @ =0x06015800 - str r0, [r1, #4] - ldr r0, _0803EC04 @ =0x80001000 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r0, #0xe5 - lsls r0, r0, #2 - adds r1, r2, r0 - movs r0, #0x88 - strh r0, [r1] - movs r0, #0x80 - strb r0, [r3, #0xf] - ldr r1, _0803EC08 @ =0x000005FA - adds r2, r2, r1 - strb r4, [r2] - b _0803ED6C - .align 2, 0 -_0803EBF0: .4byte gCurrentPinballGame -_0803EBF4: .4byte gMain -_0803EBF8: .4byte 0x040000D4 -_0803EBFC: .4byte gUnknown_081408B4 -_0803EC00: .4byte 0x06015800 -_0803EC04: .4byte 0x80001000 -_0803EC08: .4byte 0x000005FA -_0803EC0C: - bl sub_351A8 - ldr r4, _0803EC54 @ =gCurrentPinballGame - ldr r1, [r4] - ldrb r0, [r1, #0x1c] - cmp r0, #0 - beq _0803EC1E - movs r0, #0xb5 - strh r0, [r1, #0x18] -_0803EC1E: - ldr r1, [r4] - ldrh r0, [r1, #0x18] - cmp r0, #0xb4 - bne _0803EC34 - movs r0, #1 - strb r0, [r1, #0x1c] - ldr r1, [r4] - ldr r0, _0803EC58 @ =0x00061A80 - str r0, [r1, #0x38] - ldr r0, _0803EC5C @ =0x05F5E0FF - str r0, [r1, #0x3c] -_0803EC34: - ldr r1, [r4] - ldrh r0, [r1, #0x18] - cmp r0, #0xef - bhi _0803EC60 - cmp r0, #0x14 - bne _0803EC4A - bl m4aMPlayAllStop - movs r0, MUS_SUCCESS3 - bl m4aSongNumStart -_0803EC4A: - ldr r1, [r4] - ldrh r0, [r1, #0x18] - adds r0, #1 - strh r0, [r1, #0x18] - b _0803EC74 - .align 2, 0 -_0803EC54: .4byte gCurrentPinballGame -_0803EC58: .4byte 0x00061A80 -_0803EC5C: .4byte 0x05F5E0FF -_0803EC60: - movs r0, #0 - strh r0, [r1, #0x18] - movs r0, #6 - strb r0, [r1, #0x13] - ldr r1, [r4] - ldr r2, _0803EC80 @ =0x00000283 - adds r1, r1, r2 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] -_0803EC74: - ldr r0, _0803EC84 @ =gCurrentPinballGame - ldr r0, [r0] - ldr r4, _0803EC88 @ =0x000005FA - adds r0, r0, r4 - movs r1, #1 - b _0803ED6A - .align 2, 0 -_0803EC80: .4byte 0x00000283 -_0803EC84: .4byte gCurrentPinballGame -_0803EC88: .4byte 0x000005FA -_0803EC8C: - ldr r2, _0803ECD0 @ =gCurrentPinballGame - ldr r1, [r2] - movs r0, #5 - strb r0, [r1, #0x13] - ldr r2, [r2] - movs r0, #0x8c - strh r0, [r2, #0x18] - ldr r3, _0803ECD4 @ =gMain - movs r5, #0xe9 - lsls r5, r5, #3 - adds r0, r3, r5 - movs r1, #1 - strh r1, [r0] - movs r4, #0xd2 - lsls r4, r4, #3 - adds r0, r3, r4 - strh r1, [r0] - ldr r1, _0803ECD8 @ =0x040000D4 - ldr r0, _0803ECDC @ =gUnknown_081408B4 - str r0, [r1] - ldr r0, _0803ECE0 @ =0x06015800 - str r0, [r1, #4] - ldr r0, _0803ECE4 @ =0x80001000 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r5, #0xe5 - lsls r5, r5, #2 - adds r2, r2, r5 - movs r0, #0x88 - strh r0, [r2] - movs r0, #0x80 - strb r0, [r3, #0xf] - b _0803ED6C - .align 2, 0 -_0803ECD0: .4byte gCurrentPinballGame -_0803ECD4: .4byte gMain -_0803ECD8: .4byte 0x040000D4 -_0803ECDC: .4byte gUnknown_081408B4 -_0803ECE0: .4byte 0x06015800 -_0803ECE4: .4byte 0x80001000 -_0803ECE8: - bl sub_351A8 - ldr r3, _0803ED20 @ =gCurrentPinballGame - ldr r1, [r3] - ldrb r0, [r1, #0x1c] - cmp r0, #0 - beq _0803ECFA - movs r0, #0xb5 - strh r0, [r1, #0x18] -_0803ECFA: - ldr r1, [r3] - ldrh r0, [r1, #0x18] - cmp r0, #0xb4 - bne _0803ED10 - movs r0, #1 - strb r0, [r1, #0x1c] - ldr r1, [r3] - ldr r0, _0803ED24 @ =0x00061A80 - str r0, [r1, #0x38] - ldr r0, _0803ED28 @ =0x05F5E0FF - str r0, [r1, #0x3c] -_0803ED10: - ldr r1, [r3] - ldrh r0, [r1, #0x18] - cmp r0, #0xef - bhi _0803ED2C - adds r0, #1 - strh r0, [r1, #0x18] - b _0803ED6C - .align 2, 0 -_0803ED20: .4byte gCurrentPinballGame -_0803ED24: .4byte 0x00061A80 -_0803ED28: .4byte 0x05F5E0FF -_0803ED2C: - movs r2, #0 - movs r0, #0 - strh r0, [r1, #0x18] - movs r0, #6 - strb r0, [r1, #0x13] - ldr r1, [r3] - ldr r0, _0803ED4C @ =0x00000283 - adds r1, r1, r0 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldr r0, [r3] - ldr r1, _0803ED50 @ =0x000001AF - adds r0, r0, r1 - strb r2, [r0] - b _0803ED6C - .align 2, 0 -_0803ED4C: .4byte 0x00000283 -_0803ED50: .4byte 0x000001AF -_0803ED54: - bl sub_351A8 - ldr r2, _0803EDDC @ =gCurrentPinballGame - ldr r0, [r2] - ldr r4, _0803EDE0 @ =0x00000386 - adds r0, r0, r4 - movs r1, #1 - strb r1, [r0] - ldr r0, [r2] - ldr r5, _0803EDE4 @ =0x000005FA - adds r0, r0, r5 -_0803ED6A: - strb r1, [r0] -_0803ED6C: - bl sub_423D8 - bl sub_40288 - bl sub_3EDF0 - bl sub_3FAE0 - ldr r0, _0803EDDC @ =gCurrentPinballGame - ldr r1, [r0] - movs r2, #0xa5 - lsls r2, r2, #2 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0803EDB4 - ldr r4, _0803EDE8 @ =0x00000296 - adds r0, r1, r4 - ldrh r0, [r0] - cmp r0, #1 - bhi _0803EDB4 - ldr r4, _0803EDEC @ =gMain - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _0803EDB4 - bl m4aMPlayAllStop - movs r0, MUS_END_OF_BALL3 - bl m4aSongNumStart - ldrb r1, [r4, #0xf] - movs r0, #0x40 - orrs r0, r1 - strb r0, [r4, #0xf] -_0803EDB4: - ldr r0, _0803EDDC @ =gCurrentPinballGame - ldr r1, [r0] - ldr r5, _0803EDE0 @ =0x00000386 - adds r0, r1, r5 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _0803EDD2 - ldr r0, _0803EDE4 @ =0x000005FA - adds r1, r1, r0 - movs r0, #1 - strb r0, [r1] - bl sub_350F0 -_0803EDD2: - bl sub_472E4 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_0803EDDC: .4byte gCurrentPinballGame -_0803EDE0: .4byte 0x00000386 -_0803EDE4: .4byte 0x000005FA -_0803EDE8: .4byte 0x00000296 -_0803EDEC: .4byte gMain diff --git a/expected_objs/sub_3EB2C.o b/expected_objs/sub_3EB2C.o deleted file mode 100644 index 07caa096b53f8dba25efbd6a2b979db4047ddd05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3660 zcma)9ZERCj7=G`%mbkMQ-r9BR0_{}(xjh1L>^k{3DM=1SMpTR z8S|6=a*E9w(PP{zh^8Tn=mQ8khaQ5?+wIrAY~QHVE4hHKb`|{8@Zv7zAzJvQsILAg zT$%se@avT`*VvVAxrsdJwOutjt#t+GjavPl8DICc#;fEHC>$mK^}6fSA5ij3JFC;` zKy^BeUKl9oKL+zu<1Yl&d_K51sdo1H>vEr%Q8_Zvw?vgD=vO@Cqx>JpbLZCIcYHnd zx_X#G%ED|=odJI3OvrOd399?+b#J<`$D5wt!`d66n#Hz>eqC(jck{=#}XzyBfdFd!Qn>+^pq8JZsJs?DFYBvqmN7)7SLI0!ohca=$mN z=x;Z?M%V?@yr(Esv#_E^4NyS|RWH`{6c18JHCK3pxx!Zt#)4|1I9Ub1s@`-!c)1sr zU^aM0PKNNDGDn+vAzpG>Yx}0X&ha%+W`;6@Bc!YVbjSO8+jnTao#d%dl`72s-<#{M z6GG&|pWIy7Qg;VX%uTl1F;Zw5aIM7szkAuenA@N`11VU1)rD3KLY+j;vWMqNc=Nk?0vf_^cB#epqTw-;O`{P^Z8Wb zoWCgXAAm#B`dkOUDUII(R;6)%rEZY;QsA(}R{%#Oz6SVyi9ZOOmN?H(&d)=#e=8I_ zB>TsJ`z5{^_*sc>1Abh3z8qine+J_xC3}YQei?$|J!yO#_oubHIN|{37GB`fp0(CX~j%fg&jJ@4*`- z&hwYY*;*)o2vj8mgQyTj3NYqBE} z6{t07BW+_s=pqSf+$%_1SfG+YJYwq-Vd0dBIw&cEYi+`=W0TNzY!Y@IaVK&#E^?$C zUCQxIIld|3n+OZLL|E7*!on`$-7ZGzwv^ySAXEa*Ui747e z$3t`MG{;U8b_vbNmUQfr!cJ>(bSV)}YZf}KrDP}KX)Pk2h6iRnSj~A_nv+d)vT3Dk z9ZtN`(@Hu~v=*A28r+SIf*iw%sfmf9F=Ok<*kC4`-JBU6qT$}m$QTXp9NRZGzJCn4 znUVwzrU&G9IWMl!uyvzY_&Y<9abo@2g!d~A5j)aZ62GhvvPk(O4h4*NvHEl~@# zCN=Bmxx>0=*q-kXmV6JeZ2JP}AV#BsJk%t|?;}6C;CD#?T}J{J+MZgeV1{pjP8` zy?{B0R%wI#Agj=0Hh*I&kq?gS$Np@mqOY^L_&U5T#lnzj%W^$B+y9pxKX2INAk4<` zf;MKsxw)~FQ~BX^8vj=;fqn}*&(DX>HHe&mG>=JKlpIC8nlihS)ur0mPuTqft?T%D diff --git a/include/functions.h b/include/functions.h index ec601d4..16a99bd 100644 --- a/include/functions.h +++ b/include/functions.h @@ -607,12 +607,12 @@ extern void sub_3E5D0(void); //extern ? sub_3E644(); //extern ? sub_3E79C(); //extern ? sub_3EB2C(); -//extern ? sub_3EDF0(); -//extern ? sub_3FAE0(); -//extern ? sub_40288(); +extern void sub_3EDF0(void); +extern void sub_3FAE0(void); +extern void sub_40288(void); extern void sub_41580(void); extern void sub_417F8(void); -//extern ? sub_423D8(); +extern void sub_423D8(void); //extern ? sub_42E48(); //extern ? sub_43228(); extern void sub_43500(void); diff --git a/include/global.h b/include/global.h index a0d2d82..0e592f3 100644 --- a/include/global.h +++ b/include/global.h @@ -230,7 +230,9 @@ struct PinballGame /*0x195*/ u8 filler195[0x10]; /*0x1A5*/ s8 unk1A5; /*0x1A6*/ s8 unk1A6; - /*0x1A7*/ u8 filler1A7[0xD]; + /*0x1A7*/ u8 filler1A7[0x8]; + /*0x1AF*/ s8 unk1AF; + /*0x1B0*/ u8 filler1B0[0x4]; /*0x1B4*/ u16 unk1B4; /*0x1B6*/ u8 filler1B6[0x4]; /*0x1BA*/ u16 unk1BA; @@ -340,9 +342,9 @@ struct PinballGame /*0x345*/ s8 unk345; /*0x346*/ s8 unk346; /*0x347*/ u8 filler347[0x23]; - /*0x36A*/ u8 unk36A[0x2]; - /*0x36C*/ u8 unk36C[0x2]; - /*0x36E*/ u16 unk36E[0x2]; + /*0x36A*/ u8 unk36A[2]; + /*0x36C*/ u8 unk36C[2]; + /*0x36E*/ u16 unk36E[2]; /*0x372*/ u8 filler372[0x11]; /*0x383*/ s8 unk383; /*0x384*/ s8 unk384; diff --git a/src/rom_49A34.c b/src/rom_49A34.c index c69064d..84a5dac 100644 --- a/src/rom_49A34.c +++ b/src/rom_49A34.c @@ -117,6 +117,7 @@ extern const u8 gUnknown_084A6EEC[][0x280]; extern const u8 gUnknown_084AA9EC[][0x800]; extern const u8 gUnknown_084A856C[]; extern const u8 gUnknown_084AA18C[]; +extern const u8 gUnknown_081408B4[]; struct Unk_086AFAC0 { @@ -140,6 +141,122 @@ extern u8 gUnknown_0200FBB0[]; extern u8 gUnknown_020030A0[]; +void sub_3EB2C(void) +{ + switch (gCurrentPinballGame->unk13) + { + case 0: + gCurrentPinballGame->unk5F7 = 1; + if (gCurrentPinballGame->unk506 == 1) + { + gCurrentPinballGame->unkE6 = 0; + gCurrentPinballGame->unk13 = 1; + gCurrentPinballGame->unk18 = 0; + } + break; + case 1: + break; + case 2: + gCurrentPinballGame->unk13 = 3; + gCurrentPinballGame->unk18 = 0; + gMain.spriteGroups[6].available = 1; + gMain.spriteGroups[5].available = 1; + DmaCopy16(3, gUnknown_081408B4, (void *)0x06015800, 0x2000); + gCurrentPinballGame->unk394 = 136; + gMain.unkF = 0x80; + gCurrentPinballGame->unk5FA = 1; + break; + case 3: + sub_351A8(); + if (gCurrentPinballGame->unk1C) + gCurrentPinballGame->unk18 = 181; + + if (gCurrentPinballGame->unk18 == 180) + { + gCurrentPinballGame->unk1C = 1; + gCurrentPinballGame->unk38 = 400000; + gCurrentPinballGame->unk3C = 99999999; + } + + if (gCurrentPinballGame->unk18 < 240) + { + if (gCurrentPinballGame->unk18 == 20) + { + m4aMPlayAllStop(); + m4aSongNumStart(MUS_SUCCESS3); + } + + gCurrentPinballGame->unk18++; + } + else + { + gCurrentPinballGame->unk18 = 0; + gCurrentPinballGame->unk13 = 6; + gCurrentPinballGame->numCompletedBonusStages++; + } + + gCurrentPinballGame->unk5FA = 1; + break; + case 4: + gCurrentPinballGame->unk13 = 5; + gCurrentPinballGame->unk18 = 140; + gMain.spriteGroups[6].available = 1; + gMain.spriteGroups[5].available = 1; + DmaCopy16(3, gUnknown_081408B4, (void *)0x06015800, 0x2000); + gCurrentPinballGame->unk394 = 136; + gMain.unkF = 0x80; + break; + case 5: + sub_351A8(); + if (gCurrentPinballGame->unk1C) + gCurrentPinballGame->unk18 = 181; + + if (gCurrentPinballGame->unk18 == 180) + { + gCurrentPinballGame->unk1C = 1; + gCurrentPinballGame->unk38 = 400000; + gCurrentPinballGame->unk3C = 99999999; + } + + if (gCurrentPinballGame->unk18 < 240) + { + gCurrentPinballGame->unk18++; + } + else + { + gCurrentPinballGame->unk18 = 0; + gCurrentPinballGame->unk13 = 6; + gCurrentPinballGame->numCompletedBonusStages++; + gCurrentPinballGame->unk1AF = 0; + } + break; + case 6: + sub_351A8(); + gCurrentPinballGame->unk386 = 1; + gCurrentPinballGame->unk5FA = 1; + break; + } + + sub_423D8(); + sub_40288(); + sub_3EDF0(); + sub_3FAE0(); + if (gCurrentPinballGame->unk294 && gCurrentPinballGame->eventTimer < 2 && gMain.unkF == 0) + { + m4aMPlayAllStop(); + m4aSongNumStart(MUS_END_OF_BALL3); + gMain.unkF |= 0x40; + } + + if (gCurrentPinballGame->unk386) + { + gCurrentPinballGame->unk5FA = 1; + sub_350F0(); + } + + sub_472E4(); +} + void sub_3EDF0(void) { if (gCurrentPinballGame->unk452)