diff options
-rw-r--r-- | asm/battle_party_menu.s | 620 | ||||
-rw-r--r-- | asm/choose_party.s | 4 | ||||
-rw-r--r-- | asm/party_menu.s | 6 | ||||
-rw-r--r-- | asm/pokemon_menu.s | 4 | ||||
-rw-r--r-- | data/battle_party_menu.s | 34 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle_party_menu.c | 296 |
7 files changed, 265 insertions, 702 deletions
diff --git a/asm/battle_party_menu.s b/asm/battle_party_menu.s deleted file mode 100644 index 4599c51ac..000000000 --- a/asm/battle_party_menu.s +++ /dev/null @@ -1,620 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_809538C -sub_809538C: @ 809538C - push {r4,r5,lr} - ldr r4, _080953D8 @ =0x0201b260 - ldr r5, _080953DC @ =gUnknown_020384F0 -_08095392: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080953F4 - ldrb r0, [r4] - ldrb r1, [r5] - bl sub_806C994 - ldrb r0, [r4] - movs r1, 0 - bl sub_806BF74 - ldrb r1, [r5] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080953E0 @ =gPlayerParty - adds r0, r1 - ldr r1, _080953E4 @ =gStringVar1 - bl GetMonNickname - ldrb r0, [r4] - ldrb r1, [r5] - bl sub_8095050 - ldrb r0, [r4] - ldr r1, _080953E8 @ =sub_8095408 - ldr r2, _080953EC @ =SetUpBattlePokemonMenu - bl SetTaskFuncWithFollowupFunc - ldr r0, _080953F0 @ =sub_806AEDC - bl SetMainCallback2 - b _08095400 - .align 2, 0 -_080953D8: .4byte 0x0201b260 -_080953DC: .4byte gUnknown_020384F0 -_080953E0: .4byte gPlayerParty -_080953E4: .4byte gStringVar1 -_080953E8: .4byte sub_8095408 -_080953EC: .4byte SetUpBattlePokemonMenu -_080953F0: .4byte sub_806AEDC -_080953F4: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08095392 -_08095400: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_809538C - - thumb_func_start sub_8095408 -sub_8095408: @ 8095408 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, r7, 0 - ldr r0, _0809543C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r3, 0x80 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _080954B8 - ldr r2, _08095440 @ =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08095444 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - b _080954B8 - .align 2, 0 -_0809543C: .4byte gPaletteFade -_08095440: .4byte gMain -_08095444: - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0809545A - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl MoveMenuCursor - b _080954B8 -_0809545A: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080954A4 - movs r0, 0x5 - bl PlaySE - ldr r1, _08095498 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldrb r4, [r0, 0x10] - ldr r5, _0809549C @ =gUnknown_083B5FF4 - ldr r6, _080954A0 @ =gUnknown_083B5FCC - bl GetMenuCursorPos - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl sub_806E81C - adds r1, r0, 0 - adds r0, r7, 0 - bl _call_via_r1 - b _080954B8 - .align 2, 0 -_08095498: .4byte gTasks -_0809549C: .4byte gUnknown_083B5FF4 -_080954A0: .4byte gUnknown_083B5FCC -_080954A4: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080954B8 - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl BattlePokemonMenu_Cancel -_080954B8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8095408 - - thumb_func_start sub_80954C0 -sub_80954C0: @ 80954C0 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _080954D8 @ =gUnknown_0202E8F6 - ldrb r0, [r0] - cmp r0, 0 - bne _080954D4 - adds r0, r1, 0 - bl BattlePokemonMenu_Cancel -_080954D4: - pop {r0} - bx r0 - .align 2, 0 -_080954D8: .4byte gUnknown_0202E8F6 - thumb_func_end sub_80954C0 - - thumb_func_start BattleShowPokemonSummaryScreen -BattleShowPokemonSummaryScreen: @ 80954DC - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0809552C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08095522 - adds r0, r4, 0 - bl DestroyTask - ldr r0, _08095530 @ =0x0201b000 - ldr r1, _08095534 @ =0x00000262 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _08095538 @ =gPlayerParty - ldr r1, _0809553C @ =gPlayerPartyCount - ldrb r2, [r1] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _08095540 @ =sub_809535C - movs r1, 0x4 - str r1, [sp] - adds r1, r5, 0 - bl ShowPokemonSummaryScreen -_08095522: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809552C: .4byte gPaletteFade -_08095530: .4byte 0x0201b000 -_08095534: .4byte 0x00000262 -_08095538: .4byte gPlayerParty -_0809553C: .4byte gPlayerPartyCount -_08095540: .4byte sub_809535C - thumb_func_end BattleShowPokemonSummaryScreen - - thumb_func_start BattlePokemonMenu_Summary -BattlePokemonMenu_Summary: @ 8095544 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_806CA38 - ldr r1, _0809557C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08095580 @ =BattleShowPokemonSummaryScreen - str r1, [r0] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809557C: .4byte gTasks -_08095580: .4byte BattleShowPokemonSummaryScreen - thumb_func_end BattlePokemonMenu_Summary - - thumb_func_start BattlePokemonMenu_Shift -BattlePokemonMenu_Shift: @ 8095584 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080955F8 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x10] - ldr r1, _080955FC @ =gUnknown_083B5FF4 - bl sub_806E7D0 - adds r0, r6, 0 - bl sub_806CA38 - lsls r0, 24 - lsrs r5, r0, 24 - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08095610 - cmp r5, 0x1 - beq _080955C6 - cmp r5, 0x4 - beq _080955C6 - cmp r5, 0x5 - bne _08095610 -_080955C6: - bl sub_806D5A4 - ldr r4, _08095600 @ =gStringVar1 - bl sub_8040D08 - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy - ldr r4, _08095604 @ =gStringVar4 - ldr r1, _08095608 @ =gOtherText_CantSwitchPokeWithYours - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_806E834 - ldr r1, _080955F8 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809560C @ =sub_80954C0 - b _0809589A - .align 2, 0 -_080955F8: .4byte gTasks -_080955FC: .4byte gUnknown_083B5FF4 -_08095600: .4byte gStringVar1 -_08095604: .4byte gStringVar4 -_08095608: .4byte gOtherText_CantSwitchPokeWithYours -_0809560C: .4byte sub_80954C0 -_08095610: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08095654 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _0809566C - bl sub_806D5A4 - ldr r1, _08095658 @ =gStringVar1 - adds r0, r4, 0 - bl GetMonNickname - ldr r4, _0809565C @ =gStringVar4 - ldr r1, _08095660 @ =gOtherText_NoEnergyLeft - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_806E834 - ldr r1, _08095664 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08095668 @ =sub_80954C0 - b _0809589A - .align 2, 0 -_08095654: .4byte gPlayerParty -_08095658: .4byte gStringVar1 -_0809565C: .4byte gStringVar4 -_08095660: .4byte gOtherText_NoEnergyLeft -_08095664: .4byte gTasks -_08095668: .4byte sub_80954C0 -_0809566C: - movs r4, 0 - ldr r0, _08095678 @ =gUnknown_02024A68 - lsls r1, r6, 2 - mov r8, r1 - b _080956A8 - .align 2, 0 -_08095678: .4byte gUnknown_02024A68 -_0809567C: - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080956A0 - adds r0, r5, 0 - bl sub_8094C20 - lsls r0, 24 - ldr r2, _080956EC @ =gUnknown_02024A6A - lsls r1, r4, 1 - adds r1, r2 - lsrs r0, 24 - ldrh r1, [r1] - cmp r0, r1 - bne _080956A0 - b _08095808 -_080956A0: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080956F0 @ =gUnknown_02024A68 -_080956A8: - ldrb r0, [r0] - cmp r4, r0 - bcc _0809567C - movs r2, 0x64 - mov r9, r2 - mov r0, r9 - muls r0, r5 - ldr r1, _080956F4 @ =gPlayerParty - mov r10, r1 - adds r7, r0, r1 - adds r0, r7, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - beq _08095708 - bl sub_806D5A4 - ldr r4, _080956F8 @ =gStringVar4 - ldr r1, _080956FC @ =gOtherText_EGGCantBattle - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_806E834 - ldr r1, _08095700 @ =gTasks - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08095704 @ =sub_80954C0 - b _0809589A - .align 2, 0 -_080956EC: .4byte gUnknown_02024A6A -_080956F0: .4byte gUnknown_02024A68 -_080956F4: .4byte gPlayerParty -_080956F8: .4byte gStringVar4 -_080956FC: .4byte gOtherText_EGGCantBattle -_08095700: .4byte gTasks -_08095704: .4byte sub_80954C0 -_08095708: - adds r0, r5, 0 - bl sub_8094C20 - ldr r1, _0809574C @ =0x02000000 - ldr r2, _08095750 @ =0x0001609d - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bne _08095768 - bl sub_806D5A4 - ldr r1, _08095754 @ =gStringVar1 - adds r0, r7, 0 - bl GetMonNickname - ldr r4, _08095758 @ =gStringVar4 - ldr r1, _0809575C @ =gOtherText_AlreadySelected - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_806E834 - ldr r1, _08095760 @ =gTasks - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08095764 @ =sub_80954C0 - b _0809589A - .align 2, 0 -_0809574C: .4byte 0x02000000 -_08095750: .4byte 0x0001609d -_08095754: .4byte gStringVar1 -_08095758: .4byte gStringVar4 -_0809575C: .4byte gOtherText_AlreadySelected -_08095760: .4byte gTasks -_08095764: .4byte sub_80954C0 -_08095768: - ldr r0, _08095790 @ =gUnknown_02038473 - ldrb r0, [r0] - cmp r0, 0x4 - bne _080957A0 - bl sub_806D5A4 - bl sub_8040B8C - ldr r0, _08095794 @ =gStringVar4 - movs r1, 0 - bl sub_806E834 - ldr r1, _08095798 @ =gTasks - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809579C @ =sub_80954C0 - b _0809589A - .align 2, 0 -_08095790: .4byte gUnknown_02038473 -_08095794: .4byte gStringVar4 -_08095798: .4byte gTasks -_0809579C: .4byte sub_80954C0 -_080957A0: - cmp r0, 0x2 - bne _08095854 - ldr r0, _080957EC @ =gUnknown_02024E6C - ldrb r4, [r0] - bl sub_806D5A4 - ldr r0, _080957F0 @ =gUnknown_02024A6A - lsls r4, 1 - adds r4, r0 - ldrb r0, [r4] - bl pokemon_order_func - lsls r0, 24 - lsrs r0, 24 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - add r0, r10 - ldr r1, _080957F4 @ =gStringVar1 - bl GetMonNickname - ldr r4, _080957F8 @ =gStringVar4 - ldr r1, _080957FC @ =gOtherText_CantBeSwitched - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_806E834 - ldr r1, _08095800 @ =gTasks - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08095804 @ =sub_80954C0 - b _0809589A - .align 2, 0 -_080957EC: .4byte gUnknown_02024E6C -_080957F0: .4byte gUnknown_02024A6A -_080957F4: .4byte gStringVar1 -_080957F8: .4byte gStringVar4 -_080957FC: .4byte gOtherText_CantBeSwitched -_08095800: .4byte gTasks -_08095804: .4byte sub_80954C0 -_08095808: - bl sub_806D5A4 - movs r0, 0x64 - muls r0, r5 - ldr r1, _0809583C @ =gPlayerParty - adds r0, r1 - ldr r1, _08095840 @ =gStringVar1 - bl GetMonNickname - ldr r4, _08095844 @ =gStringVar4 - ldr r1, _08095848 @ =gOtherText_AlreadyBattle - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_806E834 - ldr r1, _0809584C @ =gTasks - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08095850 @ =sub_80954C0 - b _0809589A - .align 2, 0 -_0809583C: .4byte gPlayerParty -_08095840: .4byte gStringVar1 -_08095844: .4byte gStringVar4 -_08095848: .4byte gOtherText_AlreadyBattle -_0809584C: .4byte gTasks -_08095850: .4byte sub_80954C0 -_08095854: - adds r0, r5, 0 - bl sub_8094C20 - ldr r1, _080958AC @ =gUnknown_0202E8F5 - strb r0, [r1] - ldr r1, _080958B0 @ =gUnknown_0202E8F4 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _080958B4 @ =gUnknown_02024A6A - ldr r0, _080958B8 @ =gUnknown_02024E6C - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - bl pokemon_order_func - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8094C98 - mov r0, r9 - muls r0, r4 - add r0, r10 - adds r1, r7, 0 - bl sub_806E6F0 - ldr r1, _080958BC @ =gTasks - mov r2, r8 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _080958C0 @ =sub_809527C -_0809589A: - str r1, [r0] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080958AC: .4byte gUnknown_0202E8F5 -_080958B0: .4byte gUnknown_0202E8F4 -_080958B4: .4byte gUnknown_02024A6A -_080958B8: .4byte gUnknown_02024E6C -_080958BC: .4byte gTasks -_080958C0: .4byte sub_809527C - thumb_func_end BattlePokemonMenu_Shift - - thumb_func_start BattlePokemonMenu_Cancel -BattlePokemonMenu_Cancel: @ 80958C4 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - bl sub_8072DEC - ldr r0, _080958FC @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - ldrb r0, [r4, 0x10] - ldr r1, _08095900 @ =gUnknown_083B5FF4 - bl sub_806E7D0 - ldrh r0, [r4, 0x12] - strh r0, [r4, 0x10] - movs r0, 0 - movs r1, 0 - bl sub_806D538 - adds r0, r5, 0 - bl SwitchTaskToFollowupFunc - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080958FC: .4byte gTasks -_08095900: .4byte gUnknown_083B5FF4 - thumb_func_end BattlePokemonMenu_Cancel - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/choose_party.s b/asm/choose_party.s index c895e71e0..673933814 100644 --- a/asm/choose_party.s +++ b/asm/choose_party.s @@ -775,7 +775,7 @@ _081223F2: adds r0, r4, 0 adds r1, r5, 0 adds r2, r6, 0 - bl sub_806E81C + bl PartyMenuGetPopupMenuFunc adds r1, r0, 0 adds r0, r7, 0 bl _call_via_r1 @@ -2176,7 +2176,7 @@ _08122F12: adds r0, r4, 0 adds r1, r5, 0 adds r2, r6, 0 - bl sub_806E81C + bl PartyMenuGetPopupMenuFunc adds r1, r0, 0 adds r0, r7, 0 bl _call_via_r1 diff --git a/asm/party_menu.s b/asm/party_menu.s index 9d8377f7e..02959f0c3 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -7430,8 +7430,8 @@ sub_806E7D0: @ 806E7D0 bx r0 thumb_func_end sub_806E7D0 - thumb_func_start sub_806E81C -sub_806E81C: @ 806E81C + thumb_func_start PartyMenuGetPopupMenuFunc +PartyMenuGetPopupMenuFunc: @ 806E81C lsls r0, 24 lsls r3, 24 lsrs r3, 24 @@ -7444,7 +7444,7 @@ sub_806E81C: @ 806E81C adds r0, r2 ldr r0, [r0, 0x4] bx lr - thumb_func_end sub_806E81C + thumb_func_end PartyMenuGetPopupMenuFunc .section .text_806E884 diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s index 6a3fbb170..1ceaaff4f 100644 --- a/asm/pokemon_menu.s +++ b/asm/pokemon_menu.s @@ -784,7 +784,7 @@ _0808A0A4: ldr r0, _0808A0D4 @ =gUnknown_0202FFA8 ldrb r3, [r0] movs r0, 0 - bl sub_806E81C + bl PartyMenuGetPopupMenuFunc adds r1, r0, 0 adds r0, r5, 0 bl _call_via_r1 @@ -1648,7 +1648,7 @@ _0808A7B4: ldr r0, _0808A7EC @ =gUnknown_0202FFA8 ldrb r3, [r0] movs r0, 0 - bl sub_806E81C + bl PartyMenuGetPopupMenuFunc adds r1, r0, 0 adds r0, r5, 0 bl _call_via_r1 diff --git a/data/battle_party_menu.s b/data/battle_party_menu.s deleted file mode 100644 index ce6b49927..000000000 --- a/data/battle_party_menu.s +++ /dev/null @@ -1,34 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_083B5FCC:: @ 83B5FCC - .4byte OtherText_Summary, BattlePokemonMenu_Summary - .4byte gOtherText_CancelNoTerminator, BattlePokemonMenu_Cancel - .4byte OtherText_Shift, BattlePokemonMenu_Shift - .4byte OtherText_SendOut, BattlePokemonMenu_Shift - -Unknown_83B5FEC: @ 83B5FEC - .byte 2, 0, 1 - -Unknown_83B5FEF: @ 83B5FEF - .byte 3, 0, 1 - -Unknown_83B5FF2: @ 83B5FF2 - .byte 0, 1 - - .align 2 -gUnknown_083B5FF4:: @ 83B5FF4 - .byte 3, 9 - .space 2 - .4byte Unknown_83B5FEC - - .byte 3, 9 - .space 2 - .4byte Unknown_83B5FEF - - .byte 2, 9 - .space 2 - .4byte Unknown_83B5FF2 diff --git a/ld_script.txt b/ld_script.txt index d25991f0d..538bdfaba 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -133,7 +133,6 @@ SECTIONS { src/rom_8094928.o(.text); asm/rom_8094928.o(.text); src/battle_party_menu.o(.text); - asm/battle_party_menu.o(.text); asm/pokemon_storage_system.o(.text); asm/pokemon_icon.o(.text); asm/pokemon_summary_screen.o(.text); @@ -351,7 +350,7 @@ SECTIONS { data/option_menu.o(.rodata); data/pokedex.o(.rodata); data/trainer_card.o(.rodata); - data/battle_party_menu.o(.rodata); + src/battle_party_menu.o(.rodata); data/pokemon_storage_system.o(.rodata); data/pokemon_icon.o(.rodata); data/pokemon_summary_screen.o(.rodata); diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index d8b5b48f3..2d6399b8a 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -1,20 +1,22 @@ #include "global.h" #include "asm.h" #include "main.h" +#include "menu.h" #include "palette.h" #include "pokemon.h" #include "songs.h" #include "sound.h" +#include "string_util.h" #include "task.h" #include "text.h" struct PartyMenuItem { const u8 *text; - void (*func)(void); + TaskFunc func; }; -struct UnknownStruct2 +struct PartyPopupMenu { u8 unk0; u8 unk1; @@ -33,7 +35,7 @@ extern void nullsub_13(void); extern void PartyMenuDrawHPBars(void); extern u8 sub_806B58C(u8); extern u8 GetItemEffectType(); -extern void sub_806E750(u8, const struct UnknownStruct2 *, const struct PartyMenuItem *, int); +extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int); extern u16 sub_806BD80(); extern u8 sub_806CA38(); extern void sub_806D5A4(void); @@ -41,6 +43,22 @@ extern void sub_802E414(void); extern void sub_8094D60(void); extern void sub_80A6DCC(void); extern void sub_806AF4C(); +extern u8 sub_80F9344(void); +extern u8 sub_806B124(void); +extern void sub_806C994(); +extern void sub_806BF74(); +extern void sub_806AEDC(void); +extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8); +extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int); +extern void sub_806E7D0(u8, const struct PartyPopupMenu *); +extern u8 *sub_8040D08(); +extern void sub_806E834(); +extern u8 sub_8094C20(); +extern void sub_8040B8C(void); +extern u8 pokemon_order_func(u8); +extern void sub_8094C98(u8, u8); +extern void sub_806E6F0(); +extern void sub_806D538(); struct UnknownStruct1 { @@ -48,28 +66,65 @@ struct UnknownStruct1 u8 unk259; u8 filler25A[6]; u8 unk260; - u8 filler261[3]; + u8 filler261[1]; + u8 unk262; s16 unk264; s16 unk266; }; extern u8 unk_2000000[]; +#define EWRAM_1609D unk_2000000[0x1609D] #define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) extern u16 gScriptItemId; +extern u8 gPlayerPartyCount; +extern u8 gUnknown_02024A68; +extern u16 gUnknown_02024A6A[]; +extern u8 gUnknown_02024E6C; extern u8 gUnknown_0202E8F4; +extern u8 gUnknown_0202E8F5; +extern u8 gUnknown_0202E8F6; extern u8 gUnknown_02038473; +extern u8 gUnknown_020384F0; extern void (*gUnknown_03004AE4)(); //don't know types yet -extern const struct PartyMenuItem gUnknown_083B5FCC[]; -extern const struct UnknownStruct2 gUnknown_083B5FF4[]; +extern const u8 gOtherText_CantSwitchPokeWithYours[]; +extern const u8 gOtherText_NoEnergyLeft[]; +extern const u8 gOtherText_EGGCantBattle[]; +extern const u8 gOtherText_AlreadySelected[]; +extern const u8 gOtherText_CantBeSwitched[]; +extern const u8 gOtherText_AlreadyBattle[]; +extern const u8 OtherText_Summary[]; +extern const u8 gOtherText_CancelNoTerminator[]; +extern const u8 OtherText_Shift[]; +extern const u8 OtherText_SendOut[]; -void sub_80952E4(u8); -void sub_8095408(u8); -void sub_809527C(u8); -void sub_80952B4(u8); -void sub_8095330(u8); -void sub_809538C(void); +static void Task_809527C(u8); +static void Task_80952B4(u8); +static void Task_80952E4(u8); +static void Task_8095330(u8); +static void Task_809538C(void); +static void Task_HandlePopupMenuInput(u8); +static void Task_BattlePartyMenuSummary(u8 taskId); +static void Task_BattlePartyMenuShift(u8 taskId); +static void Task_BattlePartyMenuCancel(u8 taskId); + +static const struct PartyMenuItem sBattlePartyMenuActions[] = +{ + {OtherText_Summary, Task_BattlePartyMenuSummary}, + {gOtherText_CancelNoTerminator, Task_BattlePartyMenuCancel}, + {OtherText_Shift, Task_BattlePartyMenuShift}, + {OtherText_SendOut, Task_BattlePartyMenuShift}, +}; +static const u8 Unknown_83B5FEC[] = {2, 0, 1}; //SHIFT, SUMMARY, CANCEL +static const u8 Unknown_83B5FEF[] = {3, 0, 1}; //SEND OUT, SUMMARY, CANCEL +static const u8 Unknown_83B5FF2[] = {0, 1}; //SUMMARY, CANCEL +static const struct PartyPopupMenu sBattlePartyPopupMenus[] = +{ + {ARRAY_COUNT(Unknown_83B5FEC), 9, Unknown_83B5FEC}, + {ARRAY_COUNT(Unknown_83B5FEF), 9, Unknown_83B5FEF}, + {ARRAY_COUNT(Unknown_83B5FF2), 9, Unknown_83B5FF2}, +}; int SetUpBattlePartyMenu(void) { @@ -92,7 +147,7 @@ int SetUpBattlePartyMenu(void) } else { - if (EWRAM_1B000.unk266 <= 5) + if (EWRAM_1B000.unk266 < 6) { TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]); EWRAM_1B000.unk266++; @@ -119,9 +174,7 @@ int SetUpBattlePartyMenu(void) EWRAM_1B000.unk264++; } else - { EWRAM_1B000.unk266++; - } break; case 4: PartyMenuPrintMonsLevelOrStatus(); @@ -150,9 +203,7 @@ int SetUpBattlePartyMenu(void) EWRAM_1B000.unk264++; } else - { EWRAM_1B000.unk266++; - } break; case 10: if (gUnknown_02038473 == 3) @@ -167,7 +218,7 @@ int SetUpBattlePartyMenu(void) return FALSE; } -void sub_8095050(u8 a, u8 b) +static void sub_8095050(u8 a, u8 b) { if (!GetMonData(&gPlayerParty[b], MON_DATA_IS_EGG)) { @@ -187,7 +238,7 @@ void sub_8095050(u8 a, u8 b) gTasks[EWRAM_1B000.unk260].data[4] = 2; gTasks[EWRAM_1B000.unk260].data[5] = 2; } - sub_806E750(gTasks[a].data[4], gUnknown_083B5FF4, gUnknown_083B5FCC, 0); + sub_806E750(gTasks[a].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, 0); } void SetUpBattlePokemonMenu(u8 a) @@ -196,7 +247,7 @@ void SetUpBattlePokemonMenu(u8 a) { if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) { - gUnknown_03004AE4(a, gScriptItemId, sub_80952E4); + gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); return; } @@ -206,13 +257,11 @@ void SetUpBattlePokemonMenu(u8 a) if (gUnknown_02038473 == 3) { if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG)) - { PlaySE(SE_HAZURE); - } else { sub_806D5A4(); - gUnknown_03004AE4(a, gScriptItemId, sub_80952E4); + gUnknown_03004AE4(a, gScriptItemId, Task_80952E4); } } else @@ -220,26 +269,24 @@ void SetUpBattlePokemonMenu(u8 a) PlaySE(SE_SELECT); GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1); sub_8095050(a, sub_806CA38(a)); - SetTaskFuncWithFollowupFunc(a, sub_8095408, SetUpBattlePokemonMenu); + SetTaskFuncWithFollowupFunc(a, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); } break; case 2: if (gUnknown_02038473 == 1) - { PlaySE(SE_HAZURE); - } else { PlaySE(SE_SELECT); if (gUnknown_02038473 == 3) { gUnknown_0202E8F4 = 0; - gTasks[a].func = sub_80952E4; + gTasks[a].func = Task_80952E4; } else { gUnknown_0202E8F4 = 0; - gTasks[a].func = sub_809527C; + gTasks[a].func = Task_809527C; } } break; @@ -247,13 +294,13 @@ void SetUpBattlePokemonMenu(u8 a) } } -void sub_809527C(u8 taskId) +static void Task_809527C(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_80952B4; + gTasks[taskId].func = Task_80952B4; } -void sub_80952B4(u8 taskId) +static void Task_80952B4(u8 taskId) { if (!gPaletteFade.active) { @@ -263,20 +310,18 @@ void sub_80952B4(u8 taskId) } } -void sub_80952E4(u8 taskId) +static void Task_80952E4(u8 taskId) { if (gUnknown_0202E8F4 != 0) - { - sub_809527C(taskId); - } + Task_809527C(taskId); else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_8095330; + gTasks[taskId].func = Task_8095330; } } -void sub_8095330(u8 taskId) +static void Task_8095330(u8 taskId) { if (!gPaletteFade.active) { @@ -286,9 +331,182 @@ void sub_8095330(u8 taskId) } } -void sub_809535C(u8 taskId) +static void Task_809535C(u8 taskId) { gPaletteFade.bufferTransferDisabled = TRUE; sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5); - SetMainCallback2(sub_809538C); + SetMainCallback2(Task_809538C); +} + +static void Task_809538C(void) +{ + do + { + if (sub_806B124() == 1) + { + sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0); + sub_806BF74(EWRAM_1B000.unk260, 0); + GetMonNickname(&gPlayerParty[gUnknown_020384F0], gStringVar1); + sub_8095050(EWRAM_1B000.unk260, gUnknown_020384F0); + SetTaskFuncWithFollowupFunc(EWRAM_1B000.unk260, Task_HandlePopupMenuInput, SetUpBattlePokemonMenu); + SetMainCallback2(sub_806AEDC); + return; + } + } while(sub_80F9344() != 1); +} + +static void Task_HandlePopupMenuInput(u8 taskId) +{ + TaskFunc func; + + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + return; + } + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + return; + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + func = PartyMenuGetPopupMenuFunc(gTasks[taskId].data[4], + sBattlePartyPopupMenus, + sBattlePartyMenuActions, + GetMenuCursorPos()); + func(taskId); + return; + } + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + Task_BattlePartyMenuCancel(taskId); + return; + } + } +} + +static void Task_80954C0(u8 taskId) +{ + if (gUnknown_0202E8F6 == 0) + Task_BattlePartyMenuCancel(taskId); +} + +static void Task_ShowSummaryScreen(u8 taskId) +{ + u8 partySelection = sub_806CA38(taskId); + + if (!gPaletteFade.active) + { + DestroyTask(taskId); + EWRAM_1B000.unk262 = 1; + ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, 4); + } +} + +static void Task_BattlePartyMenuSummary(u8 taskId) +{ + sub_806CA38(taskId); //an unused variable was probably set with this. + gTasks[taskId].func = Task_ShowSummaryScreen; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +static void Task_BattlePartyMenuShift(u8 taskId) +{ + u8 partySelection; + u8 i; + u8 r4; + + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + partySelection = sub_806CA38(taskId); + if (IsLinkDoubleBattle() == TRUE && (partySelection == 1 || partySelection == 4 || partySelection == 5)) + { + sub_806D5A4(); + StringCopy(gStringVar1, sub_8040D08()); + StringExpandPlaceholders(gStringVar4, gOtherText_CantSwitchPokeWithYours); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (GetMonData(&gPlayerParty[partySelection], MON_DATA_HP) == 0) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_NoEnergyLeft); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + for (i = 0; i < gUnknown_02024A68; i++) + { + if (battle_side_get_owner(i) == 0 + && sub_8094C20(partySelection) == gUnknown_02024A6A[i]) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyBattle); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + } + if (GetMonData(&gPlayerParty[partySelection], MON_DATA_IS_EGG)) + { + sub_806D5A4(); + StringExpandPlaceholders(gStringVar4, gOtherText_EGGCantBattle); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (sub_8094C20(partySelection) == EWRAM_1609D) + { + sub_806D5A4(); + GetMonNickname(&gPlayerParty[partySelection], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_AlreadySelected); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (gUnknown_02038473 == 4) + { + sub_806D5A4(); + sub_8040B8C(); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + if (gUnknown_02038473 == 2) + { + u8 r0; + u8 r4 = gUnknown_02024E6C; + + sub_806D5A4(); + r0 = pokemon_order_func(gUnknown_02024A6A[r4]); + GetMonNickname(&gPlayerParty[r0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeSwitched); + sub_806E834(gStringVar4, 0); + gTasks[taskId].func = Task_80954C0; + return; + } + gUnknown_0202E8F5 = sub_8094C20(partySelection); + gUnknown_0202E8F4 = 1; + r4 = pokemon_order_func(gUnknown_02024A6A[gUnknown_02024E6C]); + sub_8094C98(r4, partySelection); + sub_806E6F0(&gPlayerParty[r4], &gPlayerParty[partySelection]); + gTasks[taskId].func = Task_809527C; +} + +static void Task_BattlePartyMenuCancel(u8 taskId) +{ + sub_8072DEC(); + sub_806E7D0(gTasks[taskId].data[4], sBattlePartyPopupMenus); + gTasks[taskId].data[4] = gTasks[taskId].data[5]; + sub_806D538(0, 0); + SwitchTaskToFollowupFunc(taskId); } |