diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/party_menu.c | 384 |
1 files changed, 68 insertions, 316 deletions
diff --git a/src/party_menu.c b/src/party_menu.c index 7fd548bbe..1608ea5d6 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1538,339 +1538,91 @@ void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directio } } -// too many registers allocated, the function takes 0x4c more bytes -#ifdef NONMATCHING void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) { - s8 menuMovement; - u16 var1; - u8 var2; - - menuMovement = directionPressed + 2; - switch (menuMovement) + switch (directionPressed) { - case 2: // no movement - gSprites[spriteId].data[1] = 0; - break; - case 3: // moving down - if (menuIndex == 7) { - gSprites[spriteId].data[0] = 0; - } else { - while (menuIndex != PARTY_SIZE - 1) { - menuIndex++; - if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES)) - { - gSprites[spriteId].data[0] = menuIndex; - gSprites[spriteId].data[1] = 0; - return; - } + case 0: // no movement + gSprites[spriteId].data[1] = 0; + break; + case 1: // moving down + if (menuIndex == 7) { + gSprites[spriteId].data[0] = 0; + } + else + { + while (1) + { + if (menuIndex == PARTY_SIZE - 1) + { + gSprites[spriteId].data[0] = 7; + break; } - - gSprites[spriteId].data[0] = 7; - } - - gSprites[spriteId].data[1] = 0; - break; - case 1: // moving up - while (menuIndex != 0) { - menuIndex--; - if (menuIndex != PARTY_SIZE && GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) + menuIndex++; + if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES) != SPECIES_NONE) { gSprites[spriteId].data[0] = menuIndex; - gSprites[spriteId].data[1] = 0; - return; + break; } } + } + gSprites[spriteId].data[1] = 0; + break; + case -1: // moving up + while (1) + { + if (menuIndex == 0) + { + gSprites[spriteId].data[0] = 7; + break; + } + menuIndex--; + if (menuIndex != PARTY_SIZE && GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES) != SPECIES_NONE) + { + gSprites[spriteId].data[0] = menuIndex; + break; + } + } - gSprites[spriteId].data[0] = 7; - gSprites[spriteId].data[1] = 0; - break; - case 4: // moving right - if (menuIndex == 0) { - var1 = gSprites[spriteId].data[1] - 2; - if (var1 > 1) { - if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { - gSprites[spriteId].data[0] = 2; - } else if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { - gSprites[spriteId].data[0] = 3; - } - } else { - gSprites[spriteId].data[0] = 1; - } - } else if (menuIndex == 1) { - var1 = gSprites[spriteId].data[1] - 4; - if (var1 <= 1) { - gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; - } else { - if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { - gSprites[spriteId].data[0] = 4; - } else if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { - gSprites[spriteId].data[0] = 5; - } + gSprites[spriteId].data[1] = 0; + break; + case 2: // moving right + if (menuIndex == 0) { + if (gSprites[spriteId].data[1] < 2 || gSprites[spriteId].data[1] > 3) { + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE) { + gSprites[spriteId].data[0] = 2; + } else if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE) { + gSprites[spriteId].data[0] = 3; } + } else { + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } - break; - case 0: // moving left - var2 = menuIndex - 2; - if (var2 <= 1) { - gSprites[spriteId].data[0] = 0; - gSprites[spriteId].data[1] = menuIndex; + } else if (menuIndex == 1) { + if (gSprites[spriteId].data[1] >= 4 && gSprites[spriteId].data[1] <= 5) { + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } else { - var2 = menuIndex - 4; - if (var2 <= 1) { - gSprites[spriteId].data[0] = 1; - gSprites[spriteId].data[1] = menuIndex; + if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE) { + gSprites[spriteId].data[0] = 4; + } else if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE) { + gSprites[spriteId].data[0] = 5; } } - - break; + } + break; + case -2: // moving left + if (menuIndex > 1 && menuIndex < 4) { + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = menuIndex; + } else { + if (menuIndex > 3 && menuIndex < 6) { + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = menuIndex; + } + } + break; } } -#else -NAKED -void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r1, 24\n\ - lsrs r4, r1, 24\n\ - lsls r2, 24\n\ - movs r0, 0x80\n\ - lsls r0, 18\n\ - adds r2, r0\n\ - asrs r0, r2, 24\n\ - cmp r0, 0x4\n\ - bls _0806C4AA\n\ - b _0806C64E\n\ -_0806C4AA:\n\ - lsls r0, 2\n\ - ldr r1, _0806C4B4 @ =_0806C4B8\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0806C4B4: .4byte _0806C4B8\n\ - .align 2, 0\n\ -_0806C4B8:\n\ - .4byte _0806C618\n\ - .4byte _0806C524\n\ - .4byte _0806C4CC\n\ - .4byte _0806C4E0\n\ - .4byte _0806C57C\n\ -_0806C4CC:\n\ - ldr r0, _0806C4DC @ =gSprites\n\ - lsls r1, r5, 4\n\ - adds r1, r5\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - movs r0, 0\n\ - strh r0, [r1, 0x30]\n\ - b _0806C64E\n\ - .align 2, 0\n\ -_0806C4DC: .4byte gSprites\n\ -_0806C4E0:\n\ - cmp r4, 0x7\n\ - bne _0806C4FC\n\ - ldr r2, _0806C4F8 @ =gSprites\n\ - lsls r3, r5, 4\n\ - adds r0, r3, r5\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - movs r1, 0\n\ - strh r1, [r0, 0x2E]\n\ - adds r1, r2, 0\n\ - adds r6, r3, 0\n\ - b _0806C566\n\ - .align 2, 0\n\ -_0806C4F8: .4byte gSprites\n\ -_0806C4FC:\n\ - lsls r6, r5, 4\n\ - b _0806C518\n\ -_0806C500:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - movs r0, 0x64\n\ - muls r0, r4\n\ - ldr r1, _0806C520 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0806C528\n\ -_0806C518:\n\ - cmp r4, 0x5\n\ - bne _0806C500\n\ - b _0806C558\n\ - .align 2, 0\n\ -_0806C520: .4byte gPlayerParty\n\ -_0806C524:\n\ - lsls r6, r5, 4\n\ - b _0806C554\n\ -_0806C528:\n\ - ldr r1, _0806C534 @ =gSprites\n\ - adds r0, r6, r5\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - strh r4, [r0, 0x2E]\n\ - b _0806C566\n\ - .align 2, 0\n\ -_0806C534: .4byte gSprites\n\ -_0806C538:\n\ - subs r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x6\n\ - beq _0806C554\n\ - movs r0, 0x64\n\ - muls r0, r4\n\ - ldr r1, _0806C574 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0806C528\n\ -_0806C554:\n\ - cmp r4, 0\n\ - bne _0806C538\n\ -_0806C558:\n\ - ldr r0, _0806C578 @ =gSprites\n\ - adds r1, r6, r5\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - movs r2, 0x7\n\ - strh r2, [r1, 0x2E]\n\ - adds r1, r0, 0\n\ -_0806C566:\n\ - adds r0, r6, r5\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - movs r1, 0\n\ - strh r1, [r0, 0x30]\n\ - b _0806C64E\n\ - .align 2, 0\n\ -_0806C574: .4byte gPlayerParty\n\ -_0806C578: .4byte gSprites\n\ -_0806C57C:\n\ - cmp r4, 0\n\ - bne _0806C5C8\n\ - ldr r0, _0806C5AC @ =gSprites\n\ - lsls r1, r5, 4\n\ - adds r1, r5\n\ - lsls r1, 2\n\ - adds r4, r1, r0\n\ - ldrh r1, [r4, 0x30]\n\ - subs r0, r1, 0x2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bls _0806C5E2\n\ - ldr r5, _0806C5B0 @ =gPlayerParty + 2 * 0x64\n\ - adds r0, r5, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806C5B4\n\ - movs r0, 0x2\n\ - strh r0, [r4, 0x2E]\n\ - b _0806C64E\n\ - .align 2, 0\n\ -_0806C5AC: .4byte gSprites\n\ -_0806C5B0: .4byte gPlayerParty + 2 * 0x64\n\ -_0806C5B4:\n\ - adds r0, r5, 0\n\ - adds r0, 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806C64E\n\ - movs r0, 0x3\n\ - strh r0, [r4, 0x2E]\n\ - b _0806C64E\n\ -_0806C5C8:\n\ - cmp r4, 0x1\n\ - bne _0806C64E\n\ - ldr r0, _0806C5E8 @ =gSprites\n\ - lsls r1, r5, 4\n\ - adds r1, r5\n\ - lsls r1, 2\n\ - adds r4, r1, r0\n\ - ldrh r1, [r4, 0x30]\n\ - subs r0, r1, 0x4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bhi _0806C5EC\n\ -_0806C5E2:\n\ - strh r1, [r4, 0x2E]\n\ - b _0806C64E\n\ - .align 2, 0\n\ -_0806C5E8: .4byte gSprites\n\ -_0806C5EC:\n\ - ldr r5, _0806C600 @ =gPlayerParty + 4 * 0x64\n\ - adds r0, r5, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806C604\n\ - movs r0, 0x4\n\ - strh r0, [r4, 0x2E]\n\ - b _0806C64E\n\ - .align 2, 0\n\ -_0806C600: .4byte gPlayerParty + 4 * 0x64\n\ -_0806C604:\n\ - adds r0, r5, 0\n\ - adds r0, 0x64\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0806C64E\n\ - movs r0, 0x5\n\ - strh r0, [r4, 0x2E]\n\ - b _0806C64E\n\ -_0806C618:\n\ - subs r0, r4, 0x2\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bhi _0806C634\n\ - ldr r0, _0806C630 @ =gSprites\n\ - lsls r1, r5, 4\n\ - adds r1, r5\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - movs r0, 0\n\ - b _0806C64A\n\ - .align 2, 0\n\ -_0806C630: .4byte gSprites\n\ -_0806C634:\n\ - subs r0, r4, 0x4\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bhi _0806C64E\n\ - ldr r0, _0806C654 @ =gSprites\n\ - lsls r1, r5, 4\n\ - adds r1, r5\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - movs r0, 0x1\n\ -_0806C64A:\n\ - strh r0, [r1, 0x2E]\n\ - strh r4, [r1, 0x30]\n\ -_0806C64E:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0806C654: .4byte gSprites\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) { u16 newMenuIndex; |