diff --git a/asm/rom_3219C.s b/asm/rom_3219C.s index 081b5d8..c7bef7a 100755 --- a/asm/rom_3219C.s +++ b/asm/rom_3219C.s @@ -4,370 +4,6 @@ .text - thumb_func_start sub_326F4 -sub_326F4: @ 0x080326F4 - push {r4, lr} - ldr r4, _08032760 @ =gUnknown_020314E0 - ldr r0, [r4] - ldr r1, _08032764 @ =0x0000073D - adds r0, r0, r1 - movs r2, #0 - movs r1, #2 - strb r1, [r0] - ldr r0, [r4] - ldr r3, _08032768 @ =0x000001E5 - adds r0, r0, r3 - strb r2, [r0] - ldr r0, [r4] - movs r2, #0xf3 - lsls r2, r2, #1 - adds r1, r0, r2 - movs r0, #1 - strb r0, [r1] - bl sub_1F2A4 - bl sub_21B0C - bl sub_1F59C - bl sub_300D8 - bl sub_30178 - ldr r2, [r4] - movs r3, #0xec - lsls r3, r3, #1 - adds r0, r2, r3 - movs r1, #0x80 - lsls r1, r1, #1 - strh r1, [r0] - adds r3, #2 - adds r0, r2, r3 - strh r1, [r0] - bl sub_30480 - bl sub_304C8 - bl sub_31144 - bl sub_313A0 - bl sub_2E6AC - bl sub_31B30 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08032760: .4byte gUnknown_020314E0 -_08032764: .4byte 0x0000073D -_08032768: .4byte 0x000001E5 - - thumb_func_start sub_3276C -sub_3276C: @ 0x0803276C - push {lr} - bl sub_19B90 - bl sub_327C0 - ldr r0, _080327B0 @ =gMain - ldrb r0, [r0, #0xf] - cmp r0, #0 - bne _08032782 - bl sub_328C8 -_08032782: - bl sub_32DF8 - ldr r0, _080327B4 @ =gUnknown_020314E0 - ldr r0, [r0] - movs r2, #0xa7 - lsls r2, r2, #2 - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, #0 - beq _080327AC - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080327AC - ldr r0, _080327B8 @ =gMPlayInfo_BGM - ldr r1, _080327BC @ =0x0000FFFF - movs r2, #0x80 - lsls r2, r2, #1 - bl m4aMPlayVolumeControl -_080327AC: - pop {r0} - bx r0 - .align 2, 0 -_080327B0: .4byte gMain -_080327B4: .4byte gUnknown_020314E0 -_080327B8: .4byte gMPlayInfo_BGM -_080327BC: .4byte 0x0000FFFF - - thumb_func_start sub_327C0 -sub_327C0: @ 0x080327C0 - push {r4, lr} - bl sub_4F814 - bl sub_1A0F4 - bl sub_2CA9C - ldr r4, _0803280C @ =gUnknown_020314E0 - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0x59 - bgt _080327E4 - bl sub_304C8 - bl sub_31498 -_080327E4: - ldr r2, [r4] - movs r0, #0x13 - ldrsb r0, [r2, r0] - cmp r0, #2 - bgt _08032814 - movs r1, #0xd1 - lsls r1, r1, #2 - adds r0, r2, r1 - ldr r0, [r0] - ldr r1, _08032810 @ =0x00FFFF00 - ands r0, r1 - movs r1, #0xc0 - lsls r1, r1, #2 - cmp r0, r1 - bne _08032814 - movs r0, #0xe5 - lsls r0, r0, #3 - adds r1, r2, r0 - movs r0, #1 - b _0803281C - .align 2, 0 -_0803280C: .4byte gUnknown_020314E0 -_08032810: .4byte 0x00FFFF00 -_08032814: - movs r0, #0xe5 - lsls r0, r0, #3 - adds r1, r2, r0 - movs r0, #0 -_0803281C: - strb r0, [r1] - ldr r4, _080328C4 @ =gUnknown_020314E0 - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0x95 - bgt _08032834 - bl sub_2E6AC - bl sub_313A0 -_08032834: - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0xc3 - bgt _08032848 - bl sub_30178 - bl sub_2F140 -_08032848: - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0xc9 - bgt _08032858 - bl sub_2FCD0 -_08032858: - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0xdb - bgt _08032868 - bl sub_1F59C -_08032868: - bl sub_308DC - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0x76 - ble _08032880 - bl sub_2F504 - bl sub_30EB4 -_08032880: - bl sub_2CE80 - ldr r0, [r4] - adds r0, #0x68 - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0xa8 - ble _08032894 - bl sub_2D104 -_08032894: - bl sub_203CC - bl sub_21B0C - bl sub_1D128 - bl sub_31B30 - ldr r0, [r4] - movs r1, #0xca - lsls r1, r1, #1 - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _080328BA - bl sub_225F0 -_080328BA: - bl sub_472E4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080328C4: .4byte gUnknown_020314E0 - - thumb_func_start sub_328C8 -sub_328C8: @ 0x080328C8 - push {lr} - bl sub_300D8 - bl sub_32968 - bl sub_1F2A4 - ldr r0, _0803290C @ =gUnknown_020314E0 - ldr r0, [r0] - movs r2, #0xc0 - lsls r2, r2, #3 - adds r1, r0, r2 - ldrh r0, [r1] - cmp r0, #0 - beq _080328EA - subs r0, #1 - strh r0, [r1] -_080328EA: - bl sub_2F26C - bl sub_2E67C - bl sub_31144 - ldr r0, _08032910 @ =gMain - ldrb r1, [r0, #0xf] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - bne _08032906 - bl sub_2F79C -_08032906: - pop {r0} - bx r0 - .align 2, 0 -_0803290C: .4byte gUnknown_020314E0 -_08032910: .4byte gMain - - thumb_func_start sub_32914 -sub_32914: @ 0x08032914 - push {lr} - ldr r0, _08032938 @ =gMain - ldrb r0, [r0, #0xf] - cmp r0, #0 - bne _0803295E - ldr r0, _0803293C @ =gUnknown_020314E0 - ldr r0, [r0] - adds r0, #0x25 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #3 - beq _0803294C - cmp r0, #3 - bgt _08032940 - cmp r0, #1 - beq _08032946 - b _08032956 - .align 2, 0 -_08032938: .4byte gMain -_0803293C: .4byte gUnknown_020314E0 -_08032940: - cmp r0, #4 - beq _08032952 - b _08032956 -_08032946: - bl sub_32B74 - b _08032956 -_0803294C: - bl sub_329B0 - b _08032956 -_08032952: - bl sub_1C560 -_08032956: - ldr r0, _08032964 @ =gUnknown_020314E0 - ldr r1, [r0] - movs r0, #0x3c - strh r0, [r1, #0x26] -_0803295E: - pop {r0} - bx r0 - .align 2, 0 -_08032964: .4byte gUnknown_020314E0 - - thumb_func_start sub_32968 -sub_32968: @ 0x08032968 - push {lr} - ldr r2, _08032990 @ =gUnknown_020314E0 - ldr r1, [r2] - ldrh r0, [r1, #0x26] - cmp r0, #0 - beq _08032978 - subs r0, #1 - strh r0, [r1, #0x26] -_08032978: - ldr r0, [r2] - adds r0, #0x25 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #3 - beq _080329A0 - cmp r0, #3 - bgt _08032994 - cmp r0, #1 - beq _0803299A - b _080329AA - .align 2, 0 -_08032990: .4byte gUnknown_020314E0 -_08032994: - cmp r0, #4 - beq _080329A6 - b _080329AA -_0803299A: - bl sub_32BE4 - b _080329AA -_080329A0: - bl sub_329F4 - b _080329AA -_080329A6: - bl sub_1C5AC -_080329AA: - pop {r0} - bx r0 - - thumb_func_start sub_329B0 -sub_329B0: @ 0x080329B0 - push {r4, lr} - ldr r0, _080329E4 @ =gUnknown_020314E0 - ldr r2, [r0] - movs r3, #0 - movs r0, #0xb4 - strh r0, [r2, #0x28] - movs r4, #0xdd - lsls r4, r4, #1 - adds r1, r2, r4 - strh r0, [r1] - ldr r0, _080329E8 @ =0x0007A120 - str r0, [r2, #0x3c] - ldr r0, _080329EC @ =gMain - ldrh r1, [r0, #0x38] - movs r1, #0xce - strh r1, [r0, #0x38] - ldrh r1, [r0, #0x3c] - strh r3, [r0, #0x3c] - ldr r0, _080329F0 @ =0x000005F7 - adds r2, r2, r0 - movs r0, #1 - strb r0, [r2] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080329E4: .4byte gUnknown_020314E0 -_080329E8: .4byte 0x0007A120 -_080329EC: .4byte gMain -_080329F0: .4byte 0x000005F7 - thumb_func_start sub_329F4 sub_329F4: @ 0x080329F4 push {r4, r5, r6, r7, lr} diff --git a/include/functions.h b/include/functions.h index e5b0525..b61f57a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -453,14 +453,14 @@ extern void ClearSomeArray(void); //extern ? sub_19A20(); //extern ? sub_19B10(); //extern ? sub_19B64(); -//extern ? sub_19B90(); +extern void sub_19B90(); //extern ? sub_19C04(); //extern ? sub_19CC8(); //extern ? sub_19D04(); //extern ? sub_19E10(); //extern ? sub_19F70(); //extern ? sub_19FA0(); -//extern ? sub_1A0F4(); +extern void sub_1A0F4(); //extern ? sub_1A2C0(); //extern ? sub_1A98C(); //extern ? sub_1A9E8(); @@ -473,11 +473,11 @@ extern void ClearSomeArray(void); //extern ? sub_1B140(); //extern ? sub_1BB68(); //extern ? sub_1C544(); -//extern ? sub_1C560(); -//extern ? sub_1C5AC(); +extern void sub_1C560(); +extern void sub_1C5AC(); //extern ? sub_1C73C(); //extern ? sub_1C7F4(); -//extern ? sub_1D128(); +extern void sub_1D128(); //extern ? sub_1D4D0(); //extern ? sub_1D5D8(); //extern ? sub_1DA74(); @@ -486,14 +486,14 @@ extern void ClearSomeArray(void); //extern ? sub_1DDDC(); //extern ? sub_1EC48(); //extern ? sub_1F158(); -//extern ? sub_1F2A4(); -//extern ? sub_1F59C(); +extern void sub_1F2A4(); +extern void sub_1F59C(); //extern ? sub_1F698(); //extern ? sub_1FA48(); //extern ? sub_1FBC4(); //extern ? sub_1FF0C(); //extern ? sub_201B8(); -//extern ? sub_203CC(); +extern void sub_203CC(); //extern ? sub_20EC0(); //extern ? sub_21238(); //extern ? sub_21300(); @@ -503,11 +503,11 @@ extern void ClearSomeArray(void); //extern ? sub_216FC(); //extern ? sub_219A8(); //extern ? sub_219EC(); -//extern ? sub_21B0C(); +extern void sub_21B0C(); //extern ? sub_21D78(); //extern ? sub_21FBC(); -//extern ? sub_225F0(); -//extern ? sub_22978(); +extern void sub_225F0(); +extern void sub_22978(); //extern ? sub_22A30(); //extern ? sub_22C6C(); //extern ? sub_22D54(); @@ -561,30 +561,30 @@ extern void ClearSomeArray(void); //extern ? sub_2C518(); //extern ? sub_2C538(); //extern ? sub_2C9A4(); -//extern ? sub_2CA9C(); +extern void sub_2CA9C(); //extern ? sub_2CD98(); -//extern ? sub_2CE80(); -//extern ? sub_2D104(); +extern void sub_2CE80(); +extern void sub_2D104(); //extern ? sub_2D204(); //extern ? sub_2DE54(); //extern ? sub_2E094(); -//extern ? sub_2E67C(); -//extern ? sub_2E6AC(); -//extern ? sub_2F140(); -//extern ? sub_2F26C(); -//extern ? sub_2F504(); -//extern ? sub_2F79C(); -//extern ? sub_2FCD0(); -//extern ? sub_300D8(); -//extern ? sub_30178(); -//extern ? sub_30480(); -//extern ? sub_304C8(); -//extern ? sub_308DC(); -//extern ? sub_30EB4(); -//extern ? sub_31144(); -//extern ? sub_313A0(); -//extern ? sub_31498(); -//extern ? sub_31B30(); +extern void sub_2E67C(); +extern void sub_2E6AC(); +extern void sub_2F140(); +extern void sub_2F26C(); +extern void sub_2F504(); +extern void sub_2F79C(); +extern void sub_2FCD0(); +extern void sub_300D8(); +extern void sub_30178(); +extern void sub_30480(); +extern void sub_304C8(); +extern void sub_308DC(); +extern void sub_30EB4(); +extern void sub_31144(); +extern void sub_313A0(); +extern void sub_31498(); +extern void sub_31B30(); //extern ? sub_31BE8(); //extern ? sub_31CF8(); //extern ? sub_31F6C(); @@ -595,15 +595,15 @@ extern void ClearSomeArray(void); //extern ? sub_325E0(); //extern ? sub_326F4(); //extern ? sub_3276C(); -//extern ? sub_327C0(); -//extern ? sub_328C8(); +extern void sub_327C0(); +extern void sub_328C8(); //extern ? sub_32914(); -//extern ? sub_32968(); -//extern ? sub_329B0(); -//extern ? sub_329F4(); -//extern ? sub_32B74(); -//extern ? sub_32BE4(); -//extern ? sub_32DF8(); +extern void sub_32968(); +extern void sub_329B0(); +extern void sub_329F4(); +extern void sub_32B74(); +extern void sub_32BE4(); +extern void sub_32DF8(); //extern ? sub_32F3C(); //extern ? sub_33130(); //extern ? sub_3342C(); @@ -661,7 +661,7 @@ extern void ClearSomeArray(void); //extern ? sub_47100(); //extern ? sub_47110(); //extern ? sub_47160(); -//extern ? sub_472E4(); +extern void sub_472E4(); //extern ? sub_47344(); //extern ? sub_474F4(); //extern ? sub_47670(); @@ -733,7 +733,7 @@ extern void ClearSomeArray(void); //extern ? sub_4F30C(); //extern ? sub_4F4B4(); //extern ? sub_4F660(); -//extern ? sub_4F814(); +extern void sub_4F814(); //extern ? sub_4F95C(); //extern ? sub_4F9F0(); //extern ? sub_4FAC0(); diff --git a/include/global.h b/include/global.h index b9e034b..130b963 100755 --- a/include/global.h +++ b/include/global.h @@ -81,22 +81,52 @@ enum struct PinballGame { - /*0x000*/ u8 filler0[0x35]; + /*0x000*/ u8 filler0[0x13]; + /*0x013*/ s8 unk13; + /*0x014*/ u8 filler14[0x11]; + /*0x025*/ s8 unk25; + /*0x026*/ u16 unk26; + /*0x028*/ u16 unk28; + /*0x02A*/ u8 filler2A[0xB]; /*0x035*/ s8 area; - /*0x036*/ u8 filler36[0xF5]; + /*0x036*/ u8 filler36[0x6]; + /*0x03C*/ u32 unk3C; + /*0x040*/ u8 filler40[0x28]; + /*0x068*/ s16 unk68; + /*0x06A*/ u8 filler6A[0xC1]; /*0x12B*/ s8 unk12B; /*0x12C*/ s8 unk12C; /*0x12D*/ u8 filler12D; /*0x12E*/ s16 unk12E; /*0x130*/ s16 unk130[8]; - /*0x140*/ u8 filler140[0x458]; - /*0x598*/ u16 unk598; // Current catch/hatch mode species? + /*0x140*/ u8 filler140[0x54]; + /*0x194*/ s8 unk194; + /*0x195*/ u8 filler195[0x25]; + /*0x1BA*/ u16 unk1BA; + /*0x1BC*/ u8 filler1BC[0x1C]; + /*0x1D8*/ u16 unk1D8; + /*0x1DA*/ u16 unk1DA; + /*0x1DC*/ u8 filler1DC[0x9]; + /*0x1E5*/ u8 unk1E5; + /*0x1E6*/ u8 unk1E6; + /*0x1E7*/ u8 filler1E7[0xB5]; + /*0x29C*/ u16 unk29C; + /*0x29E*/ u8 filler29E[0xA6]; + /*0x344*/ u32 unk344; + /*0x348*/ u8 filler348[0x250]; + /*0x598*/ u16 unk598; // Current catch/hatch mode species? Is it evo mode as well? /*0x59A*/ u8 filler59A[0x2]; /*0x59C*/ u16 unk59C; // Previous catch mode species? /*0x59E*/ u16 unk59E; // Previous hatch mode species? /*0x5A0*/ u8 filler5A0[0x50]; /*0x5F0*/ u16 unk5F0; - /*0x5F2*/ u8 filler5F2[0x14B]; + /*0x5F2*/ u8 filler5F2[0x5]; + /*0x5F7*/ u8 unk5F7; + /*0x5F8*/ u8 filler5F8[0x8]; + /*0x600*/ u16 unk600; + /*0x602*/ u8 filler602[0x126]; + /*0x728*/ u8 unk728; // TODO: unknown type + /*0x729*/ u8 filler729[0x14]; /*0x73D*/ s8 unk73D; }; diff --git a/src/rom_3219C.c b/src/rom_3219C.c index 3f26104..763c451 100755 --- a/src/rom_3219C.c +++ b/src/rom_3219C.c @@ -1,6 +1,8 @@ #include "global.h" -#include "main.h" #include "constants/species.h" +#include "functions.h" +#include "m4a.h" +#include "main.h" extern const u16 gWildMonLocations[][2][8]; extern const u16 gUnknown_086A4A38[2][26]; @@ -329,3 +331,186 @@ void sub_325E0(void) gUnknown_020314E0->unk59E = gUnknown_020314E0->unk598; } + +void sub_326F4(void) +{ + gUnknown_020314E0->unk73D = 2; + gUnknown_020314E0->unk1E5 = 0; + gUnknown_020314E0->unk1E6 = 1; + + sub_1F2A4(); + sub_21B0C(); + sub_1F59C(); + sub_300D8(); + sub_30178(); + + gUnknown_020314E0->unk1D8 = 0x100; + gUnknown_020314E0->unk1DA = 0x100; + + sub_30480(); + sub_304C8(); + sub_31144(); + sub_313A0(); + sub_2E6AC(); + sub_31B30(); +} + +void sub_3276C(void) +{ + sub_19B90(); + sub_327C0(); + + if (!gMain.unkF) + sub_328C8(); + + sub_32DF8(); + + if (gUnknown_020314E0->unk29C) + { + // TODO: is this a fake match? Seems weird. + gUnknown_020314E0->unk29C--; + if (gUnknown_020314E0->unk29C == 0) + m4aMPlayVolumeControl(&gMPlayInfo_BGM,0xffff,0x100); + } +} + +void sub_327C0(void) +{ + s32 temp; + + sub_4F814(); + sub_1A0F4(); + sub_2CA9C(); + + if (gUnknown_020314E0->unk68 < 0x5a) + { + sub_304C8(); + sub_31498(); + } + + // TODO: if this is a fake match, it will take a braver one than I to fix it. + if (gUnknown_020314E0->unk13 < 3) + { + if ((gUnknown_020314E0->unk344 & 0xFFFF00) == 0x300) + { + gUnknown_020314E0->unk728 = 1; + } + else + { + gUnknown_020314E0->unk728 = 0; + } + } + else + { + gUnknown_020314E0->unk728 = 0; + } + + if (gUnknown_020314E0->unk68 < 0x96) + { + sub_2E6AC(); + sub_313A0(); + } + if (gUnknown_020314E0->unk68 < 0xC4) + { + sub_30178(); + sub_2F140(); + } + if (gUnknown_020314E0->unk68 < 0xCA) + { + sub_2FCD0(); + } + if (gUnknown_020314E0->unk68 < 0xDC) + { + sub_1F59C(); + } + + sub_308DC(); + + if (0x76 < gUnknown_020314E0->unk68) + { + sub_2F504(); + sub_30EB4(); + } + + sub_2CE80(); + + if (0xA8 < gUnknown_020314E0->unk68) + sub_2D104(); + + sub_203CC(); + sub_21B0C(); + sub_1D128(); + sub_31B30(); + + if (gUnknown_020314E0->unk194 != 0) // TODO: unsure of style here. It's not a bool8 (unless bool8 == s8), so I'm making the != 0 explicit for now. + sub_225F0(); + + sub_472E4(); +} + +void sub_328C8(void) +{ + sub_300D8(); + sub_32968(); + sub_1F2A4(); + + if (gUnknown_020314E0->unk600 != 0) + gUnknown_020314E0->unk600--; + + sub_2F26C(); + sub_2E67C(); + sub_31144(); + + if (!(gMain.unkF & 0x20)) + sub_2F79C(); +} + +void sub_32914(void) +{ + if (gMain.unkF == 0) + { + switch (gUnknown_020314E0->unk25) + { + case 1: + sub_32B74(); + break; + case 3: + sub_329B0(); + break; + case 4: + sub_1C560(); + break; + } + + gUnknown_020314E0->unk26 = 0x3C; + } +} + +void sub_32968(void) +{ + if (gUnknown_020314E0->unk26 != 0) + gUnknown_020314E0->unk26--; + + switch (gUnknown_020314E0->unk25) + { + case 1: + sub_32BE4(); + break; + case 3: + sub_329F4(); + break; + case 4: + sub_1C5AC(); + break; + } +} + +void sub_329B0(void) +{ + gUnknown_020314E0->unk28 = 0xB4; + gUnknown_020314E0->unk1BA = 0xB4; + gUnknown_020314E0->unk3C = 500000; + gMain.blendControl = 0xCE; + gMain.blendBrightness = 0; + gUnknown_020314E0->unk5F7 = 1; +}