summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-11-22 06:46:04 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-11-23 08:09:23 +0800
commit499c09a49f4e587c6f3135afe609a057f3dbd4d8 (patch)
tree326ebec6a2330cb5500e95c2d14e8fbcc26f4bcb
parent1d96920da05f7b5c25aef42931576f3e61099f66 (diff)
party_menu first quarter
-rw-r--r--asm/item_menu.s2
-rw-r--r--asm/party_menu.s4839
-rw-r--r--asm/pokemon_jump_2.s8
-rw-r--r--asm/pokemon_special_anim.s2
-rw-r--r--asm/shop.s4
-rw-r--r--data/strings.s4
-rw-r--r--include/constants/global.h2
-rw-r--r--include/constants/party_menu.h8
-rw-r--r--include/fldeff.h2
-rw-r--r--include/graphics.h3
-rw-r--r--include/item_use.h1
-rw-r--r--include/menu_helpers.h7
-rw-r--r--include/new_menu_helpers.h2
-rw-r--r--include/party_menu.h8
-rw-r--r--include/pokemon_jump.h1
-rw-r--r--include/strings.h9
-rw-r--r--src/berry_pouch.c2
-rw-r--r--src/data/party_menu.h18
-rw-r--r--src/fldeff_softboiled.c2
-rw-r--r--src/item_pc.c2
-rw-r--r--src/item_use.c137
-rw-r--r--src/menu.c8
-rw-r--r--src/menu_helpers.c4
-rw-r--r--src/new_menu_helpers.c2
-rw-r--r--src/party_menu.c1787
-rw-r--r--src/tm_case.c2
26 files changed, 1911 insertions, 4955 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 9774cbe90..6967a7876 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -2514,7 +2514,7 @@ sub_8109140: @ 8109140
movs r1, 0
movs r2, 0xE
movs r3, 0x1E
- bl SetBgRectPal
+ bl SetBgTilemapPalette
movs r0, 0x1
bl ScheduleBgCopyTilemapToVram
add sp, 0x8
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 955fba24e..c394b4917 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -5,4843 +5,6 @@
.text
- thumb_func_start InitPartyMenu
-InitPartyMenu: @ 811EA44
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, [sp, 0x24]
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp]
- lsls r4, 24
- lsrs r7, r4, 24
- bl ResetPartyMenu
- ldr r6, _0811EA8C @ =sPartyMenuInternal
- movs r0, 0x8E
- lsls r0, 2
- bl Alloc
- adds r5, r0, 0
- str r5, [r6]
- cmp r5, 0
- bne _0811EA90
- ldr r0, [sp, 0x2C]
- bl SetMainCallback2
- b _0811EB80
- .align 2, 0
-_0811EA8C: .4byte sPartyMenuInternal
-_0811EA90:
- ldr r3, _0811EAE0 @ =gPartyMenu
- movs r1, 0xF
- mov r0, r9
- ands r1, r0
- ldrb r2, [r3, 0x8]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
- ldr r1, [sp, 0x2C]
- str r1, [r3]
- movs r4, 0
- mov r0, r8
- strb r0, [r3, 0xB]
- lsls r2, r7, 2
- ldrh r1, [r5, 0xA]
- movs r0, 0x3
- ands r0, r1
- orrs r0, r2
- strh r0, [r5, 0xA]
- ldr r0, [sp, 0x28]
- str r0, [r5]
- str r4, [r5, 0x4]
- ldrb r1, [r5, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x8]
- adds r7, r3, 0
- mov r1, r9
- cmp r1, 0x4
- bne _0811EAE4
- ldr r0, [r6]
- ldrb r1, [r0, 0x8]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x8]
- b _0811EAF0
- .align 2, 0
-_0811EAE0: .4byte gPartyMenu
-_0811EAE4:
- ldr r2, [r6]
- ldrb r1, [r2, 0x8]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x8]
-_0811EAF0:
- mov r5, r10
- cmp r5, 0xFF
- beq _0811EB08
- movs r0, 0x3
- ands r0, r5
- lsls r0, 4
- ldrb r2, [r7, 0x8]
- movs r1, 0x31
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x8]
-_0811EB08:
- movs r2, 0
- ldr r5, _0811EB90 @ =sPartyMenuInternal
- movs r4, 0x86
- lsls r4, 2
- movs r3, 0
-_0811EB12:
- ldr r0, [r5]
- lsls r1, r2, 1
- adds r0, r4
- adds r0, r1
- strh r3, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xF
- bls _0811EB12
- movs r2, 0
- ldr r4, _0811EB90 @ =sPartyMenuInternal
- movs r3, 0xFF
-_0811EB2C:
- ldr r0, [r4]
- adds r0, 0xC
- adds r0, r2
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x2
- bls _0811EB2C
- ldr r0, [sp]
- cmp r0, 0
- beq _0811EB68
- adds r1, r7, 0
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0811EB66
- adds r1, r0, 0
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0811EB94 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- bne _0811EB6A
-_0811EB66:
- movs r0, 0
-_0811EB68:
- strb r0, [r7, 0x9]
-_0811EB6A:
- ldr r2, _0811EB98 @ =gTextFlags
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- bl CalculatePlayerPartyCount
- ldr r0, _0811EB9C @ =CB2_InitPartyMenu
- bl SetMainCallback2
-_0811EB80:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811EB90: .4byte sPartyMenuInternal
-_0811EB94: .4byte gPlayerParty
-_0811EB98: .4byte gTextFlags
-_0811EB9C: .4byte CB2_InitPartyMenu
- thumb_func_end InitPartyMenu
-
- thumb_func_start CB2_UpdatePartyMenu
-CB2_UpdatePartyMenu: @ 811EBA0
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl DoScheduledBgTilemapCopiesToVram
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end CB2_UpdatePartyMenu
-
- thumb_func_start VBlankCB_PartyMenu
-VBlankCB_PartyMenu: @ 811EBBC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_PartyMenu
-
- thumb_func_start CB2_InitPartyMenu
-CB2_InitPartyMenu: @ 811EBD0
- push {lr}
-_0811EBD2:
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811EBF6
- bl ShowPartyMenu
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811EBF6
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0811EBD2
-_0811EBF6:
- pop {r0}
- bx r0
- thumb_func_end CB2_InitPartyMenu
-
- thumb_func_start ShowPartyMenu
-ShowPartyMenu: @ 811EBFC
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0811EC1C @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x16
- bls _0811EC10
- b _0811EE14
-_0811EC10:
- lsls r0, 2
- ldr r1, _0811EC20 @ =_0811EC24
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811EC1C: .4byte gMain
-_0811EC20: .4byte _0811EC24
- .align 2, 0
-_0811EC24:
- .4byte _0811EC80
- .4byte _0811EC8E
- .4byte _0811EC94
- .4byte _0811ECA8
- .4byte _0811ECAE
- .4byte _0811ECB4
- .4byte _0811ECC6
- .4byte _0811ECCC
- .4byte _0811ECF4
- .4byte _0811ED02
- .4byte _0811ED14
- .4byte _0811ED38
- .4byte _0811ED3E
- .4byte _0811ED44
- .4byte _0811ED4A
- .4byte _0811ED50
- .4byte _0811ED70
- .4byte _0811ED90
- .4byte _0811ED96
- .4byte _0811EDAC
- .4byte _0811EDB4
- .4byte _0811EDD0
- .4byte _0811EDDE
-_0811EC80:
- bl SetVBlankHBlankCallbacksToNull
- bl ClearVramOamPltt
- bl ClearScheduledBgCopiesToVram
- b _0811EDFC
-_0811EC8E:
- bl ScanlineEffect_Stop
- b _0811EDFC
-_0811EC94:
- bl ResetPaletteFade
- ldr r2, _0811ECA4 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- b _0811EDFA
- .align 2, 0
-_0811ECA4: .4byte gPaletteFade
-_0811ECA8:
- bl ResetSpriteData
- b _0811EDFC
-_0811ECAE:
- bl FreeAllSpritePalettes
- b _0811EDFC
-_0811ECB4:
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- cmp r0, 0
- beq _0811ECC0
- b _0811EDFC
-_0811ECC0:
- bl ResetTasks
- b _0811EDFC
-_0811ECC6:
- bl SetPartyMonsAllowedInMinigame
- b _0811EDFC
-_0811ECCC:
- bl AllocPartyMenuBg
- lsls r0, 24
- cmp r0, 0
- bne _0811ECDE
- bl ExitPartyMenu
- movs r0, 0x1
- b _0811EE2E
-_0811ECDE:
- ldr r0, _0811ECF0 @ =sPartyMenuInternal
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ECF0: .4byte sPartyMenuInternal
-_0811ECF4:
- bl AllocPartyMenuBgGfx
- lsls r0, 24
- cmp r0, 0
- bne _0811ED00
- b _0811EE2C
-_0811ED00:
- b _0811EDFC
-_0811ED02:
- ldr r0, _0811ED10 @ =gPartyMenu
- ldrb r0, [r0, 0x8]
- lsls r0, 26
- lsrs r0, 30
- bl InitPartyMenuWindows
- b _0811EDFC
- .align 2, 0
-_0811ED10: .4byte gPartyMenu
-_0811ED14:
- ldr r0, _0811ED30 @ =gPartyMenu
- ldrb r0, [r0, 0x8]
- lsls r0, 26
- lsrs r0, 30
- bl InitPartyMenuBoxes
- ldr r0, _0811ED34 @ =sPartyMenuInternal
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ED30: .4byte gPartyMenu
-_0811ED34: .4byte sPartyMenuInternal
-_0811ED38:
- bl LoadHeldItemIcons
- b _0811EDFC
-_0811ED3E:
- bl LoadPartyMenuPokeballGfx
- b _0811EDFC
-_0811ED44:
- bl LoadPartyMenuAilmentGfx
- b _0811EDFC
-_0811ED4A:
- bl LoadMonIconPalettes
- b _0811EDFC
-_0811ED50:
- bl CreatePartyMonSpritesLoop
- lsls r0, 24
- cmp r0, 0
- beq _0811EE2C
- ldr r0, _0811ED6C @ =sPartyMenuInternal
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ED6C: .4byte sPartyMenuInternal
-_0811ED70:
- bl RenderPartyMenuBoxes
- lsls r0, 24
- cmp r0, 0
- beq _0811EE2C
- ldr r0, _0811ED8C @ =sPartyMenuInternal
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- strh r1, [r0]
- b _0811EDFC
- .align 2, 0
-_0811ED8C: .4byte sPartyMenuInternal
-_0811ED90:
- bl CreateCancelConfirmPokeballSprites
- b _0811EDFC
-_0811ED96:
- ldr r0, _0811EDA8 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- lsrs r0, 31
- bl CreateCancelConfirmWindows
- b _0811EDFC
- .align 2, 0
-_0811EDA8: .4byte sPartyMenuInternal
-_0811EDAC:
- movs r0, 0x5
- bl HelpSystem_SetSomeVariable2
- b _0811EDFC
-_0811EDB4:
- ldr r4, _0811EDCC @ =sPartyMenuInternal
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- bl CreateTask
- ldr r0, [r4]
- ldrh r0, [r0, 0xA]
- lsrs r0, 2
- bl DisplayPartyMenuStdMessage
- b _0811EDFC
- .align 2, 0
-_0811EDCC: .4byte sPartyMenuInternal
-_0811EDD0:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- b _0811EDFC
-_0811EDDE:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _0811EE0C @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
-_0811EDFA:
- strb r0, [r2, 0x8]
-_0811EDFC:
- ldr r1, _0811EE10 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0811EE2C
- .align 2, 0
-_0811EE0C: .4byte gPaletteFade
-_0811EE10: .4byte gMain
-_0811EE14:
- ldr r0, _0811EE24 @ =VBlankCB_PartyMenu
- bl SetVBlankCallback
- ldr r0, _0811EE28 @ =CB2_UpdatePartyMenu
- bl SetMainCallback2
- movs r0, 0x1
- b _0811EE2E
- .align 2, 0
-_0811EE24: .4byte VBlankCB_PartyMenu
-_0811EE28: .4byte CB2_UpdatePartyMenu
-_0811EE2C:
- movs r0, 0
-_0811EE2E:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ShowPartyMenu
-
- thumb_func_start ExitPartyMenu
-ExitPartyMenu: @ 811EE38
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0811EE68 @ =Task_ExitPartyMenu
- movs r1, 0
- bl CreateTask
- ldr r0, _0811EE6C @ =VBlankCB_PartyMenu
- bl SetVBlankCallback
- ldr r0, _0811EE70 @ =CB2_UpdatePartyMenu
- bl SetMainCallback2
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0811EE68: .4byte Task_ExitPartyMenu
-_0811EE6C: .4byte VBlankCB_PartyMenu
-_0811EE70: .4byte CB2_UpdatePartyMenu
- thumb_func_end ExitPartyMenu
-
- thumb_func_start Task_ExitPartyMenu
-Task_ExitPartyMenu: @ 811EE74
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0811EEA0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811EE98
- ldr r0, _0811EEA4 @ =gPartyMenu
- ldr r0, [r0]
- bl SetMainCallback2
- bl FreePartyPointers
- adds r0, r4, 0
- bl DestroyTask
-_0811EE98:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811EEA0: .4byte gPaletteFade
-_0811EEA4: .4byte gPartyMenu
- thumb_func_end Task_ExitPartyMenu
-
- thumb_func_start ResetPartyMenu
-ResetPartyMenu: @ 811EEA8
- ldr r0, _0811EEBC @ =sPartyMenuInternal
- movs r1, 0
- str r1, [r0]
- ldr r0, _0811EEC0 @ =sPartyBgTilemapBuffer
- str r1, [r0]
- ldr r0, _0811EEC4 @ =sPartyMenuBoxes
- str r1, [r0]
- ldr r0, _0811EEC8 @ =sPartyBgGfxTilemap
- str r1, [r0]
- bx lr
- .align 2, 0
-_0811EEBC: .4byte sPartyMenuInternal
-_0811EEC0: .4byte sPartyBgTilemapBuffer
-_0811EEC4: .4byte sPartyMenuBoxes
-_0811EEC8: .4byte sPartyBgGfxTilemap
- thumb_func_end ResetPartyMenu
-
- thumb_func_start AllocPartyMenuBg
-AllocPartyMenuBg: @ 811EECC
- push {r4,r5,lr}
- bl ResetAllBgsCoordinatesAndBgCntRegs
- ldr r5, _0811EF34 @ =sPartyBgTilemapBuffer
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- bl Alloc
- str r0, [r5]
- cmp r0, 0
- beq _0811EF3C
- movs r1, 0
- adds r2, r4, 0
- bl memset
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _0811EF38 @ =sPartyMenuBgTemplates
- movs r0, 0
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r1, [r5]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x1
- b _0811EF3E
- .align 2, 0
-_0811EF34: .4byte sPartyBgTilemapBuffer
-_0811EF38: .4byte sPartyMenuBgTemplates
-_0811EF3C:
- movs r0, 0
-_0811EF3E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end AllocPartyMenuBg
-
- thumb_func_start AllocPartyMenuBgGfx
-AllocPartyMenuBgGfx: @ 811EF44
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0811EF64 @ =sPartyMenuInternal
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x7
- bhi _0811F02C
- lsls r0, 2
- ldr r1, _0811EF68 @ =_0811EF6C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811EF64: .4byte sPartyMenuInternal
-_0811EF68: .4byte _0811EF6C
- .align 2, 0
-_0811EF6C:
- .4byte _0811EF8C
- .4byte _0811EFB4
- .4byte _0811EFD4
- .4byte _0811F000
- .4byte _0811F004
- .4byte _0811F008
- .4byte _0811F00C
- .4byte _0811F010
-_0811EF8C:
- ldr r4, _0811EFAC @ =sPartyBgGfxTilemap
- ldr r0, _0811EFB0 @ =gPartyMenuBg_Gfx
- mov r1, sp
- bl MallocAndDecompress
- adds r1, r0, 0
- str r1, [r4]
- ldr r2, [sp]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r3, 0
- bl LoadBgTiles
- b _0811F016
- .align 2, 0
-_0811EFAC: .4byte sPartyBgGfxTilemap
-_0811EFB0: .4byte gPartyMenuBg_Gfx
-_0811EFB4:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0811F030
- ldr r0, _0811EFCC @ =gPartyMenuBg_Tilemap
- ldr r1, _0811EFD0 @ =sPartyBgTilemapBuffer
- ldr r1, [r1]
- bl LZDecompressWram
- b _0811F016
- .align 2, 0
-_0811EFCC: .4byte gPartyMenuBg_Tilemap
-_0811EFD0: .4byte sPartyBgTilemapBuffer
-_0811EFD4:
- ldr r0, _0811EFF4 @ =gPartyMenuBg_Pal
- movs r2, 0xB0
- lsls r2, 1
- movs r1, 0
- bl LoadCompressedPalette
- ldr r0, _0811EFF8 @ =gPlttBufferUnfaded
- ldr r4, _0811EFFC @ =sPartyMenuInternal
- ldr r1, [r4]
- adds r1, 0x18
- movs r2, 0xB0
- bl CpuSet
- ldr r1, [r4]
- b _0811F01A
- .align 2, 0
-_0811EFF4: .4byte gPartyMenuBg_Pal
-_0811EFF8: .4byte gPlttBufferUnfaded
-_0811EFFC: .4byte sPartyMenuInternal
-_0811F000:
- movs r0, 0x4
- b _0811F012
-_0811F004:
- movs r0, 0x5
- b _0811F012
-_0811F008:
- movs r0, 0x6
- b _0811F012
-_0811F00C:
- movs r0, 0x7
- b _0811F012
-_0811F010:
- movs r0, 0x8
-_0811F012:
- bl PartyPaletteBufferCopy
-_0811F016:
- ldr r0, _0811F028 @ =sPartyMenuInternal
- ldr r1, [r0]
-_0811F01A:
- movs r0, 0x86
- lsls r0, 2
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _0811F030
- .align 2, 0
-_0811F028: .4byte sPartyMenuInternal
-_0811F02C:
- movs r0, 0x1
- b _0811F032
-_0811F030:
- movs r0, 0
-_0811F032:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end AllocPartyMenuBgGfx
-
- thumb_func_start PartyPaletteBufferCopy
-PartyPaletteBufferCopy: @ 811F03C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 28
- ldr r5, _0811F068 @ =gPlttBufferUnfaded + 0x60
- lsrs r4, 23
- adds r1, r5, 0
- subs r1, 0x60
- adds r1, r4, r1
- adds r0, r5, 0
- movs r2, 0x10
- bl CpuSet
- ldr r0, _0811F06C @ =gPlttBufferFaded
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x10
- bl CpuSet
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F068: .4byte gPlttBufferUnfaded + 0x60
-_0811F06C: .4byte gPlttBufferFaded
- thumb_func_end PartyPaletteBufferCopy
-
- thumb_func_start FreePartyPointers
-FreePartyPointers: @ 811F070
- push {lr}
- ldr r0, _0811F0AC @ =sPartyMenuInternal
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F07E
- bl Free
-_0811F07E:
- ldr r0, _0811F0B0 @ =sPartyBgTilemapBuffer
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F08A
- bl Free
-_0811F08A:
- ldr r0, _0811F0B4 @ =sPartyBgGfxTilemap
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F096
- bl Free
-_0811F096:
- ldr r0, _0811F0B8 @ =sPartyMenuBoxes
- ldr r0, [r0]
- cmp r0, 0
- beq _0811F0A2
- bl Free
-_0811F0A2:
- bl FreeAllWindowBuffers
- pop {r0}
- bx r0
- .align 2, 0
-_0811F0AC: .4byte sPartyMenuInternal
-_0811F0B0: .4byte sPartyBgTilemapBuffer
-_0811F0B4: .4byte sPartyBgGfxTilemap
-_0811F0B8: .4byte sPartyMenuBoxes
- thumb_func_end FreePartyPointers
-
- thumb_func_start InitPartyMenuBoxes
-InitPartyMenuBoxes: @ 811F0BC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _0811F108 @ =sPartyMenuBoxes
- movs r0, 0x60
- bl Alloc
- str r0, [r4]
- movs r2, 0
- ldr r7, _0811F10C @ =sPartyBoxInfoRects + 0x20
- lsls r0, r5, 1
- adds r0, r5
- lsls r3, r0, 4
- mov r12, r4
- ldr r6, _0811F110 @ =sPartyMenuSpriteCoords
-_0811F0DA:
- ldr r0, [r4]
- lsls r1, r2, 4
- adds r1, r0
- str r7, [r1]
- lsls r0, r2, 3
- adds r0, r6
- adds r0, r3, r0
- str r0, [r1, 0x4]
- strb r2, [r1, 0x8]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x5
- bls _0811F0DA
- mov r1, r12
- ldr r0, [r1]
- ldr r1, _0811F114 @ =sPartyBoxInfoRects
- str r1, [r0]
- cmp r5, 0x3
- bne _0811F118
- str r1, [r0, 0x30]
- b _0811F11E
- .align 2, 0
-_0811F108: .4byte sPartyMenuBoxes
-_0811F10C: .4byte sPartyBoxInfoRects + 0x20
-_0811F110: .4byte sPartyMenuSpriteCoords
-_0811F114: .4byte sPartyBoxInfoRects
-_0811F118:
- cmp r5, 0
- beq _0811F11E
- str r1, [r0, 0x10]
-_0811F11E:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end InitPartyMenuBoxes
-
- thumb_func_start RenderPartyMenuBox
-RenderPartyMenuBox: @ 811F124
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0811F16C @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F174
- cmp r4, 0x2
- bls _0811F174
- adds r0, r4, 0
- bl DisplayPartyPokemonDataForMultiBattle
- ldr r5, _0811F170 @ =sPartyMenuBoxes
- lsls r4, 4
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0x8
- bl LoadPartyBoxPalette
- ldr r0, [r5]
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, [r5]
- adds r4, r0
- ldrb r0, [r4, 0x8]
- bl PutWindowTilemap
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- b _0811F22A
- .align 2, 0
-_0811F16C: .4byte gPartyMenu
-_0811F170: .4byte sPartyMenuBoxes
-_0811F174:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0811F1A4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- bne _0811F1AC
- ldr r5, _0811F1A8 @ =sPartyMenuBoxes
- ldr r0, [r5]
- lsls r4, 4
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- bl DrawEmptySlot
- ldr r0, [r5]
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- movs r1, 0x2
- bl CopyWindowToVram
- b _0811F218
- .align 2, 0
-_0811F1A4: .4byte gPlayerParty
-_0811F1A8: .4byte sPartyMenuBoxes
-_0811F1AC:
- ldr r0, _0811F1C0 @ =gPartyMenu
- ldrb r0, [r0, 0x8]
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0x4
- bne _0811F1C4
- adds r0, r4, 0
- bl DisplayPartyPokemonDataForChooseHalf
- b _0811F1E2
- .align 2, 0
-_0811F1C0: .4byte gPartyMenu
-_0811F1C4:
- cmp r1, 0xB
- bne _0811F1D0
- adds r0, r4, 0
- bl DisplayPartyPokemonDataForWirelessMinigame
- b _0811F1E2
-_0811F1D0:
- adds r0, r4, 0
- bl DisplayPartyPokemonDataForMoveTutorOrEvolutionItem
- lsls r0, 24
- cmp r0, 0
- bne _0811F1E2
- adds r0, r4, 0
- bl DisplayPartyPokemonData
-_0811F1E2:
- ldr r2, _0811F1F8 @ =gPartyMenu
- ldrb r1, [r2, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F1FC
- adds r0, r4, 0
- movs r1, 0
- bl AnimatePartySlot
- b _0811F216
- .align 2, 0
-_0811F1F8: .4byte gPartyMenu
-_0811F1FC:
- movs r0, 0x9
- ldrsb r0, [r2, r0]
- cmp r0, r4
- bne _0811F20E
- adds r0, r4, 0
- movs r1, 0x1
- bl AnimatePartySlot
- b _0811F216
-_0811F20E:
- adds r0, r4, 0
- movs r1, 0
- bl AnimatePartySlot
-_0811F216:
- lsls r4, 4
-_0811F218:
- ldr r0, _0811F230 @ =sPartyMenuBoxes
- ldr r0, [r0]
- adds r0, r4, r0
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
-_0811F22A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F230: .4byte sPartyMenuBoxes
- thumb_func_end RenderPartyMenuBox
-
- thumb_func_start DisplayPartyPokemonData
-DisplayPartyPokemonData: @ 811F234
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0811F284 @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x2D
- bl GetMonData
- adds r2, r0, 0
- cmp r2, 0
- beq _0811F28C
- ldr r6, _0811F288 @ =sPartyMenuBoxes
- ldr r0, [r6]
- lsls r5, r4, 4
- adds r0, r5, r0
- ldr r2, [r0]
- ldrb r0, [r0, 0x8]
- movs r1, 0
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- ldr r4, [r2]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl _call_via_r4
- ldr r1, [r6]
- adds r1, r5
- adds r0, r7, 0
- movs r2, 0
- bl DisplayPartyPokemonNickname
- b _0811F2EE
- .align 2, 0
-_0811F284: .4byte gPlayerParty
-_0811F288: .4byte sPartyMenuBoxes
-_0811F28C:
- ldr r5, _0811F2F8 @ =sPartyMenuBoxes
- ldr r0, [r5]
- lsls r4, 4
- adds r0, r4, r0
- ldr r1, [r0]
- ldrb r0, [r0, 0x8]
- str r2, [sp]
- str r2, [sp, 0x4]
- ldr r6, [r1]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl _call_via_r6
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl DisplayPartyPokemonNickname
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl DisplayPartyPokemonLevelCheck
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl DisplayPartyPokemonGenderNidoranCheck
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl DisplayPartyPokemonHPCheck
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- movs r2, 0
- bl DisplayPartyPokemonMaxHPCheck
- ldr r1, [r5]
- adds r1, r4
- adds r0, r7, 0
- bl DisplayPartyPokemonHPBarCheck
-_0811F2EE:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F2F8: .4byte sPartyMenuBoxes
- thumb_func_end DisplayPartyPokemonData
-
- thumb_func_start DisplayPartyPokemonDescriptionData
-DisplayPartyPokemonDescriptionData: @ 811F2FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- movs r1, 0x64
- adds r2, r0, 0
- muls r2, r1
- ldr r1, _0811F380 @ =gPlayerParty
- adds r6, r2, r1
- ldr r7, _0811F384 @ =sPartyMenuBoxes
- ldr r1, [r7]
- lsls r5, r0, 4
- adds r1, r5, r1
- ldr r2, [r1]
- ldrb r0, [r1, 0x8]
- movs r1, 0
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- ldr r4, [r2]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl _call_via_r4
- ldr r1, [r7]
- adds r1, r5
- adds r0, r6, 0
- movs r2, 0
- bl DisplayPartyPokemonNickname
- adds r0, r6, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0811F368
- ldr r1, [r7]
- adds r1, r5
- adds r0, r6, 0
- movs r2, 0
- bl DisplayPartyPokemonLevelCheck
- ldr r1, [r7]
- adds r1, r5
- adds r0, r6, 0
- movs r2, 0
- bl DisplayPartyPokemonGenderNidoranCheck
-_0811F368:
- ldr r1, [r7]
- adds r1, r5
- mov r0, r8
- movs r2, 0
- bl DisplayPartyPokemonDescriptionText
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F380: .4byte gPlayerParty
-_0811F384: .4byte sPartyMenuBoxes
- thumb_func_end DisplayPartyPokemonDescriptionData
-
- thumb_func_start DisplayPartyPokemonDataForChooseHalf
-DisplayPartyPokemonDataForChooseHalf: @ 811F388
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0811F3AC @ =gPlayerParty
- adds r0, r1
- ldr r5, _0811F3B0 @ =gSelectedOrderFromParty
- bl GetBattleEntryEligibility
- lsls r0, 24
- cmp r0, 0
- bne _0811F3C2
- adds r0, r4, 0
- movs r1, 0x6
- bl DisplayPartyPokemonDescriptionData
- b _0811F3F8
- .align 2, 0
-_0811F3AC: .4byte gPlayerParty
-_0811F3B0: .4byte gSelectedOrderFromParty
-_0811F3B4:
- adds r1, 0x2
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl DisplayPartyPokemonDescriptionData
- b _0811F3F8
-_0811F3C2:
- ldr r0, _0811F400 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xC0
- ands r0, r1
- movs r3, 0x3
- cmp r0, 0x80
- bne _0811F3D2
- movs r3, 0x2
-_0811F3D2:
- movs r1, 0
- cmp r1, r3
- bcs _0811F3F0
-_0811F3D8:
- adds r2, r5, r1
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811F3E6
- subs r0, 0x1
- cmp r0, r4
- beq _0811F3B4
-_0811F3E6:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r3
- bcc _0811F3D8
-_0811F3F0:
- adds r0, r4, 0
- movs r1, 0x1
- bl DisplayPartyPokemonDescriptionData
-_0811F3F8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F400: .4byte gPartyMenu
- thumb_func_end DisplayPartyPokemonDataForChooseHalf
-
- thumb_func_start DisplayPartyPokemonDataForWirelessMinigame
-DisplayPartyPokemonDataForWirelessMinigame: @ 811F404
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl IsMonAllowedInMinigame
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0811F422
- adds r0, r4, 0
- movs r1, 0x5
- bl DisplayPartyPokemonDescriptionData
- b _0811F42A
-_0811F422:
- adds r0, r4, 0
- movs r1, 0x6
- bl DisplayPartyPokemonDescriptionData
-_0811F42A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonDataForWirelessMinigame
-
- thumb_func_start DisplayPartyPokemonDataForMoveTutorOrEvolutionItem
-DisplayPartyPokemonDataForMoveTutorOrEvolutionItem: @ 811F430
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0811F468 @ =gPlayerParty
- adds r6, r1, r0
- ldr r0, _0811F46C @ =gSpecialVar_ItemId
- ldrh r4, [r0]
- ldr r0, _0811F470 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0xC
- bne _0811F47C
- ldr r0, _0811F474 @ =gSpecialVar_Result
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0811F478 @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- cmp r0, 0xE
- bhi _0811F492
- lsls r2, r0, 24
- lsrs r2, 24
- adds r0, r5, 0
- movs r1, 0
- bl DisplayPartyPokemonDataToTeachMove
- b _0811F4C6
- .align 2, 0
-_0811F468: .4byte gPlayerParty
-_0811F46C: .4byte gSpecialVar_ItemId
-_0811F470: .4byte gPartyMenu
-_0811F474: .4byte gSpecialVar_Result
-_0811F478: .4byte gSpecialVar_0x8005
-_0811F47C:
- cmp r0, 0x3
- bne _0811F492
- adds r0, r4, 0
- bl GetItemCompatibilityRule
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811F496
- cmp r0, 0x2
- beq _0811F4A2
-_0811F492:
- movs r0, 0
- b _0811F4C8
-_0811F496:
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl DisplayPartyPokemonDataToTeachMove
- b _0811F4C6
-_0811F4A2:
- adds r0, r6, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0811F4BE
- adds r0, r6, 0
- movs r1, 0x3
- adds r2, r4, 0
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- cmp r0, 0
- bne _0811F492
-_0811F4BE:
- adds r0, r5, 0
- movs r1, 0
- bl DisplayPartyPokemonDescriptionData
-_0811F4C6:
- movs r0, 0x1
-_0811F4C8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end DisplayPartyPokemonDataForMoveTutorOrEvolutionItem
-
- thumb_func_start DisplayPartyPokemonDataToTeachMove
-DisplayPartyPokemonDataToTeachMove: @ 811F4D0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x64
- muls r0, r4
- ldr r3, _0811F4FC @ =gPlayerParty
- adds r0, r3
- bl CanMonLearnTMTutor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _0811F50E
- cmp r0, 0x2
- bgt _0811F500
- cmp r0, 0x1
- beq _0811F504
- b _0811F518
- .align 2, 0
-_0811F4FC: .4byte gPlayerParty
-_0811F500:
- cmp r0, 0x3
- bne _0811F518
-_0811F504:
- adds r0, r4, 0
- movs r1, 0x8
- bl DisplayPartyPokemonDescriptionData
- b _0811F520
-_0811F50E:
- adds r0, r4, 0
- movs r1, 0x9
- bl DisplayPartyPokemonDescriptionData
- b _0811F520
-_0811F518:
- adds r0, r4, 0
- movs r1, 0x7
- bl DisplayPartyPokemonDescriptionData
-_0811F520:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonDataToTeachMove
-
- thumb_func_start DisplayPartyPokemonDataForMultiBattle
-DisplayPartyPokemonDataForMultiBattle: @ 811F528
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0811F558 @ =sPartyMenuBoxes
- lsls r2, r0, 4
- ldr r1, [r1]
- adds r5, r1, r2
- subs r0, 0x3
- lsls r0, 24
- ldr r1, _0811F55C @ =gMultiPartnerParty
- mov r8, r1
- lsrs r7, r0, 19
- adds r6, r7, r1
- ldrh r0, [r6]
- cmp r0, 0
- bne _0811F560
- ldrb r0, [r5, 0x8]
- bl DrawEmptySlot
- b _0811F5DC
- .align 2, 0
-_0811F558: .4byte sPartyMenuBoxes
-_0811F55C: .4byte gMultiPartnerParty
-_0811F560:
- ldr r2, [r5]
- ldrb r0, [r5, 0x8]
- movs r1, 0
- str r1, [sp]
- str r1, [sp, 0x4]
- ldr r4, [r2]
- movs r2, 0
- movs r3, 0
- bl _call_via_r4
- ldr r4, _0811F5E8 @ =gStringVar1
- mov r0, r8
- adds r0, 0x4
- adds r7, r0
- adds r0, r4, 0
- adds r1, r7, 0
- bl StringCopy
- adds r0, r4, 0
- bl StringGetEnd10
- adds r0, r4, 0
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x5
- bhi _0811F5A0
- adds r0, r4, 0
- movs r1, 0x1
- bl ConvertInternationalString
-_0811F5A0:
- ldrb r0, [r5, 0x8]
- ldr r3, [r5]
- adds r3, 0x4
- adds r1, r4, 0
- movs r2, 0
- bl DisplayPartyPokemonBarDetail
- ldrb r0, [r6, 0xF]
- adds r1, r5, 0
- bl DisplayPartyPokemonLevel
- ldrb r0, [r6, 0x1C]
- ldrh r1, [r6]
- adds r2, r7, 0
- adds r3, r5, 0
- bl DisplayPartyPokemonGender
- ldrh r0, [r6, 0x10]
- adds r1, r5, 0
- bl DisplayPartyPokemonHP
- ldrh r0, [r6, 0x12]
- adds r1, r5, 0
- bl DisplayPartyPokemonMaxHP
- ldrh r0, [r6, 0x10]
- ldrh r1, [r6, 0x12]
- adds r2, r5, 0
- bl DisplayPartyPokemonHPBar
-_0811F5DC:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F5E8: .4byte gStringVar1
- thumb_func_end DisplayPartyPokemonDataForMultiBattle
-
- thumb_func_start RenderPartyMenuBoxes
-RenderPartyMenuBoxes: @ 811F5EC
- push {r4,r5,lr}
- ldr r5, _0811F614 @ =sPartyMenuInternal
- ldr r0, [r5]
- movs r4, 0x86
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0]
- bl RenderPartyMenuBox
- ldr r1, [r5]
- adds r1, r4
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- beq _0811F618
- movs r0, 0
- b _0811F61A
- .align 2, 0
-_0811F614: .4byte sPartyMenuInternal
-_0811F618:
- movs r0, 0x1
-_0811F61A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end RenderPartyMenuBoxes
-
- thumb_func_start GetPartyMenuBgTile
-GetPartyMenuBgTile: @ 811F620
- lsls r0, 16
- ldr r1, _0811F630 @ =sPartyBgGfxTilemap
- lsrs r0, 11
- ldr r1, [r1]
- adds r1, r0
- adds r0, r1, 0
- bx lr
- .align 2, 0
-_0811F630: .4byte sPartyBgGfxTilemap
- thumb_func_end GetPartyMenuBgTile
-
- thumb_func_start CreatePartyMonSprites
-CreatePartyMonSprites: @ 811F634
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0811F6A8 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F6E4
- cmp r7, 0x2
- bls _0811F6E4
- subs r0, r7, 0x3
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, _0811F6AC @ =gMultiPartnerParty
- mov r9, r0
- mov r2, r10
- lsls r2, 5
- mov r8, r2
- mov r6, r8
- add r6, r9
- ldrh r0, [r6]
- cmp r0, 0
- beq _0811F728
- mov r1, r9
- adds r1, 0x18
- add r1, r8
- ldr r1, [r1]
- ldr r4, _0811F6B0 @ =sPartyMenuBoxes
- lsls r5, r7, 4
- ldr r2, [r4]
- adds r2, r5
- movs r3, 0
- str r3, [sp]
- bl CreatePartyMonIconSpriteParameterized
- ldrh r0, [r6]
- ldrh r1, [r6, 0x2]
- ldr r2, [r4]
- adds r2, r5
- bl CreatePartyMonHeldItemSpriteParameterized
- ldrh r0, [r6]
- ldr r1, [r4]
- adds r1, r5
- bl CreatePartyMonPokeballSpriteParameterized
- ldrh r0, [r6, 0x10]
- cmp r0, 0
- bne _0811F6B4
- movs r3, 0x7
- b _0811F6C4
- .align 2, 0
-_0811F6A8: .4byte gPartyMenu
-_0811F6AC: .4byte gMultiPartnerParty
-_0811F6B0: .4byte sPartyMenuBoxes
-_0811F6B4:
- mov r0, r9
- adds r0, 0x14
- add r0, r8
- ldr r0, [r0]
- bl GetAilmentFromStatus
- lsls r0, 24
- lsrs r3, r0, 24
-_0811F6C4:
- ldr r1, _0811F6DC @ =gMultiPartnerParty
- mov r2, r10
- lsls r0, r2, 5
- adds r0, r1
- ldrh r0, [r0]
- ldr r1, _0811F6E0 @ =sPartyMenuBoxes
- ldr r2, [r1]
- adds r2, r5
- adds r1, r3, 0
- bl CreatePartyMonStatusSpriteParameterized
- b _0811F728
- .align 2, 0
-_0811F6DC: .4byte gMultiPartnerParty
-_0811F6E0: .4byte sPartyMenuBoxes
-_0811F6E4:
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _0811F738 @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0811F728
- ldr r4, _0811F73C @ =sPartyMenuBoxes
- lsls r5, r7, 4
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- adds r2, r7, 0
- bl CreatePartyMonIconSprite
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- bl CreatePartyMonHeldItemSprite
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- bl CreatePartyMonPokeballSprite
- ldr r1, [r4]
- adds r1, r5
- adds r0, r6, 0
- bl CreatePartyMonStatusSprite
-_0811F728:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F738: .4byte gPlayerParty
-_0811F73C: .4byte sPartyMenuBoxes
- thumb_func_end CreatePartyMonSprites
-
- thumb_func_start CreatePartyMonSpritesLoop
-CreatePartyMonSpritesLoop: @ 811F740
- push {r4,r5,lr}
- ldr r5, _0811F768 @ =sPartyMenuInternal
- ldr r0, [r5]
- movs r4, 0x86
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0]
- bl CreatePartyMonSprites
- ldr r1, [r5]
- adds r1, r4
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- beq _0811F76C
- movs r0, 0
- b _0811F76E
- .align 2, 0
-_0811F768: .4byte sPartyMenuInternal
-_0811F76C:
- movs r0, 0x1
-_0811F76E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end CreatePartyMonSpritesLoop
-
- thumb_func_start CreateCancelConfirmPokeballSprites
-CreateCancelConfirmPokeballSprites: @ 811F774
- push {r4,lr}
- sub sp, 0xC
- ldr r0, _0811F79C @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0811F7A0
- movs r0, 0x7
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r1, 0xE
- movs r2, 0x17
- movs r3, 0x11
- bl FillBgTilemapBufferRect
- b _0811F808
- .align 2, 0
-_0811F79C: .4byte gPartyMenu
-_0811F7A0:
- ldr r4, _0811F7D8 @ =sPartyMenuInternal
- ldr r0, [r4]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0811F7E0
- movs r0, 0xBF
- movs r1, 0x88
- bl CreateSmallPokeballButtonSprite
- ldr r3, [r4]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x7F
- ands r0, r1
- lsls r0, 4
- ldrh r2, [r3, 0x8]
- ldr r1, _0811F7DC @ =0xfffff80f
- ands r1, r2
- orrs r1, r0
- strh r1, [r3, 0x8]
- bl DrawCancelConfirmButtons
- movs r0, 0xBF
- movs r1, 0x98
- bl CreateSmallPokeballButtonSprite
- b _0811F7E8
- .align 2, 0
-_0811F7D8: .4byte sPartyMenuInternal
-_0811F7DC: .4byte 0xfffff80f
-_0811F7E0:
- movs r0, 0xC6
- movs r1, 0x94
- bl CreatePokeballButtonSprite
-_0811F7E8:
- ldr r3, [r4]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x7F
- ands r0, r1
- lsls r0, 11
- ldr r1, [r3, 0x8]
- ldr r2, _0811F810 @ =0xfffc07ff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x8]
- ldr r0, _0811F814 @ =gPartyMenu
- ldrb r0, [r0, 0x9]
- movs r1, 0x1
- bl AnimatePartySlot
-_0811F808:
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F810: .4byte 0xfffc07ff
-_0811F814: .4byte gPartyMenu
- thumb_func_end CreateCancelConfirmPokeballSprites
-
- thumb_func_start AnimatePartySlot
-AnimatePartySlot: @ 811F818
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- cmp r7, 0x6
- beq _0811F884
- cmp r7, 0x7
- beq _0811F8C0
- movs r0, 0x64
- muls r0, r7
- ldr r1, _0811F87C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0811F934
- ldr r6, _0811F880 @ =sPartyMenuBoxes
- lsls r5, r7, 4
- ldr r4, [r6]
- adds r4, r5
- adds r0, r7, 0
- mov r1, r8
- bl GetPartyBoxPaletteFlags
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl LoadPartyBoxPalette
- ldr r0, [r6]
- adds r0, r5, r0
- ldrb r0, [r0, 0x9]
- mov r1, r8
- bl AnimateSelectedPartyIcon
- ldr r0, [r6]
- adds r5, r0
- ldrb r0, [r5, 0xB]
- mov r1, r8
- bl PartyMenuStartSpriteAnim
- b _0811F934
- .align 2, 0
-_0811F87C: .4byte gPlayerParty
-_0811F880: .4byte sPartyMenuBoxes
-_0811F884:
- mov r0, r8
- cmp r0, 0
- bne _0811F89E
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r1, 0x17
- movs r2, 0x10
- movs r3, 0x7
- bl SetBgRectPal
- b _0811F8B0
-_0811F89E:
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x17
- movs r2, 0x10
- movs r3, 0x7
- bl SetBgRectPal
-_0811F8B0:
- ldr r0, _0811F8BC @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrh r0, [r0, 0x8]
- lsls r0, 21
- b _0811F926
- .align 2, 0
-_0811F8BC: .4byte sPartyMenuInternal
-_0811F8C0:
- ldr r0, _0811F8E0 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- bne _0811F8F2
- mov r0, r8
- cmp r0, 0
- bne _0811F8E4
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r1, 0x17
- movs r2, 0x11
- b _0811F904
- .align 2, 0
-_0811F8E0: .4byte sPartyMenuInternal
-_0811F8E4:
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x17
- movs r2, 0x11
- b _0811F904
-_0811F8F2:
- mov r0, r8
- cmp r0, 0
- bne _0811F90C
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r1, 0x17
- movs r2, 0x12
-_0811F904:
- movs r3, 0x7
- bl SetBgRectPal
- b _0811F91E
-_0811F90C:
- movs r0, 0x2
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x17
- movs r2, 0x12
- movs r3, 0x7
- bl SetBgRectPal
-_0811F91E:
- ldr r0, _0811F940 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldr r0, [r0, 0x8]
- lsls r0, 14
-_0811F926:
- lsrs r0, 25
- mov r1, r8
- bl PartyMenuStartSpriteAnim
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
-_0811F934:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811F940: .4byte sPartyMenuInternal
- thumb_func_end AnimatePartySlot
-
- thumb_func_start GetPartyBoxPaletteFlags
-GetPartyBoxPaletteFlags: @ 811F944
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- movs r4, 0
- cmp r1, 0x1
- bne _0811F956
- movs r4, 0x1
-_0811F956:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0811F9D4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _0811F96C
- movs r0, 0x2
- orrs r4, r0
-_0811F96C:
- ldr r2, _0811F9D8 @ =gPartyMenu
- ldrb r1, [r2, 0x8]
- movs r0, 0x30
- ands r0, r1
- cmp r0, 0x20
- bne _0811F98C
- cmp r5, 0x1
- beq _0811F984
- cmp r5, 0x4
- beq _0811F984
- cmp r5, 0x5
- bne _0811F98C
-_0811F984:
- movs r0, 0x8
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F98C:
- ldrb r1, [r2, 0xB]
- cmp r1, 0x9
- bne _0811F99A
- movs r0, 0x10
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F99A:
- cmp r1, 0x8
- bne _0811F9B6
- movs r0, 0x9
- ldrsb r0, [r2, r0]
- cmp r5, r0
- beq _0811F9AE
- movs r0, 0xA
- ldrsb r0, [r2, r0]
- cmp r5, r0
- bne _0811F9B6
-_0811F9AE:
- movs r0, 0x4
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F9B6:
- ldrb r0, [r2, 0xB]
- cmp r0, 0xA
- bne _0811F9CC
- movs r0, 0x9
- ldrsb r0, [r2, r0]
- cmp r5, r0
- bne _0811F9CC
- movs r0, 0x20
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_0811F9CC:
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811F9D4: .4byte gPlayerParty
-_0811F9D8: .4byte gPartyMenu
- thumb_func_end GetPartyBoxPaletteFlags
-
- thumb_func_start DrawCancelConfirmButtons
-DrawCancelConfirmButtons: @ 811F9DC
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r1, _0811FA18 @ =sConfirmButton_Tilemap
- movs r6, 0x7
- str r6, [sp]
- movs r5, 0x2
- str r5, [sp, 0x4]
- movs r4, 0x11
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x17
- movs r3, 0x10
- bl CopyToBgTilemapBufferRect_ChangePalette
- ldr r1, _0811FA1C @ =sCancelButton_Tilemap
- str r6, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x17
- movs r3, 0x12
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FA18: .4byte sConfirmButton_Tilemap
-_0811FA1C: .4byte sCancelButton_Tilemap
- thumb_func_end DrawCancelConfirmButtons
-
- thumb_func_start IsMultiBattle
-IsMultiBattle: @ 811FA20
- push {lr}
- ldr r0, _0811FA34 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x4B
- ands r0, r1
- cmp r0, 0x4B
- beq _0811FA38
- movs r0, 0
- b _0811FA3A
- .align 2, 0
-_0811FA34: .4byte gBattleTypeFlags
-_0811FA38:
- movs r0, 0x1
-_0811FA3A:
- pop {r1}
- bx r1
- thumb_func_end IsMultiBattle
-
- thumb_func_start SwapPartyPokemon
-SwapPartyPokemon: @ 811FA40
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- movs r0, 0x64
- bl Alloc
- adds r5, r0, 0
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r5, 0
- bl Free
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end SwapPartyPokemon
-
- thumb_func_start Task_ClosePartyMenu
-Task_ClosePartyMenu: @ 811FA78
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0811FAAC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0811FAB0 @ =Task_ClosePartyMenuAndSetCB2
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FAAC: .4byte gTasks
-_0811FAB0: .4byte Task_ClosePartyMenuAndSetCB2
- thumb_func_end Task_ClosePartyMenu
-
- thumb_func_start Task_ClosePartyMenuAndSetCB2
-Task_ClosePartyMenuAndSetCB2: @ 811FAB4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0811FAE8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811FB04
- ldr r4, _0811FAEC @ =gPartyMenu
- ldrb r1, [r4, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _0811FAD6
- bl UpdatePartyToFieldOrder
-_0811FAD6:
- ldr r0, _0811FAF0 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- cmp r0, 0
- beq _0811FAF4
- bl SetMainCallback2
- b _0811FAFA
- .align 2, 0
-_0811FAE8: .4byte gPaletteFade
-_0811FAEC: .4byte gPartyMenu
-_0811FAF0: .4byte sPartyMenuInternal
-_0811FAF4:
- ldr r0, [r4]
- bl SetMainCallback2
-_0811FAFA:
- bl FreePartyPointers
- adds r0, r5, 0
- bl DestroyTask
-_0811FB04:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Task_ClosePartyMenuAndSetCB2
-
- thumb_func_start GetCursorSelectionMonId
-GetCursorSelectionMonId: @ 811FB0C
- ldr r0, _0811FB14 @ =gPartyMenu
- ldrb r0, [r0, 0x9]
- bx lr
- .align 2, 0
-_0811FB14: .4byte gPartyMenu
- thumb_func_end GetCursorSelectionMonId
-
- thumb_func_start GetPartyMenuType
-GetPartyMenuType: @ 811FB18
- ldr r0, _0811FB24 @ =gPartyMenu
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r0, 28
- bx lr
- .align 2, 0
-_0811FB24: .4byte gPartyMenu
- thumb_func_end GetPartyMenuType
-
- thumb_func_start Task_HandleChooseMonInput
-Task_HandleChooseMonInput: @ 811FB28
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- ldr r0, _0811FB64 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811FB98
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811FB98
- bl GetCurrentPartySlotPtr
- adds r4, r0, 0
- bl PartyMenuButtonHandler
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- beq _0811FB78
- cmp r0, 0x2
- bgt _0811FB68
- cmp r0, 0x1
- beq _0811FB6E
- b _0811FB98
- .align 2, 0
-_0811FB64: .4byte gPaletteFade
-_0811FB68:
- cmp r0, 0x8
- beq _0811FB82
- b _0811FB98
-_0811FB6E:
- adds r0, r5, 0
- adds r1, r4, 0
- bl HandleChooseMonSelection
- b _0811FB98
-_0811FB78:
- adds r0, r6, 0
- adds r1, r4, 0
- bl HandleChooseMonCancel
- b _0811FB98
-_0811FB82:
- ldr r0, _0811FBA0 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0811FB98
- movs r0, 0x5
- bl PlaySE
- bl MoveCursorToConfirm
-_0811FB98:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FBA0: .4byte sPartyMenuInternal
- thumb_func_end Task_HandleChooseMonInput
-
- thumb_func_start GetCurrentPartySlotPtr
-GetCurrentPartySlotPtr: @ 811FBA4
- push {lr}
- ldr r0, _0811FBB8 @ =gPartyMenu
- ldrb r1, [r0, 0xB]
- cmp r1, 0x8
- beq _0811FBB2
- cmp r1, 0xA
- bne _0811FBBC
-_0811FBB2:
- adds r0, 0xA
- b _0811FBBE
- .align 2, 0
-_0811FBB8: .4byte gPartyMenu
-_0811FBBC:
- adds r0, 0x9
-_0811FBBE:
- pop {r1}
- bx r1
- thumb_func_end GetCurrentPartySlotPtr
-
- thumb_func_start HandleChooseMonSelection
-HandleChooseMonSelection: @ 811FBC4
- push {r4-r6,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0x6
- bne _0811FBE4
- ldr r0, _0811FBE0 @ =gPartyMenu
- ldr r1, [r0, 0x4]
- adds r0, r6, 0
- bl _call_via_r1
- b _0811FD56
- .align 2, 0
-_0811FBE0: .4byte gPartyMenu
-_0811FBE4:
- ldr r0, _0811FBFC @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- subs r0, 0x3
- cmp r0, 0xA
- bls _0811FBF0
- b _0811FD4A
-_0811FBF0:
- lsls r0, 2
- ldr r1, _0811FC00 @ =_0811FC04
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811FBFC: .4byte gPartyMenu
-_0811FC00: .4byte _0811FC04
- .align 2, 0
-_0811FC04:
- .4byte _0811FC46
- .4byte _0811FD4A
- .4byte _0811FCC0
- .4byte _0811FCC0
- .4byte _0811FCA6
- .4byte _0811FCDA
- .4byte _0811FD4A
- .4byte _0811FC30
- .4byte _0811FCE8
- .4byte _0811FC8C
- .4byte _0811FD34
-_0811FC30:
- adds r0, r5, 0
- bl IsSelectedMonNotEgg
- lsls r0, 24
- cmp r0, 0
- bne _0811FC3E
- b _0811FD56
-_0811FC3E:
- adds r0, r6, 0
- bl sub_80E5724
- b _0811FD56
-_0811FC46:
- adds r0, r5, 0
- bl IsSelectedMonNotEgg
- lsls r0, 24
- cmp r0, 0
- bne _0811FC54
- b _0811FD56
-_0811FC54:
- ldr r0, _0811FC78 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _0811FC68
- ldr r0, _0811FC7C @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _0811FC80 @ =CB2_SetUpExitToBattleScreen
- str r0, [r1, 0x4]
-_0811FC68:
- ldr r0, _0811FC84 @ =gItemUseCB
- ldr r1, _0811FC88 @ =Task_ClosePartyMenuAfterText
- ldr r2, [r0]
- adds r0, r6, 0
- bl _call_via_r2
- b _0811FD56
- .align 2, 0
-_0811FC78: .4byte gPartyMenu
-_0811FC7C: .4byte sPartyMenuInternal
-_0811FC80: .4byte CB2_SetUpExitToBattleScreen
-_0811FC84: .4byte gItemUseCB
-_0811FC88: .4byte Task_ClosePartyMenuAfterText
-_0811FC8C:
- adds r0, r5, 0
- bl IsSelectedMonNotEgg
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl TryTutorSelectedMon
- b _0811FD56
-_0811FCA6:
- adds r0, r5, 0
- bl IsSelectedMonNotEgg
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl TryGiveMailToSelectedMon
- b _0811FD56
-_0811FCC0:
- adds r0, r5, 0
- bl IsSelectedMonNotEgg
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl TryGiveItemOrMailToSelectedMon
- b _0811FD56
-_0811FCDA:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl SwitchSelectedMons
- b _0811FD56
-_0811FCE8:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0811FD24 @ =gSpecialVar_0x8004
- movs r0, 0
- ldrsb r0, [r5, r0]
- strh r0, [r1]
- ldr r0, _0811FD28 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x7
- bne _0811FD1A
- ldr r4, _0811FD2C @ =gSpecialVar_0x8005
- movs r1, 0
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0811FD30 @ =gPlayerParty
- adds r0, r1
- bl GetNumberOfRelearnableMoves
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
-_0811FD1A:
- adds r0, r6, 0
- bl Task_ClosePartyMenu
- b _0811FD56
- .align 2, 0
-_0811FD24: .4byte gSpecialVar_0x8004
-_0811FD28: .4byte gPartyMenu
-_0811FD2C: .4byte gSpecialVar_0x8005
-_0811FD30: .4byte gPlayerParty
-_0811FD34:
- adds r0, r5, 0
- bl IsSelectedMonNotEgg
- lsls r0, 24
- cmp r0, 0
- beq _0811FD56
- ldrb r1, [r5]
- adds r0, r6, 0
- bl TryEnterMonForMinigame
- b _0811FD56
-_0811FD4A:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl Task_TryCreateSelectionWindow
-_0811FD56:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end HandleChooseMonSelection
-
- thumb_func_start IsSelectedMonNotEgg
-IsSelectedMonNotEgg: @ 811FD5C
- push {lr}
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0811FD78 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _0811FD7C
- movs r0, 0x1
- b _0811FD84
- .align 2, 0
-_0811FD78: .4byte gPlayerParty
-_0811FD7C:
- movs r0, 0x1A
- bl PlaySE
- movs r0, 0
-_0811FD84:
- pop {r1}
- bx r1
- thumb_func_end IsSelectedMonNotEgg
-
- thumb_func_start HandleChooseMonCancel
-HandleChooseMonCancel: @ 811FD88
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0811FDA4 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0x8
- beq _0811FDBA
- cmp r0, 0x8
- bgt _0811FDA8
- cmp r0, 0x1
- beq _0811FDB2
- b _0811FDD6
- .align 2, 0
-_0811FDA4: .4byte gPartyMenu
-_0811FDA8:
- cmp r0, 0xA
- beq _0811FDBA
- cmp r0, 0xD
- beq _0811FDC8
- b _0811FDD6
-_0811FDB2:
- movs r0, 0x1A
- bl PlaySE
- b _0811FE14
-_0811FDBA:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl FinishTwoMonAction
- b _0811FE14
-_0811FDC8:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl CancelParticipationPrompt
- b _0811FE14
-_0811FDD6:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0811FDF0 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x4
- bne _0811FDF4
- adds r0, r4, 0
- bl DisplayCancelChooseMonYesNo
- b _0811FE14
- .align 2, 0
-_0811FDF0: .4byte gPartyMenu
-_0811FDF4:
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- cmp r0, 0
- bne _0811FE04
- ldr r1, _0811FE1C @ =gSpecialVar_0x8004
- movs r0, 0x7
- strh r0, [r1]
-_0811FE04:
- ldr r0, _0811FE20 @ =gPartyMenuUseExitCallback
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x7
- strb r0, [r5]
- adds r0, r4, 0
- bl Task_ClosePartyMenu
-_0811FE14:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FE1C: .4byte gSpecialVar_0x8004
-_0811FE20: .4byte gPartyMenuUseExitCallback
- thumb_func_end HandleChooseMonCancel
-
- thumb_func_start DisplayCancelChooseMonYesNo
-DisplayCancelChooseMonYesNo: @ 811FE24
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0811FE5C @ =sPartyMenuInternal
- ldr r0, [r0]
- adds r0, 0xD
- bl PartyMenuRemoveWindow
- ldr r5, _0811FE60 @ =gStringVar4
- ldr r1, _0811FE64 @ =gUnknown_84176CF
- adds r0, r5, 0
- bl StringExpandPlaceholders
- adds r0, r5, 0
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- ldr r1, _0811FE68 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0811FE6C @ =Task_CancelChooseMonYesNo
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FE5C: .4byte sPartyMenuInternal
-_0811FE60: .4byte gStringVar4
-_0811FE64: .4byte gUnknown_84176CF
-_0811FE68: .4byte gTasks
-_0811FE6C: .4byte Task_CancelChooseMonYesNo
- thumb_func_end DisplayCancelChooseMonYesNo
-
- thumb_func_start Task_CancelChooseMonYesNo
-Task_CancelChooseMonYesNo: @ 811FE70
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPartyMenuTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811FE94
- bl PartyMenuDisplayYesNoMenu
- ldr r0, _0811FE9C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0811FEA0 @ =Task_HandleCancelChooseMonYesNoInput
- str r0, [r1]
-_0811FE94:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811FE9C: .4byte gTasks
-_0811FEA0: .4byte Task_HandleCancelChooseMonYesNoInput
- thumb_func_end Task_CancelChooseMonYesNo
-
- thumb_func_start Task_HandleCancelChooseMonYesNoInput
-Task_HandleCancelChooseMonYesNoInput: @ 811FEA4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0811FECA
- cmp r1, 0
- bgt _0811FEC4
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0811FEE8
- b _0811FEF4
-_0811FEC4:
- cmp r1, 0x1
- beq _0811FEEE
- b _0811FEF4
-_0811FECA:
- ldr r0, _0811FEE0 @ =gPartyMenuUseExitCallback
- strb r1, [r0]
- ldr r1, _0811FEE4 @ =gPartyMenu
- movs r0, 0x7
- strb r0, [r1, 0x9]
- bl ClearSelectedPartyOrder
- adds r0, r4, 0
- bl Task_ClosePartyMenu
- b _0811FEF4
- .align 2, 0
-_0811FEE0: .4byte gPartyMenuUseExitCallback
-_0811FEE4: .4byte gPartyMenu
-_0811FEE8:
- movs r0, 0x5
- bl PlaySE
-_0811FEEE:
- adds r0, r4, 0
- bl Task_ReturnToChooseMonAfterText
-_0811FEF4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Task_HandleCancelChooseMonYesNoInput
-
- thumb_func_start PartyMenuButtonHandler
-PartyMenuButtonHandler: @ 811FEFC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0811FF14 @ =gMain
- ldrh r1, [r0, 0x30]
- adds r3, r0, 0
- cmp r1, 0x20
- beq _0811FF2A
- cmp r1, 0x20
- bgt _0811FF18
- cmp r1, 0x10
- beq _0811FF2E
- b _0811FF32
- .align 2, 0
-_0811FF14: .4byte gMain
-_0811FF18:
- cmp r1, 0x40
- beq _0811FF22
- cmp r1, 0x80
- beq _0811FF26
- b _0811FF32
-_0811FF22:
- movs r1, 0xFF
- b _0811FF4E
-_0811FF26:
- movs r1, 0x1
- b _0811FF4E
-_0811FF2A:
- movs r1, 0xFE
- b _0811FF4E
-_0811FF2E:
- movs r1, 0x2
- b _0811FF4E
-_0811FF32:
- bl sub_80BF66C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0811FF46
- cmp r0, 0x2
- beq _0811FF4A
- movs r1, 0
- b _0811FF4C
-_0811FF46:
- movs r1, 0xFF
- b _0811FF4C
-_0811FF4A:
- movs r1, 0x1
-_0811FF4C:
- ldr r3, _0811FF5C @ =gMain
-_0811FF4E:
- ldrh r2, [r3, 0x2E]
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _0811FF60
- movs r0, 0x8
- b _0811FF8C
- .align 2, 0
-_0811FF5C: .4byte gMain
-_0811FF60:
- lsls r0, r1, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0811FF72
- adds r0, r4, 0
- bl UpdateCurrentPartySelection
- movs r0, 0
- b _0811FF8C
-_0811FF72:
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _0811FF86
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x7
- bne _0811FF86
- movs r0, 0x2
- b _0811FF8C
-_0811FF86:
- ldrh r1, [r3, 0x2E]
- movs r0, 0x3
- ands r0, r1
-_0811FF8C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end PartyMenuButtonHandler
-
- thumb_func_start UpdateCurrentPartySelection
-UpdateCurrentPartySelection: @ 811FF94
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrb r4, [r5]
- ldr r0, _0811FFB8 @ =gPartyMenu
- ldrb r0, [r0, 0x8]
- lsls r0, 26
- lsrs r0, 30
- cmp r0, 0
- bne _0811FFBC
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl UpdatePartySelectionSingleLayout
- b _0811FFC6
- .align 2, 0
-_0811FFB8: .4byte gPartyMenu
-_0811FFBC:
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl UpdatePartySelectionDoubleLayout
-_0811FFC6:
- movs r1, 0
- ldrsb r1, [r5, r1]
- lsls r4, 24
- asrs r0, r4, 24
- cmp r1, r0
- beq _0811FFE8
- movs r0, 0x5
- bl PlaySE
- lsrs r0, r4, 24
- movs r1, 0
- bl AnimatePartySlot
- ldrb r0, [r5]
- movs r1, 0x1
- bl AnimatePartySlot
-_0811FFE8:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end UpdateCurrentPartySelection
-
- thumb_func_start UpdatePartySelectionSingleLayout
-UpdatePartySelectionSingleLayout: @ 811FFF0
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08120016
- cmp r1, r0
- bgt _0812000C
- subs r0, 0x1
- cmp r1, r0
- beq _081200C0
- b _081200EE
-_0812000C:
- cmp r1, 0x1
- beq _0812005C
- cmp r1, 0x2
- beq _08120094
- b _081200EE
-_08120016:
- ldrb r0, [r4]
- movs r1, 0
- ldrsb r1, [r4, r1]
- cmp r1, 0
- bne _08120024
- movs r0, 0x7
- b _081200EC
-_08120024:
- cmp r1, 0x6
- bne _08120034
- ldr r0, _08120030 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- b _081200EC
- .align 2, 0
-_08120030: .4byte gPlayerPartyCount
-_08120034:
- cmp r1, 0x7
- bne _08120058
- ldr r0, _08120048 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0812004C
- movs r0, 0x6
- b _081200EC
- .align 2, 0
-_08120048: .4byte sPartyMenuInternal
-_0812004C:
- ldr r0, _08120054 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- b _081200EC
- .align 2, 0
-_08120054: .4byte gPlayerPartyCount
-_08120058:
- subs r0, 0x1
- b _081200EC
-_0812005C:
- ldrb r2, [r4]
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x7
- beq _081200EA
- movs r1, 0
- ldrsb r1, [r4, r1]
- ldr r0, _08120084 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _08120090
- ldr r0, _08120088 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0812008C
- movs r0, 0x6
- b _081200EC
- .align 2, 0
-_08120084: .4byte gPlayerPartyCount
-_08120088: .4byte sPartyMenuInternal
-_0812008C:
- movs r0, 0x7
- b _081200EC
-_08120090:
- adds r0, r2, 0x1
- b _081200EC
-_08120094:
- ldr r0, _081200B8 @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _081200EE
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _081200EE
- ldr r0, _081200BC @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _081200EC
- movs r0, 0x1
- b _081200EC
- .align 2, 0
-_081200B8: .4byte gPlayerPartyCount
-_081200BC: .4byte sPartyMenuInternal
-_081200C0:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- beq _081200EE
- cmp r0, 0x6
- beq _081200EE
- cmp r0, 0x7
- beq _081200EE
- ldr r0, _081200F4 @ =sPartyMenuInternal
- ldr r3, [r0]
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r3, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
-_081200EA:
- movs r0, 0
-_081200EC:
- strb r0, [r4]
-_081200EE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081200F4: .4byte sPartyMenuInternal
- thumb_func_end UpdatePartySelectionSingleLayout
-
- thumb_func_start UpdatePartySelectionDoubleLayout
-UpdatePartySelectionDoubleLayout: @ 81200F8
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r2, r1, 24
- asrs r5, r1, 24
- movs r6, 0x1
- negs r6, r6
- cmp r5, r6
- beq _08120124
- cmp r5, r6
- bgt _0812011A
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- bne _08120118
- b _08120238
-_08120118:
- b _08120290
-_0812011A:
- cmp r5, 0x1
- beq _08120180
- cmp r5, 0x2
- beq _081201C0
- b _08120290
-_08120124:
- ldrb r1, [r4]
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _08120132
- movs r0, 0x7
- b _0812028E
-_08120132:
- cmp r0, 0x6
- bne _08120144
- ldr r0, _08120140 @ =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- b _0812028E
- .align 2, 0
-_08120140: .4byte gPlayerPartyCount
-_08120144:
- cmp r0, 0x7
- bne _08120160
- ldr r0, _08120158 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _0812015C
- movs r0, 0x6
- b _0812028E
- .align 2, 0
-_08120158: .4byte sPartyMenuInternal
-_0812015C:
- subs r0, r1, 0x1
- strb r0, [r4]
-_08120160:
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r1, r2, 24
- asrs r1, 24
- bl GetNewSlotDoubleLayout
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0812017C
- b _08120290
-_0812017C:
- strb r2, [r4]
- b _08120290
-_08120180:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x6
- bne _0812018C
- movs r0, 0x7
- b _0812028E
-_0812018C:
- cmp r0, 0x7
- bne _08120194
- movs r0, 0
- b _0812028E
-_08120194:
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x1
- bl GetNewSlotDoubleLayout
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, r6
- bne _0812017C
- ldr r0, _081201B8 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _081201BC
- movs r0, 0x6
- b _0812028E
- .align 2, 0
-_081201B8: .4byte sPartyMenuInternal
-_081201BC:
- movs r0, 0x7
- b _0812028E
-_081201C0:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _081201F8
- ldr r0, _081201E8 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r6, r0, 29
- cmp r6, 0x3
- bne _081201F0
- ldr r0, _081201EC @ =gPlayerParty + 300 @ &gPlayerParty[3]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08120290
- strb r6, [r4]
- b _08120290
- .align 2, 0
-_081201E8: .4byte sPartyMenuInternal
-_081201EC: .4byte gPlayerParty + 300 @ &gPlayerParty[3]
-_081201F0:
- ldr r0, _081201F4 @ =gPlayerParty + 200 @ &gPlayerParty[2]
- b _0812020C
- .align 2, 0
-_081201F4: .4byte gPlayerParty + 200 @ &gPlayerParty[2]
-_081201F8:
- cmp r0, 0x1
- bne _08120290
- ldr r0, _0812021C @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 28
- lsrs r5, r0, 29
- cmp r5, 0x5
- bne _08120224
- ldr r0, _08120220 @ =gPlayerParty + 500 @ &gPlayerParty[5]
-_0812020C:
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08120290
- strb r5, [r4]
- b _08120290
- .align 2, 0
-_0812021C: .4byte sPartyMenuInternal
-_08120220: .4byte gPlayerParty + 500 @ &gPlayerParty[5]
-_08120224:
- ldr r0, _08120234 @ =gPlayerParty + 400 @ &gPlayerParty[4]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08120290
- movs r0, 0x4
- b _0812028E
- .align 2, 0
-_08120234: .4byte gPlayerParty + 400 @ &gPlayerParty[4]
-_08120238:
- ldrb r1, [r4]
- subs r0, r1, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08120268
- ldr r0, _08120264 @ =sPartyMenuInternal
- ldr r3, [r0]
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r3, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
- movs r0, 0
- b _0812028E
- .align 2, 0
-_08120264: .4byte sPartyMenuInternal
-_08120268:
- subs r0, r1, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08120290
- ldr r0, _08120298 @ =sPartyMenuInternal
- ldr r3, [r0]
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r3, 0x8]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x8]
- movs r0, 0x1
-_0812028E:
- strb r0, [r4]
-_08120290:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120298: .4byte sPartyMenuInternal
- thumb_func_end UpdatePartySelectionDoubleLayout
-
- thumb_func_start GetNewSlotDoubleLayout
-GetNewSlotDoubleLayout: @ 812029C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- asrs r6, r1, 24
-_081202A6:
- lsls r0, r5, 24
- asrs r0, 24
- adds r0, r6
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, r5, 24
- lsrs r0, r1, 24
- cmp r0, 0x5
- bhi _081202D4
- asrs r4, r1, 24
- movs r0, 0x64
- muls r0, r4
- ldr r1, _081202D0 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081202A6
- adds r0, r4, 0
- b _081202D8
- .align 2, 0
-_081202D0: .4byte gPlayerParty
-_081202D4:
- movs r0, 0x1
- negs r0, r0
-_081202D8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetNewSlotDoubleLayout
-
- thumb_func_start GetMonNickname
-GetMonNickname: @ 81202E0
- push {r4,lr}
- adds r4, r1, 0
- movs r1, 0x2
- adds r2, r4, 0
- bl GetMonData
- adds r0, r4, 0
- bl StringGetEnd10
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMonNickname
-
- thumb_func_start DisplayPartyMenuMessage
-DisplayPartyMenuMessage: @ 81202F8
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl PartyMenuPrintText
- ldr r0, _08120320 @ =Task_PrintAndWaitForText
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08120324 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08120320: .4byte Task_PrintAndWaitForText
-_08120324: .4byte gTasks
- thumb_func_end DisplayPartyMenuMessage
-
- thumb_func_start Task_PrintAndWaitForText
-Task_PrintAndWaitForText: @ 8120328
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- movs r0, 0x6
- bl RunTextPrinters_CheckActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08120364
- ldr r0, _0812036C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0812035E
- movs r0, 0x6
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x6
- bl ClearWindowTilemap
-_0812035E:
- adds r0, r5, 0
- bl DestroyTask
-_08120364:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812036C: .4byte gTasks
- thumb_func_end Task_PrintAndWaitForText
-
- thumb_func_start IsPartyMenuTextPrinterActive
-IsPartyMenuTextPrinterActive: @ 8120370
- push {lr}
- ldr r0, _08120380 @ =Task_PrintAndWaitForText
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08120380: .4byte Task_PrintAndWaitForText
- thumb_func_end IsPartyMenuTextPrinterActive
-
- thumb_func_start Task_WaitForLinkAndReturnToChooseMon
-Task_WaitForLinkAndReturnToChooseMon: @ 8120384
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081203AA
- movs r0, 0
- bl DisplayPartyMenuStdMessage
- ldr r0, _081203B0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _081203B4 @ =Task_HandleChooseMonInput
- str r0, [r1]
-_081203AA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081203B0: .4byte gTasks
-_081203B4: .4byte Task_HandleChooseMonInput
- thumb_func_end Task_WaitForLinkAndReturnToChooseMon
-
- thumb_func_start Task_ReturnToChooseMonAfterText
-Task_ReturnToChooseMonAfterText: @ 81203B8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl IsPartyMenuTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120410
- movs r0, 0x6
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x6
- bl ClearWindowTilemap
- bl MenuHelpers_LinkSomething
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081203FC
- ldr r0, _081203F4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _081203F8 @ =Task_WaitForLinkAndReturnToChooseMon
- b _0812040E
- .align 2, 0
-_081203F4: .4byte gTasks
-_081203F8: .4byte Task_WaitForLinkAndReturnToChooseMon
-_081203FC:
- movs r0, 0
- bl DisplayPartyMenuStdMessage
- ldr r0, _08120418 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812041C @ =Task_HandleChooseMonInput
-_0812040E:
- str r0, [r1]
-_08120410:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120418: .4byte gTasks
-_0812041C: .4byte Task_HandleChooseMonInput
- thumb_func_end Task_ReturnToChooseMonAfterText
-
- thumb_func_start DisplayGaveHeldItemMessage
-DisplayGaveHeldItemMessage: @ 8120420
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- lsls r3, 24
- cmp r3, 0
- bne _0812043C
- ldr r3, _08120438 @ =0x0000ffff
- movs r0, 0x5
- b _08120448
- .align 2, 0
-_08120438: .4byte 0x0000ffff
-_0812043C:
- ldr r0, _08120454 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0x6
- bne _0812045C
- ldr r3, _08120458 @ =0x0000ffff
- movs r0, 0x7
-_08120448:
- adds r1, r5, 0
- adds r2, r4, 0
- bl ItemUse_SetQuestLogEvent
- b _08120468
- .align 2, 0
-_08120454: .4byte gPartyMenu
-_08120458: .4byte 0x0000ffff
-_0812045C:
- ldr r3, _08120498 @ =0x0000ffff
- movs r0, 0x6
- adds r1, r5, 0
- adds r2, r4, 0
- bl ItemUse_SetQuestLogEvent
-_08120468:
- ldr r1, _0812049C @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r1, _081204A0 @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _081204A4 @ =gStringVar4
- ldr r1, _081204A8 @ =gText_PkmnWasGivenItem
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r6, 0
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120498: .4byte 0x0000ffff
-_0812049C: .4byte gStringVar1
-_081204A0: .4byte gStringVar2
-_081204A4: .4byte gStringVar4
-_081204A8: .4byte gText_PkmnWasGivenItem
- thumb_func_end DisplayGaveHeldItemMessage
-
- thumb_func_start DisplayTookHeldItemMessage
-DisplayTookHeldItemMessage: @ 81204AC
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- ldr r3, _081204F8 @ =0x0000ffff
- movs r0, 0x8
- adds r1, r6, 0
- adds r2, r4, 0
- bl ItemUse_SetQuestLogEvent
- ldr r1, _081204FC @ =gStringVar1
- adds r0, r6, 0
- bl GetMonNickname
- ldr r1, _08120500 @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _08120504 @ =gStringVar4
- ldr r1, _08120508 @ =gText_ReceivedItemFromPkmn
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r5, 0
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081204F8: .4byte 0x0000ffff
-_081204FC: .4byte gStringVar1
-_08120500: .4byte gStringVar2
-_08120504: .4byte gStringVar4
-_08120508: .4byte gText_ReceivedItemFromPkmn
- thumb_func_end DisplayTookHeldItemMessage
-
- thumb_func_start DisplayAlreadyHoldingItemSwitchMessage
-DisplayAlreadyHoldingItemSwitchMessage: @ 812050C
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- ldr r1, _08120548 @ =gStringVar1
- bl GetMonNickname
- ldr r1, _0812054C @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _08120550 @ =gStringVar4
- ldr r1, _08120554 @ =gText_PkmnAlreadyHoldingItemSwitch
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r5, 0
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120548: .4byte gStringVar1
-_0812054C: .4byte gStringVar2
-_08120550: .4byte gStringVar4
-_08120554: .4byte gText_PkmnAlreadyHoldingItemSwitch
- thumb_func_end DisplayAlreadyHoldingItemSwitchMessage
-
- thumb_func_start DisplaySwitchedHeldItemMessage
-DisplaySwitchedHeldItemMessage: @ 8120558
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _081205B0 @ =gPartyMenu
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081205B4 @ =gPlayerParty
- adds r0, r1
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_8124B60
- ldr r1, _081205B8 @ =gStringVar1
- adds r0, r4, 0
- bl CopyItemName
- ldr r1, _081205BC @ =gStringVar2
- adds r0, r5, 0
- bl CopyItemName
- ldr r4, _081205C0 @ =gStringVar4
- ldr r1, _081205C4 @ =gText_SwitchedPkmnItem
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r6, 0
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081205B0: .4byte gPartyMenu
-_081205B4: .4byte gPlayerParty
-_081205B8: .4byte gStringVar1
-_081205BC: .4byte gStringVar2
-_081205C0: .4byte gStringVar4
-_081205C4: .4byte gText_SwitchedPkmnItem
- thumb_func_end DisplaySwitchedHeldItemMessage
-
- thumb_func_start GiveItemToMon
-GiveItemToMon: @ 81205C8
- push {r4-r7,lr}
- sub sp, 0x4
- adds r6, r0, 0
- lsls r5, r1, 16
- lsrs r4, r5, 16
- adds r7, r4, 0
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081205F2
- adds r0, r6, 0
- adds r1, r4, 0
- bl GiveMailToMon
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08120606
-_081205F2:
- mov r0, sp
- strb r7, [r0]
- mov r1, sp
- lsrs r0, r5, 24
- strb r0, [r1, 0x1]
- adds r0, r6, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
-_08120606:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end GiveItemToMon
-
- thumb_func_start TryTakeMonItem
-TryTakeMonItem: @ 8120610
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- mov r1, sp
- strh r0, [r1]
- cmp r0, 0
- bne _0812062C
- movs r0, 0
- b _0812064E
-_0812062C:
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- beq _0812064C
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
- adds r0, r4, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- movs r0, 0x2
- b _0812064E
-_0812064C:
- movs r0, 0x1
-_0812064E:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end TryTakeMonItem
-
- thumb_func_start BufferBagFullCantTakeItemMessage
-BufferBagFullCantTakeItemMessage: @ 8120658
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _08120678
- cmp r0, 0x5
- beq _0812067E
- ldr r1, _08120674 @ =gStartMenuText_Bag
- b _08120686
- .align 2, 0
-_08120674: .4byte gStartMenuText_Bag
-_08120678:
- movs r0, 0xB6
- lsls r0, 1
- b _08120680
-_0812067E:
- ldr r0, _08120698 @ =0x0000016d
-_08120680:
- bl ItemId_GetName
- adds r1, r0, 0
-_08120686:
- ldr r0, _0812069C @ =gStringVar1
- bl StringCopy
- ldr r0, _081206A0 @ =gStringVar4
- ldr r1, _081206A4 @ =gText_BagFullCouldNotRemoveItem
- bl StringExpandPlaceholders
- pop {r0}
- bx r0
- .align 2, 0
-_08120698: .4byte 0x0000016d
-_0812069C: .4byte gStringVar1
-_081206A0: .4byte gStringVar4
-_081206A4: .4byte gText_BagFullCouldNotRemoveItem
- thumb_func_end BufferBagFullCantTakeItemMessage
-
- thumb_func_start Task_PartyMenuModifyHP
-Task_PartyMenuModifyHP: @ 81206A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- ldr r1, _08120750 @ =gTasks+0x8
- adds r7, r0, r1
- ldrh r0, [r7, 0x4]
- ldrh r1, [r7]
- adds r0, r1
- strh r0, [r7]
- ldrh r0, [r7, 0x6]
- subs r0, 0x1
- strh r0, [r7, 0x6]
- movs r2, 0x8
- ldrsh r0, [r7, r2]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _08120754 @ =gPlayerParty
- adds r0, r4
- movs r1, 0x39
- adds r2, r7, 0
- bl SetMonData
- movs r3, 0x8
- ldrsh r2, [r7, r3]
- adds r0, r2, 0
- muls r0, r5
- adds r0, r4
- ldr r6, _08120758 @ =sPartyMenuBoxes
- lsls r2, 4
- ldr r1, [r6]
- adds r1, r2
- movs r2, 0x1
- bl DisplayPartyPokemonHPCheck
- movs r0, 0x8
- ldrsh r2, [r7, r0]
- adds r0, r2, 0
- muls r0, r5
- adds r0, r4
- lsls r2, 4
- ldr r1, [r6]
- adds r1, r2
- bl DisplayPartyPokemonHPBarCheck
- movs r1, 0x6
- ldrsh r0, [r7, r1]
- cmp r0, 0
- beq _08120724
- movs r2, 0
- ldrsh r1, [r7, r2]
- cmp r1, 0
- beq _08120724
- movs r3, 0x2
- ldrsh r0, [r7, r3]
- cmp r1, r0
- bne _08120746
-_08120724:
- movs r0, 0
- ldrsh r1, [r7, r0]
- movs r2, 0xA
- ldrsh r0, [r7, r2]
- cmp r1, r0
- ble _08120740
- ldr r0, _0812075C @ =gStringVar2
- movs r3, 0xA
- ldrsh r2, [r7, r3]
- subs r1, r2
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
-_08120740:
- mov r0, r8
- bl SwitchTaskToFollowupFunc
-_08120746:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08120750: .4byte gTasks+0x8
-_08120754: .4byte gPlayerParty
-_08120758: .4byte sPartyMenuBoxes
-_0812075C: .4byte gStringVar2
- thumb_func_end Task_PartyMenuModifyHP
-
- thumb_func_start PartyMenuModifyHP
-PartyMenuModifyHP: @ 8120760
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r0
- mov r9, r1
- adds r5, r2, 0
- mov r10, r3
- ldr r7, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r5, 24
- lsrs r5, 24
- mov r0, r10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r0, 0x64
- mov r6, r9
- muls r6, r0
- ldr r0, _081207E4 @ =gPlayerParty
- adds r6, r0
- mov r0, r8
- lsls r4, r0, 2
- add r4, r8
- lsls r4, 3
- ldr r0, _081207E8 @ =gTasks+0x8
- adds r4, r0
- adds r0, r6, 0
- movs r1, 0x39
- bl GetMonData
- strh r0, [r4]
- adds r0, r6, 0
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r4, 0x2]
- lsls r5, 24
- asrs r5, 24
- strh r5, [r4, 0x4]
- mov r0, r10
- strh r0, [r4, 0x6]
- mov r0, r9
- strh r0, [r4, 0x8]
- ldrh r0, [r4]
- strh r0, [r4, 0xA]
- ldr r1, _081207EC @ =Task_PartyMenuModifyHP
- mov r0, r8
- adds r2, r7, 0
- bl SetTaskFuncWithFollowupFunc
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081207E4: .4byte gPlayerParty
-_081207E8: .4byte gTasks+0x8
-_081207EC: .4byte Task_PartyMenuModifyHP
- thumb_func_end PartyMenuModifyHP
-
- thumb_func_start ResetHPTaskData
-ResetHPTaskData: @ 81207F0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _08120814 @ =gTasks+0x8
- adds r3, r0, r1
- cmp r5, 0x5
- bhi _08120852
- lsls r0, r5, 2
- ldr r1, _08120818 @ =_0812081C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08120814: .4byte gTasks+0x8
-_08120818: .4byte _0812081C
- .align 2, 0
-_0812081C:
- .4byte _08120834
- .4byte _0812083A
- .4byte _0812083E
- .4byte _08120842
- .4byte _08120846
- .4byte _0812084A
-_08120834:
- strh r2, [r3]
- strh r2, [r3, 0xA]
- b _08120852
-_0812083A:
- strh r2, [r3, 0x2]
- b _08120852
-_0812083E:
- strh r2, [r3, 0x4]
- b _08120852
-_08120842:
- strh r2, [r3, 0x6]
- b _08120852
-_08120846:
- strh r2, [r3, 0x8]
- b _08120852
-_0812084A:
- ldr r1, _08120858 @ =Task_PartyMenuModifyHP
- adds r0, r4, 0
- bl SetTaskFuncWithFollowupFunc
-_08120852:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120858: .4byte Task_PartyMenuModifyHP
- thumb_func_end ResetHPTaskData
-
- thumb_func_start GetAilmentFromStatus
-GetAilmentFromStatus: @ 812085C
- push {lr}
- adds r1, r0, 0
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- beq _0812086C
- movs r0, 0x1
- b _0812089E
-_0812086C:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08120878
- movs r0, 0x2
- b _0812089E
-_08120878:
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _08120884
- movs r0, 0x3
- b _0812089E
-_08120884:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08120890
- movs r0, 0x4
- b _0812089E
-_08120890:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0812089C
- movs r0, 0
- b _0812089E
-_0812089C:
- movs r0, 0x5
-_0812089E:
- pop {r1}
- bx r1
- thumb_func_end GetAilmentFromStatus
-
- thumb_func_start GetMonAilment
-GetMonAilment: @ 81208A4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _081208B6
- movs r0, 0x7
- b _081208DE
-_081208B6:
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- bl GetAilmentFromStatus
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _081208DE
- adds r0, r4, 0
- movs r1, 0
- bl CheckPartyPokerus
- lsls r0, 24
- cmp r0, 0
- bne _081208DC
- movs r0, 0
- b _081208DE
-_081208DC:
- movs r0, 0x6
-_081208DE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMonAilment
-
- thumb_func_start SetPartyMonsAllowedInMinigame
-SetPartyMonsAllowedInMinigame: @ 81208E4
- push {r4,r5,lr}
- ldr r2, _08120934 @ =gPartyMenu
- ldrb r1, [r2, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0xB
- bne _0812096E
- adds r5, r2, 0
- adds r5, 0xE
- movs r0, 0
- strh r0, [r2, 0xE]
- ldr r0, _08120938 @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- cmp r0, 0
- bne _08120944
- movs r4, 0
- ldr r0, _0812093C @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0812096E
-_0812090C:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _08120940 @ =gPlayerParty
- adds r0, r1
- bl IsMonAllowedInPokemonJump
- lsls r0, 16
- lsrs r0, 16
- lsls r0, r4
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r5]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0812093C @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _0812090C
- b _0812096E
- .align 2, 0
-_08120934: .4byte gPartyMenu
-_08120938: .4byte gSpecialVar_0x8005
-_0812093C: .4byte gPlayerPartyCount
-_08120940: .4byte gPlayerParty
-_08120944:
- movs r4, 0
- b _08120966
-_08120948:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _08120974 @ =gPlayerParty
- adds r0, r1
- bl IsMonAllowedInDodrioBerryPicking
- lsls r0, 16
- lsrs r0, 16
- lsls r0, r4
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r5]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_08120966:
- ldr r0, _08120978 @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r4, r0
- bcc _08120948
-_0812096E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120974: .4byte gPlayerParty
-_08120978: .4byte gPlayerPartyCount
- thumb_func_end SetPartyMonsAllowedInMinigame
-
- thumb_func_start IsMonAllowedInPokemonJump
-IsMonAllowedInPokemonJump: @ 812097C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _081209A2
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl sub_8149A00
- cmp r0, 0
- beq _081209A2
- movs r0, 0x1
- b _081209A4
-_081209A2:
- movs r0, 0
-_081209A4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsMonAllowedInPokemonJump
-
- thumb_func_start IsMonAllowedInDodrioBerryPicking
-IsMonAllowedInDodrioBerryPicking: @ 81209AC
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _081209CA
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0x55
- bne _081209CA
- movs r0, 0x1
- b _081209CC
-_081209CA:
- movs r0, 0
-_081209CC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsMonAllowedInDodrioBerryPicking
-
- thumb_func_start IsMonAllowedInMinigame
-IsMonAllowedInMinigame: @ 81209D4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _081209F0 @ =gPartyMenu
- movs r2, 0xE
- ldrsh r1, [r1, r2]
- asrs r1, r0
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- bne _081209EC
- movs r0, 0
-_081209EC:
- pop {r1}
- bx r1
- .align 2, 0
-_081209F0: .4byte gPartyMenu
- thumb_func_end IsMonAllowedInMinigame
-
- thumb_func_start TryEnterMonForMinigame
-TryEnterMonForMinigame: @ 81209F4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- adds r0, r5, 0
- bl IsMonAllowedInMinigame
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08120A24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08120A20 @ =gSpecialVar_0x8004
- strh r5, [r0]
- adds r0, r4, 0
- bl Task_ClosePartyMenu
- b _08120A46
- .align 2, 0
-_08120A20: .4byte gSpecialVar_0x8004
-_08120A24:
- movs r0, 0x1A
- bl PlaySE
- ldr r0, _08120A4C @ =gUnknown_8417696
- movs r1, 0
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08120A50 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120A54 @ =Task_ReturnToChooseMonAfterText
- str r1, [r0]
-_08120A46:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120A4C: .4byte gUnknown_8417696
-_08120A50: .4byte gTasks
-_08120A54: .4byte Task_ReturnToChooseMonAfterText
- thumb_func_end TryEnterMonForMinigame
-
- thumb_func_start CancelParticipationPrompt
-CancelParticipationPrompt: @ 8120A58
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120A84 @ =gUnknown_84176B8
- movs r1, 0x1
- bl DisplayPartyMenuMessage
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r1, _08120A88 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120A8C @ =Task_CancelParticipationYesNo
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120A84: .4byte gUnknown_84176B8
-_08120A88: .4byte gTasks
-_08120A8C: .4byte Task_CancelParticipationYesNo
- thumb_func_end CancelParticipationPrompt
-
- thumb_func_start Task_CancelParticipationYesNo
-Task_CancelParticipationYesNo: @ 8120A90
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsPartyMenuTextPrinterActive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120AB4
- bl PartyMenuDisplayYesNoMenu
- ldr r0, _08120ABC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120AC0 @ =Task_HandleCancelParticipationYesNoInput
- str r0, [r1]
-_08120AB4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120ABC: .4byte gTasks
-_08120AC0: .4byte Task_HandleCancelParticipationYesNoInput
- thumb_func_end Task_CancelParticipationYesNo
-
- thumb_func_start Task_HandleCancelParticipationYesNoInput
-Task_HandleCancelParticipationYesNoInput: @ 8120AC4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08120AEA
- cmp r1, 0
- bgt _08120AE4
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08120AFC
- b _08120B10
-_08120AE4:
- cmp r1, 0x1
- beq _08120B02
- b _08120B10
-_08120AEA:
- ldr r1, _08120AF8 @ =gSpecialVar_0x8004
- movs r0, 0x7
- strh r0, [r1]
- adds r0, r4, 0
- bl Task_ClosePartyMenu
- b _08120B10
- .align 2, 0
-_08120AF8: .4byte gSpecialVar_0x8004
-_08120AFC:
- movs r0, 0x5
- bl PlaySE
-_08120B02:
- ldr r0, _08120B18 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120B1C @ =Task_ReturnToChooseMonAfterText
- str r0, [r1]
-_08120B10:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120B18: .4byte gTasks
-_08120B1C: .4byte Task_ReturnToChooseMonAfterText
- thumb_func_end Task_HandleCancelParticipationYesNoInput
-
- thumb_func_start CanMonLearnTMTutor
-CanMonLearnTMTutor: @ 8120B20
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r7, r4, 0
- lsls r2, 24
- lsrs r6, r2, 24
- mov r8, r6
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08120B42
- movs r0, 0x3
- b _08120B9E
-_08120B42:
- movs r0, 0x90
- lsls r0, 1
- cmp r4, r0
- bls _08120B64
- adds r1, r4, 0
- subs r1, 0x21
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl CanMonLearnTMHM
- cmp r0, 0
- beq _08120B7C
- adds r0, r7, 0
- bl ItemIdToBattleMoveId
- b _08120B86
-_08120B64:
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl CanLearnTutorMove
- lsls r0, 24
- cmp r0, 0
- bne _08120B80
-_08120B7C:
- movs r0, 0x1
- b _08120B9E
-_08120B80:
- mov r0, r8
- bl GetTutorMove
-_08120B86:
- lsls r0, 16
- lsrs r1, r0, 16
- adds r0, r5, 0
- bl MonKnowsMove
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120B9C
- movs r0, 0
- b _08120B9E
-_08120B9C:
- movs r0, 0x2
-_08120B9E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CanMonLearnTMTutor
-
- thumb_func_start GetTutorMove
-GetTutorMove: @ 8120BA8
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x10
- beq _08120BC8
- cmp r1, 0x10
- bgt _08120BBC
- cmp r1, 0xF
- beq _08120BC2
- b _08120BD6
-_08120BBC:
- cmp r1, 0x11
- beq _08120BD0
- b _08120BD6
-_08120BC2:
- movs r0, 0xA9
- lsls r0, 1 @ MOVE_FRENZY_PLANT
- b _08120BDE
-_08120BC8:
- ldr r0, _08120BCC @ =0x00000133 @ MOVE_BLAST_BURN
- b _08120BDE
- .align 2, 0
-_08120BCC: .4byte 0x00000133
-_08120BD0:
- movs r0, 0x9A
- lsls r0, 1 @ MOVE_HYDRO_CANNON
- b _08120BDE
-_08120BD6:
- ldr r0, _08120BE4 @ =sTutorMoves
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
-_08120BDE:
- pop {r1}
- bx r1
- .align 2, 0
-_08120BE4: .4byte sTutorMoves
- thumb_func_end GetTutorMove
-
- thumb_func_start CanLearnTutorMove
-CanLearnTutorMove: @ 8120BE8
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r2, r1, 24
- cmp r2, 0x10
- beq _08120C0C
- cmp r2, 0x10
- bgt _08120C00
- cmp r2, 0xF
- beq _08120C06
- b _08120C18
-_08120C00:
- cmp r2, 0x11
- beq _08120C12
- b _08120C18
-_08120C06:
- cmp r0, 3 @ SPECIES_VENUSAUR
- beq _08120C34
- b _08120C2A
-_08120C0C:
- cmp r0, 6 @ SPECIES_CHARIZARD
- beq _08120C34
- b _08120C2A
-_08120C12:
- cmp r0, 9 @ SPECIES_BLASTOISE
- beq _08120C34
- b _08120C2A
-_08120C18:
- ldr r1, _08120C30 @ =sTutorLearnsets
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- asrs r0, r2
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08120C34
-_08120C2A:
- movs r0, 0
- b _08120C36
- .align 2, 0
-_08120C30: .4byte sTutorLearnsets
-_08120C34:
- movs r0, 0x1
-_08120C36:
- pop {r1}
- bx r1
- thumb_func_end CanLearnTutorMove
-
- thumb_func_start sub_8120C3C
-sub_8120C3C: @ 8120C3C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120C60 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120C5C
- ldr r0, _08120C64 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120C68 @ =sub_8120C6C
- str r0, [r1]
-_08120C5C:
- pop {r0}
- bx r0
- .align 2, 0
-_08120C60: .4byte gPaletteFade
-_08120C64: .4byte gTasks
-_08120C68: .4byte sub_8120C6C
- thumb_func_end sub_8120C3C
-
- thumb_func_start sub_8120C6C
-sub_8120C6C: @ 8120C6C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120C9C @ =0xffff1fff
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x6
- bl BeginNormalPaletteFade
- ldr r1, _08120CA0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120CA4 @ =sub_8120CA8
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120C9C: .4byte 0xffff1fff
-_08120CA0: .4byte gTasks
-_08120CA4: .4byte sub_8120CA8
- thumb_func_end sub_8120C6C
-
- thumb_func_start sub_8120CA8
-sub_8120CA8: @ 8120CA8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120CCC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120CC8
- ldr r0, _08120CD0 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120CD4 @ =sub_8120CD8
- str r0, [r1]
-_08120CC8:
- pop {r0}
- bx r0
- .align 2, 0
-_08120CCC: .4byte gPaletteFade
-_08120CD0: .4byte gTasks
-_08120CD4: .4byte sub_8120CD8
- thumb_func_end sub_8120CA8
-
- thumb_func_start sub_8120CD8
-sub_8120CD8: @ 8120CD8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_81220D4
- ldr r2, _08120D00 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x8]
- ldr r0, _08120D04 @ =sub_8120D08
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120D00: .4byte gTasks
-_08120D04: .4byte sub_8120D08
- thumb_func_end sub_8120CD8
-
- thumb_func_start sub_8120D08
-sub_8120D08: @ 8120D08
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r4, r1, 3
- ldr r5, _08120D38 @ =gTasks+0x8
- adds r0, r4, r5
- ldrb r0, [r0]
- bl RunTextPrinters_CheckActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08120D30
- adds r0, r5, 0
- subs r0, 0x8
- adds r0, r4, r0
- ldr r1, _08120D3C @ =sub_8120D40
- str r1, [r0]
-_08120D30:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120D38: .4byte gTasks+0x8
-_08120D3C: .4byte sub_8120D40
- thumb_func_end sub_8120D08
-
- thumb_func_start sub_8120D40
-sub_8120D40: @ 8120D40
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120D70 @ =0xffff0008
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0x6
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, _08120D74 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120D78 @ =sub_8120D7C
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120D70: .4byte 0xffff0008
-_08120D74: .4byte gTasks
-_08120D78: .4byte sub_8120D7C
- thumb_func_end sub_8120D40
-
- thumb_func_start sub_8120D7C
-sub_8120D7C: @ 8120D7C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120DA0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120D9C
- ldr r0, _08120DA4 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120DA8 @ =sub_8120DAC
- str r0, [r1]
-_08120D9C:
- pop {r0}
- bx r0
- .align 2, 0
-_08120DA0: .4byte gPaletteFade
-_08120DA4: .4byte gTasks
-_08120DA8: .4byte sub_8120DAC
- thumb_func_end sub_8120D7C
-
- thumb_func_start sub_8120DAC
-sub_8120DAC: @ 8120DAC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r5, _08120DD4 @ =gTasks+0x8
- adds r0, r4, r5
- ldrb r0, [r0]
- ldr r1, _08120DD8 @ =gUnknown_8417494
- bl sub_8122084
- subs r5, 0x8
- adds r4, r5
- ldr r0, _08120DDC @ =sub_8120DE0
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08120DD4: .4byte gTasks+0x8
-_08120DD8: .4byte gUnknown_8417494
-_08120DDC: .4byte sub_8120DE0
- thumb_func_end sub_8120DAC
-
- thumb_func_start sub_8120DE0
-sub_8120DE0: @ 8120DE0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r5, r1, 3
- ldr r6, _08120E14 @ =gTasks+0x8
- adds r4, r5, r6
- ldrb r0, [r4]
- bl RunTextPrinters_CheckActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08120E0E
- ldrb r0, [r4]
- bl sub_8122110
- adds r0, r6, 0
- subs r0, 0x8
- adds r0, r5, r0
- ldr r1, _08120E18 @ =sub_8120E1C
- str r1, [r0]
-_08120E0E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120E14: .4byte gTasks+0x8
-_08120E18: .4byte sub_8120E1C
- thumb_func_end sub_8120DE0
-
- thumb_func_start sub_8120E1C
-sub_8120E1C: @ 8120E1C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08120E4C @ =0x0000fff7
- movs r1, 0
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0x6
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, _08120E50 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08120E54 @ =sub_8120E58
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120E4C: .4byte 0x0000fff7
-_08120E50: .4byte gTasks
-_08120E54: .4byte sub_8120E58
- thumb_func_end sub_8120E1C
-
- thumb_func_start sub_8120E58
-sub_8120E58: @ 8120E58
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08120E90 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120EAC
- movs r0, 0
- movs r1, 0x4F
- movs r2, 0xD0
- bl TextWindow_SetUserSelectedFrame
- movs r0, 0
- movs r1, 0x58
- movs r2, 0xF0
- bl TextWindow_SetStdFrame0_WithPal
- ldr r0, _08120E94 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0x3
- bne _08120E98
- movs r0, 0x5
- bl DisplayPartyMenuStdMessage
- b _08120E9E
- .align 2, 0
-_08120E90: .4byte gPaletteFade
-_08120E94: .4byte gPartyMenu
-_08120E98:
- movs r0, 0
- bl DisplayPartyMenuStdMessage
-_08120E9E:
- ldr r0, _08120EB4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08120EB8 @ =Task_HandleChooseMonInput
- str r0, [r1]
-_08120EAC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08120EB4: .4byte gTasks
-_08120EB8: .4byte Task_HandleChooseMonInput
- thumb_func_end sub_8120E58
-
- thumb_func_start sub_8120EBC
-sub_8120EBC: @ 8120EBC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08120ED8 @ =gTasks+0x8
- adds r3, r1, r0
- movs r2, 0
- strh r2, [r3]
- subs r0, 0x8
- adds r1, r0
- ldr r0, _08120EDC @ =sub_8120EE0
- str r0, [r1]
- bx lr
- .align 2, 0
-_08120ED8: .4byte gTasks+0x8
-_08120EDC: .4byte sub_8120EE0
- thumb_func_end sub_8120EBC
-
- thumb_func_start sub_8120EE0
-sub_8120EE0: @ 8120EE0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08120F1C @ =gTasks+0x8
- adds r6, r0, r1
- ldr r0, _08120F20 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08120F68
- adds r0, r5, 0
- bl sub_8120F78
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08120F68
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0xA0
- beq _08120F38
- cmp r0, 0xA0
- bgt _08120F24
- cmp r0, 0x50
- beq _08120F2A
- b _08120F62
- .align 2, 0
-_08120F1C: .4byte gTasks+0x8
-_08120F20: .4byte gPaletteFade
-_08120F24:
- cmp r0, 0xF0
- beq _08120F44
- b _08120F62
-_08120F2A:
- ldr r0, _08120F34 @ =gPartyMenu + 9
- movs r1, 0x2
- bl UpdateCurrentPartySelection
- b _08120F62
- .align 2, 0
-_08120F34: .4byte gPartyMenu + 9
-_08120F38:
- movs r0, 0x5
- bl PlaySE
- bl CreateSelectionWindow
- b _08120F62
-_08120F44:
- ldr r4, _08120F70 @ =sPartyMenuInternal
- ldr r0, [r4]
- adds r0, 0xE
- bl PartyMenuRemoveWindow
- ldr r1, _08120F74 @ =sCursorOptions
- ldr r0, [r4]
- ldrb r0, [r0, 0xF]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
-_08120F62:
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
-_08120F68:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08120F70: .4byte sPartyMenuInternal
-_08120F74: .4byte sCursorOptions
- thumb_func_end sub_8120EE0
-
thumb_func_start sub_8120F78
sub_8120F78: @ 8120F78
push {lr}
@@ -12644,7 +7807,7 @@ sub_8124DE0: @ 8124DE0
push {r4,lr}
ldr r4, _08124E0C @ =gSpecialVar_ItemId
ldrh r0, [r4]
- bl GetItemCompatibilityRule
+ bl CheckIfItemIsTMHMOrEvolutionStone
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s
index 44598a330..8ae94ce5e 100644
--- a/asm/pokemon_jump_2.s
+++ b/asm/pokemon_jump_2.s
@@ -4230,8 +4230,8 @@ sub_81499E0: @ 81499E0
_081499FC: .4byte gUnknown_203F3D4
thumb_func_end sub_81499E0
- thumb_func_start sub_8149A00
-sub_8149A00: @ 8149A00
+ thumb_func_start IsSpeciesAllowedInPokemonJump
+IsSpeciesAllowedInPokemonJump: @ 8149A00
push {lr}
lsls r0, 16
lsrs r0, 16
@@ -4242,7 +4242,7 @@ sub_8149A00: @ 8149A00
lsrs r0, 31
pop {r1}
bx r1
- thumb_func_end sub_8149A00
+ thumb_func_end IsSpeciesAllowedInPokemonJump
thumb_func_start sub_8149A18
sub_8149A18: @ 8149A18
@@ -4264,7 +4264,7 @@ _08149A1C:
bl GetMonData
lsls r0, 16
lsrs r0, 16
- bl sub_8149A00
+ bl IsSpeciesAllowedInPokemonJump
cmp r0, 0
beq _08149A54
ldr r1, _08149A50 @ =gSpecialVar_Result
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index 9092a38aa..c757216fd 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -558,7 +558,7 @@ _0811C9AA:
adds r0, r4, 0
adds r0, 0x96
ldrh r0, [r0]
- bl GetItemCompatibilityRule
+ bl CheckIfItemIsTMHMOrEvolutionStone
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
diff --git a/asm/shop.s b/asm/shop.s
index 7df8f037a..ca92ff4b7 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -793,7 +793,7 @@ _0809B118:
movs r1, 0
movs r2, 0xE
movs r3, 0x1E
- bl SetBgRectPal
+ bl SetBgTilemapPalette
b _0809B14E
.align 2, 0
_0809B138: .4byte gUnknown_2039934
@@ -805,7 +805,7 @@ _0809B13C:
movs r1, 0
movs r2, 0xC
movs r3, 0x1E
- bl SetBgRectPal
+ bl SetBgTilemapPalette
_0809B14E:
movs r0, 0x1
bl ScheduleBgCopyTilemapToVram
diff --git a/data/strings.s b/data/strings.s
index a0454c12b..547005fd6 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -1259,10 +1259,10 @@ gText_Speed2:: @ 841768D
gUnknown_8417693:: @ 0x8417693
.string "HP$"
-gUnknown_8417696:: @ 8417696
+gText_PkmnCantParticipate:: @ 8417696
.string "That POKéMON can't participate.{PAUSE_UNTIL_PRESS}$"
-gUnknown_84176B8:: @ 84176B8
+gText_CancelParticipation:: @ 84176B8
.string "Cancel participation?$"
gUnknown_84176CE:: @ 0x84176CE
diff --git a/include/constants/global.h b/include/constants/global.h
index d7508c940..68c4f8246 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -80,4 +80,6 @@ enum
#define NUM_BAG_POCKETS 5
+#define MULTI_PARTY_SIZE PARTY_SIZE / 2
+
#endif //GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h
index f8f77f466..5c084ee6e 100644
--- a/include/constants/party_menu.h
+++ b/include/constants/party_menu.h
@@ -25,7 +25,11 @@
#define TUTOR_MOVE_EXPLOSION 12
#define TUTOR_MOVE_ROCK_SLIDE 13
#define TUTOR_MOVE_SUBSTITUTE 14
-#define TUTOR_MOVE_COUNT 15
+#define TUTOR_MOVE_COUNT 15 // regular tutor move count
+
+#define TUTOR_MOVE_FRENZY_PLANT 15
+#define TUTOR_MOVE_BLAST_BURN 16
+#define TUTOR_MOVE_HYDRO_CANNON 17
#define PARTY_LAYOUT_SINGLE 0
#define PARTY_LAYOUT_DOUBLE 1
@@ -54,7 +58,7 @@
#define PARTY_ACTION_USE_ITEM 3
#define PARTY_ACTION_ABILITY_PREVENTS 4
#define PARTY_ACTION_GIVE_ITEM 5
-#define PARTY_ACTION_GIVE_PC_ITEM 6 // Unused. Not possible to give non-mail items directly from PC
+#define PARTY_ACTION_GIVE_PC_ITEM 6 // TODO: rename this one if necessary. Used for quest log.
#define PARTY_ACTION_GIVE_MAILBOX_MAIL 7
#define PARTY_ACTION_SWITCH 8
#define PARTY_ACTION_SWITCHING 9
diff --git a/include/fldeff.h b/include/fldeff.h
index 8dcb42500..d44ce75a2 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -47,7 +47,7 @@ bool8 FldEff_UseTeleport(void);
// softboiled
bool8 SetUpFieldMove_SoftBoiled(void);
void ChooseMonForSoftboiled(u8 taskId);
-void sub_80E5724(u8 taskId);
+void Task_TryUseSoftboiledOnPartyMon(u8 taskId);
// sweetscent
bool8 SetUpFieldMove_SweetScent(void);
diff --git a/include/graphics.h b/include/graphics.h
index 930201403..e04f7b564 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3746,6 +3746,9 @@ extern const u32 gPartyMenuPokeball_Pal[];
extern const u32 gPartyMenuPokeballSmall_Gfx[];
extern const u32 gStatusGfx_Icons[];
extern const u32 gStatusPal_Icons[];
+extern const u32 gPartyMenuBg_Gfx[];
+extern const u32 gPartyMenuBg_Tilemap[];
+extern const u32 gPartyMenuBg_Pal[];
// credits
extern const u32 gCreditsPokeballBgGfxTiles[];
diff --git a/include/item_use.h b/include/item_use.h
index db98533f1..7e9f7a61d 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -40,5 +40,6 @@ void ItemUseInBattle_EnigmaBerry(u8 taskId);
void ItemUseOutOfBattle_Itemfinder(u8 taskId);
void sub_80A1C44(u8 taskId);
u8 CanUseEscapeRopeOnCurrMap(void);
+u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId);
#endif //GUARD_ITEM_USE_H
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 8d042825c..1e75b336c 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -5,6 +5,9 @@
#include "task.h"
#include "window.h"
+#define MENU_L_PRESSED 1
+#define MENU_R_PRESSED 2
+
struct YesNoFuncTable
{
TaskFunc yesFunc;
@@ -22,9 +25,9 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1);
void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc);
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo);
u8 GetLRKeysState(void);
-u8 sub_80BF66C(void);
+u8 GetLRKeysPressedAndHeld(void);
bool8 itemid_link_can_give_berry(u16 itemId);
bool8 itemid_80BF6D8_mail_related(u16 itemId);
-void ClearVramOamPltt(void);
+void ResetVramOamAndBgCntRegs(void);
#endif //GUARD_MENU_HELPERS_H
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index 644e65289..fdc835625 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -15,7 +15,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o
void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
void DecompressAndLoadBgGfxUsingHeap2(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
void * MallocAndDecompress(const void * src, u32 * size);
-void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
+void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
void CopyRectIntoAltRect(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height);
void ResetBgPositions(void);
void InitStandardTextBoxWindows(void);
diff --git a/include/party_menu.h b/include/party_menu.h
index f5b4bd827..d3eb0181f 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -11,6 +11,7 @@ struct PartyMenu
TaskFunc task;
u8 menuType:4;
u8 layout:2;
+ u8 unk_8_6:2;
s8 slotId;
s8 slotId2;
u8 action;
@@ -39,11 +40,11 @@ void CB2_GiveHoldItem(void);
u8 GetCursorSelectionMonId(void);
void ChooseMonForDaycare(void);
void AnimatePartySlot(u8 monId, u8 a1);
-void DisplayPartyMenuStdMessage(u8);
+void DisplayPartyMenuStdMessage(u32);
void Task_HandleChooseMonInput(u8 taskId);
void PartyMenuModifyHP(u8 taskId, u8 a1, s8 a2, s16 amount, TaskFunc followupFunc);
-void GetMonNickname(const struct Pokemon * mon, u8 * dest);
-void DisplayPartyMenuMessage(const u8 * src, u8 a1);
+u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
+u8 DisplayPartyMenuMessage(const u8 * src, u8 a1);
bool8 IsPartyMenuTextPrinterActive(void);
void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback);
void sub_81252D0(u8 taskId, TaskFunc followUpFunc);
@@ -69,5 +70,6 @@ void ShowPartyMenuToShowcaseMultiBattleParty(void);
void SwitchPartyMonSlots(u8 slot, u8 slot2);
void LoadHeldItemIcons(void);
void OpenPartyMenuInTutorialBattle(u8 partyAction);
+void ClearSelectedPartyOrder(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 62d0e610f..8623b223a 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -4,5 +4,6 @@
#include "main.h"
void ResetPokeJumpResults(void);
+bool32 IsSpeciesAllowedInPokemonJump(u16 species);
#endif // GUARD_POKEMON_JUMP_H
diff --git a/include/strings.h b/include/strings.h
index 9242c7eaa..b60a5d568 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -335,6 +335,15 @@ extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
extern const u8 gText_EggCantBeTradedNow[];
extern const u8 gText_OtherTrainerCantAcceptPkmn[];
extern const u8 gText_CantTradeWithTrainer[];
+extern const u8 gUnknown_84176CF[];
+extern const u8 gText_PkmnWasGivenItem[];
+extern const u8 gText_ReceivedItemFromPkmn[];
+extern const u8 gText_PkmnAlreadyHoldingItemSwitch[];
+extern const u8 gText_SwitchedPkmnItem[];
+extern const u8 gText_BagFullCouldNotRemoveItem[];
+extern const u8 gText_PkmnCantParticipate[];
+extern const u8 gText_CancelParticipation[];
+extern const u8 gUnknown_8417494[];
// credits
extern const u8 gString_Dummy[];
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index 466fe7927..bb1b106af 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -765,7 +765,7 @@ static void PrintSelectedBerryDescription(s32 itemIdx)
static void SetDescriptionWindowBorderPalette(s32 pal)
{
- SetBgRectPal(1, 0, 16, 30, 4, pal + 1);
+ SetBgTilemapPalette(1, 0, 16, 30, 4, pal + 1);
ScheduleBgCopyTilemapToVram(1);
}
diff --git a/src/data/party_menu.h b/src/data/party_menu.h
index fde1a80f8..c00fe3613 100644
--- a/src/data/party_menu.h
+++ b/src/data/party_menu.h
@@ -110,24 +110,6 @@ const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_confirm_button.bin");
const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_cancel_button.bin");
-// NOTE TO MYSELF: remove these after #159 gets merged
-#define TEXT_COLOR_TRANSPARENT 0x0
-#define TEXT_COLOR_WHITE 0x1
-#define TEXT_COLOR_DARK_GREY 0x2
-#define TEXT_COLOR_LIGHT_GREY 0x3
-#define TEXT_COLOR_RED 0x4
-#define TEXT_COLOR_LIGHT_RED 0x5
-#define TEXT_COLOR_GREEN 0x6
-#define TEXT_COLOR_LIGHT_GREEN 0x7
-#define TEXT_COLOR_BLUE 0x8
-#define TEXT_COLOR_LIGHT_BLUE 0x9
-#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white
-#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green
-#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white
-#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine
-#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green
-#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean
-
const u8 sFontColorTable[][3] =
{
{TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_DARK_GREY}, // Default
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index d68d66d08..60437c125 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -35,7 +35,7 @@ void ChooseMonForSoftboiled(u8 taskId)
gTasks[taskId].func = Task_HandleChooseMonInput;
}
-void sub_80E5724(u8 taskId)
+void Task_TryUseSoftboiledOnPartyMon(u8 taskId)
{
u8 r8 = gPartyMenu.slotId;
u8 r5 = gPartyMenu.slotId2;
diff --git a/src/item_pc.c b/src/item_pc.c
index f4320cd41..f30cf1381 100644
--- a/src/item_pc.c
+++ b/src/item_pc.c
@@ -709,7 +709,7 @@ static void ItemPc_SetScrollPosition(void)
static void ItemPc_SetMessageWindowPalette(int a0)
{
- SetBgRectPal(1, 0, 14, 30, 6, a0 + 1);
+ SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1);
ScheduleBgCopyTilemapToVram(1);
}
diff --git a/src/item_use.c b/src/item_use.c
index 73ad9a284..70673d681 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -44,37 +44,36 @@
#include "constants/songs.h"
#include "constants/map_types.h"
-EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL;
-
-void sub_80A1084(void);
-void sub_80A109C(u8 taskId);
-void sub_80A112C(u8 taskId);
-void sub_80A11C0(u8 taskId);
-bool8 sub_80A1194(void);
-void sub_80A1208(void);
-void ItemUseOnFieldCB_Bicycle(u8 taskId);
-bool8 ItemUseCheckFunc_Rod(void);
-void ItemUseOnFieldCB_Rod(u8 taskId);
-void FieldUseFunc_EvoItem(u8 taskId);
-void sub_80A1648(u8 taskId);
-void sub_80A1674(u8 taskId);
-void InitTMCaseFromBag(void);
-void Task_InitTMCaseFromField(u8 taskId);
-void InitBerryPouchFromBag(void);
-void Task_InitBerryPouchFromField(u8 taskId);
-void InitBerryPouchFromBattle(void);
-void InitTeachyTvFromBag(void);
-void Task_InitTeachyTvFromField(u8 taskId);
-void sub_80A19E8(u8 taskId);
-void sub_80A1A44(void);
-void sub_80A1B48(u8 taskId);
-void sub_80A1C08(u8 taskId);
-void sub_80A1CAC(void);
-void sub_80A1CC0(u8 taskId);
-void sub_80A1D58(void);
-void sub_80A1D68(u8 taskId);
-void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId);
-void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId);
+static EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL;
+
+static void sub_80A1084(void);
+static void sub_80A109C(u8 taskId);
+static void sub_80A112C(u8 taskId);
+static void sub_80A11C0(u8 taskId);
+static bool8 sub_80A1194(void);
+static void sub_80A1208(void);
+static void ItemUseOnFieldCB_Bicycle(u8 taskId);
+static bool8 ItemUseCheckFunc_Rod(void);
+static void ItemUseOnFieldCB_Rod(u8 taskId);
+static void sub_80A1648(u8 taskId);
+static void sub_80A1674(u8 taskId);
+static void InitTMCaseFromBag(void);
+static void Task_InitTMCaseFromField(u8 taskId);
+static void InitBerryPouchFromBag(void);
+static void Task_InitBerryPouchFromField(u8 taskId);
+static void InitBerryPouchFromBattle(void);
+static void InitTeachyTvFromBag(void);
+static void Task_InitTeachyTvFromField(u8 taskId);
+static void sub_80A19E8(u8 taskId);
+static void sub_80A1A44(void);
+static void sub_80A1B48(u8 taskId);
+static void sub_80A1C08(u8 taskId);
+static void sub_80A1CAC(void);
+static void sub_80A1CC0(u8 taskId);
+static void sub_80A1D58(void);
+static void sub_80A1D68(u8 taskId);
+static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId);
+static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId);
// No clue what this is
static const u8 sUnref_83E27B4[] = {
@@ -132,14 +131,14 @@ static const u8 sUnref_83E27B4[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-void (*const gUnknown_83E2954[])(void) = {
+static void (*const gUnknown_83E2954[])(void) = {
CB2_ShowPartyMenuForItemUse,
CB2_ReturnToField,
NULL,
NULL
};
-void sub_80A0FBC(u8 taskId)
+static void sub_80A0FBC(u8 taskId)
{
u8 itemType;
if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY)
@@ -160,7 +159,7 @@ void sub_80A0FBC(u8 taskId)
}
}
-void sub_80A103C(u8 taskId)
+static void sub_80A103C(u8 taskId)
{
if (gTasks[taskId].data[3] != 1)
{
@@ -171,13 +170,13 @@ void sub_80A103C(u8 taskId)
sItemUseOnFieldCB(taskId);
}
-void sub_80A1084(void)
+static void sub_80A1084(void)
{
sub_807DC00();
CreateTask(sub_80A109C, 8);
}
-void sub_80A109C(u8 taskId)
+static void sub_80A109C(u8 taskId)
{
if (IsWeatherNotFadingIn() == TRUE)
{
@@ -185,7 +184,7 @@ void sub_80A109C(u8 taskId)
}
}
-void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
+static void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
{
StringExpandPlaceholders(gStringVar4, str);
if (a1 == FALSE)
@@ -194,12 +193,12 @@ void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str)
DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C);
}
-void sub_80A1110(u8 taskId, bool8 a1)
+static void sub_80A1110(u8 taskId, bool8 a1)
{
sub_80A10C4(taskId, a1, 4, gUnknown_8416425);
}
-void sub_80A112C(u8 taskId)
+static void sub_80A112C(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
DestroyTask(taskId);
@@ -207,7 +206,7 @@ void sub_80A112C(u8 taskId)
ScriptContext2_Disable();
}
-u8 GetItemCompatibilityRule(u16 itemId)
+u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
{
if (ItemId_GetPocket(itemId) == POCKET_TM_CASE)
return 1;
@@ -217,12 +216,12 @@ u8 GetItemCompatibilityRule(u16 itemId)
return 0;
}
-void sub_80A1184(void)
+static void sub_80A1184(void)
{
gFieldCallback2 = sub_80A1194;
}
-bool8 sub_80A1194(void)
+static bool8 sub_80A1194(void)
{
FreezeEventObjects();
ScriptContext2_Enable();
@@ -232,7 +231,7 @@ bool8 sub_80A1194(void)
return TRUE;
}
-void sub_80A11C0(u8 taskId)
+static void sub_80A11C0(u8 taskId)
{
if (IsWeatherNotFadingIn() == TRUE)
{
@@ -248,7 +247,7 @@ void FieldUseFunc_OrangeMail(u8 taskId)
ItemMenu_StartFadeToExitCallback(taskId);
}
-void sub_80A1208(void)
+static void sub_80A1208(void)
{
struct MailStruct mail;
@@ -279,7 +278,7 @@ void FieldUseFunc_MachBike(u8 taskId)
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
-void ItemUseOnFieldCB_Bicycle(u8 taskId)
+static void ItemUseOnFieldCB_Bicycle(u8 taskId)
{
if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
PlaySE(SE_JITENSYA);
@@ -300,7 +299,7 @@ void FieldUseFunc_OldRod(u8 taskId)
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
-bool8 ItemUseCheckFunc_Rod(void)
+static bool8 ItemUseCheckFunc_Rod(void)
{
s16 x, y;
u16 behavior;
@@ -327,7 +326,7 @@ bool8 ItemUseCheckFunc_Rod(void)
return FALSE;
}
-void ItemUseOnFieldCB_Rod(u8 taskId)
+static void ItemUseOnFieldCB_Rod(u8 taskId)
{
sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
@@ -391,13 +390,13 @@ void FieldUseFunc_PokeFlute(u8 taskId)
}
}
-void sub_80A1648(u8 taskId)
+static void sub_80A1648(u8 taskId)
{
PlayFanfareByFanfareNum(FANFARE_POKEFLUTE);
gTasks[taskId].func = sub_80A1674;
}
-void sub_80A1674(u8 taskId)
+static void sub_80A1674(u8 taskId)
{
if (WaitFanfare(FALSE))
{
@@ -408,7 +407,7 @@ void sub_80A1674(u8 taskId)
}
}
-void sub_80A16D0(u8 taskId)
+static void sub_80A16D0(u8 taskId)
{
sub_80A0FBC(taskId);
}
@@ -464,12 +463,12 @@ void FieldUseFunc_TmCase(u8 taskId)
}
}
-void InitTMCaseFromBag(void)
+static void InitTMCaseFromBag(void)
{
InitTMCase(0, CB2_BagMenuFromStartMenu, 0);
}
-void Task_InitTMCaseFromField(u8 taskId)
+static void Task_InitTMCaseFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -495,12 +494,12 @@ void FieldUseFunc_BerryPouch(u8 taskId)
}
}
-void InitBerryPouchFromBag(void)
+static void InitBerryPouchFromBag(void)
{
InitBerryPouch(BERRYPOUCH_FROMFIELD, CB2_BagMenuFromStartMenu, 0);
}
-void Task_InitBerryPouchFromField(u8 taskId)
+static void Task_InitBerryPouchFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -517,7 +516,7 @@ void BattleUseFunc_BerryPouch(u8 taskId)
ItemMenu_StartFadeToExitCallback(taskId);
}
-void InitBerryPouchFromBattle(void)
+static void InitBerryPouchFromBattle(void)
{
InitBerryPouch(BERRYPOUCH_FROMBATTLE, sub_8107ECC, 0);
}
@@ -538,12 +537,12 @@ void FieldUseFunc_TeachyTv(u8 taskId)
}
}
-void InitTeachyTvFromBag(void)
+static void InitTeachyTvFromBag(void)
{
InitTeachyTvController(0, CB2_BagMenuFromStartMenu);
}
-void Task_InitTeachyTvFromField(u8 taskId)
+static void Task_InitTeachyTvFromField(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -566,7 +565,7 @@ void FieldUseFunc_SuperRepel(u8 taskId)
DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8);
}
-void sub_80A19E8(u8 taskId)
+static void sub_80A19E8(u8 taskId)
{
if (!IsSEPlaying())
{
@@ -577,7 +576,7 @@ void sub_80A19E8(u8 taskId)
}
}
-void sub_80A1A44(void)
+static void sub_80A1A44(void)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId));
@@ -609,7 +608,7 @@ void FieldUseFunc_BlackFlute(u8 taskId)
}
}
-void sub_80A1B48(u8 taskId)
+static void sub_80A1B48(u8 taskId)
{
if (++gTasks[taskId].data[8] > 7)
{
@@ -638,7 +637,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
sub_80A1110(taskId, gTasks[taskId].data[3]);
}
-void sub_80A1C08(u8 taskId)
+static void sub_80A1C08(u8 taskId)
{
Overworld_ResetStateAfterDigEscRope();
sub_80A1A44();
@@ -668,12 +667,12 @@ void FieldUseFunc_TownMap(u8 taskId)
}
}
-void sub_80A1CAC(void)
+static void sub_80A1CAC(void)
{
sub_80BFF50(0, CB2_BagMenuFromStartMenu);
}
-void sub_80A1CC0(u8 taskId)
+static void sub_80A1CC0(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -700,12 +699,12 @@ void FieldUseFunc_FameChecker(u8 taskId)
}
}
-void sub_80A1D58(void)
+static void sub_80A1D58(void)
{
UseFameChecker(CB2_BagMenuFromStartMenu);
}
-void sub_80A1D68(u8 taskId)
+static void sub_80A1D68(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -774,7 +773,7 @@ void BattleUseFunc_GuardSpec(u8 taskId)
}
}
-void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
+static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
{
s16 * data = gTasks[taskId].data;
@@ -787,7 +786,7 @@ void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId)
}
}
-void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
+static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
{
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
@@ -796,7 +795,7 @@ void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId)
}
}
-void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
+static void ItemUse_SwitchToPartyMenuInBattle(u8 taskId)
{
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH)
{
@@ -816,7 +815,7 @@ void BattleUseFunc_Medicine(u8 taskId)
ItemUse_SwitchToPartyMenuInBattle(taskId);
}
-void sub_80A1FD8(u8 taskId)
+static void sub_80A1FD8(u8 taskId)
{
gItemUseCB = ItemUseCB_SacredAsh;
ItemUse_SwitchToPartyMenuInBattle(taskId);
diff --git a/src/menu.c b/src/menu.c
index b8a68145c..5a0da28b9 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -815,13 +815,13 @@ static s8 sub_81106F4(void)
MultichoiceGrid_MoveCursor(0, 1);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1)
{
PlaySE(SE_SELECT);
MultichoiceGrid_MoveCursor(-1, 0);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2)
{
PlaySE(SE_SELECT);
MultichoiceGrid_MoveCursor(1, 0);
@@ -857,13 +857,13 @@ static s8 sub_81107A0(void)
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1)
{
if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2)
+ else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2)
{
if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0))
PlaySE(SE_SELECT);
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index f17bff0d0..905e3c1ea 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -83,7 +83,7 @@ u8 GetLRKeysState(void)
return 0;
}
-u8 sub_80BF66C(void)
+u8 GetLRKeysPressedAndHeld(void)
{
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
@@ -149,7 +149,7 @@ void SetVBlankHBlankCallbacksToNull(void)
SetHBlankCallback(NULL);
}
-void ClearVramOamPltt(void)
+void ResetVramOamAndBgCntRegs(void)
{
ResetAllBgsCoordinatesAndBgCntRegs();
CpuFill16(0, (void*) VRAM, VRAM_SIZE);
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index f879e6810..decd000d6 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -343,7 +343,7 @@ static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u1
return LoadBgTilemap(bgId, src, size, offset);
}
-void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
+void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
{
u8 i, j;
u16 *ptr = GetBgTilemapBuffer(bgId);
diff --git a/src/party_menu.c b/src/party_menu.c
index 674b329c2..73965c4ae 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -21,12 +21,14 @@
#include "fldeff.h"
#include "gpu_regs.h"
#include "graphics.h"
+#include "help_system.h"
#include "item.h"
#include "item_menu.h"
#include "item_use.h"
#include "link.h"
#include "link_rfu.h"
#include "mail.h"
+#include "mail_data.h"
#include "main.h"
#include "menu.h"
#include "menu_helpers.h"
@@ -150,6 +152,117 @@ void CursorCB_FieldMove(u8 taskId);
bool8 SetUpFieldMove_Fly(void);
bool8 SetUpFieldMove_Waterfall(void);
bool8 SetUpFieldMove_Surf(void);
+void CB2_InitPartyMenu(void);
+void ResetPartyMenu(void);
+bool8 ShowPartyMenu(void);
+void SetPartyMonsAllowedInMinigame(void);
+void ExitPartyMenu(void);
+bool8 CreatePartyMonSpritesLoop(void);
+bool8 AllocPartyMenuBg(void);
+bool8 AllocPartyMenuBgGfx(void);
+void InitPartyMenuWindows(u8 layout);
+void InitPartyMenuBoxes(u8 layout);
+void LoadPartyMenuPokeballGfx(void);
+void LoadPartyMenuAilmentGfx(void);
+bool8 RenderPartyMenuBoxes(void);
+void CreateCancelConfirmPokeballSprites(void);
+void CreateCancelConfirmWindows(bool8 chooseHalf);
+void Task_ExitPartyMenu(u8 taskId);
+void FreePartyPointers(void);
+void PartyPaletteBufferCopy(u8 offset);
+void DisplayPartyPokemonDataForMultiBattle(u8 slot);
+void DisplayPartyPokemonDataForChooseHalf(u8 slot);
+bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot);
+void DisplayPartyPokemonData(u8 slot);
+void DisplayPartyPokemonDataForWirelessMinigame(u8 slot);
+void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags);
+void DrawEmptySlot(u8 windowId);
+void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c);
+void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox *menuBox, u8 c);
+bool8 GetBattleEntryEligibility(struct Pokemon *mon);
+bool8 IsMonAllowedInMinigame(u8 slot);
+void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor);
+u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor);
+void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align);
+void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox);
+void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox);
+void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox);
+void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox);
+void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox);
+void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys);
+void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox);
+void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox);
+void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox);
+void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot);
+void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+void CreateCancelConfirmPokeballSprites(void);
+void DrawCancelConfirmButtons(void);
+u8 CreatePokeballButtonSprite(u8 x, u8 y);
+u8 CreateSmallPokeballButtonSprite(u8 x, u8 y);
+u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum);
+void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum);
+void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum);
+void Task_ClosePartyMenuAndSetCB2(u8 taskId);
+void UpdatePartyToFieldOrder(void);
+s8 *GetCurrentPartySlotPtr(void);
+u16 PartyMenuButtonHandler(s8 *slotPtr);
+void HandleChooseMonSelection(u8 taskId, s8 *slotPtr);
+void HandleChooseMonCancel(u8 taskId, s8 *slotPtr);
+void MoveCursorToConfirm(void);
+bool8 IsSelectedMonNotEgg(u8 *slotPtr);
+void TryTutorSelectedMon(u8 taskId);
+void TryGiveMailToSelectedMon(u8 taskId);
+void SwitchSelectedMons(u8 taskId);
+void TryEnterMonForMinigame(u8 taskId, u8 slot);
+void Task_TryCreateSelectionWindow(u8 taskId);
+void TryGiveItemOrMailToSelectedMon(u8 taskId);
+void PartyMenuRemoveWindow(u8 *ptr);
+void CB2_SetUpExitToBattleScreen(void);
+void Task_ClosePartyMenuAfterText(u8 taskId);
+void FinishTwoMonAction(u8 taskId);
+void CancelParticipationPrompt(u8 taskId);
+void DisplayCancelChooseMonYesNo(u8 taskId);
+void Task_CancelChooseMonYesNo(u8 taskId);
+void Task_HandleCancelChooseMonYesNoInput(u8 taskId);
+void PartyMenuDisplayYesNoMenu(void);
+void Task_ReturnToChooseMonAfterText(u8 taskId);
+void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir);
+void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir);
+void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir);
+s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir);
+void Task_PrintAndWaitForText(u8 taskId);
+void PartyMenuPrintText(const u8 *text);
+void sub_8124B60(struct Pokemon *mon, u16 item, u16 item2);
+bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon);
+bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon);
+void Task_CancelParticipationYesNo(u8 taskId);
+void Task_HandleCancelParticipationYesNoInput(u8 taskId);
+void Task_TryCreateSelectionWindow(u8 taskId);
+u16 GetTutorMove(u8 tutor);
+bool8 CanLearnTutorMove(u16 species, u8 tutor);
+void sub_8120C6C(u8 taskId);
+void sub_8120CA8(u8 taskId);
+void sub_8120CD8(u8 taskId);
+void sub_8120D08(u8 taskId);
+void sub_8120D40(u8 taskId);
+void sub_8120D7C(u8 taskId);
+void sub_8120DAC(u8 taskId);
+void sub_8120DE0(u8 taskId);
+void sub_8120E1C(u8 taskId);
+void sub_8120E58(u8 taskId);
+void sub_8120EE0(u8 taskId);
+bool8 sub_8120F78(u8 taskId);
+bool8 sub_81220D4(void);
+void sub_8122084(u8 windowId, const u8 *str);
+void sub_8122110(u8 windowId);
+void CreateSelectionWindow(void);
EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL;
EWRAM_DATA struct PartyMenu gPartyMenu = {0};
@@ -170,3 +283,1677 @@ void (*gItemUseCB)(u8, TaskFunc);
#include "data/pokemon/tutor_learnsets.h"
#include "data/party_menu.h"
+
+void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback)
+{
+ u16 i;
+
+ ResetPartyMenu();
+ sPartyMenuInternal = Alloc(sizeof(struct PartyMenuInternal));
+ if (sPartyMenuInternal == NULL)
+ {
+ SetMainCallback2(callback);
+ }
+ else
+ {
+ gPartyMenu.menuType = menuType;
+ gPartyMenu.exitCallback = callback;
+ gPartyMenu.action = partyAction;
+ sPartyMenuInternal->messageId = messageId;
+ sPartyMenuInternal->task = task;
+ sPartyMenuInternal->exitCallback = NULL;
+ sPartyMenuInternal->lastSelectedSlot = 0;
+ if (menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ sPartyMenuInternal->chooseHalf = TRUE;
+ else
+ sPartyMenuInternal->chooseHalf = FALSE;
+ if (layout != KEEP_PARTY_LAYOUT)
+ gPartyMenu.layout = layout;
+ for (i = 0; i < NELEMS(sPartyMenuInternal->data); ++i)
+ sPartyMenuInternal->data[i] = 0;
+ for (i = 0; i < NELEMS(sPartyMenuInternal->windowId); ++i)
+ sPartyMenuInternal->windowId[i] = 0xFF;
+ if (!keepCursorPos)
+ gPartyMenu.slotId = 0;
+ else if (gPartyMenu.slotId > PARTY_SIZE - 1 || GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES) == SPECIES_NONE)
+ gPartyMenu.slotId = 0;
+ gTextFlags.autoScroll = FALSE;
+ CalculatePlayerPartyCount();
+ SetMainCallback2(CB2_InitPartyMenu);
+ }
+}
+
+void CB2_UpdatePartyMenu(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ DoScheduledBgTilemapCopiesToVram();
+ UpdatePaletteFade();
+}
+
+void VBlankCB_PartyMenu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_InitPartyMenu(void)
+{
+ while (TRUE)
+ {
+ if (sub_80BF748() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE)
+ break;
+ }
+}
+
+bool8 ShowPartyMenu(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ ResetVramOamAndBgCntRegs();
+ ClearScheduledBgCopiesToVram();
+ ++gMain.state;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ ++gMain.state;
+ break;
+ case 2:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ ++gMain.state;
+ break;
+ case 3:
+ ResetSpriteData();
+ ++gMain.state;
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ ++gMain.state;
+ break;
+ case 5:
+ if (!MenuHelpers_LinkSomething())
+ ResetTasks();
+ ++gMain.state;
+ break;
+ case 6:
+ SetPartyMonsAllowedInMinigame();
+ ++gMain.state;
+ break;
+ case 7:
+ if (!AllocPartyMenuBg())
+ {
+ ExitPartyMenu();
+ return TRUE;
+ }
+ else
+ {
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ }
+ break;
+ case 8:
+ if (AllocPartyMenuBgGfx())
+ ++gMain.state;
+ break;
+ case 9:
+ InitPartyMenuWindows(gPartyMenu.layout);
+ ++gMain.state;
+ break;
+ case 10:
+ InitPartyMenuBoxes(gPartyMenu.layout);
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ break;
+ case 11:
+ LoadHeldItemIcons();
+ ++gMain.state;
+ break;
+ case 12:
+ LoadPartyMenuPokeballGfx();
+ ++gMain.state;
+ break;
+ case 13:
+ LoadPartyMenuAilmentGfx();
+ ++gMain.state;
+ break;
+ case 14:
+ LoadMonIconPalettes();
+ ++gMain.state;
+ break;
+ case 15:
+ if (CreatePartyMonSpritesLoop())
+ {
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ }
+ break;
+ case 16:
+ if (RenderPartyMenuBoxes())
+ {
+ sPartyMenuInternal->data[0] = 0;
+ ++gMain.state;
+ }
+ break;
+ case 17:
+ CreateCancelConfirmPokeballSprites();
+ ++gMain.state;
+ break;
+ case 18:
+ CreateCancelConfirmWindows(sPartyMenuInternal->chooseHalf);
+ ++gMain.state;
+ break;
+ case 19:
+ HelpSystem_SetSomeVariable2(5);
+ ++gMain.state;
+ break;
+ case 20:
+ CreateTask(sPartyMenuInternal->task, 0);
+ DisplayPartyMenuStdMessage(sPartyMenuInternal->messageId);
+ ++gMain.state;
+ break;
+ case 21:
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ ++gMain.state;
+ break;
+ case 22:
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 16, 0, RGB_BLACK);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ ++gMain.state;
+ break;
+ default:
+ SetVBlankCallback(VBlankCB_PartyMenu);
+ SetMainCallback2(CB2_UpdatePartyMenu);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void ExitPartyMenu(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
+ CreateTask(Task_ExitPartyMenu, 0);
+ SetVBlankCallback(VBlankCB_PartyMenu);
+ SetMainCallback2(CB2_UpdatePartyMenu);
+}
+
+void Task_ExitPartyMenu(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(gPartyMenu.exitCallback);
+ FreePartyPointers();
+ DestroyTask(taskId);
+ }
+}
+
+void ResetPartyMenu(void)
+{
+ sPartyMenuInternal = NULL;
+ sPartyBgTilemapBuffer = NULL;
+ sPartyMenuBoxes = NULL;
+ sPartyBgGfxTilemap = NULL;
+}
+
+bool8 AllocPartyMenuBg(void)
+{
+ ResetAllBgsCoordinatesAndBgCntRegs();
+ sPartyBgTilemapBuffer = Alloc(0x800);
+ if (sPartyBgTilemapBuffer == NULL)
+ return FALSE;
+ memset(sPartyBgTilemapBuffer, 0, 0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sPartyMenuBgTemplates, NELEMS(sPartyMenuBgTemplates));
+ SetBgTilemapBuffer(1, sPartyBgTilemapBuffer);
+ ScheduleBgCopyTilemapToVram(1);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ return TRUE;
+}
+
+bool8 AllocPartyMenuBgGfx(void)
+{
+ u32 sizeout;
+
+ switch (sPartyMenuInternal->data[0])
+ {
+ case 0:
+ sPartyBgGfxTilemap = MallocAndDecompress(gPartyMenuBg_Gfx, &sizeout);
+ LoadBgTiles(1, sPartyBgGfxTilemap, sizeout, 0);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ LZDecompressWram(gPartyMenuBg_Tilemap, sPartyBgTilemapBuffer);
+ ++sPartyMenuInternal->data[0];
+ }
+ break;
+ case 2:
+ LoadCompressedPalette(gPartyMenuBg_Pal, 0, 0x160);
+ CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 0x160);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 3:
+ PartyPaletteBufferCopy(4);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 4:
+ PartyPaletteBufferCopy(5);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 5:
+ PartyPaletteBufferCopy(6);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 6:
+ PartyPaletteBufferCopy(7);
+ ++sPartyMenuInternal->data[0];
+ break;
+ case 7:
+ PartyPaletteBufferCopy(8);
+ ++sPartyMenuInternal->data[0];
+ break;
+ default:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void PartyPaletteBufferCopy(u8 offset)
+{
+ offset *= 16;
+ CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32);
+ CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32);
+}
+
+void FreePartyPointers(void)
+{
+ if (sPartyMenuInternal)
+ Free(sPartyMenuInternal);
+ if (sPartyBgTilemapBuffer)
+ Free(sPartyBgTilemapBuffer);
+ if (sPartyBgGfxTilemap)
+ Free(sPartyBgGfxTilemap);
+ if (sPartyMenuBoxes)
+ Free(sPartyMenuBoxes);
+ FreeAllWindowBuffers();
+}
+
+void InitPartyMenuBoxes(u8 layout)
+{
+ u8 i;
+
+ sPartyMenuBoxes = Alloc(sizeof(struct PartyMenuBox[PARTY_SIZE]));
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ sPartyMenuBoxes[i].infoRects = &sPartyBoxInfoRects[PARTY_BOX_RIGHT_COLUMN];
+ sPartyMenuBoxes[i].spriteCoords = sPartyMenuSpriteCoords[layout][i];
+ sPartyMenuBoxes[i].windowId = i;
+ }
+ // The first party mon goes in the left column
+ sPartyMenuBoxes[0].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+ if (layout == PARTY_LAYOUT_MULTI_SHOWCASE)
+ sPartyMenuBoxes[3].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+ else if (layout != PARTY_LAYOUT_SINGLE)
+ sPartyMenuBoxes[1].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+}
+
+void RenderPartyMenuBox(u8 slot)
+{
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE)
+ {
+ DisplayPartyPokemonDataForMultiBattle(slot);
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT);
+ CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
+ PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+ else
+ {
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE)
+ {
+ DrawEmptySlot(sPartyMenuBoxes[slot].windowId);
+ CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
+ }
+ else
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ DisplayPartyPokemonDataForChooseHalf(slot);
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
+ DisplayPartyPokemonDataForWirelessMinigame(slot);
+ else if (!DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(slot))
+ DisplayPartyPokemonData(slot);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ AnimatePartySlot(slot, 0);
+ else if (gPartyMenu.slotId == slot)
+ AnimatePartySlot(slot, 1);
+ else
+ AnimatePartySlot(slot, 0);
+ }
+ PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
+ ScheduleBgCopyTilemapToVram(0);
+ }
+}
+
+void DisplayPartyPokemonData(u8 slot)
+{
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG))
+ {
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ }
+ else
+ {
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, FALSE);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ }
+}
+
+void DisplayPartyPokemonDescriptionData(u8 slot, u8 stringId)
+{
+ struct Pokemon *mon = &gPlayerParty[slot];
+
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE);
+ DisplayPartyPokemonNickname(mon, &sPartyMenuBoxes[slot], 0);
+ if (!GetMonData(mon, MON_DATA_IS_EGG))
+ {
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(mon, &sPartyMenuBoxes[slot], 0);
+ }
+ DisplayPartyPokemonDescriptionText(stringId, &sPartyMenuBoxes[slot], 0);
+}
+
+void DisplayPartyPokemonDataForChooseHalf(u8 slot)
+{
+ u8 i;
+ struct Pokemon *mon = &gPlayerParty[slot];
+ u8 *order = gSelectedOrderFromParty;
+ u8 r3;
+
+ if (!GetBattleEntryEligibility(mon))
+ {
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
+ }
+ else
+ {
+ if (gPartyMenu.unk_8_6 == 2)
+ r3 = 2;
+ else
+ r3 = 3;
+ for (i = 0; i < r3; ++i)
+ {
+ if (order[i] != 0 && (order[i] - 1) == slot)
+ {
+ DisplayPartyPokemonDescriptionData(slot, i + PARTYBOX_DESC_FIRST);
+ return;
+ }
+ }
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_3);
+ }
+}
+
+void DisplayPartyPokemonDataForWirelessMinigame(u8 slot)
+{
+ if (IsMonAllowedInMinigame(slot) == TRUE)
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE);
+ else
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
+}
+
+// Returns TRUE if teaching move or cant evolve with item (i.e. description data is shown), FALSE otherwise
+bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
+{
+ struct Pokemon *currentPokemon = &gPlayerParty[slot];
+ u16 item = gSpecialVar_ItemId;
+
+ if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR)
+ {
+ gSpecialVar_Result = FALSE;
+ if (gSpecialVar_0x8005 > 14)
+ return FALSE;
+ DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005);
+ }
+ else
+ {
+ if (gPartyMenu.action != PARTY_ACTION_USE_ITEM)
+ return FALSE;
+ switch (CheckIfItemIsTMHMOrEvolutionStone(item))
+ {
+ default:
+ return FALSE;
+ case 1: // TM/HM
+ DisplayPartyPokemonDataToTeachMove(slot, item, 0);
+ break;
+ case 2: // Evolution stone
+ if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE)
+ return FALSE;
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE);
+ break;
+ }
+ }
+ return TRUE;
+}
+
+void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor)
+{
+ switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor))
+ {
+ case CANNOT_LEARN_MOVE:
+ case CANNOT_LEARN_MOVE_IS_EGG:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2);
+ break;
+ case ALREADY_KNOWS_MOVE:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_LEARNED);
+ break;
+ default:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2);
+ break;
+ }
+}
+
+void DisplayPartyPokemonDataForMultiBattle(u8 slot)
+{
+ struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot];
+ u8 actualSlot = slot - (3);
+
+ if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE)
+ {
+ DrawEmptySlot(menuBox->windowId);
+ }
+ else
+ {
+ menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE);
+ StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname);
+ StringGetEnd10(gStringVar1);
+ if (StringLength(gStringVar1) <= 5)
+ ConvertInternationalString(gStringVar1, 1);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions);
+ DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox);
+ DisplayPartyPokemonGender(gMultiPartnerParty[actualSlot].gender, gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].nickname, menuBox);
+ DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, menuBox);
+ DisplayPartyPokemonMaxHP(gMultiPartnerParty[actualSlot].maxhp, menuBox);
+ DisplayPartyPokemonHPBar(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox);
+ }
+}
+
+bool8 RenderPartyMenuBoxes(void)
+{
+ RenderPartyMenuBox(sPartyMenuInternal->data[0]);
+ if (++sPartyMenuInternal->data[0] == PARTY_SIZE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 *GetPartyMenuBgTile(u16 tileId)
+{
+ return &sPartyBgGfxTilemap[tileId << 5];
+}
+
+void CreatePartyMonSprites(u8 slot)
+{
+ u8 actualSlot;
+
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE)
+ {
+ u8 status;
+
+ actualSlot = slot - MULTI_PARTY_SIZE;
+ if (gMultiPartnerParty[actualSlot].species != SPECIES_NONE)
+ {
+ CreatePartyMonIconSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].personality, &sPartyMenuBoxes[slot], 0, FALSE);
+ CreatePartyMonHeldItemSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].heldItem, &sPartyMenuBoxes[slot]);
+ CreatePartyMonPokeballSpriteParameterized(gMultiPartnerParty[actualSlot].species, &sPartyMenuBoxes[slot]);
+ if (gMultiPartnerParty[actualSlot].hp == 0)
+ status = AILMENT_FNT;
+ else
+ status = GetAilmentFromStatus(gMultiPartnerParty[actualSlot].status);
+ CreatePartyMonStatusSpriteParameterized(gMultiPartnerParty[actualSlot].species, status, &sPartyMenuBoxes[slot]);
+ }
+ }
+ else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ CreatePartyMonIconSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot], slot);
+ CreatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ CreatePartyMonPokeballSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ CreatePartyMonStatusSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ }
+}
+
+bool8 CreatePartyMonSpritesLoop(void)
+{
+ CreatePartyMonSprites(sPartyMenuInternal->data[0]);
+ if (++sPartyMenuInternal->data[0] == PARTY_SIZE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void CreateCancelConfirmPokeballSprites(void)
+{
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ {
+ // The showcase has no Cancel/Confirm buttons
+ FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1);
+ }
+ else
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ {
+ sPartyMenuInternal->spriteIdConfirmPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x88);
+ DrawCancelConfirmButtons();
+ sPartyMenuInternal->spriteIdCancelPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x98);
+ }
+ else
+ {
+ sPartyMenuInternal->spriteIdCancelPokeball = CreatePokeballButtonSprite(198, 148);
+ }
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ }
+}
+
+void AnimatePartySlot(u8 slot, u8 animNum)
+{
+ u8 spriteId;
+
+ switch (slot)
+ {
+ default:
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], GetPartyBoxPaletteFlags(slot, animNum));
+ AnimateSelectedPartyIcon(sPartyMenuBoxes[slot].monSpriteId, animNum);
+ PartyMenuStartSpriteAnim(sPartyMenuBoxes[slot].pokeballSpriteId, animNum);
+ }
+ return;
+ case PARTY_SIZE: // Confirm
+ if (animNum == 0)
+ SetBgTilemapPalette(1, 23, 16, 7, 2, 1);
+ else
+ SetBgTilemapPalette(1, 23, 16, 7, 2, 2);
+ spriteId = sPartyMenuInternal->spriteIdConfirmPokeball;
+ break;
+ case PARTY_SIZE + 1: // Cancel
+ // The position of the Cancel button changes if Confirm is present
+ if (!sPartyMenuInternal->chooseHalf)
+ {
+ if (animNum == 0)
+ SetBgTilemapPalette(1, 23, 17, 7, 2, 1);
+ else
+ SetBgTilemapPalette(1, 23, 17, 7, 2, 2);
+ }
+ else if (animNum == 0)
+ {
+ SetBgTilemapPalette(1, 23, 18, 7, 2, 1);
+ }
+ else
+ {
+ SetBgTilemapPalette(1, 23, 18, 7, 2, 2);
+ }
+ spriteId = sPartyMenuInternal->spriteIdCancelPokeball;
+ break;
+ }
+ PartyMenuStartSpriteAnim(spriteId, animNum);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum)
+{
+ u8 palFlags = 0;
+
+ if (animNum == 1)
+ palFlags |= PARTY_PAL_SELECTED;
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
+ palFlags |= PARTY_PAL_FAINTED;
+ if (gPartyMenu.layout == PARTY_LAYOUT_MULTI
+ && (slot == 1 || slot == 4 || slot == 5))
+ palFlags |= PARTY_PAL_MULTI_ALT;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCHING)
+ palFlags |= PARTY_PAL_SWITCHING;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCH)
+ {
+ if (slot == gPartyMenu.slotId || slot == gPartyMenu.slotId2)
+ palFlags |= PARTY_PAL_TO_SWITCH;
+ }
+ if (gPartyMenu.action == PARTY_ACTION_SOFTBOILED && slot == gPartyMenu.slotId )
+ palFlags |= PARTY_PAL_TO_SOFTBOIL;
+ return palFlags;
+}
+
+void DrawCancelConfirmButtons(void)
+{
+ CopyToBgTilemapBufferRect_ChangePalette(1, sConfirmButton_Tilemap, 23, 16, 7, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sCancelButton_Tilemap, 23, 18, 7, 2, 17);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+bool8 IsMultiBattle(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleTypeFlags & BATTLE_TYPE_LINK)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void SwapPartyPokemon(struct Pokemon *mon1, struct Pokemon *mon2)
+{
+ struct Pokemon *buffer = Alloc(sizeof(struct Pokemon));
+
+ *buffer = *mon1;
+ *mon1 = *mon2;
+ *mon2 = *buffer;
+ Free(buffer);
+}
+
+void Task_ClosePartyMenu(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_ClosePartyMenuAndSetCB2;
+}
+
+void Task_ClosePartyMenuAndSetCB2(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ UpdatePartyToFieldOrder();
+ if (sPartyMenuInternal->exitCallback != NULL)
+ SetMainCallback2(sPartyMenuInternal->exitCallback);
+ else
+ SetMainCallback2(gPartyMenu.exitCallback);
+ FreePartyPointers();
+ DestroyTask(taskId);
+ }
+}
+
+u8 GetCursorSelectionMonId(void)
+{
+ return gPartyMenu.slotId;
+}
+
+u8 GetPartyMenuType(void)
+{
+ return gPartyMenu.menuType;
+}
+
+void Task_HandleChooseMonInput(u8 taskId)
+{
+ if (!gPaletteFade.active && sub_80BF748() != TRUE)
+ {
+ s8 *slotPtr = GetCurrentPartySlotPtr();
+
+ switch (PartyMenuButtonHandler(slotPtr))
+ {
+ case 1: // Selected mon
+ HandleChooseMonSelection(taskId, slotPtr);
+ break;
+ case 2: // Selected Cancel
+ HandleChooseMonCancel(taskId, slotPtr);
+ break;
+ case 8: // Start button
+ if (sPartyMenuInternal->chooseHalf)
+ {
+ PlaySE(SE_SELECT);
+ MoveCursorToConfirm();
+ }
+ break;
+ }
+ }
+}
+
+s8 *GetCurrentPartySlotPtr(void)
+{
+ if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED)
+ return &gPartyMenu.slotId2;
+ else
+ return &gPartyMenu.slotId;
+}
+
+void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
+{
+ if (*slotPtr == PARTY_SIZE)
+ {
+ gPartyMenu.task(taskId);
+ }
+ else
+ {
+ switch (gPartyMenu.action - 3)
+ {
+ case PARTY_ACTION_SOFTBOILED - 3:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ Task_TryUseSoftboiledOnPartyMon(taskId);
+ break;
+ case PARTY_ACTION_USE_ITEM - 3:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText);
+ }
+ break;
+ case PARTY_ACTION_MOVE_TUTOR - 3:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ PlaySE(SE_SELECT);
+ TryTutorSelectedMon(taskId);
+ }
+ break;
+ case PARTY_ACTION_GIVE_MAILBOX_MAIL - 3:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ PlaySE(SE_SELECT);
+ TryGiveMailToSelectedMon(taskId);
+ }
+ break;
+ case PARTY_ACTION_GIVE_ITEM - 3:
+ case PARTY_ACTION_GIVE_PC_ITEM - 3:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ {
+ PlaySE(SE_SELECT);
+ TryGiveItemOrMailToSelectedMon(taskId);
+ }
+ break;
+ case PARTY_ACTION_SWITCH - 3:
+ PlaySE(SE_SELECT);
+ SwitchSelectedMons(taskId);
+ break;
+ case PARTY_ACTION_CHOOSE_AND_CLOSE - 3:
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8004 = *slotPtr;
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MOVE_RELEARNER)
+ gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[*slotPtr]);
+ Task_ClosePartyMenu(taskId);
+ break;
+ case PARTY_ACTION_MINIGAME - 3:
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
+ TryEnterMonForMinigame(taskId, (u8)*slotPtr);
+ break;
+ default:
+ case PARTY_ACTION_ABILITY_PREVENTS - 3:
+ case PARTY_ACTION_SWITCHING - 3:
+ PlaySE(SE_SELECT);
+ Task_TryCreateSelectionWindow(taskId);
+ break;
+ }
+ }
+}
+
+bool8 IsSelectedMonNotEgg(u8 *slotPtr)
+{
+ if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE)
+ {
+ PlaySE(SE_HAZURE);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
+{
+ switch (gPartyMenu.action)
+ {
+ case PARTY_ACTION_SEND_OUT:
+ PlaySE(SE_HAZURE);
+ break;
+ case PARTY_ACTION_SWITCH:
+ case PARTY_ACTION_SOFTBOILED:
+ PlaySE(SE_SELECT);
+ FinishTwoMonAction(taskId);
+ break;
+ case PARTY_ACTION_MINIGAME:
+ PlaySE(SE_SELECT);
+ CancelParticipationPrompt(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ {
+ DisplayCancelChooseMonYesNo(taskId);
+ }
+ else
+ {
+ if (!MenuHelpers_LinkSomething())
+ gSpecialVar_0x8004 = PARTY_SIZE + 1;
+ gPartyMenuUseExitCallback = FALSE;
+ *slotPtr = PARTY_SIZE + 1;
+ Task_ClosePartyMenu(taskId);
+ }
+ break;
+ }
+}
+
+void DisplayCancelChooseMonYesNo(u8 taskId)
+{
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_84176CF);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_CancelChooseMonYesNo;
+}
+
+void Task_CancelChooseMonYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleCancelChooseMonYesNoInput;
+ }
+}
+
+void Task_HandleCancelChooseMonYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gPartyMenuUseExitCallback = FALSE;
+ gPartyMenu.slotId = PARTY_SIZE + 1;
+ ClearSelectedPartyOrder();
+ Task_ClosePartyMenu(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ Task_ReturnToChooseMonAfterText(taskId);
+ break;
+ }
+}
+
+u16 PartyMenuButtonHandler(s8 *slotPtr)
+{
+ s8 movementDir;
+
+ switch (gMain.newAndRepeatedKeys)
+ {
+ case DPAD_UP:
+ movementDir = MENU_DIR_UP;
+ break;
+ case DPAD_DOWN:
+ movementDir = MENU_DIR_DOWN;
+ break;
+ case DPAD_LEFT:
+ movementDir = MENU_DIR_LEFT;
+ break;
+ case DPAD_RIGHT:
+ movementDir = MENU_DIR_RIGHT;
+ break;
+ default:
+ switch (GetLRKeysPressedAndHeld())
+ {
+ case MENU_L_PRESSED:
+ movementDir = MENU_DIR_UP;
+ break;
+ case MENU_R_PRESSED:
+ movementDir = MENU_DIR_DOWN;
+ break;
+ default:
+ movementDir = 0;
+ break;
+ }
+ break;
+ }
+ if (JOY_NEW(START_BUTTON))
+ return 8;
+ if (movementDir)
+ {
+ UpdateCurrentPartySelection(slotPtr, movementDir);
+ return 0;
+ }
+ // Pressed Cancel
+ if (JOY_NEW(A_BUTTON) && *slotPtr == PARTY_SIZE + 1)
+ return 2;
+ return JOY_NEW(A_BUTTON | B_BUTTON);
+}
+
+void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir)
+{
+ s8 newSlotId = *slotPtr;
+ u8 layout = gPartyMenu.layout;
+
+ if (layout == PARTY_LAYOUT_SINGLE)
+ UpdatePartySelectionSingleLayout(slotPtr, movementDir);
+ else
+ UpdatePartySelectionDoubleLayout(slotPtr, movementDir);
+ if (*slotPtr != newSlotId)
+ {
+ PlaySE(SE_SELECT);
+ AnimatePartySlot(newSlotId, 0);
+ AnimatePartySlot(*slotPtr, 1);
+ }
+}
+
+void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir)
+{
+ // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm
+ switch (movementDir)
+ {
+ case MENU_DIR_UP:
+ if (*slotPtr == 0)
+ {
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else if (*slotPtr == PARTY_SIZE)
+ {
+ *slotPtr = gPlayerPartyCount - 1;
+ }
+ else if (*slotPtr == PARTY_SIZE + 1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
+ else
+ *slotPtr = gPlayerPartyCount - 1;
+ }
+ else
+ {
+ --*slotPtr;
+ }
+ break;
+ case MENU_DIR_DOWN:
+ if (*slotPtr == PARTY_SIZE + 1)
+ {
+ *slotPtr = 0;
+ }
+ else
+ {
+ if (*slotPtr == gPlayerPartyCount - 1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
+ else
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else
+ {
+ ++*slotPtr;
+ }
+ }
+ break;
+ case MENU_DIR_RIGHT:
+ if (gPlayerPartyCount != 1 && *slotPtr == 0)
+ {
+ if (sPartyMenuInternal->lastSelectedSlot == 0)
+ *slotPtr = 1;
+ else
+ *slotPtr = sPartyMenuInternal->lastSelectedSlot;
+ }
+ break;
+ case MENU_DIR_LEFT:
+ if (*slotPtr != 0 && *slotPtr != PARTY_SIZE && *slotPtr != PARTY_SIZE + 1)
+ {
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 0;
+ }
+ break;
+ }
+}
+
+void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir)
+{
+ // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm
+ // newSlot is used temporarily as a movement direction during its later assignment
+ s8 newSlot = movementDir;
+
+ switch (movementDir)
+ {
+ case MENU_DIR_UP:
+ if (*slotPtr == 0)
+ {
+ *slotPtr = PARTY_SIZE + 1;
+ break;
+ }
+ else if (*slotPtr == PARTY_SIZE)
+ {
+ *slotPtr = gPlayerPartyCount - 1;
+ break;
+ }
+ else if (*slotPtr == PARTY_SIZE + 1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ {
+ *slotPtr = PARTY_SIZE;
+ break;
+ }
+ --*slotPtr;
+ }
+ newSlot = GetNewSlotDoubleLayout(*slotPtr, newSlot);
+ if (newSlot != -1)
+ *slotPtr = newSlot;
+ break;
+ case MENU_DIR_DOWN:
+ if (*slotPtr == PARTY_SIZE)
+ {
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else if (*slotPtr == PARTY_SIZE + 1)
+ {
+ *slotPtr = 0;
+ }
+ else
+ {
+ newSlot = GetNewSlotDoubleLayout(*slotPtr, MENU_DIR_DOWN);
+ if (newSlot == -1)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
+ else
+ *slotPtr = PARTY_SIZE + 1;
+ }
+ else
+ {
+ *slotPtr = newSlot;
+ }
+ }
+ break;
+ case MENU_DIR_RIGHT:
+ if (*slotPtr == 0)
+ {
+ if (sPartyMenuInternal->lastSelectedSlot == 3)
+ {
+ if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE)
+ *slotPtr = 3;
+ }
+ else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ *slotPtr = 2;
+ }
+ }
+ else if (*slotPtr == 1)
+ {
+ if (sPartyMenuInternal->lastSelectedSlot == 5)
+ {
+ if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE)
+ *slotPtr = 5;
+ }
+ else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ *slotPtr = 4;
+ }
+ }
+ break;
+ case MENU_DIR_LEFT:
+ if (*slotPtr == 2 || *slotPtr == 3)
+ {
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 0;
+ }
+ else if (*slotPtr == 4 || *slotPtr == 5)
+ {
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 1;
+ }
+ break;
+ }
+}
+
+s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir)
+{
+ while (TRUE)
+ {
+ slotId += movementDir;
+ if ((u8)slotId >= PARTY_SIZE)
+ return -1;
+ if (GetMonData(&gPlayerParty[slotId], MON_DATA_SPECIES) != SPECIES_NONE)
+ return slotId;
+ }
+}
+
+u8 *GetMonNickname(struct Pokemon *mon, u8 *dest)
+{
+ GetMonData(mon, MON_DATA_NICKNAME, dest);
+ return StringGetEnd10(dest);
+}
+
+#define tKeepOpen data[0]
+
+u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen)
+{
+ u8 taskId;
+
+ PartyMenuPrintText(str);
+ taskId = CreateTask(Task_PrintAndWaitForText, 1);
+ gTasks[taskId].tKeepOpen = keepOpen;
+ return taskId;
+}
+
+void Task_PrintAndWaitForText(u8 taskId)
+{
+ if (RunTextPrinters_CheckActive(6) != TRUE)
+ {
+ if (gTasks[taskId].tKeepOpen == FALSE)
+ {
+ ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearWindowTilemap(6);
+ }
+ DestroyTask(taskId);
+ }
+}
+
+#undef tKeepOpen
+
+bool8 IsPartyMenuTextPrinterActive(void)
+{
+ return FuncIsActiveTask(Task_PrintAndWaitForText);
+}
+
+void Task_WaitForLinkAndReturnToChooseMon(u8 taskId)
+{
+ if (sub_80BF748() != TRUE)
+ {
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+}
+
+void Task_ReturnToChooseMonAfterText(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearWindowTilemap(6);
+ if (MenuHelpers_LinkSomething() == TRUE)
+ {
+ gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon;
+ }
+ else
+ {
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+ }
+}
+
+void DisplayGaveHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen, u8 a4)
+{
+ if (!a4)
+ ItemUse_SetQuestLogEvent(5, mon, item, 0xFFFF);
+ else if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM)
+ ItemUse_SetQuestLogEvent(7, mon, item, 0xFFFF);
+ else
+ ItemUse_SetQuestLogEvent(6, mon, item, 0xFFFF);
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
+{
+ ItemUse_SetQuestLogEvent(8, mon, item, 0xFFFF);
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_ReceivedItemFromPkmn);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
+{
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyHoldingItemSwitch);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen)
+{
+ sub_8124B60(&gPlayerParty[gPartyMenu.slotId], item2, item);
+ CopyItemName(item, gStringVar1);
+ CopyItemName(item2, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+void GiveItemToMon(struct Pokemon *mon, u16 item)
+{
+ u8 itemBytes[2];
+
+ if (ItemIsMail(item) == TRUE)
+ {
+ if (GiveMailToMon(mon, item) == 0xFF)
+ return;
+ }
+ itemBytes[0] = item;
+ itemBytes[1] = item >> 8;
+ SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes);
+}
+
+u8 TryTakeMonItem(struct Pokemon *mon)
+{
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ if (item == ITEM_NONE)
+ return 0;
+ if (AddBagItem(item, 1) == FALSE)
+ return 1;
+ item = ITEM_NONE;
+ SetMonData(mon, MON_DATA_HELD_ITEM, &item);
+ return 2;
+}
+
+void BufferBagFullCantTakeItemMessage(u16 itemId)
+{
+ const u8 *string;
+
+ switch (ItemId_GetPocket(itemId))
+ {
+ default:
+ string = gStartMenuText_Bag;
+ break;
+ case POCKET_TM_CASE:
+ string = ItemId_GetName(ITEM_TM_CASE);
+ break;
+ case POCKET_BERRY_POUCH:
+ string = ItemId_GetName(ITEM_BERRY_POUCH);
+ break;
+ }
+ StringCopy(gStringVar1, string);
+ StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem);
+}
+
+#define tHP data[0]
+#define tMaxHP data[1]
+#define tHPIncrement data[2]
+#define tHPToAdd data[3]
+#define tPartyId data[4]
+#define tStartHP data[5]
+
+void Task_PartyMenuModifyHP(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ tHP += tHPIncrement;
+ --tHPToAdd;
+ SetMonData(&gPlayerParty[tPartyId], MON_DATA_HP, &tHP);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId], 1);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId]);
+ if (tHPToAdd == 0 || tHP == 0 || tHP == tMaxHP)
+ {
+ // If HP was recovered, buffer the amount recovered
+ if (tHP > tStartHP)
+ ConvertIntToDecimalStringN(gStringVar2, tHP - tStartHP, STR_CONV_MODE_LEFT_ALIGN, 3);
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task)
+{
+ struct Pokemon *mon = &gPlayerParty[slot];
+ s16 *data = gTasks[taskId].data;
+
+ tHP = GetMonData(mon, MON_DATA_HP);
+ tMaxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ tHPIncrement = hpIncrement;
+ tHPToAdd = hpDifference;
+ tPartyId = slot;
+ tStartHP = tHP;
+ SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, task);
+}
+
+void ResetHPTaskData(u8 taskId, u8 caseId, u32 hp)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (caseId) // always zero
+ {
+ case 0:
+ tHP = hp;
+ tStartHP = hp;
+ break;
+ case 1:
+ tMaxHP = hp;
+ break;
+ case 2:
+ tHPIncrement = hp;
+ break;
+ case 3:
+ tHPToAdd = hp;
+ break;
+ case 4:
+ tPartyId = hp;
+ break;
+ case 5:
+ SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, (TaskFunc)hp); // >casting hp as a taskfunc
+ break;
+ }
+}
+
+#undef tHP
+#undef tMaxHP
+#undef tHPIncrement
+#undef tHPToAdd
+#undef tPartyId
+#undef tStartHP
+
+u8 GetAilmentFromStatus(u32 status)
+{
+ if (status & STATUS1_PSN_ANY)
+ return AILMENT_PSN;
+ if (status & STATUS1_PARALYSIS)
+ return AILMENT_PRZ;
+ if (status & STATUS1_SLEEP)
+ return AILMENT_SLP;
+ if (status & STATUS1_FREEZE)
+ return AILMENT_FRZ;
+ if (status & STATUS1_BURN)
+ return AILMENT_BRN;
+ return AILMENT_NONE;
+}
+
+u8 GetMonAilment(struct Pokemon *mon)
+{
+ u8 ailment;
+
+ if (GetMonData(mon, MON_DATA_HP) == 0)
+ return AILMENT_FNT;
+ ailment = GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS));
+ if (ailment != AILMENT_NONE)
+ return ailment;
+ if (CheckPartyPokerus(mon, 0))
+ return AILMENT_PKRS;
+ return AILMENT_NONE;
+}
+
+void SetPartyMonsAllowedInMinigame(void)
+{
+ u16 *ptr;
+
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
+ {
+ u8 i;
+
+ ptr = &gPartyMenu.data1;
+ gPartyMenu.data1 = 0;
+ if (gSpecialVar_0x8005 == 0)
+ {
+ for (i = 0; i < gPlayerPartyCount; ++i)
+ *ptr += IsMonAllowedInPokemonJump(&gPlayerParty[i]) << i;
+ }
+ else
+ {
+ for (i = 0; i < gPlayerPartyCount; ++i)
+ *ptr += IsMonAllowedInDodrioBerryPicking(&gPlayerParty[i]) << i;
+ }
+ }
+}
+
+bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon)
+{
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && IsSpeciesAllowedInPokemonJump(GetMonData(mon, MON_DATA_SPECIES)))
+ return TRUE;
+ return FALSE;
+}
+
+
+bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon)
+{
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO)
+ return TRUE;
+ return FALSE;
+}
+
+bool8 IsMonAllowedInMinigame(u8 slot)
+{
+ if (!((gPartyMenu.data1 >> slot) & 1))
+ return FALSE;
+ return TRUE;
+}
+
+void TryEnterMonForMinigame(u8 taskId, u8 slot)
+{
+ if (IsMonAllowedInMinigame(slot) == TRUE)
+ {
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8004 = slot;
+ Task_ClosePartyMenu(taskId);
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ }
+}
+
+void CancelParticipationPrompt(u8 taskId)
+{
+ DisplayPartyMenuMessage(gText_CancelParticipation, TRUE);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_CancelParticipationYesNo;
+}
+
+void Task_CancelParticipationYesNo(u8 taskId)
+{
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ {
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleCancelParticipationYesNoInput;
+ }
+}
+
+void Task_HandleCancelParticipationYesNoInput(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gSpecialVar_0x8004 = PARTY_SIZE + 1;
+ Task_ClosePartyMenu(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ // fallthrough
+ case 1:
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
+ break;
+ }
+}
+
+u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor)
+{
+ u16 move;
+
+ if (GetMonData(mon, MON_DATA_IS_EGG))
+ return CANNOT_LEARN_MOVE_IS_EGG;
+
+ if (item >= ITEM_TM01_FOCUS_PUNCH)
+ {
+ if (CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH))
+ move = ItemIdToBattleMoveId(item);
+ else
+ return CANNOT_LEARN_MOVE;
+ do
+ {
+ } while (0);
+ }
+ else if (CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor) == FALSE)
+ {
+ return CANNOT_LEARN_MOVE;
+ }
+ else
+ {
+ move = GetTutorMove(tutor);
+ }
+ if (MonKnowsMove(mon, move) == TRUE)
+ return ALREADY_KNOWS_MOVE;
+ else
+ return CAN_LEARN_MOVE;
+}
+
+u16 GetTutorMove(u8 tutor)
+{
+ switch (tutor)
+ {
+ case TUTOR_MOVE_FRENZY_PLANT:
+ return MOVE_FRENZY_PLANT;
+ case TUTOR_MOVE_BLAST_BURN:
+ return MOVE_BLAST_BURN;
+ case TUTOR_MOVE_HYDRO_CANNON:
+ return MOVE_HYDRO_CANNON;
+ default:
+ return sTutorMoves[tutor];
+ }
+}
+
+bool8 CanLearnTutorMove(u16 species, u8 tutor)
+{
+ switch (tutor)
+ {
+ case TUTOR_MOVE_FRENZY_PLANT:
+ if (species == SPECIES_VENUSAUR)
+ return TRUE;
+ else
+ return FALSE;
+ case TUTOR_MOVE_BLAST_BURN:
+ if (species == SPECIES_CHARIZARD)
+ return TRUE;
+ else
+ return FALSE;
+ case TUTOR_MOVE_HYDRO_CANNON:
+ if (species == SPECIES_BLASTOISE)
+ return TRUE;
+ else
+ return FALSE;
+ default:
+ if (sTutorLearnsets[species] & (1 << tutor))
+ return TRUE;
+ else
+ return FALSE;
+ }
+}
+
+void sub_8120C3C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_8120C6C;
+}
+
+void sub_8120C6C(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFF1FFF, 4, 0, 6, RGB_BLACK);
+ gTasks[taskId].func = sub_8120CA8;
+}
+
+void sub_8120CA8(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_8120CD8;
+}
+
+void sub_8120CD8(u8 taskId)
+{
+ gTasks[taskId].data[0] = sub_81220D4();
+ gTasks[taskId].func = sub_8120D08;
+}
+
+void sub_8120D08(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE)
+ gTasks[taskId].func = sub_8120D40;
+}
+
+void sub_8120D40(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFF0008, 4, 6, 0, RGB_BLACK);
+ gTasks[taskId].func = sub_8120D7C;
+}
+
+void sub_8120D7C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_8120DAC;
+}
+
+void sub_8120DAC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_8122084(data[0], gUnknown_8417494);
+ gTasks[taskId].func = sub_8120DE0;
+}
+
+void sub_8120DE0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE)
+ {
+ sub_8122110((u8)data[0]);
+ gTasks[taskId].func = sub_8120E1C;
+ }
+}
+
+void sub_8120E1C(u8 taskId)
+{
+ BeginNormalPaletteFade(0x0000FFF7, 4, 6, 0, RGB_BLACK);
+ gTasks[taskId].func = sub_8120E58;
+}
+
+void sub_8120E58(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ TextWindow_SetUserSelectedFrame(0, 0x4F, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x58, 0xF0);
+ if (gPartyMenu.action == PARTY_ACTION_USE_ITEM)
+ DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
+ else
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ }
+}
+
+void sub_8120EBC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[0] = 0;
+ gTasks[taskId].func = sub_8120EE0;
+}
+
+void sub_8120EE0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE)
+ {
+ switch (data[0])
+ {
+ case 80:
+ #ifndef NONMATCHING
+ asm("":::"r5");
+ #endif
+ UpdateCurrentPartySelection(&gPartyMenu.slotId, 2);
+ ++data[0];
+ break;
+ case 160:
+ PlaySE(SE_SELECT);
+ CreateSelectionWindow();
+ ++data[0];
+ break;
+ case 240:
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[0]].func(taskId);
+ // fall through
+ default:
+ ++data[0];
+ break;
+ }
+ }
+}
diff --git a/src/tm_case.c b/src/tm_case.c
index 0734c6d24..a9af2332e 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -595,7 +595,7 @@ static void TMCase_MoveCursor_UpdatePrintedDescription(s32 itemIndex)
static void FillBG2RowWithPalette_2timesNplus1(s32 a0)
{
- SetBgRectPal(2, 0, 12, 30, 8, 2 * a0 + 1);
+ SetBgTilemapPalette(2, 0, 12, 30, 8, 2 * a0 + 1);
ScheduleBgCopyTilemapToVram(2);
}