finish decompiling battle_party_menu

This commit is contained in:
camthesaxman
2017-01-21 15:50:12 -06:00
parent 7a3c8e2751
commit 8a5ada74a1
7 changed files with 265 additions and 702 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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);
}