diff options
-rw-r--r-- | include/party_menu.h | 1 | ||||
-rw-r--r-- | src/party_menu.c | 584 |
2 files changed, 146 insertions, 439 deletions
diff --git a/include/party_menu.h b/include/party_menu.h index 3dc46992e..cf227335b 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -78,7 +78,6 @@ void OpenPartyMenu(u8 a, u8 b); bool8 InitPartyMenu(void); bool8 IsLinkDoubleBattle(void); u8 sub_806B58C(u8); -u8 sub_806B58C(u8); void sub_806B908(void); void sub_806BC3C(u8, u8); void sub_806BCE8(void); diff --git a/src/party_menu.c b/src/party_menu.c index 2288da452..eb1f06f59 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -96,6 +96,9 @@ static bool8 sub_806AFD0(void); static void sub_806B4A8(void); static void sub_806AF34(void); static bool8 LoadPartyMenuGraphics(u8 a); +static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); +static void sub_806BB9C(u8 a); +static void sub_806BBEC(u8 a); const u16 TMHMMoves[] = { MOVE_FOCUS_PUNCH, @@ -879,445 +882,150 @@ void sub_806B548(void) } } -__attribute__((naked)) -u8 sub_806B58C(u8 a) +bool8 sub_806B58C(u8 a) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r2, 0\n\ - bne _0806B5A8\n\ - ldr r0, _0806B5A4 @ =gUnknown_0202E8FA\n\ - strb r2, [r0]\n\ - b _0806B5C8\n\ - .align 2, 0\n\ -_0806B5A4: .4byte gUnknown_0202E8FA\n\ -_0806B5A8:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B5C0\n\ - ldr r1, _0806B5BC @ =gUnknown_0202E8FA\n\ - movs r0, 0x2\n\ - b _0806B5C4\n\ - .align 2, 0\n\ -_0806B5BC: .4byte gUnknown_0202E8FA\n\ -_0806B5C0:\n\ - ldr r1, _0806B5E4 @ =gUnknown_0202E8FA\n\ - movs r0, 0x1\n\ -_0806B5C4:\n\ - strb r0, [r1]\n\ - adds r0, r1, 0\n\ -_0806B5C8:\n\ - ldrb r0, [r0]\n\ - lsls r1, r0, 1\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - ldr r0, _0806B5E8 @ =gUnknown_083769A8\n\ - adds r4, r1, r0\n\ - cmp r5, 0x8\n\ - bls _0806B5DA\n\ - b _0806B900\n\ -_0806B5DA:\n\ - lsls r0, r5, 2\n\ - ldr r1, _0806B5EC @ =_0806B5F0\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0806B5E4: .4byte gUnknown_0202E8FA\n\ -_0806B5E8: .4byte gUnknown_083769A8\n\ -_0806B5EC: .4byte _0806B5F0\n\ - .align 2, 0\n\ -_0806B5F0:\n\ - .4byte _0806B614\n\ - .4byte _0806B628\n\ - .4byte _0806B638\n\ - .4byte _0806B694\n\ - .4byte _0806B71A\n\ - .4byte _0806B7A2\n\ - .4byte _0806B832\n\ - .4byte _0806B8C6\n\ - .4byte _0806B8E8\n\ -_0806B614:\n\ - ldr r0, _0806B624 @ =gBGTilemapBuffers + 0x1000\n\ - movs r2, 0x80\n\ - lsls r2, 4\n\ - movs r1, 0\n\ - bl memset\n\ - b _0806B900\n\ - .align 2, 0\n\ -_0806B624: .4byte gBGTilemapBuffers + 0x1000\n\ -_0806B628:\n\ - ldrb r0, [r4]\n\ - ldrb r1, [r4, 0x1]\n\ - movs r2, 0x3\n\ - bl sub_806B9A4\n\ - adds r0, r4, 0\n\ - movs r1, 0\n\ - b _0806B8A8\n\ -_0806B638:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B666\n\ - ldr r0, _0806B65C @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bls _0806B660\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B65C: .4byte gPlayerPartyCount\n\ -_0806B660:\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - b _0806B8BC\n\ -_0806B666:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B684\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r2, 0x4\n\ - bl sub_806B9A4\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - movs r2, 0x4\n\ - b _0806B8AA\n\ -_0806B684:\n\ - ldrb r0, [r4, 0x2]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r2, 0x3\n\ - bl sub_806B9A4\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - b _0806B8A8\n\ -_0806B694:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B6C2\n\ - ldr r0, _0806B6B8 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bls _0806B6BC\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x4\n\ - movs r1, 0x2\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B6B8: .4byte gPlayerPartyCount\n\ -_0806B6BC:\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - b _0806B8BC\n\ -_0806B6C2:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B6F6\n\ - ldr r0, _0806B6EC @ =gPlayerParty + 2 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B6F0\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x4\n\ - movs r1, 0x2\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B6EC: .4byte gPlayerParty + 2 * 0x64\n\ -_0806B6F0:\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - b _0806B8BC\n\ -_0806B6F6:\n\ - ldr r0, _0806B710 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x2\n\ - bls _0806B714\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x4\n\ - movs r1, 0x2\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B710: .4byte gPlayerPartyCount\n\ -_0806B714:\n\ - ldrb r0, [r4, 0x4]\n\ - ldrb r1, [r4, 0x5]\n\ - b _0806B8BC\n\ -_0806B71A:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B74A\n\ - ldr r0, _0806B740 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - bls _0806B744\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x6\n\ - movs r1, 0x3\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B740: .4byte gPlayerPartyCount\n\ -_0806B744:\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - b _0806B8BC\n\ -_0806B74A:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B77E\n\ - ldr r0, _0806B774 @ =gPlayerParty + 3 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B778\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x6\n\ - movs r1, 0x3\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B774: .4byte gPlayerParty + 3 * 0x64\n\ -_0806B778:\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - b _0806B8BC\n\ -_0806B77E:\n\ - ldr r0, _0806B798 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3\n\ - bls _0806B79C\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0x6\n\ - movs r1, 0x3\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B798: .4byte gPlayerPartyCount\n\ -_0806B79C:\n\ - ldrb r0, [r4, 0x6]\n\ - ldrb r1, [r4, 0x7]\n\ - b _0806B8BC\n\ -_0806B7A2:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B7D2\n\ - ldr r0, _0806B7C8 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bls _0806B7CC\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - movs r1, 0x4\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B7C8: .4byte gPlayerPartyCount\n\ -_0806B7CC:\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - b _0806B8BC\n\ -_0806B7D2:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B80A\n\ - ldr r0, _0806B800 @ =gPlayerParty + 4 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B804\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - movs r1, 0x4\n\ - movs r2, 0x4\n\ - b _0806B8AA\n\ - .align 2, 0\n\ -_0806B800: .4byte gPlayerParty + 4 * 0x64\n\ -_0806B804:\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - b _0806B884\n\ -_0806B80A:\n\ - ldr r0, _0806B828 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bls _0806B82C\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - movs r1, 0x4\n\ - b _0806B8A8\n\ - .align 2, 0\n\ -_0806B828: .4byte gPlayerPartyCount\n\ -_0806B82C:\n\ - ldrb r0, [r4, 0x8]\n\ - ldrb r1, [r4, 0x9]\n\ - b _0806B8BC\n\ -_0806B832:\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0806B84C\n\ - ldr r0, _0806B848 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bhi _0806B896\n\ - b _0806B8B8\n\ - .align 2, 0\n\ -_0806B848: .4byte gPlayerPartyCount\n\ -_0806B84C:\n\ - bl IsLinkDoubleBattle\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _0806B88E\n\ - ldr r0, _0806B87C @ =gPlayerParty + 5 * 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806B880\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0xA\n\ - movs r1, 0x5\n\ - movs r2, 0x4\n\ - b _0806B8AA\n\ - .align 2, 0\n\ -_0806B87C: .4byte gPlayerParty + 5 * 0x64\n\ -_0806B880:\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ -_0806B884:\n\ - movs r2, 0x1\n\ - movs r3, 0x4\n\ - bl sub_806BA94\n\ - b _0806B900\n\ -_0806B88E:\n\ - ldr r0, _0806B8B4 @ =gPlayerPartyCount\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bls _0806B8B8\n\ -_0806B896:\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ - movs r2, 0\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - adds r0, r4, 0\n\ - adds r0, 0xA\n\ - movs r1, 0x5\n\ -_0806B8A8:\n\ - movs r2, 0x3\n\ -_0806B8AA:\n\ - movs r3, 0\n\ - bl sub_806BF24\n\ - b _0806B900\n\ - .align 2, 0\n\ -_0806B8B4: .4byte gPlayerPartyCount\n\ -_0806B8B8:\n\ - ldrb r0, [r4, 0xA]\n\ - ldrb r1, [r4, 0xB]\n\ -_0806B8BC:\n\ - movs r2, 0x1\n\ - movs r3, 0x3\n\ - bl sub_806BA94\n\ - b _0806B900\n\ -_0806B8C6:\n\ - ldr r0, _0806B8E4 @ =0x0201b000\n\ - movs r1, 0x96\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x4\n\ - bne _0806B8DA\n\ - movs r0, 0x1\n\ - bl sub_806BB9C\n\ -_0806B8DA:\n\ - movs r0, 0x1\n\ - bl sub_806BBEC\n\ - b _0806B900\n\ - .align 2, 0\n\ -_0806B8E4: .4byte 0x0201b000\n\ -_0806B8E8:\n\ - ldr r0, _0806B8F8 @ =0x0201b000\n\ - ldr r1, _0806B8FC @ =0x00000261\n\ - adds r0, r1\n\ - movs r1, 0x2\n\ - strb r1, [r0]\n\ - movs r0, 0x1\n\ - b _0806B902\n\ - .align 2, 0\n\ -_0806B8F8: .4byte 0x0201b000\n\ -_0806B8FC: .4byte 0x00000261\n\ -_0806B900:\n\ - movs r0, 0\n\ -_0806B902:\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + const u8 *arr; + + if (!IsDoubleBattle()) + gUnknown_0202E8FA = 0; + else if (IsLinkDoubleBattle() == TRUE) + gUnknown_0202E8FA = 2; + else + gUnknown_0202E8FA = 1; + + arr = &gUnknown_083769A8[gUnknown_0202E8FA * 12]; + + switch (a) + { + case 0: + memset(&gBGTilemapBuffers[2], 0, 0x800); + break; + case 1: + sub_806B9A4(arr[0], arr[1], 3); + sub_806BF24(&arr[0], 0, 3, 0); + break; + case 2: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 1) { + sub_806BA94(arr[2], arr[3], 0, 3); + sub_806BF24(&arr[2], 1, 3, 0); + } else { + sub_806BA94(arr[2], arr[3], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + sub_806B9A4(arr[2], arr[3], 4); + sub_806BF24(&arr[2], 1, 4, 0); + } else { + sub_806B9A4(arr[2], arr[3], 3); + sub_806BF24(&arr[2], 1, 3, 0); + } + + break; + case 3: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 2) { + sub_806BA94(arr[4], arr[5], 0, 3); + sub_806BF24(&arr[4], 2, 3, 0); + } else { + sub_806BA94(arr[4], arr[5], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { + sub_806BA94(arr[4], arr[5], 0, 3); + sub_806BF24(&arr[4], 2, 3, 0); + } else { + sub_806BA94(arr[4], arr[5], 1, 3); + } + } else if (gPlayerPartyCount > 2) { + sub_806BA94(arr[4], arr[5], 0, 3); + sub_806BF24(&arr[4], 2, 3, 0); + } else { + sub_806BA94(arr[4], arr[5], 1, 3); + } + + break; + case 4: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 3) { + sub_806BA94(arr[6], arr[7], 0, 3); + sub_806BF24(&arr[6], 3, 3, 0); + } else { + sub_806BA94(arr[6], arr[7], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { + sub_806BA94(arr[6], arr[7], 0, 3); + sub_806BF24(&arr[6], 3, 3, 0); + } else { + sub_806BA94(arr[6], arr[7], 1, 3); + } + } else if (gPlayerPartyCount > 3) { + sub_806BA94(arr[6], arr[7], 0, 3); + sub_806BF24(&arr[6], 3, 3, 0); + } else { + sub_806BA94(arr[6], arr[7], 1, 3); + } + + break; + case 5: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 4) { + sub_806BA94(arr[8], arr[9], 0, 3); + sub_806BF24(&arr[8], 4, 3, 0); + } else { + sub_806BA94(arr[8], arr[9], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { + sub_806BA94(arr[8], arr[9], 0, 4); + sub_806BF24(&arr[8], 4, 4, 0); + } else { + sub_806BA94(arr[8], arr[9], 1, 4); + } + } else if (gPlayerPartyCount > 4) { + sub_806BA94(arr[8], arr[9], 0, 3); + sub_806BF24(&arr[8], 4, 3, 0); + } else { + sub_806BA94(arr[8], arr[9], 1, 3); + } + + break; + case 6: + if (!IsDoubleBattle()) { + if (gPlayerPartyCount > 5) { + sub_806BA94(arr[10], arr[11], 0, 3); + sub_806BF24(&arr[10], 5, 3, 0); + } else { + sub_806BA94(arr[10], arr[11], 1, 3); + } + } else if (IsLinkDoubleBattle() == TRUE) { + if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { + sub_806BA94(arr[10], arr[11], 0, 4); + sub_806BF24(&arr[10], 5, 4, 0); + } else { + sub_806BA94(arr[10], arr[11], 1, 4); + } + } else if (gPlayerPartyCount > 5) { + sub_806BA94(arr[10], arr[11], 0, 3); + sub_806BF24(&arr[10], 5, 3, 0); + } else { + sub_806BA94(arr[10], arr[11], 1, 3); + } + + break; + case 7: + if (ewram1B000.unk258 == 4) { + sub_806BB9C(1); + } + + sub_806BBEC(1); + break; + case 8: + ewram1B000.unk261 = 2; + return TRUE; + } + + return FALSE; } #ifdef NONMATCHING |