summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-01-21 15:50:12 -0600
committercamthesaxman <cameronghall@cox.net>2017-01-21 15:50:12 -0600
commit8a5ada74a110cead46fbd1b090f4e925d7f3f66d (patch)
tree5bd4c47bf3fe1c236736c11f1cafd135289d04a8
parent7a3c8e275185cb72e81f5dd30821427647ec26e0 (diff)
finish decompiling battle_party_menu
-rw-r--r--asm/battle_party_menu.s620
-rw-r--r--asm/choose_party.s4
-rw-r--r--asm/party_menu.s6
-rw-r--r--asm/pokemon_menu.s4
-rw-r--r--data/battle_party_menu.s34
-rw-r--r--ld_script.txt3
-rw-r--r--src/battle_party_menu.c296
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);
}