summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/party_menu.s5197
-rw-r--r--asm/pokemon_storage_system.s2
-rw-r--r--asm/pokemon_summary_screen.s60
-rw-r--r--include/new_menu_helpers.h2
-rw-r--r--include/party_menu.h3
-rw-r--r--include/pokemon_icon.h2
-rw-r--r--include/pokemon_summary_screen.h2
-rw-r--r--include/quest_log.h1
-rw-r--r--include/strings.h6
-rw-r--r--src/new_menu_helpers.c2
-rw-r--r--src/party_menu.c1455
-rw-r--r--src/pokemon_icon.c2
-rw-r--r--src/quest_log.c12
-rw-r--r--src/trade.c10
-rw-r--r--sym_ewram.txt2
15 files changed, 1504 insertions, 5254 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s
index c394b4917..32674fea2 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -5,5203 +5,6 @@
.text
- thumb_func_start sub_8120F78
-sub_8120F78: @ 8120F78
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08120F90 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08120F94
- movs r0, 0
- b _08120FA4
- .align 2, 0
-_08120F90: .4byte gMain
-_08120F94:
- ldr r0, _08120FA8 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _08120FAC @ =sub_8120FB0
- str r0, [r1, 0x4]
- adds r0, r2, 0
- bl Task_ClosePartyMenu
- movs r0, 0x1
-_08120FA4:
- pop {r1}
- bx r1
- .align 2, 0
-_08120FA8: .4byte sPartyMenuInternal
-_08120FAC: .4byte sub_8120FB0
- thumb_func_end sub_8120F78
-
- thumb_func_start sub_8120FB0
-sub_8120FB0: @ 8120FB0
- push {lr}
- bl FreeRestoreBattleData
- bl LoadPlayerParty
- bl SetTeachyTvControllerModeToResume
- ldr r0, _08120FC8 @ =CB2_ReturnToTeachyTV
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08120FC8: .4byte CB2_ReturnToTeachyTV
- thumb_func_end sub_8120FB0
-
- thumb_func_start sub_8120FCC
-sub_8120FCC: @ 8120FCC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08120FE8 @ =gTasks+0x8
- adds r3, r1, r0
- movs r2, 0
- strh r2, [r3]
- subs r0, 0x8
- adds r1, r0
- ldr r0, _08120FEC @ =sub_8120FF0
- str r0, [r1]
- bx lr
- .align 2, 0
-_08120FE8: .4byte gTasks+0x8
-_08120FEC: .4byte sub_8120FF0
- thumb_func_end sub_8120FCC
-
- thumb_func_start sub_8120FF0
-sub_8120FF0: @ 8120FF0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _0812102C @ =gTasks+0x8
- adds r4, r0, r1
- ldr r0, _08121030 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08121048
- adds r0, r2, 0
- bl sub_8120F78
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08121048
- ldrh r1, [r4]
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x50
- beq _08121034
- adds r0, r1, 0x1
- strh r0, [r4]
- b _08121048
- .align 2, 0
-_0812102C: .4byte gTasks+0x8
-_08121030: .4byte gPaletteFade
-_08121034:
- ldr r0, _08121050 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _08121054 @ =CB2_SetUpExitToBattleScreen
- str r0, [r1, 0x4]
- ldr r0, _08121058 @ =gItemUseCB
- ldr r1, _0812105C @ =Task_ClosePartyMenuAfterText
- ldr r2, [r0]
- adds r0, r5, 0
- bl _call_via_r2
-_08121048:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121050: .4byte sPartyMenuInternal
-_08121054: .4byte CB2_SetUpExitToBattleScreen
-_08121058: .4byte gItemUseCB
-_0812105C: .4byte Task_ClosePartyMenuAfterText
- thumb_func_end sub_8120FF0
-
- thumb_func_start InitPartyMenuWindows
-InitPartyMenuWindows: @ 8121060
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _08121088
- cmp r0, 0x1
- bgt _08121076
- cmp r0, 0
- beq _0812107C
- b _081210A0
-_08121076:
- cmp r1, 0x2
- beq _08121094
- b _081210A0
-_0812107C:
- ldr r0, _08121084 @ =sSinglePartyMenuWindowTemplate
- bl InitWindows
- b _081210A6
- .align 2, 0
-_08121084: .4byte sSinglePartyMenuWindowTemplate
-_08121088:
- ldr r0, _08121090 @ =sDoublePartyMenuWindowTemplate
- bl InitWindows
- b _081210A6
- .align 2, 0
-_08121090: .4byte sDoublePartyMenuWindowTemplate
-_08121094:
- ldr r0, _0812109C @ =sMultiPartyMenuWindowTemplate
- bl InitWindows
- b _081210A6
- .align 2, 0
-_0812109C: .4byte sMultiPartyMenuWindowTemplate
-_081210A0:
- ldr r0, _081210F4 @ =sShowcaseMultiPartyMenuWindowTemplate
- bl InitWindows
-_081210A6:
- bl DeactivateAllTextPrinters
- movs r4, 0
-_081210AC:
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _081210AC
- 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
- movs r0, 0x2
- bl stdpal_get
- movs r1, 0xC0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- bl stdpal_get
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081210F4: .4byte sShowcaseMultiPartyMenuWindowTemplate
- thumb_func_end InitPartyMenuWindows
-
- thumb_func_start CreateCancelConfirmWindows
-CreateCancelConfirmWindows: @ 81210F8
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08121174 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x5
- bne _0812110E
- b _08121238
-_0812110E:
- cmp r2, 0x1
- bne _08121188
- ldr r0, _08121178 @ =sConfirmButtonWindowTemplate
- bl AddWindow
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r5, _0812117C @ =gMenuText_Confirm
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- movs r2, 0x30
- subs r2, r0
- lsrs r2, 1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- ldr r0, _08121180 @ =sFontColorTable
- str r0, [sp, 0x8]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0xC]
- str r5, [sp, 0x10]
- adds r0, r4, 0
- movs r1, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized4
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r4, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, _08121184 @ =sMultiCancelButtonWindowTemplate
- bl AddWindow
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- b _08121194
- .align 2, 0
-_08121174: .4byte gPartyMenu
-_08121178: .4byte sConfirmButtonWindowTemplate
-_0812117C: .4byte gMenuText_Confirm
-_08121180: .4byte sFontColorTable
-_08121184: .4byte sMultiCancelButtonWindowTemplate
-_08121188:
- ldr r0, _081211E0 @ =sCancelButtonWindowTemplate
- bl AddWindow
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0x3
-_08121194:
- adds r0, r6, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, _081211E4 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0xA
- beq _081211F0
- ldr r4, _081211E8 @ =gFameCheckerText_Cancel
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetStringWidth
- movs r1, 0x30
- subs r1, r0
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- adds r1, r5, r1
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _081211EC @ =sFontColorTable
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- adds r2, r5, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized3
- b _08121224
- .align 2, 0
-_081211E0: .4byte sCancelButtonWindowTemplate
-_081211E4: .4byte gPartyMenu
-_081211E8: .4byte gFameCheckerText_Cancel
-_081211EC: .4byte sFontColorTable
-_081211F0:
- ldr r4, _08121240 @ =gOtherText_Exit
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetStringWidth
- movs r1, 0x30
- subs r1, r0
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- adds r1, r5, r1
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _08121244 @ =sFontColorTable
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0
- adds r2, r5, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized3
-_08121224:
- adds r0, r6, 0
- bl PutWindowTilemap
- adds r0, r6, 0
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
-_08121238:
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121240: .4byte gOtherText_Exit
-_08121244: .4byte sFontColorTable
- thumb_func_end CreateCancelConfirmWindows
-
- thumb_func_start GetPartyMenuPalBufferPtr
-GetPartyMenuPalBufferPtr: @ 8121248
- lsls r0, 24
- ldr r1, _08121258 @ =sPartyMenuInternal
- lsrs r0, 23
- adds r0, 0x18
- ldr r1, [r1]
- adds r1, r0
- adds r0, r1, 0
- bx lr
- .align 2, 0
-_08121258: .4byte sPartyMenuInternal
- thumb_func_end GetPartyMenuPalBufferPtr
-
- thumb_func_start BlitBitmapToPartyWindow
-BlitBitmapToPartyWindow: @ 812125C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r1, [sp, 0xC]
- ldr r1, [sp, 0x4C]
- ldr r4, [sp, 0x50]
- ldr r5, [sp, 0x54]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x10]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x18]
- lsls r4, 24
- lsrs r6, r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r10, r5
- mov r0, r10
- muls r0, r6
- lsls r0, 5
- bl AllocZeroed
- mov r9, r0
- cmp r0, 0
- beq _0812132A
- movs r5, 0
- ldr r0, [sp, 0x14]
- lsls r0, 19
- str r0, [sp, 0x1C]
- ldr r1, [sp, 0x18]
- lsls r1, 19
- str r1, [sp, 0x20]
- lsls r2, r6, 19
- str r2, [sp, 0x24]
- mov r0, r10
- lsls r0, 19
- str r0, [sp, 0x28]
- cmp r5, r10
- bcs _08121308
-_081212BE:
- movs r4, 0
- adds r1, r5, 0x1
- mov r8, r1
- cmp r4, r6
- bcs _081212FE
- ldr r2, [sp, 0x18]
- adds r0, r2, r5
- ldr r2, [sp, 0x10]
- adds r1, r0, 0
- muls r1, r2
- adds r7, r1, 0
-_081212D4:
- ldr r1, [sp, 0x14]
- adds r0, r1, r4
- adds r0, r7
- ldr r2, [sp, 0xC]
- adds r0, r2, r0
- ldrb r0, [r0]
- bl GetPartyMenuBgTile
- adds r1, r5, 0
- muls r1, r6
- adds r1, r4
- lsls r1, 5
- add r1, r9
- movs r2, 0x10
- bl CpuSet
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r6
- bcc _081212D4
-_081212FE:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r5, r0, 24
- cmp r5, r10
- bcc _081212BE
-_08121308:
- ldr r0, [sp, 0x1C]
- lsrs r2, r0, 16
- ldr r1, [sp, 0x20]
- lsrs r3, r1, 16
- ldr r1, [sp, 0x24]
- lsrs r0, r1, 16
- str r0, [sp]
- ldr r1, [sp, 0x28]
- lsrs r0, r1, 16
- str r0, [sp, 0x4]
- ldr r0, [sp, 0x8]
- mov r1, r9
- bl BlitBitmapToWindow
- mov r0, r9
- bl Free
-_0812132A:
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapToPartyWindow
-
- thumb_func_start BlitBitmapToPartyWindow_LeftColumn
-BlitBitmapToPartyWindow_LeftColumn: @ 812133C
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- cmp r3, 0
- bne _08121368
- cmp r4, 0
- bne _08121368
- movs r3, 0xA
- movs r4, 0x7
-_08121368:
- cmp r5, 0
- bne _08121384
- ldr r1, _08121380 @ =sMainSlotTileNums
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0xA
- adds r3, r6, 0
- bl BlitBitmapToPartyWindow
- b _08121394
- .align 2, 0
-_08121380: .4byte sMainSlotTileNums
-_08121384:
- ldr r1, _0812139C @ =sMainSlotTileNums_Egg
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0xA
- adds r3, r6, 0
- bl BlitBitmapToPartyWindow
-_08121394:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812139C: .4byte sMainSlotTileNums_Egg
- thumb_func_end BlitBitmapToPartyWindow_LeftColumn
-
- thumb_func_start BlitBitmapToPartyWindow_RightColumn
-BlitBitmapToPartyWindow_RightColumn: @ 81213A0
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r4, [sp, 0x1C]
- ldr r5, [sp, 0x20]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- cmp r3, 0
- bne _081213CC
- cmp r4, 0
- bne _081213CC
- movs r3, 0x12
- movs r4, 0x3
-_081213CC:
- cmp r5, 0
- bne _081213E8
- ldr r1, _081213E4 @ =sOtherSlotsTileNums
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0x12
- adds r3, r6, 0
- bl BlitBitmapToPartyWindow
- b _081213F8
- .align 2, 0
-_081213E4: .4byte sOtherSlotsTileNums
-_081213E8:
- ldr r1, _08121400 @ =sOtherSlotsTileNums_Egg
- str r2, [sp]
- str r3, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0x12
- adds r3, r6, 0
- bl BlitBitmapToPartyWindow
-_081213F8:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121400: .4byte sOtherSlotsTileNums_Egg
- thumb_func_end BlitBitmapToPartyWindow_RightColumn
-
- thumb_func_start DrawEmptySlot
-DrawEmptySlot: @ 8121404
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08121428 @ =sEmptySlotTileNums
- movs r2, 0
- str r2, [sp]
- movs r2, 0x12
- str r2, [sp, 0x4]
- movs r2, 0x3
- str r2, [sp, 0x8]
- movs r2, 0x12
- movs r3, 0
- bl BlitBitmapToPartyWindow
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08121428: .4byte sEmptySlotTileNums
- thumb_func_end DrawEmptySlot
-
- thumb_func_start LoadPartyBoxPalette
-LoadPartyBoxPalette: @ 812142C
- push {r4-r7,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- adds r5, r4, 0
- ldrb r0, [r0, 0x8]
- movs r1, 0x5
- bl GetWindowAttribute
- lsls r0, 28
- lsrs r6, r0, 24
- adds r7, r6, 0
- movs r0, 0x20
- ands r0, r4
- cmp r0, 0
- beq _081214A0
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0812145C
- ldr r5, _08121458 @ =sPartyBoxSelectedForActionPalIds1
- b _0812160A
- .align 2, 0
-_08121458: .4byte sPartyBoxSelectedForActionPalIds1
-_0812145C:
- ldr r5, _08121494 @ =sPartyBoxSelectedForActionPalIds1
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121498 @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _0812149C @ =sPartyBoxSelectedForActionPalIds2
- b _0812163E
- .align 2, 0
-_08121494: .4byte sPartyBoxSelectedForActionPalIds1
-_08121498: .4byte sPartyBoxPalOffsets1
-_0812149C: .4byte sPartyBoxSelectedForActionPalIds2
-_081214A0:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _081214EC
- ldr r5, _081214E0 @ =sPartyBoxSelectedForActionPalIds1
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _081214E4 @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081214E8 @ =sPartyBoxSelectedForActionPalIds2
- b _0812163E
- .align 2, 0
-_081214E0: .4byte sPartyBoxSelectedForActionPalIds1
-_081214E4: .4byte sPartyBoxPalOffsets1
-_081214E8: .4byte sPartyBoxSelectedForActionPalIds2
-_081214EC:
- movs r0, 0x4
- ands r0, r4
- cmp r0, 0
- beq _08121548
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08121504
- ldr r5, _08121500 @ =sPartyBoxSelectedForActionPalIds1
- b _0812160A
- .align 2, 0
-_08121500: .4byte sPartyBoxSelectedForActionPalIds1
-_08121504:
- ldr r5, _0812153C @ =sPartyBoxSelectedForActionPalIds1
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121540 @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _08121544 @ =sPartyBoxSelectedForActionPalIds2
- b _0812163E
- .align 2, 0
-_0812153C: .4byte sPartyBoxSelectedForActionPalIds1
-_08121540: .4byte sPartyBoxPalOffsets1
-_08121544: .4byte sPartyBoxSelectedForActionPalIds2
-_08121548:
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _081215A4
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08121560
- ldr r5, _0812155C @ =sPartyBoxCurrSelectionFaintedPalIds
- b _0812160A
- .align 2, 0
-_0812155C: .4byte sPartyBoxCurrSelectionFaintedPalIds
-_08121560:
- ldr r5, _08121598 @ =sPartyBoxFaintedPalIds1
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _0812159C @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081215A0 @ =sPartyBoxFaintedPalIds2
- b _0812163E
- .align 2, 0
-_08121598: .4byte sPartyBoxFaintedPalIds1
-_0812159C: .4byte sPartyBoxPalOffsets1
-_081215A0: .4byte sPartyBoxFaintedPalIds2
-_081215A4:
- movs r0, 0x8
- ands r0, r4
- cmp r0, 0
- beq _08121600
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _081215BC
- ldr r5, _081215B8 @ =sPartyBoxCurrSelectionMultiPalIds
- b _0812160A
- .align 2, 0
-_081215B8: .4byte sPartyBoxCurrSelectionMultiPalIds
-_081215BC:
- ldr r5, _081215F4 @ =sPartyBoxMultiPalIds1
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _081215F8 @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081215FC @ =sPartyBoxMultiPalIds2
- b _0812163E
- .align 2, 0
-_081215F4: .4byte sPartyBoxMultiPalIds1
-_081215F8: .4byte sPartyBoxPalOffsets1
-_081215FC: .4byte sPartyBoxMultiPalIds2
-_08121600:
- movs r0, 0x1
- ands r5, r0
- cmp r5, 0
- beq _08121684
- ldr r5, _08121674 @ =sPartyBoxCurrSelectionPalIds1
-_0812160A:
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121678 @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _0812167C @ =sPartyBoxCurrSelectionPalIds2
-_0812163E:
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121680 @ =sPartyBoxPalOffsets2
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- b _081216EC
- .align 2, 0
-_08121674: .4byte sPartyBoxCurrSelectionPalIds1
-_08121678: .4byte sPartyBoxPalOffsets1
-_0812167C: .4byte sPartyBoxCurrSelectionPalIds2
-_08121680: .4byte sPartyBoxPalOffsets2
-_08121684:
- ldr r5, _081216F4 @ =sPartyBoxEmptySlotPalIds1
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _081216F8 @ =sPartyBoxPalOffsets1
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldr r5, _081216FC @ =sPartyBoxEmptySlotPalIds2
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121700 @ =sPartyBoxPalOffsets2
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x2]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x2]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
-_081216EC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081216F4: .4byte sPartyBoxEmptySlotPalIds1
-_081216F8: .4byte sPartyBoxPalOffsets1
-_081216FC: .4byte sPartyBoxEmptySlotPalIds2
-_08121700: .4byte sPartyBoxPalOffsets2
- thumb_func_end LoadPartyBoxPalette
-
- thumb_func_start DisplayPartyPokemonBarDetail
-DisplayPartyPokemonBarDetail: @ 8121704
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- ldrb r5, [r3]
- ldrb r3, [r3, 0x1]
- lsls r4, r2, 1
- adds r4, r2
- ldr r2, _08121734 @ =sFontColorTable
- adds r4, r2
- str r4, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0
- adds r2, r5, 0
- bl AddTextPrinterParameterized3
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121734: .4byte sFontColorTable
- thumb_func_end DisplayPartyPokemonBarDetail
-
- thumb_func_start DisplayPartyPokemonNickname
-DisplayPartyPokemonNickname: @ 8121738
- push {r4-r7,lr}
- sub sp, 0x14
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121788
- cmp r4, 0x1
- bne _08121772
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x4]
- lsrs r1, 3
- ldrb r2, [r5, 0x5]
- lsrs r2, 3
- ldrb r3, [r5, 0x6]
- lsrs r3, 3
- ldrb r4, [r5, 0x7]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121772:
- adds r0, r7, 0
- add r1, sp, 0x8
- bl GetMonNickname
- ldrb r0, [r6, 0x8]
- ldr r3, [r6]
- adds r3, 0x4
- add r1, sp, 0x8
- movs r2, 0
- bl DisplayPartyPokemonBarDetail
-_08121788:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonNickname
-
- thumb_func_start DisplayPartyPokemonLevelCheck
-DisplayPartyPokemonLevelCheck: @ 8121790
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081217FC
- adds r0, r6, 0
- bl GetMonAilment
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _081217BE
- cmp r0, 0x6
- bne _081217FC
-_081217BE:
- cmp r4, 0
- beq _081217E4
- ldr r5, [r7]
- ldrb r0, [r7, 0x8]
- ldrb r1, [r5, 0x8]
- lsrs r1, 3
- ldrb r2, [r5, 0x9]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0xA]
- lsrs r3, 3
- ldrb r4, [r5, 0xB]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_081217E4:
- mov r0, r8
- cmp r0, 0x2
- beq _081217FC
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- adds r1, r7, 0
- bl DisplayPartyPokemonLevel
-_081217FC:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonLevelCheck
-
- thumb_func_start DisplayPartyPokemonLevel
-DisplayPartyPokemonLevel: @ 8121808
- push {r4-r6,lr}
- adds r2, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r5, _08121848 @ =gStringVar2
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, _0812184C @ =gStringVar1
- ldr r1, _08121850 @ =gText_Lv
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- adds r1, r5, 0
- bl StringAppend
- ldrb r0, [r6, 0x8]
- ldr r3, [r6]
- adds r3, 0x8
- adds r1, r4, 0
- movs r2, 0
- bl DisplayPartyPokemonBarDetail
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121848: .4byte gStringVar2
-_0812184C: .4byte gStringVar1
-_08121850: .4byte gText_Lv
- thumb_func_end DisplayPartyPokemonLevel
-
- thumb_func_start DisplayPartyPokemonGenderNidoranCheck
-DisplayPartyPokemonGenderNidoranCheck: @ 8121854
- push {r4-r7,lr}
- sub sp, 0x14
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0x1
- bne _08121886
- ldr r5, [r7]
- ldrb r0, [r7, 0x8]
- ldrb r1, [r5, 0xC]
- lsrs r1, 3
- ldrb r2, [r5, 0xD]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0xE]
- lsrs r3, 3
- ldrb r4, [r5, 0xF]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121886:
- adds r0, r6, 0
- add r1, sp, 0x8
- bl GetMonNickname
- adds r0, r6, 0
- bl GetMonGender
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- add r2, sp, 0x8
- adds r3, r7, 0
- bl DisplayPartyPokemonGender
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonGenderNidoranCheck
-
- thumb_func_start DisplayPartyPokemonGender
-DisplayPartyPokemonGender: @ 81218BC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r2
- adds r7, r3, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r5, r4, 0
- ldrb r0, [r7, 0x8]
- movs r1, 0x5
- bl GetWindowAttribute
- lsls r0, 28
- lsrs r6, r0, 24
- cmp r4, 0
- beq _08121982
- cmp r4, 0x20
- beq _081218EC
- cmp r4, 0x1D
- bne _08121900
-_081218EC:
- movs r0, 0xB
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0812190C @ =gSpeciesNames
- adds r1, r0
- mov r0, r9
- bl StringCompare
- cmp r0, 0
- beq _08121982
-_08121900:
- mov r0, r8
- cmp r0, 0
- beq _08121910
- cmp r0, 0xFE
- beq _08121950
- b _08121982
- .align 2, 0
-_0812190C: .4byte gSpeciesNames
-_08121910:
- ldr r5, _08121944 @ =sGenderMalePalIds
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121948 @ =sGenderPalOffsets
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r7, 0x8]
- ldr r1, _0812194C @ =gText_MaleSymbol
- ldr r3, [r7]
- adds r3, 0xC
- movs r2, 0x2
- bl DisplayPartyPokemonBarDetail
- b _08121982
- .align 2, 0
-_08121944: .4byte sGenderMalePalIds
-_08121948: .4byte sGenderPalOffsets
-_0812194C: .4byte gText_MaleSymbol
-_08121950:
- ldr r5, _08121990 @ =sGenderFemalePalIds
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121994 @ =sGenderPalOffsets
- ldrb r1, [r4]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r6
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r7, 0x8]
- ldr r1, _08121998 @ =gText_FemaleSymbol
- ldr r3, [r7]
- adds r3, 0xC
- movs r2, 0x2
- bl DisplayPartyPokemonBarDetail
-_08121982:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08121990: .4byte sGenderFemalePalIds
-_08121994: .4byte sGenderPalOffsets
-_08121998: .4byte gText_FemaleSymbol
- thumb_func_end DisplayPartyPokemonGender
-
- thumb_func_start DisplayPartyPokemonHPCheck
-DisplayPartyPokemonHPCheck: @ 812199C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081219F6
- cmp r4, 0
- beq _081219DE
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x10]
- lsrs r1, 3
- ldrb r2, [r5, 0x11]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0x12]
- lsrs r3, 3
- ldrb r4, [r5, 0x13]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_081219DE:
- mov r0, r8
- cmp r0, 0x2
- beq _081219F6
- adds r0, r7, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl DisplayPartyPokemonHP
-_081219F6:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonHPCheck
-
- thumb_func_start DisplayPartyPokemonHP
-DisplayPartyPokemonHP: @ 8121A04
- push {r4,r5,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r5, _08121A38 @ =gStringVar1
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- movs r1, 0xBA
- strb r1, [r0]
- movs r1, 0xFF
- strb r1, [r0, 0x1]
- ldrb r0, [r4, 0x8]
- ldr r3, [r4]
- adds r3, 0x10
- adds r1, r5, 0
- movs r2, 0
- bl DisplayPartyPokemonBarDetail
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08121A38: .4byte gStringVar1
- thumb_func_end DisplayPartyPokemonHP
-
- thumb_func_start DisplayPartyPokemonMaxHPCheck
-DisplayPartyPokemonMaxHPCheck: @ 8121A3C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121A98
- cmp r4, 0
- beq _08121A80
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x14]
- lsrs r1, 3
- adds r1, 0x1
- ldrb r2, [r5, 0x15]
- lsrs r2, 3
- adds r2, 0x1
- ldrb r3, [r5, 0x16]
- lsrs r3, 3
- ldrb r4, [r5, 0x17]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121A80:
- mov r0, r8
- cmp r0, 0x2
- beq _08121A98
- adds r0, r7, 0
- movs r1, 0x3A
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl DisplayPartyPokemonMaxHP
-_08121A98:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonMaxHPCheck
-
- thumb_func_start DisplayPartyPokemonMaxHP
-DisplayPartyPokemonMaxHP: @ 8121AA4
- push {r4-r6,lr}
- adds r2, r0, 0
- adds r6, r1, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r5, _08121AE4 @ =gStringVar2
- adds r0, r5, 0
- adds r1, r2, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, _08121AE8 @ =gStringVar1
- ldr r1, _08121AEC @ =gText_Slash
- adds r0, r4, 0
- bl StringCopy
- adds r0, r4, 0
- adds r1, r5, 0
- bl StringAppend
- ldrb r0, [r6, 0x8]
- ldr r3, [r6]
- adds r3, 0x14
- adds r1, r4, 0
- movs r2, 0
- bl DisplayPartyPokemonBarDetail
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121AE4: .4byte gStringVar2
-_08121AE8: .4byte gStringVar1
-_08121AEC: .4byte gText_Slash
- thumb_func_end DisplayPartyPokemonMaxHP
-
- thumb_func_start DisplayPartyPokemonHPBarCheck
-DisplayPartyPokemonHPBarCheck: @ 8121AF0
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121B24
- adds r0, r5, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- adds r2, r6, 0
- bl DisplayPartyPokemonHPBar
-_08121B24:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end DisplayPartyPokemonHPBarCheck
-
- thumb_func_start DisplayPartyPokemonHPBar
-DisplayPartyPokemonHPBar: @ 8121B2C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- adds r6, r2, 0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- ldrb r0, [r6, 0x8]
- movs r1, 0x5
- bl GetWindowAttribute
- lsls r0, 28
- lsrs r7, r0, 24
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- mov r2, r9
- lsls r1, r2, 16
- asrs r1, 16
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _08121B78
- cmp r0, 0x2
- blt _08121BA8
- cmp r0, 0x4
- bgt _08121BA8
- ldr r5, _08121B74 @ =sHPBarGreenPalIds
- b _08121B7A
- .align 2, 0
-_08121B74: .4byte sHPBarGreenPalIds
-_08121B78:
- ldr r5, _08121BA0 @ =sHPBarYellowPalIds
-_08121B7A:
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121BA4 @ =sHPBarPalOffsets
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- b _08121BCC
- .align 2, 0
-_08121BA0: .4byte sHPBarYellowPalIds
-_08121BA4: .4byte sHPBarPalOffsets
-_08121BA8:
- ldr r5, _08121C68 @ =sHPBarRedPalIds
- ldrb r0, [r5]
- bl GetPartyMenuPalBufferPtr
- ldr r4, _08121C6C @ =sHPBarPalOffsets
- ldrb r1, [r4]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
- ldrb r0, [r5, 0x1]
- bl GetPartyMenuPalBufferPtr
- ldrb r1, [r4, 0x1]
- adds r1, r7
- movs r2, 0x2
- bl LoadPalette
-_08121BCC:
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- mov r2, r9
- lsls r1, r2, 16
- asrs r1, 16
- ldr r2, [r6]
- ldrb r2, [r2, 0x1A]
- bl GetScaledHPFraction
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r0, [r6, 0x8]
- ldr r4, _08121C6C @ =sHPBarPalOffsets
- ldrb r1, [r4, 0x1]
- ldr r3, [r6]
- ldrb r2, [r3, 0x18]
- ldrb r3, [r3, 0x19]
- str r5, [sp]
- movs r7, 0x1
- str r7, [sp, 0x4]
- bl FillWindowPixelRect
- ldrb r0, [r6, 0x8]
- ldrb r1, [r4]
- ldr r3, [r6]
- ldrb r2, [r3, 0x18]
- ldrb r3, [r3, 0x19]
- adds r3, 0x1
- str r5, [sp]
- movs r4, 0x2
- str r4, [sp, 0x4]
- bl FillWindowPixelRect
- ldr r1, [r6]
- ldrb r0, [r1, 0x1A]
- cmp r5, r0
- beq _08121C50
- ldrb r0, [r6, 0x8]
- ldrb r2, [r1, 0x18]
- adds r2, r5
- ldrb r3, [r1, 0x19]
- ldrb r1, [r1, 0x1A]
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- str r7, [sp, 0x4]
- movs r1, 0xD
- bl FillWindowPixelRect
- ldrb r0, [r6, 0x8]
- ldr r1, [r6]
- ldrb r2, [r1, 0x18]
- adds r2, r5
- ldrb r3, [r1, 0x19]
- adds r3, 0x1
- ldrb r1, [r1, 0x1A]
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- str r4, [sp, 0x4]
- movs r1, 0x2
- bl FillWindowPixelRect
-_08121C50:
- ldrb r0, [r6, 0x8]
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08121C68: .4byte sHPBarRedPalIds
-_08121C6C: .4byte sHPBarPalOffsets
- thumb_func_end DisplayPartyPokemonHPBar
-
- thumb_func_start DisplayPartyPokemonDescriptionText
-DisplayPartyPokemonDescriptionText: @ 8121C70
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r6, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 24
- lsrs r2, 24
- adds r7, r2, 0
- cmp r7, 0
- beq _08121CAA
- ldr r5, [r6]
- ldrb r0, [r6, 0x8]
- ldrb r1, [r5, 0x1C]
- lsrs r1, 3
- ldrb r2, [r5, 0x1D]
- lsrs r2, 3
- ldrb r3, [r5, 0x1E]
- lsrs r3, 3
- ldrb r4, [r5, 0x1F]
- lsrs r4, 3
- str r4, [sp]
- movs r4, 0x1
- str r4, [sp, 0x4]
- ldr r4, [r5]
- bl _call_via_r4
-_08121CAA:
- cmp r7, 0x2
- beq _08121CD0
- ldrb r0, [r6, 0x8]
- ldr r1, [r6]
- ldrb r2, [r1, 0x1C]
- ldrb r3, [r1, 0x1D]
- ldr r1, _08121CDC @ =sFontColorTable
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r4, _08121CE0 @ =sDescriptionStringTable
- mov r5, r8
- lsls r1, r5, 2
- adds r1, r4
- ldr r1, [r1]
- str r1, [sp, 0x8]
- movs r1, 0x1
- bl AddTextPrinterParameterized3
-_08121CD0:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08121CDC: .4byte sFontColorTable
-_08121CE0: .4byte sDescriptionStringTable
- thumb_func_end DisplayPartyPokemonDescriptionText
-
- thumb_func_start PartyMenuRemoveWindow
-PartyMenuRemoveWindow: @ 8121CE4
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _08121D04
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0xFF
- strb r0, [r4]
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
-_08121D04:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PartyMenuRemoveWindow
-
- thumb_func_start DisplayPartyMenuStdMessage
-DisplayPartyMenuStdMessage: @ 8121D0C
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r0, _08121D3C @ =sPartyMenuInternal
- ldr r4, [r0]
- adds r5, r4, 0
- adds r5, 0xD
- ldrb r0, [r4, 0xD]
- cmp r0, 0xFF
- beq _08121D26
- adds r0, r5, 0
- bl PartyMenuRemoveWindow
-_08121D26:
- cmp r6, 0x7F
- beq _08121DE8
- adds r0, r6, 0
- subs r0, 0x16
- cmp r0, 0x4
- bhi _08121D80
- lsls r0, 2
- ldr r1, _08121D40 @ =_08121D44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08121D3C: .4byte sPartyMenuInternal
-_08121D40: .4byte _08121D44
- .align 2, 0
-_08121D44:
- .4byte _08121D58
- .4byte _08121D70
- .4byte _08121D70
- .4byte _08121D60
- .4byte _08121D68
-_08121D58:
- ldr r0, _08121D5C @ =sDoWhatWithMonMsgWindowTemplate
- b _08121D72
- .align 2, 0
-_08121D5C: .4byte sDoWhatWithMonMsgWindowTemplate
-_08121D60:
- ldr r0, _08121D64 @ =sDoWhatWithItemMsgWindowTemplate
- b _08121D72
- .align 2, 0
-_08121D64: .4byte sDoWhatWithItemMsgWindowTemplate
-_08121D68:
- ldr r0, _08121D6C @ =sDoWhatWithMailMsgWindowTemplate
- b _08121D72
- .align 2, 0
-_08121D6C: .4byte sDoWhatWithMailMsgWindowTemplate
-_08121D70:
- ldr r0, _08121D7C @ =sWhichMoveMsgWindowTemplate
-_08121D72:
- bl AddWindow
- strb r0, [r5]
- b _08121D88
- .align 2, 0
-_08121D7C: .4byte sWhichMoveMsgWindowTemplate
-_08121D80:
- ldr r0, _08121D9C @ =sDefaultPartyMsgWindowTemplate
- bl AddWindow
- strb r0, [r4, 0xD]
-_08121D88:
- cmp r6, 0
- bne _08121DB0
- ldr r0, _08121DA0 @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- lsls r0, 31
- cmp r0, 0
- beq _08121DA4
- movs r6, 0x2
- b _08121DB0
- .align 2, 0
-_08121D9C: .4byte sDefaultPartyMsgWindowTemplate
-_08121DA0: .4byte sPartyMenuInternal
-_08121DA4:
- bl ShouldUseChooseMonText
- lsls r0, 24
- cmp r0, 0
- bne _08121DB0
- movs r6, 0x1
-_08121DB0:
- ldrb r0, [r5]
- movs r1, 0
- movs r2, 0x58
- movs r3, 0xF
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r4, _08121DF0 @ =gStringVar4
- ldr r1, _08121DF4 @ =sActionStringTable
- lsls r0, r6, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldrb r0, [r5]
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x2
- adds r2, r4, 0
- movs r3, 0
- bl AddTextPrinterParameterized
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
-_08121DE8:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08121DF0: .4byte gStringVar4
-_08121DF4: .4byte sActionStringTable
- thumb_func_end DisplayPartyMenuStdMessage
-
- thumb_func_start ShouldUseChooseMonText
-ShouldUseChooseMonText: @ 8121DF8
- push {r4-r7,lr}
- ldr r7, _08121E0C @ =gPlayerParty
- movs r6, 0
- ldr r0, _08121E10 @ =gPartyMenu
- ldrb r0, [r0, 0xB]
- cmp r0, 0x1
- bne _08121E14
-_08121E06:
- movs r0, 0x1
- b _08121E56
- .align 2, 0
-_08121E0C: .4byte gPlayerParty
-_08121E10: .4byte gPartyMenu
-_08121E14:
- movs r5, 0
-_08121E16:
- movs r0, 0x64
- muls r0, r5
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08121E46
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _08121E40
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08121E46
-_08121E40:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08121E46:
- cmp r6, 0x1
- bhi _08121E06
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08121E16
- movs r0, 0
-_08121E56:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end ShouldUseChooseMonText
-
- thumb_func_start DisplaySelectionWindow
-DisplaySelectionWindow: @ 8121E5C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x24
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- beq _08121EBC
- cmp r4, 0x1
- bgt _08121E78
- cmp r4, 0
- beq _08121E7E
- b _08121ECC
-_08121E78:
- cmp r4, 0x2
- beq _08121EC4
- b _08121ECC
-_08121E7E:
- ldr r0, _08121EB4 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldrb r0, [r1, 0x17]
- lsls r0, 1
- movs r3, 0x13
- subs r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0xA
- str r0, [sp]
- ldrb r0, [r1, 0x17]
- lsls r0, 25
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r0, 0xE
- str r0, [sp, 0x8]
- ldr r0, _08121EB8 @ =0x000002bf
- str r0, [sp, 0xC]
- add r0, sp, 0x14
- movs r1, 0x2
- movs r2, 0x13
- bl SetWindowTemplateFields
- ldr r0, [sp, 0x14]
- ldr r1, [sp, 0x18]
- b _08121ED2
- .align 2, 0
-_08121EB4: .4byte sPartyMenuInternal
-_08121EB8: .4byte 0x000002bf
-_08121EBC:
- ldr r0, _08121EC0 @ =sItemGiveTakeWindowTemplate
- b _08121ECE
- .align 2, 0
-_08121EC0: .4byte sItemGiveTakeWindowTemplate
-_08121EC4:
- ldr r0, _08121EC8 @ =sMailReadTakeWindowTemplate
- b _08121ECE
- .align 2, 0
-_08121EC8: .4byte sMailReadTakeWindowTemplate
-_08121ECC:
- ldr r0, _08121EF8 @ =sMoveSelectWindowTemplate
-_08121ECE:
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
-_08121ED2:
- str r0, [sp, 0x1C]
- str r1, [sp, 0x20]
- add r0, sp, 0x1C
- bl AddWindow
- ldr r6, _08121EFC @ =sPartyMenuInternal
- ldr r1, [r6]
- strb r0, [r1, 0xC]
- ldr r0, [r6]
- ldrb r0, [r0, 0xC]
- movs r1, 0
- movs r2, 0x4F
- movs r3, 0xD
- bl DrawStdFrameWithCustomTileAndPalette
- cmp r4, 0x3
- bne _08121F00
- ldr r0, [r6]
- b _08121FA2
- .align 2, 0
-_08121EF8: .4byte sMoveSelectWindowTemplate
-_08121EFC: .4byte sPartyMenuInternal
-_08121F00:
- movs r0, 0x2
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0x2
- movs r1, 0x2
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r5, 0
- ldr r0, [r6]
- ldrb r0, [r0, 0x17]
- cmp r5, r0
- bcs _08121F7A
- adds r7, r6, 0
- movs r6, 0
-_08121F2A:
- ldr r1, [r7]
- adds r0, r1, 0
- adds r0, 0xF
- adds r4, r0, r5
- ldrb r0, [r4]
- movs r2, 0x3
- cmp r0, 0x11
- bls _08121F3C
- movs r2, 0x4
-_08121F3C:
- ldrb r0, [r1, 0xC]
- lsls r3, r5, 4
- adds r3, 0x2
- lsls r3, 24
- lsrs r3, 24
- mov r1, r8
- str r1, [sp]
- str r6, [sp, 0x4]
- lsls r1, r2, 1
- adds r1, r2
- ldr r2, _08121FB4 @ =sFontColorTable
- adds r1, r2
- str r1, [sp, 0x8]
- str r6, [sp, 0xC]
- ldr r2, _08121FB8 @ =sCursorOptions
- ldrb r1, [r4]
- lsls r1, 3
- adds r1, r2
- ldr r1, [r1]
- str r1, [sp, 0x10]
- movs r1, 0x2
- mov r2, r9
- bl AddTextPrinterParameterized4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, [r7]
- ldrb r0, [r0, 0x17]
- cmp r5, r0
- bcc _08121F2A
-_08121F7A:
- ldr r4, _08121FBC @ =sPartyMenuInternal
- ldr r2, [r4]
- ldrb r0, [r2, 0xC]
- movs r1, 0x10
- str r1, [sp]
- ldrb r1, [r2, 0x17]
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- str r1, [sp, 0xC]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursorInternal
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- ldr r0, [r4]
-_08121FA2:
- ldrb r0, [r0, 0xC]
- add sp, 0x24
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08121FB4: .4byte sFontColorTable
-_08121FB8: .4byte sCursorOptions
-_08121FBC: .4byte sPartyMenuInternal
- thumb_func_end DisplaySelectionWindow
-
- thumb_func_start PartyMenuPrintText
-PartyMenuPrintText: @ 8121FC0
- push {r4,lr}
- sub sp, 0x10
- adds r4, r0, 0
- movs r0, 0x6
- movs r1, 0
- movs r2, 0x4F
- movs r3, 0xD
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r2, _08122008 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- bl GetTextSpeedSetting
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0x6
- movs r1, 0x2
- adds r2, r4, 0
- bl AddTextPrinterParameterized2
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122008: .4byte gTextFlags
- thumb_func_end PartyMenuPrintText
-
- thumb_func_start PartyMenuDisplayYesNoMenu
-PartyMenuDisplayYesNoMenu: @ 812200C
- push {lr}
- sub sp, 0xC
- ldr r0, _08122030 @ =sPartyMenuYesNoWindowTemplate
- movs r1, 0x4F
- str r1, [sp]
- movs r1, 0xD
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08122030: .4byte sPartyMenuYesNoWindowTemplate
- thumb_func_end PartyMenuDisplayYesNoMenu
-
- thumb_func_start CreateLevelUpStatsWindow
-CreateLevelUpStatsWindow: @ 8122034
- push {r4,lr}
- ldr r0, _0812205C @ =sLevelUpStatsWindowTemplate
- bl AddWindow
- ldr r4, _08122060 @ =sPartyMenuInternal
- ldr r1, [r4]
- strb r0, [r1, 0xC]
- ldr r0, [r4]
- ldrb r0, [r0, 0xC]
- movs r1, 0
- movs r2, 0x4F
- movs r3, 0xD
- bl DrawStdFrameWithCustomTileAndPalette
- ldr r0, [r4]
- ldrb r0, [r0, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0812205C: .4byte sLevelUpStatsWindowTemplate
-_08122060: .4byte sPartyMenuInternal
- thumb_func_end CreateLevelUpStatsWindow
-
- thumb_func_start RemoveLevelUpStatsWindow
-RemoveLevelUpStatsWindow: @ 8122064
- push {r4,lr}
- ldr r4, _08122080 @ =sPartyMenuInternal
- ldr r0, [r4]
- ldrb r0, [r0, 0xC]
- bl ClearWindowTilemap
- ldr r0, [r4]
- adds r0, 0xC
- bl PartyMenuRemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122080: .4byte sPartyMenuInternal
- thumb_func_end RemoveLevelUpStatsWindow
-
- thumb_func_start sub_8122084
-sub_8122084: @ 8122084
- push {r4,r5,lr}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _081220CC @ =gStringVar4
- adds r0, r5, 0
- bl StringExpandPlaceholders
- ldr r2, _081220D0 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- bl GetTextSpeedSetting
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- adds r0, r4, 0
- movs r1, 0x4
- adds r2, r5, 0
- bl AddTextPrinterParameterized2
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081220CC: .4byte gStringVar4
-_081220D0: .4byte gTextFlags
- thumb_func_end sub_8122084
-
- thumb_func_start sub_81220D4
-sub_81220D4: @ 81220D4
- push {r4,lr}
- ldr r0, _08122108 @ =gUnknown_845A170
- bl AddWindow
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x4F
- movs r2, 0xE0
- bl TextWindow_LoadResourcesStdFrame0
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x4F
- movs r3, 0xE
- bl DrawDialogFrameWithCustomTileAndPalette
- ldr r1, _0812210C @ =gUnknown_8417457
- adds r0, r4, 0
- bl sub_8122084
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08122108: .4byte gUnknown_845A170
-_0812210C: .4byte gUnknown_8417457
- thumb_func_end sub_81220D4
-
- thumb_func_start sub_8122110
-sub_8122110: @ 8122110
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl ClearWindowTilemap
- adds r0, r4, 0
- movs r1, 0
- bl ClearDialogWindowAndFrameToTransparent
- adds r0, r4, 0
- bl RemoveWindow
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8122110
-
- thumb_func_start sub_8122138
-sub_8122138: @ 8122138
- push {r4,r5,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r0, _08122168 @ =sPartyMenuInternal
- ldr r4, [r0]
- cmp r5, 0x11
- bhi _0812216C
- ldrb r0, [r4, 0xE]
- cmp r0, 0xFF
- beq _081221C0
- bl ClearWindowTilemap
- ldrb r0, [r4, 0xE]
- bl RemoveWindow
- movs r0, 0xFF
- strb r0, [r4, 0xE]
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- b _081221C0
- .align 2, 0
-_08122168: .4byte sPartyMenuInternal
-_0812216C:
- ldrb r0, [r4, 0xE]
- cmp r0, 0xFF
- bne _0812217A
- ldr r0, _081221C8 @ =gUnknown_845A178
- bl AddWindow
- strb r0, [r4, 0xE]
-_0812217A:
- ldrb r0, [r4, 0xE]
- bl sub_8112F18
- movs r0, 0x2
- movs r1, 0x2
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- ldrb r2, [r4, 0xE]
- str r0, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r0, _081221CC @ =sFontColorTable + 15
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- ldr r1, _081221D0 @ =sHMDescriptionTable
- adds r0, r5, 0
- subs r0, 0x12
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp, 0x10]
- adds r0, r2, 0
- movs r1, 0x2
- movs r2, 0x3
- movs r3, 0x6
- bl AddTextPrinterParameterized4
- ldrb r0, [r4, 0xE]
- bl PutWindowTilemap
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
-_081221C0:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081221C8: .4byte gUnknown_845A178
-_081221CC: .4byte sFontColorTable + 15
-_081221D0: .4byte sHMDescriptionTable
- thumb_func_end sub_8122138
-
- thumb_func_start CreatePartyMonIconSprite
-CreatePartyMonIconSprite: @ 81221D4
- push {r4-r7,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r7, r1, 0
- adds r4, r2, 0
- movs r6, 0x1
- bl IsMultiBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0812220A
- ldr r0, _08122240 @ =gMain
- ldr r1, _08122244 @ =0x00000439
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812220A
- ldr r0, _08122248 @ =sMultiBattlePartnersPartyMask
- adds r0, r4, r0
- ldrb r1, [r0]
- eors r1, r6
- negs r0, r1
- orrs r0, r1
- lsrs r6, r0, 31
-_0812220A:
- adds r0, r5, 0
- movs r1, 0x41
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0
- bl GetMonData
- adds r1, r0, 0
- str r6, [sp]
- adds r0, r4, 0
- adds r2, r7, 0
- movs r3, 0x1
- bl CreatePartyMonIconSpriteParameterized
- ldrb r0, [r7, 0x9]
- adds r1, r5, 0
- bl UpdatePartyMonHPBar
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122240: .4byte gMain
-_08122244: .4byte 0x00000439
-_08122248: .4byte sMultiBattlePartnersPartyMask
- thumb_func_end CreatePartyMonIconSprite
-
- thumb_func_start CreatePartyMonIconSpriteParameterized
-CreatePartyMonIconSpriteParameterized: @ 812224C
- push {r4-r7,lr}
- sub sp, 0xC
- adds r6, r1, 0
- adds r4, r2, 0
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r3, 24
- lsrs r7, r3, 24
- cmp r5, 0
- beq _0812229A
- ldr r1, _081222A4 @ =SpriteCB_MonIcon
- ldr r0, [r4, 0x4]
- ldrb r2, [r0]
- ldrb r3, [r0, 0x1]
- movs r0, 0x4
- str r0, [sp]
- str r6, [sp, 0x4]
- ldr r0, [sp, 0x20]
- str r0, [sp, 0x8]
- adds r0, r5, 0
- bl CreateMonIcon
- strb r0, [r4, 0x9]
- ldr r2, _081222A8 @ =gSprites
- ldrb r0, [r4, 0x9]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x3
- adds r2, r7, 0
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
-_0812229A:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081222A4: .4byte SpriteCB_MonIcon
-_081222A8: .4byte gSprites
- thumb_func_end CreatePartyMonIconSpriteParameterized
-
- thumb_func_start UpdateHPBar
-UpdateHPBar: @ 81222AC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- adds r0, r1, 0
- adds r1, r2, 0
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _0812230C
- cmp r0, 0x2
- bgt _081222D4
- cmp r0, 0x1
- beq _08122324
- b _0812233C
-_081222D4:
- cmp r0, 0x3
- beq _081222F4
- cmp r0, 0x4
- bne _0812233C
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _081222F0 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_081222F0: .4byte gSprites
-_081222F4:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122308 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_08122308: .4byte gSprites
-_0812230C:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122320 @ =gSprites
- adds r0, r1
- movs r1, 0x2
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_08122320: .4byte gSprites
-_08122324:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122338 @ =gSprites
- adds r0, r1
- movs r1, 0x3
- bl MonIcon_SetAnim
- b _0812234C
- .align 2, 0
-_08122338: .4byte gSprites
-_0812233C:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08122354 @ =gSprites
- adds r0, r1
- movs r1, 0x4
- bl MonIcon_SetAnim
-_0812234C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122354: .4byte gSprites
- thumb_func_end UpdateHPBar
-
- thumb_func_start UpdatePartyMonHPBar
-UpdatePartyMonHPBar: @ 8122358
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r6, 0
- movs r1, 0x3A
- bl GetMonData
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl UpdateHPBar
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end UpdatePartyMonHPBar
-
- thumb_func_start AnimateSelectedPartyIcon
-AnimateSelectedPartyIcon: @ 812238C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- ldr r5, _081223BC @ =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r6, r0, 2
- adds r2, r6, r5
- movs r7, 0
- movs r3, 0
- strh r3, [r2, 0x2E]
- mov r12, r5
- cmp r1, 0
- bne _081223E4
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- cmp r0, 0x10
- bne _081223C4
- strh r3, [r2, 0x24]
- ldr r0, _081223C0 @ =0x0000fffc
- strh r0, [r2, 0x26]
- b _081223CA
- .align 2, 0
-_081223BC: .4byte gSprites
-_081223C0: .4byte 0x0000fffc
-_081223C4:
- ldr r0, _081223DC @ =0x0000fffc
- strh r0, [r2, 0x24]
- strh r3, [r2, 0x26]
-_081223CA:
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- mov r1, r12
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _081223E0 @ =SpriteCB_UpdatePartyMonIcon
- b _081223F0
- .align 2, 0
-_081223DC: .4byte 0x0000fffc
-_081223E0: .4byte SpriteCB_UpdatePartyMonIcon
-_081223E4:
- strh r3, [r2, 0x24]
- strh r3, [r2, 0x26]
- adds r0, r5, 0
- adds r0, 0x1C
- adds r0, r6, r0
- ldr r1, _081223F8 @ =SpriteCB_BouncePartyMonIcon
-_081223F0:
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081223F8: .4byte SpriteCB_BouncePartyMonIcon
- thumb_func_end AnimateSelectedPartyIcon
-
- thumb_func_start SpriteCB_BouncePartyMonIcon
-SpriteCB_BouncePartyMonIcon: @ 81223FC
- push {r4,lr}
- adds r4, r0, 0
- bl UpdateMonIconFrame
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08122422
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08122420
- ldr r0, _0812241C @ =0x0000fffd
- strh r0, [r4, 0x26]
- b _08122422
- .align 2, 0
-_0812241C: .4byte 0x0000fffd
-_08122420:
- strh r1, [r4, 0x26]
-_08122422:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_BouncePartyMonIcon
-
- thumb_func_start SpriteCB_UpdatePartyMonIcon
-SpriteCB_UpdatePartyMonIcon: @ 8122428
- push {lr}
- bl UpdateMonIconFrame
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_UpdatePartyMonIcon
-
- thumb_func_start CreatePartyMonHeldItemSprite
-CreatePartyMonHeldItemSprite: @ 8122434
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0812245C
- ldr r0, _08122464 @ =sSpriteTemplate_HeldItem
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x3]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xA]
- adds r0, r5, 0
- adds r1, r4, 0
- bl UpdatePartyMonHeldItemSprite
-_0812245C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08122464: .4byte sSpriteTemplate_HeldItem
- thumb_func_end CreatePartyMonHeldItemSprite
-
- thumb_func_start CreatePartyMonHeldItemSpriteParameterized
-CreatePartyMonHeldItemSpriteParameterized: @ 8122468
- push {r4,r5,lr}
- adds r4, r2, 0
- lsls r0, 16
- lsls r1, 16
- lsrs r5, r1, 16
- cmp r0, 0
- beq _081224A4
- ldr r0, _081224AC @ =sSpriteTemplate_HeldItem
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x3]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xA]
- ldr r2, _081224B0 @ =gSprites
- ldrb r0, [r4, 0xA]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
- adds r0, r5, 0
- adds r1, r4, 0
- bl ShowOrHideHeldItemSprite
-_081224A4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081224AC: .4byte sSpriteTemplate_HeldItem
-_081224B0: .4byte gSprites
- thumb_func_end CreatePartyMonHeldItemSpriteParameterized
-
- thumb_func_start UpdatePartyMonHeldItemSprite
-UpdatePartyMonHeldItemSprite: @ 81224B4
- push {r4,lr}
- adds r4, r1, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl ShowOrHideHeldItemSprite
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end UpdatePartyMonHeldItemSprite
-
- thumb_func_start ShowOrHideHeldItemSprite
-ShowOrHideHeldItemSprite: @ 81224D0
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _081224F8
- ldr r2, _081224F4 @ =gSprites
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- b _08122544
- .align 2, 0
-_081224F4: .4byte gSprites
-_081224F8:
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0812251C
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08122518 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- b _0812252E
- .align 2, 0
-_08122518: .4byte gSprites
-_0812251C:
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812254C @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
-_0812252E:
- ldr r2, _0812254C @ =gSprites
- ldrb r1, [r4, 0xA]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
-_08122544:
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812254C: .4byte gSprites
- thumb_func_end ShowOrHideHeldItemSprite
-
- thumb_func_start LoadHeldItemIcons
-LoadHeldItemIcons: @ 8122550
- push {lr}
- ldr r0, _08122564 @ =sSpriteSheet_HeldItem
- bl LoadSpriteSheet
- ldr r0, _08122568 @ =sSpritePalette_HeldItem
- bl LoadSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_08122564: .4byte sSpriteSheet_HeldItem
-_08122568: .4byte sSpritePalette_HeldItem
- thumb_func_end LoadHeldItemIcons
-
- thumb_func_start DrawHeldItemIconsForTrade
-DrawHeldItemIconsForTrade: @ 812256C
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0
- beq _08122580
- cmp r2, 0x1
- beq _081225C8
- b _08122604
-_08122580:
- movs r5, 0
- ldrb r0, [r6]
- cmp r5, r0
- bcs _08122604
-_08122588:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _081225C4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _081225B4
- adds r0, r7, r5
- ldrb r4, [r0]
- adds r0, r1, 0
- bl ItemIsMail
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl CreateHeldItemSpriteForTrade
-_081225B4:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrb r0, [r6]
- cmp r5, r0
- bcc _08122588
- b _08122604
- .align 2, 0
-_081225C4: .4byte gPlayerParty
-_081225C8:
- movs r5, 0
- b _081225FE
-_081225CC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0812260C @ =gEnemyParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _081225F8
- adds r0, r5, r7
- ldrb r4, [r0, 0x6]
- adds r0, r1, 0
- bl ItemIsMail
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl CreateHeldItemSpriteForTrade
-_081225F8:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_081225FE:
- ldrb r0, [r6, 0x1]
- cmp r5, r0
- bcc _081225CC
-_08122604:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812260C: .4byte gEnemyParty
- thumb_func_end DrawHeldItemIconsForTrade
-
- thumb_func_start CreateHeldItemSpriteForTrade
-CreateHeldItemSpriteForTrade: @ 8122610
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- adds r6, r0, 0
- mov r9, r1
- lsls r6, 24
- lsrs r6, 24
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, _08122688 @ =gSprites
- mov r8, r0
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- add r0, r8
- adds r0, 0x43
- ldrb r3, [r0]
- ldr r0, _0812268C @ =sSpriteTemplate_HeldItem
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0xFA
- movs r2, 0xAA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- mov r0, r8
- adds r5, r4, r0
- movs r0, 0x4
- strh r0, [r5, 0x24]
- movs r0, 0xA
- strh r0, [r5, 0x26]
- movs r0, 0x1C
- add r8, r0
- add r4, r8
- ldr r0, _08122690 @ =SpriteCB_HeldItem
- str r0, [r4]
- strh r6, [r5, 0x3C]
- adds r0, r5, 0
- mov r1, r9
- bl StartSpriteAnim
- ldr r1, [r4]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08122688: .4byte gSprites
-_0812268C: .4byte sSpriteTemplate_HeldItem
-_08122690: .4byte SpriteCB_HeldItem
- thumb_func_end CreateHeldItemSpriteForTrade
-
- thumb_func_start SpriteCB_HeldItem
-SpriteCB_HeldItem: @ 8122694
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x3C]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _081226C4 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 29
- cmp r0, 0
- bge _081226C8
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _081226E6
- .align 2, 0
-_081226C4: .4byte gSprites
-_081226C8:
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x24]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r2, 0x26]
- ldrh r2, [r2, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
-_081226E6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_HeldItem
-
- thumb_func_start CreatePartyMonPokeballSprite
-CreatePartyMonPokeballSprite: @ 81226EC
- push {r4,lr}
- adds r4, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0812270A
- ldr r0, _08122710 @ =sSpriteTemplate_MenuPokeball
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x6]
- ldrb r2, [r2, 0x7]
- movs r3, 0x8
- bl CreateSprite
- strb r0, [r4, 0xB]
-_0812270A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122710: .4byte sSpriteTemplate_MenuPokeball
- thumb_func_end CreatePartyMonPokeballSprite
-
- thumb_func_start CreatePartyMonPokeballSpriteParameterized
-CreatePartyMonPokeballSpriteParameterized: @ 8122714
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- cmp r0, 0
- beq _08122744
- ldr r0, _0812274C @ =sSpriteTemplate_MenuPokeball
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x6]
- ldrb r2, [r2, 0x7]
- movs r3, 0x8
- bl CreateSprite
- strb r0, [r4, 0xB]
- ldr r2, _08122750 @ =gSprites
- ldrb r0, [r4, 0xB]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
-_08122744:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812274C: .4byte sSpriteTemplate_MenuPokeball
-_08122750: .4byte gSprites
- thumb_func_end CreatePartyMonPokeballSpriteParameterized
-
- thumb_func_start CreatePokeballButtonSprite
-CreatePokeballButtonSprite: @ 8122754
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _0812278C @ =sSpriteTemplate_MenuPokeball
- adds r1, r3, 0
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08122790 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r3, [r1, 0x5]
- movs r2, 0xD
- negs r2, r2
- ands r2, r3
- movs r3, 0x8
- orrs r2, r3
- strb r2, [r1, 0x5]
- pop {r1}
- bx r1
- .align 2, 0
-_0812278C: .4byte sSpriteTemplate_MenuPokeball
-_08122790: .4byte gSprites
- thumb_func_end CreatePokeballButtonSprite
-
- thumb_func_start CreateSmallPokeballButtonSprite
-CreateSmallPokeballButtonSprite: @ 8122794
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 24
- lsrs r3, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _081227B4 @ =sSpriteTemplate_MenuPokeballSmall
- adds r1, r3, 0
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_081227B4: .4byte sSpriteTemplate_MenuPokeballSmall
- thumb_func_end CreateSmallPokeballButtonSprite
-
- thumb_func_start PartyMenuStartSpriteAnim
-PartyMenuStartSpriteAnim: @ 81227B8
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r2, _081227D8 @ =gSprites
- adds r0, r2
- bl StartSpriteAnim
- pop {r0}
- bx r0
- .align 2, 0
-_081227D8: .4byte gSprites
- thumb_func_end PartyMenuStartSpriteAnim
-
- thumb_func_start SpriteCB_BounceConfirmCancelButton
-SpriteCB_BounceConfirmCancelButton: @ 81227DC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- cmp r6, 0
- bne _08122820
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0812281C @ =gSprites
- mov r8, r0
- add r4, r8
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- lsls r5, r7, 4
- adds r5, r7
- lsls r5, 2
- add r5, r8
- adds r0, r5, 0
- movs r1, 0x4
- bl StartSpriteAnim
- strh r6, [r4, 0x26]
- strh r6, [r5, 0x26]
- b _0812284C
- .align 2, 0
-_0812281C: .4byte gSprites
-_08122820:
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- ldr r0, _08122858 @ =gSprites
- mov r8, r0
- add r5, r8
- adds r0, r5, 0
- movs r1, 0x3
- bl StartSpriteAnim
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- add r4, r8
- adds r0, r4, 0
- movs r1, 0x5
- bl StartSpriteAnim
- ldr r0, _0812285C @ =0x0000fffc
- strh r0, [r5, 0x26]
- movs r0, 0x4
- strh r0, [r4, 0x26]
-_0812284C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122858: .4byte gSprites
-_0812285C: .4byte 0x0000fffc
- thumb_func_end SpriteCB_BounceConfirmCancelButton
-
- thumb_func_start LoadPartyMenuPokeballGfx
-LoadPartyMenuPokeballGfx: @ 8122860
- push {lr}
- ldr r0, _08122878 @ =sSpriteSheet_MenuPokeball
- bl LoadCompressedSpriteSheet
- ldr r0, _0812287C @ =sSpriteSheet_MenuPokeballSmall
- bl LoadCompressedSpriteSheet
- ldr r0, _08122880 @ =sSpritePalette_MenuPokeball
- bl LoadCompressedSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_08122878: .4byte sSpriteSheet_MenuPokeball
-_0812287C: .4byte sSpriteSheet_MenuPokeballSmall
-_08122880: .4byte sSpritePalette_MenuPokeball
- thumb_func_end LoadPartyMenuPokeballGfx
-
- thumb_func_start CreatePartyMonStatusSprite
-CreatePartyMonStatusSprite: @ 8122884
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _081228AC
- ldr r0, _081228B4 @ =sSpriteTemplate_StatusIcons
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x4]
- ldrb r2, [r2, 0x5]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xC]
- adds r0, r5, 0
- adds r1, r4, 0
- bl SetPartyMonAilmentGfx
-_081228AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081228B4: .4byte sSpriteTemplate_StatusIcons
- thumb_func_end CreatePartyMonStatusSprite
-
- thumb_func_start CreatePartyMonStatusSpriteParameterized
-CreatePartyMonStatusSpriteParameterized: @ 81228B8
- push {r4,r5,lr}
- adds r4, r2, 0
- lsls r0, 16
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0
- beq _081228F4
- ldr r0, _081228FC @ =sSpriteTemplate_StatusIcons
- ldr r2, [r4, 0x4]
- ldrb r1, [r2, 0x4]
- ldrb r2, [r2, 0x5]
- movs r3, 0
- bl CreateSprite
- strb r0, [r4, 0xC]
- adds r0, r5, 0
- adds r1, r4, 0
- bl UpdatePartyMonAilmentGfx
- ldr r2, _08122900 @ =gSprites
- ldrb r0, [r4, 0xC]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
-_081228F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081228FC: .4byte sSpriteTemplate_StatusIcons
-_08122900: .4byte gSprites
- thumb_func_end CreatePartyMonStatusSpriteParameterized
-
- thumb_func_start SetPartyMonAilmentGfx
-SetPartyMonAilmentGfx: @ 8122904
- push {r4,lr}
- adds r4, r1, 0
- bl GetMonAilment
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl UpdatePartyMonAilmentGfx
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SetPartyMonAilmentGfx
-
- thumb_func_start UpdatePartyMonAilmentGfx
-UpdatePartyMonAilmentGfx: @ 812291C
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0812292C
- cmp r2, 0x6
- bne _08122948
-_0812292C:
- ldr r2, _08122944 @ =gSprites
- ldrb r1, [r5, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- b _08122972
- .align 2, 0
-_08122944: .4byte gSprites
-_08122948:
- ldrb r1, [r5, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0812297C @ =gSprites
- adds r0, r4
- subs r1, r2, 0x1
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- ldrb r1, [r5, 0xC]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
-_08122972:
- strb r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812297C: .4byte gSprites
- thumb_func_end UpdatePartyMonAilmentGfx
-
- thumb_func_start LoadPartyMenuAilmentGfx
-LoadPartyMenuAilmentGfx: @ 8122980
- push {lr}
- ldr r0, _08122994 @ =sSpriteSheet_StatusIcons
- bl LoadCompressedSpriteSheet
- ldr r0, _08122998 @ =sSpritePalette_StatusIcons
- bl LoadCompressedSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_08122994: .4byte sSpriteSheet_StatusIcons
-_08122998: .4byte sSpritePalette_StatusIcons
- thumb_func_end LoadPartyMenuAilmentGfx
-
- thumb_func_start SetPartyMonSelectionActions
-SetPartyMonSelectionActions: @ 812299C
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0
- bne _081229B0
- bl SetPartyMonFieldSelectionActions
- b _081229E8
-_081229B0:
- ldr r4, _081229F0 @ =sPartyMenuInternal
- ldr r1, [r4]
- ldr r0, _081229F4 @ =sPartyMenuActionCounts
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r1, 0x17]
- movs r3, 0
- ldr r0, [r4]
- ldrb r0, [r0, 0x17]
- cmp r3, r0
- bcs _081229E8
- ldr r1, _081229F8 @ =sPartyMenuActions
- lsls r0, r2, 2
- adds r2, r0, r1
-_081229CC:
- ldr r1, [r4]
- adds r1, 0xF
- adds r1, r3
- ldr r0, [r2]
- adds r0, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, [r4]
- ldrb r0, [r0, 0x17]
- cmp r3, r0
- bcc _081229CC
-_081229E8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081229F0: .4byte sPartyMenuInternal
-_081229F4: .4byte sPartyMenuActionCounts
-_081229F8: .4byte sPartyMenuActions
- thumb_func_end SetPartyMonSelectionActions
-
- thumb_func_start SetPartyMonFieldSelectionActions
-SetPartyMonFieldSelectionActions: @ 81229FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- ldr r2, _08122A78 @ =sPartyMenuInternal
- ldr r1, [r2]
- movs r0, 0
- strb r0, [r1, 0x17]
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0
- bl AppendToList
- movs r7, 0
- ldr r0, _08122A7C @ =sFieldMoves
- ldrh r0, [r0]
- str r0, [sp]
- mov r0, r9
- adds r0, 0x64
- str r0, [sp, 0x4]
-_08122A34:
- movs r4, 0
- adds r1, r7, 0x1
- mov r8, r1
- ldr r0, [sp]
- cmp r0, 0xC
- beq _08122A90
- movs r0, 0x64
- mov r6, r10
- muls r6, r0
- ldr r5, _08122A7C @ =sFieldMoves
-_08122A48:
- mov r1, r9
- adds r0, r1, r6
- adds r1, r7, 0
- adds r1, 0xD
- bl GetMonData
- lsls r1, r4, 1
- adds r1, r5
- ldrh r1, [r1]
- cmp r0, r1
- bne _08122A80
- ldr r0, _08122A78 @ =sPartyMenuInternal
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- adds r2, r4, 0
- adds r2, 0x12
- lsls r2, 24
- lsrs r2, 24
- bl AppendToList
- b _08122A90
- .align 2, 0
-_08122A78: .4byte sPartyMenuInternal
-_08122A7C: .4byte sFieldMoves
-_08122A80:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, 0xC
- bne _08122A48
-_08122A90:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r7, r0, 24
- cmp r7, 0x3
- bls _08122A34
- ldr r0, [sp, 0x4]
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08122AB6
- ldr r0, _08122AE8 @ =sPartyMenuInternal
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x1
- bl AppendToList
-_08122AB6:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08122AEC
- ldr r0, _08122AE8 @ =sPartyMenuInternal
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x6
- bl AppendToList
- b _08122AFC
- .align 2, 0
-_08122AE8: .4byte sPartyMenuInternal
-_08122AEC:
- ldr r0, _08122B1C @ =sPartyMenuInternal
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x3
- bl AppendToList
-_08122AFC:
- ldr r0, _08122B1C @ =sPartyMenuInternal
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xF
- adds r1, 0x17
- movs r2, 0x2
- bl AppendToList
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122B1C: .4byte sPartyMenuInternal
- thumb_func_end SetPartyMonFieldSelectionActions
-
- thumb_func_start GetPartyMenuActionsType
-GetPartyMenuActionsType: @ 8122B20
- push {lr}
- adds r2, r0, 0
- ldr r1, _08122B3C @ =gPartyMenu
- ldrb r0, [r1, 0x8]
- lsls r0, 28
- lsrs r0, 28
- adds r3, r1, 0
- cmp r0, 0xA
- bhi _08122BCA
- lsls r0, 2
- ldr r1, _08122B40 @ =_08122B44
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08122B3C: .4byte gPartyMenu
-_08122B40: .4byte _08122B44
- .align 2, 0
-_08122B44:
- .4byte _08122B70
- .4byte _08122B80
- .4byte _08122BCA
- .4byte _08122BCA
- .4byte _08122B8C
- .4byte _08122BCA
- .4byte _08122BAC
- .4byte _08122BCA
- .4byte _08122BBE
- .4byte _08122BC2
- .4byte _08122BC6
-_08122B70:
- adds r0, r2, 0
- movs r1, 0x2D
- bl GetMonData
- negs r1, r0
- orrs r1, r0
- lsrs r1, 31
- b _08122BCC
-_08122B80:
- adds r0, r2, 0
- bl GetPartyMenuActionsTypeInBattle
- lsls r0, 24
- lsrs r1, r0, 24
- b _08122BCC
-_08122B8C:
- movs r0, 0x9
- ldrsb r0, [r3, r0]
- bl GetPartySlotEntryStatus
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08122BA4
- cmp r0, 0x1
- beq _08122BA8
- movs r1, 0x7
- b _08122BCC
-_08122BA4:
- movs r1, 0x4
- b _08122BCC
-_08122BA8:
- movs r1, 0x5
- b _08122BCC
-_08122BAC:
- adds r0, r2, 0
- movs r1, 0x2D
- bl GetMonData
- movs r1, 0x6
- cmp r0, 0
- beq _08122BCC
- movs r1, 0x7
- b _08122BCC
-_08122BBE:
- movs r1, 0xA
- b _08122BCC
-_08122BC2:
- movs r1, 0xB
- b _08122BCC
-_08122BC6:
- movs r1, 0xC
- b _08122BCC
-_08122BCA:
- movs r1, 0
-_08122BCC:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end GetPartyMenuActionsType
-
- thumb_func_start CreateSelectionWindow
-CreateSelectionWindow: @ 8122BD4
- push {r4-r6,lr}
- ldr r5, _08122C20 @ =gPartyMenu
- movs r1, 0x9
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- adds r4, r1, 0
- muls r4, r0
- ldr r6, _08122C24 @ =gPlayerParty
- adds r4, r6
- ldr r1, _08122C28 @ =gStringVar1
- adds r0, r4, 0
- bl GetMonNickname
- ldr r0, _08122C2C @ =sPartyMenuInternal
- ldr r0, [r0]
- adds r0, 0xD
- bl PartyMenuRemoveWindow
- ldrb r5, [r5, 0x9]
- adds r0, r4, 0
- bl GetPartyMenuActionsType
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r6, 0
- adds r1, r5, 0
- bl SetPartyMonSelectionActions
- movs r0, 0
- bl DisplaySelectionWindow
- movs r0, 0x16
- bl DisplayPartyMenuStdMessage
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08122C20: .4byte gPartyMenu
-_08122C24: .4byte gPlayerParty
-_08122C28: .4byte gStringVar1
-_08122C2C: .4byte sPartyMenuInternal
- thumb_func_end CreateSelectionWindow
-
- thumb_func_start Task_TryCreateSelectionWindow
-Task_TryCreateSelectionWindow: @ 8122C30
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl CreateSelectionWindow
- ldr r1, _08122C54 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0, 0x8]
- ldr r1, _08122C58 @ =Task_HandleSelectionMenuInput
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122C54: .4byte gTasks
-_08122C58: .4byte Task_HandleSelectionMenuInput
- thumb_func_end Task_TryCreateSelectionWindow
-
- thumb_func_start Task_HandleSelectionMenuInput
-Task_HandleSelectionMenuInput: @ 8122C5C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08122C94 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08122D3E
- bl sub_80BF748
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08122D3E
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _08122C98 @ =gTasks+0x8
- adds r7, r0, r1
- ldr r0, _08122C9C @ =sPartyMenuInternal
- ldr r0, [r0]
- ldrb r0, [r0, 0x17]
- cmp r0, 0x3
- bhi _08122CA0
- bl Menu_ProcessInputNoWrapAround_other
- b _08122CA4
- .align 2, 0
-_08122C94: .4byte gPaletteFade
-_08122C98: .4byte gTasks+0x8
-_08122C9C: .4byte sPartyMenuInternal
-_08122CA0:
- bl Menu_ProcessInput_other
-_08122CA4:
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- ldrsh r4, [r7, r0]
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- beq _08122CCE
- ldr r0, _08122D14 @ =sPartyMenuInternal
- ldr r4, [r0]
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- adds r4, 0xF
- adds r4, r0
- ldrb r0, [r4]
- bl sub_8122138
-_08122CCE:
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r7]
- lsls r0, r5, 24
- asrs r5, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _08122D3E
- adds r0, 0x1
- cmp r5, r0
- bne _08122D1C
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08122D14 @ =sPartyMenuInternal
- ldr r0, [r4]
- adds r0, 0xE
- bl PartyMenuRemoveWindow
- ldr r2, _08122D18 @ =sCursorOptions
- ldr r0, [r4]
- ldrb r1, [r0, 0x17]
- adds r0, r1
- ldrb r0, [r0, 0xE]
- lsls r0, 3
- adds r2, 0x4
- adds r0, r2
- ldr r1, [r0]
- adds r0, r6, 0
- bl _call_via_r1
- b _08122D3E
- .align 2, 0
-_08122D14: .4byte sPartyMenuInternal
-_08122D18: .4byte sCursorOptions
-_08122D1C:
- ldr r4, _08122D44 @ =sPartyMenuInternal
- ldr r0, [r4]
- adds r0, 0xE
- bl PartyMenuRemoveWindow
- ldr r1, _08122D48 @ =sCursorOptions
- ldr r0, [r4]
- adds r0, 0xF
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- adds r0, r6, 0
- bl _call_via_r1
-_08122D3E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122D44: .4byte sPartyMenuInternal
-_08122D48: .4byte sCursorOptions
- thumb_func_end Task_HandleSelectionMenuInput
-
- thumb_func_start CursorCB_Summary
-CursorCB_Summary: @ 8122D4C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08122D70 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _08122D74 @ =CB2_ShowPokemonSummaryScreen
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl Task_ClosePartyMenu
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122D70: .4byte sPartyMenuInternal
-_08122D74: .4byte CB2_ShowPokemonSummaryScreen
- thumb_func_end CursorCB_Summary
-
- thumb_func_start CB2_ShowPokemonSummaryScreen
-CB2_ShowPokemonSummaryScreen: @ 8122D78
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _08122DAC @ =gPartyMenu
- ldrb r1, [r4, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _08122D8C
- bl UpdatePartyToBattleOrder
-_08122D8C:
- ldr r0, _08122DB0 @ =gPlayerParty
- ldrb r1, [r4, 0x9]
- ldr r2, _08122DB4 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08122DB8 @ =CB2_ReturnToPartyMenuFromSummaryScreen
- movs r4, 0
- str r4, [sp]
- bl ShowPokemonSummaryScreen
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08122DAC: .4byte gPartyMenu
-_08122DB0: .4byte gPlayerParty
-_08122DB4: .4byte gPlayerPartyCount
-_08122DB8: .4byte CB2_ReturnToPartyMenuFromSummaryScreen
- thumb_func_end CB2_ShowPokemonSummaryScreen
-
- thumb_func_start CB2_ReturnToPartyMenuFromSummaryScreen
-CB2_ReturnToPartyMenuFromSummaryScreen: @ 8122DBC
- push {lr}
- sub sp, 0xC
- ldr r2, _08122DF4 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- bl sub_8138B20
- ldr r3, _08122DF8 @ =gPartyMenu
- strb r0, [r3, 0x9]
- ldrb r0, [r3, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r3, 0xB]
- movs r1, 0x16
- str r1, [sp]
- ldr r1, _08122DFC @ =Task_TryCreateSelectionWindow
- str r1, [sp, 0x4]
- ldr r1, [r3]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl InitPartyMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08122DF4: .4byte gPaletteFade
-_08122DF8: .4byte gPartyMenu
-_08122DFC: .4byte Task_TryCreateSelectionWindow
- thumb_func_end CB2_ReturnToPartyMenuFromSummaryScreen
-
- thumb_func_start CursorCB_Switch
-CursorCB_Switch: @ 8122E00
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- movs r0, 0x5
- bl PlaySE
- ldr r5, _08122E4C @ =gPartyMenu
- movs r0, 0x8
- strb r0, [r5, 0xB]
- ldr r4, _08122E50 @ =sPartyMenuInternal
- ldr r0, [r4]
- adds r0, 0xD
- bl PartyMenuRemoveWindow
- ldr r0, [r4]
- adds r0, 0xC
- bl PartyMenuRemoveWindow
- movs r0, 0x3
- bl DisplayPartyMenuStdMessage
- ldrb r0, [r5, 0x9]
- movs r1, 0x1
- bl AnimatePartySlot
- ldrb r0, [r5, 0x9]
- strb r0, [r5, 0xA]
- ldr r1, _08122E54 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08122E58 @ =Task_HandleChooseMonInput
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08122E4C: .4byte gPartyMenu
-_08122E50: .4byte sPartyMenuInternal
-_08122E54: .4byte gTasks
-_08122E58: .4byte Task_HandleChooseMonInput
- thumb_func_end CursorCB_Switch
-
- thumb_func_start SwitchSelectedMons
-SwitchSelectedMons: @ 8122E5C
- push {r4-r7,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- ldr r1, _08122E84 @ =gTasks+0x8
- adds r6, r0, r1
- ldr r4, _08122E88 @ =gPartyMenu
- movs r1, 0xA
- ldrsb r1, [r4, r1]
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- cmp r1, r0
- bne _08122E8C
- adds r0, r7, 0
- bl FinishTwoMonAction
- b _08122FE2
- .align 2, 0
-_08122E84: .4byte gTasks+0x8
-_08122E88: .4byte gPartyMenu
-_08122E8C:
- bl sub_812358C
- add r2, sp, 0x8
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- ldr r1, _08122EE8 @ =sPartyMenuBoxes
- ldr r1, [r1]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- movs r4, 0
- strb r0, [r2]
- adds r0, r2, 0
- ldrb r0, [r0]
- movs r1, 0x1
- bl GetWindowAttribute
- strh r0, [r6]
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetWindowAttribute
- strh r0, [r6, 0x2]
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x3
- bl GetWindowAttribute
- strh r0, [r6, 0x4]
- add r0, sp, 0x8
- ldrb r0, [r0]
- movs r1, 0x4
- bl GetWindowAttribute
- strh r0, [r6, 0x6]
- strh r4, [r6, 0x10]
- movs r1, 0x4
- ldrsh r0, [r6, r1]
- cmp r0, 0xA
- bne _08122EEC
- movs r2, 0x1
- negs r2, r2
- adds r0, r2, 0
- b _08122EEE
- .align 2, 0
-_08122EE8: .4byte sPartyMenuBoxes
-_08122EEC:
- movs r0, 0x1
-_08122EEE:
- strh r0, [r6, 0x14]
- add r2, sp, 0x8
- ldr r0, _08122F4C @ =gPartyMenu
- ldrb r0, [r0, 0xA]
- lsls r0, 24
- asrs r0, 24
- ldr r1, _08122F50 @ =sPartyMenuBoxes
- ldr r1, [r1]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- movs r4, 0
- strb r0, [r2, 0x1]
- adds r0, r2, 0
- ldrb r0, [r0, 0x1]
- movs r1, 0x1
- bl GetWindowAttribute
- strh r0, [r6, 0x8]
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- movs r1, 0x2
- bl GetWindowAttribute
- strh r0, [r6, 0xA]
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- movs r1, 0x3
- bl GetWindowAttribute
- strh r0, [r6, 0xC]
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- movs r1, 0x4
- bl GetWindowAttribute
- strh r0, [r6, 0xE]
- strh r4, [r6, 0x12]
- movs r1, 0xC
- ldrsh r0, [r6, r1]
- cmp r0, 0xA
- bne _08122F54
- movs r2, 0x1
- negs r2, r2
- adds r0, r2, 0
- b _08122F56
- .align 2, 0
-_08122F4C: .4byte gPartyMenu
-_08122F50: .4byte sPartyMenuBoxes
-_08122F54:
- movs r0, 0x1
-_08122F56:
- strh r0, [r6, 0x16]
- ldr r4, _08122FEC @ =sSlot1TilemapBuffer
- movs r0, 0x4
- ldrsh r1, [r6, r0]
- movs r2, 0x6
- ldrsh r0, [r6, r2]
- lsls r0, 1
- muls r0, r1
- bl Alloc
- str r0, [r4]
- ldr r5, _08122FF0 @ =sSlot2TilemapBuffer
- movs r0, 0xC
- ldrsh r1, [r6, r0]
- movs r2, 0xE
- ldrsh r0, [r6, r2]
- lsls r0, 1
- muls r0, r1
- bl Alloc
- str r0, [r5]
- ldr r1, [r4]
- ldrb r2, [r6]
- ldrb r3, [r6, 0x2]
- ldrb r0, [r6, 0x4]
- str r0, [sp]
- ldrb r0, [r6, 0x6]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- ldr r1, [r5]
- ldrb r2, [r6, 0x8]
- ldrb r3, [r6, 0xA]
- ldrb r0, [r6, 0xC]
- str r0, [sp]
- ldrb r0, [r6, 0xE]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- add r0, sp, 0x8
- ldrb r0, [r0]
- bl ClearWindowTilemap
- add r0, sp, 0x8
- ldrb r0, [r0, 0x1]
- bl ClearWindowTilemap
- ldr r4, _08122FF4 @ =gPartyMenu
- movs r0, 0x9
- strb r0, [r4, 0xB]
- ldrb r0, [r4, 0x9]
- movs r1, 0x1
- bl AnimatePartySlot
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl AnimatePartySlot
- adds r0, r7, 0
- bl SlidePartyMenuBoxOneStep
- ldr r1, _08122FF8 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08122FFC @ =Task_SlideSelectedSlotsOffscreen
- str r1, [r0]
-_08122FE2:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08122FEC: .4byte sSlot1TilemapBuffer
-_08122FF0: .4byte sSlot2TilemapBuffer
-_08122FF4: .4byte gPartyMenu
-_08122FF8: .4byte gTasks
-_08122FFC: .4byte Task_SlideSelectedSlotsOffscreen
- thumb_func_end SwitchSelectedMons
-
- thumb_func_start TryMovePartySlot
-TryMovePartySlot: @ 8123000
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r2, 0
- mov r12, r3
- ldr r7, [sp, 0x18]
- lsls r0, 16
- lsrs r3, r0, 16
- adds r5, r3, 0
- lsls r1, 16
- lsrs r2, r1, 16
- mov r8, r2
- lsls r0, r3, 16
- asrs r1, r0, 16
- lsls r0, r2, 16
- asrs r0, 16
- adds r4, r1, r0
- cmp r4, 0
- blt _0812302A
- cmp r1, 0x1F
- ble _0812302E
-_0812302A:
- movs r0, 0
- b _0812305C
-_0812302E:
- cmp r1, 0
- bge _08123042
- negs r0, r1
- strb r0, [r6]
- movs r0, 0
- mov r1, r12
- strb r0, [r1]
- adds r0, r2, r3
- strb r0, [r7]
- b _0812305A
-_08123042:
- movs r0, 0
- strb r0, [r6]
- mov r0, r12
- strb r5, [r0]
- cmp r4, 0x1F
- ble _08123056
- movs r0, 0x20
- subs r0, r5
- strb r0, [r7]
- b _0812305A
-_08123056:
- mov r1, r8
- strb r1, [r7]
-_0812305A:
- movs r0, 0x1
-_0812305C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end TryMovePartySlot
-
- thumb_func_start MoveAndBufferPartySlot
-MoveAndBufferPartySlot: @ 8123068
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- str r0, [sp, 0x28]
- ldr r0, [sp, 0x54]
- ldr r4, [sp, 0x58]
- lsls r2, 16
- lsrs r2, 16
- mov r9, r2
- lsls r3, 16
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r4, 16
- lsrs r4, 16
- str r4, [sp, 0x30]
- lsls r1, 16
- asrs r7, r1, 16
- lsrs r0, r3, 16
- str r0, [sp, 0x2C]
- asrs r3, 16
- mov r8, r3
- mov r5, sp
- adds r5, 0x25
- mov r6, sp
- adds r6, 0x26
- str r6, [sp]
- adds r0, r7, 0
- mov r1, r8
- add r2, sp, 0x24
- adds r3, r5, 0
- bl TryMovePartySlot
- lsls r0, 24
- cmp r0, 0
- beq _08123122
- ldrb r2, [r5]
- mov r1, r9
- lsls r0, r1, 24
- lsrs r0, 24
- mov r9, r0
- ldrb r0, [r6]
- str r0, [sp]
- mov r1, r10
- lsls r0, r1, 24
- lsrs r4, r0, 24
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- mov r3, r9
- bl FillBgTilemapBufferRect_Palette0
- ldr r1, [sp, 0x30]
- lsls r0, r1, 16
- asrs r0, 16
- adds r0, r7, r0
- lsls r0, 16
- asrs r0, 16
- str r6, [sp]
- mov r1, r8
- add r2, sp, 0x24
- adds r3, r5, 0
- bl TryMovePartySlot
- lsls r0, 24
- cmp r0, 0
- beq _08123122
- add r0, sp, 0x24
- ldrb r2, [r0]
- ldr r1, [sp, 0x2C]
- lsls r0, r1, 24
- lsrs r0, 24
- str r0, [sp]
- str r4, [sp, 0x4]
- ldrb r0, [r5]
- str r0, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- ldrb r0, [r6]
- str r0, [sp, 0x10]
- str r4, [sp, 0x14]
- movs r0, 0x11
- str r0, [sp, 0x18]
- movs r0, 0
- str r0, [sp, 0x1C]
- str r0, [sp, 0x20]
- ldr r1, [sp, 0x28]
- movs r3, 0
- bl CopyRectToBgTilemapBufferRect
-_08123122:
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end MoveAndBufferPartySlot
-
- thumb_func_start MovePartyMenuBoxSprites
-MovePartyMenuBoxSprites: @ 8123134
- push {r4,lr}
- ldr r4, _08123184 @ =gSprites
- ldrb r2, [r0, 0xB]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r4
- lsls r1, 16
- asrs r1, 13
- ldrh r2, [r3, 0x24]
- adds r2, r1
- strh r2, [r3, 0x24]
- ldrb r3, [r0, 0xA]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r2, r4
- ldrh r3, [r2, 0x24]
- adds r3, r1
- strh r3, [r2, 0x24]
- ldrb r3, [r0, 0x9]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r2, r4
- ldrh r3, [r2, 0x24]
- adds r3, r1
- strh r3, [r2, 0x24]
- ldrb r2, [r0, 0xC]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- ldrh r2, [r0, 0x24]
- adds r2, r1
- strh r2, [r0, 0x24]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123184: .4byte gSprites
- thumb_func_end MovePartyMenuBoxSprites
-
- thumb_func_start SlidePartyMenuBoxSpritesOneStep
-SlidePartyMenuBoxSpritesOneStep: @ 8123188
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _081231DC @ =gTasks+0x8
- adds r4, r1, r0
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _081231B6
- ldr r2, _081231E0 @ =sPartyMenuBoxes
- ldr r0, _081231E4 @ =gPartyMenu
- movs r1, 0x9
- ldrsb r1, [r0, r1]
- lsls r1, 4
- ldr r0, [r2]
- adds r0, r1
- movs r2, 0x14
- ldrsh r1, [r4, r2]
- bl MovePartyMenuBoxSprites
-_081231B6:
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _081231D4
- ldr r2, _081231E0 @ =sPartyMenuBoxes
- ldr r0, _081231E4 @ =gPartyMenu
- movs r1, 0xA
- ldrsb r1, [r0, r1]
- lsls r1, 4
- ldr r0, [r2]
- adds r0, r1
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- bl MovePartyMenuBoxSprites
-_081231D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081231DC: .4byte gTasks+0x8
-_081231E0: .4byte sPartyMenuBoxes
-_081231E4: .4byte gPartyMenu
- thumb_func_end SlidePartyMenuBoxSpritesOneStep
-
- thumb_func_start SlidePartyMenuBoxOneStep
-SlidePartyMenuBoxOneStep: @ 81231E8
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08123264 @ =gTasks+0x8
- adds r5, r1, r0
- movs r1, 0x14
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08123228
- ldr r0, _08123268 @ =sSlot1TilemapBuffer
- ldr r0, [r0]
- ldrh r1, [r5, 0x10]
- ldrh r2, [r5]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- movs r3, 0x2
- ldrsh r2, [r5, r3]
- movs r4, 0x4
- ldrsh r3, [r5, r4]
- movs r6, 0x6
- ldrsh r4, [r5, r6]
- str r4, [sp]
- movs r6, 0x14
- ldrsh r4, [r5, r6]
- str r4, [sp, 0x4]
- bl MoveAndBufferPartySlot
-_08123228:
- movs r1, 0x16
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08123256
- ldr r0, _0812326C @ =sSlot2TilemapBuffer
- ldr r0, [r0]
- ldrh r1, [r5, 0x12]
- ldrh r2, [r5, 0x8]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- movs r3, 0xA
- ldrsh r2, [r5, r3]
- movs r4, 0xC
- ldrsh r3, [r5, r4]
- movs r6, 0xE
- ldrsh r4, [r5, r6]
- str r4, [sp]
- movs r6, 0x16
- ldrsh r4, [r5, r6]
- str r4, [sp, 0x4]
- bl MoveAndBufferPartySlot
-_08123256:
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123264: .4byte gTasks+0x8
-_08123268: .4byte sSlot1TilemapBuffer
-_0812326C: .4byte sSlot2TilemapBuffer
- thumb_func_end SlidePartyMenuBoxOneStep
-
- thumb_func_start Task_SlideSelectedSlotsOffscreen
-Task_SlideSelectedSlotsOffscreen: @ 8123270
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r7, r0, 3
- ldr r0, _08123370 @ =gTasks+0x8
- mov r8, r0
- adds r6, r7, r0
- adds r0, r4, 0
- bl SlidePartyMenuBoxOneStep
- adds r0, r4, 0
- bl SlidePartyMenuBoxSpritesOneStep
- ldrh r1, [r6, 0x14]
- ldrh r2, [r6, 0x10]
- adds r1, r2
- strh r1, [r6, 0x10]
- ldrh r0, [r6, 0x16]
- ldrh r3, [r6, 0x12]
- adds r0, r3
- strh r0, [r6, 0x12]
- add r2, sp, 0x8
- ldrh r0, [r6]
- adds r0, r1
- strh r0, [r2]
- adds r1, r2, 0
- ldrh r0, [r6, 0x12]
- ldrh r3, [r6, 0x8]
- adds r2, r0, r3
- strh r2, [r1, 0x2]
- adds r0, r1, 0
- ldrh r0, [r0]
- cmp r0, 0x21
- bls _08123362
- lsls r0, r2, 16
- lsrs r0, 16
- cmp r0, 0x21
- bls _08123362
- movs r1, 0x14
- ldrsh r0, [r6, r1]
- negs r0, r0
- strh r0, [r6, 0x14]
- movs r2, 0x16
- ldrsh r0, [r6, r2]
- negs r0, r0
- strh r0, [r6, 0x16]
- bl SwitchPartyMon
- ldr r4, _08123374 @ =gPartyMenu
- ldrb r0, [r4, 0x9]
- bl DisplayPartyPokemonData
- ldrb r0, [r4, 0xA]
- bl DisplayPartyPokemonData
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- ldr r5, _08123378 @ =sPartyMenuBoxes
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0xA
- ldrsb r0, [r4, r0]
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- ldr r0, _0812337C @ =sSlot1TilemapBuffer
- ldr r1, [r0]
- ldrb r2, [r6]
- ldrb r3, [r6, 0x2]
- ldrb r0, [r6, 0x4]
- str r0, [sp]
- ldrb r0, [r6, 0x6]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- ldr r0, _08123380 @ =sSlot2TilemapBuffer
- ldr r1, [r0]
- ldrb r2, [r6, 0x8]
- ldrb r3, [r6, 0xA]
- ldrb r0, [r6, 0xC]
- str r0, [sp]
- ldrb r0, [r6, 0xE]
- str r0, [sp, 0x4]
- movs r0, 0
- bl CopyRectIntoAltRect
- movs r0, 0x9
- ldrsb r0, [r4, r0]
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl ClearWindowTilemap
- movs r0, 0xA
- ldrsb r0, [r4, r0]
- ldr r1, [r5]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl ClearWindowTilemap
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, _08123384 @ =Task_SlideSelectedSlotsOnscreen
- str r1, [r0]
-_08123362:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123370: .4byte gTasks+0x8
-_08123374: .4byte gPartyMenu
-_08123378: .4byte sPartyMenuBoxes
-_0812337C: .4byte sSlot1TilemapBuffer
-_08123380: .4byte sSlot2TilemapBuffer
-_08123384: .4byte Task_SlideSelectedSlotsOnscreen
- thumb_func_end Task_SlideSelectedSlotsOffscreen
-
- thumb_func_start Task_SlideSelectedSlotsOnscreen
-Task_SlideSelectedSlotsOnscreen: @ 8123388
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _081233E8 @ =gTasks+0x8
- adds r4, r0, r1
- adds r0, r6, 0
- bl SlidePartyMenuBoxOneStep
- adds r0, r6, 0
- bl SlidePartyMenuBoxSpritesOneStep
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _081233F4
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _081233F4
- ldr r5, _081233EC @ =gPartyMenu
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- ldr r4, _081233F0 @ =sPartyMenuBoxes
- ldr r1, [r4]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0xA
- ldrsb r0, [r5, r0]
- ldr r1, [r4]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl PutWindowTilemap
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- adds r0, r6, 0
- bl FinishTwoMonAction
- b _08123418
- .align 2, 0
-_081233E8: .4byte gTasks+0x8
-_081233EC: .4byte gPartyMenu
-_081233F0: .4byte sPartyMenuBoxes
-_081233F4:
- ldrh r1, [r4, 0x14]
- ldrh r0, [r4, 0x10]
- adds r1, r0
- strh r1, [r4, 0x10]
- ldrh r0, [r4, 0x16]
- ldrh r2, [r4, 0x12]
- adds r0, r2
- strh r0, [r4, 0x12]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0
- bne _0812340E
- strh r1, [r4, 0x14]
-_0812340E:
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08123418
- strh r0, [r4, 0x16]
-_08123418:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end Task_SlideSelectedSlotsOnscreen
-
- thumb_func_start SwitchMenuBoxSprites
-SwitchMenuBoxSprites: @ 8123420
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- ldrb r3, [r0]
- ldrb r2, [r1]
- strb r2, [r0]
- strb r3, [r1]
- ldr r5, _081234E8 @ =gSprites
- ldrb r2, [r0]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r5
- ldrh r6, [r3, 0x20]
- ldrh r2, [r3, 0x22]
- mov r8, r2
- ldrh r2, [r3, 0x24]
- mov r9, r2
- ldrh r2, [r3, 0x26]
- mov r10, r2
- ldrb r4, [r1]
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x20]
- strh r2, [r3, 0x20]
- ldrb r2, [r0]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r5
- ldrb r4, [r1]
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x22]
- strh r2, [r3, 0x22]
- ldrb r2, [r0]
- lsls r3, r2, 4
- adds r3, r2
- lsls r3, 2
- adds r3, r5
- ldrb r4, [r1]
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- adds r2, r5
- ldrh r2, [r2, 0x24]
- strh r2, [r3, 0x24]
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- ldrb r3, [r1]
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- adds r0, r5
- ldrh r0, [r0, 0x26]
- strh r0, [r2, 0x26]
- ldrb r2, [r1]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- strh r6, [r0, 0x20]
- ldrb r2, [r1]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- mov r2, r8
- strh r2, [r0, 0x22]
- ldrb r2, [r1]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- mov r2, r9
- strh r2, [r0, 0x24]
- ldrb r1, [r1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r10
- strh r1, [r0, 0x26]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081234E8: .4byte gSprites
- thumb_func_end SwitchMenuBoxSprites
-
- thumb_func_start SwitchPartyMon
-SwitchPartyMon: @ 81234EC
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r1, _08123580 @ =sPartyMenuBoxes
- ldr r2, _08123584 @ =gPartyMenu
- movs r3, 0x9
- ldrsb r3, [r2, r3]
- lsls r0, r3, 4
- ldr r1, [r1]
- adds r0, r1, r0
- str r0, [sp]
- ldrb r2, [r2, 0xA]
- lsls r2, 24
- asrs r2, 24
- lsls r0, r2, 4
- adds r0, r1, r0
- str r0, [sp, 0x4]
- movs r1, 0x64
- adds r4, r3, 0
- muls r4, r1
- ldr r0, _08123588 @ =gPlayerParty
- adds r4, r0
- adds r5, r2, 0
- muls r5, r1
- adds r5, r0
- movs r0, 0x64
- bl Alloc
- adds r6, r0, 0
- adds r1, r4, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r5, 0
- adds r1, r6, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r6, 0
- bl Free
- ldr r0, [sp]
- adds r0, 0xB
- ldr r1, [sp, 0x4]
- adds r1, 0xB
- bl SwitchMenuBoxSprites
- ldr r0, [sp]
- adds r0, 0xA
- ldr r1, [sp, 0x4]
- adds r1, 0xA
- bl SwitchMenuBoxSprites
- ldr r0, [sp]
- adds r0, 0x9
- ldr r1, [sp, 0x4]
- adds r1, 0x9
- bl SwitchMenuBoxSprites
- ldr r0, [sp]
- adds r0, 0xC
- ldr r1, [sp, 0x4]
- adds r1, 0xC
- bl SwitchMenuBoxSprites
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123580: .4byte sPartyMenuBoxes
-_08123584: .4byte gPartyMenu
-_08123588: .4byte gPlayerParty
- thumb_func_end SwitchPartyMon
-
- thumb_func_start sub_812358C
-sub_812358C: @ 812358C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- movs r0, 0x4
- bl Alloc
- adds r4, r0, 0
- ldr r0, _081235E0 @ =gPartyMenu
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r6, 0x64
- muls r0, r6
- ldr r5, _081235E4 @ =gPlayerParty
- adds r0, r5
- movs r1, 0x41
- bl GetMonData
- strh r0, [r4]
- mov r1, r8
- movs r0, 0xA
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0x41
- bl GetMonData
- strh r0, [r4, 0x2]
- movs r0, 0x3
- adds r1, r4, 0
- bl sub_8113550
- adds r0, r4, 0
- bl Free
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081235E0: .4byte gPartyMenu
-_081235E4: .4byte gPlayerParty
- thumb_func_end sub_812358C
-
- thumb_func_start FinishTwoMonAction
-FinishTwoMonAction: @ 81235E8
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _08123630 @ =sPartyMenuInternal
- ldr r0, [r0]
- adds r0, 0xD
- bl PartyMenuRemoveWindow
- ldr r4, _08123634 @ =gPartyMenu
- movs r0, 0
- strb r0, [r4, 0xB]
- ldrb r0, [r4, 0x9]
- movs r1, 0
- bl AnimatePartySlot
- ldrb r0, [r4, 0xA]
- strb r0, [r4, 0x9]
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl AnimatePartySlot
- movs r0, 0
- bl DisplayPartyMenuStdMessage
- ldr r1, _08123638 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0812363C @ =Task_HandleChooseMonInput
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123630: .4byte sPartyMenuInternal
-_08123634: .4byte gPartyMenu
-_08123638: .4byte gTasks
-_0812363C: .4byte Task_HandleChooseMonInput
- thumb_func_end FinishTwoMonAction
-
- thumb_func_start CursorCB_Cancel1
-CursorCB_Cancel1: @ 8123640
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08123674 @ =sPartyMenuInternal
- ldr r0, [r4]
- adds r0, 0xC
- bl PartyMenuRemoveWindow
- ldr r0, [r4]
- adds r0, 0xD
- bl PartyMenuRemoveWindow
- ldr r0, _08123678 @ =gPartyMenu
- ldrb r1, [r0, 0x8]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x6
- bne _0812367C
- movs r0, 0xF
- bl DisplayPartyMenuStdMessage
- b _08123682
- .align 2, 0
-_08123674: .4byte sPartyMenuInternal
-_08123678: .4byte gPartyMenu
-_0812367C:
- movs r0, 0
- bl DisplayPartyMenuStdMessage
-_08123682:
- ldr r0, _08123698 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0812369C @ =Task_HandleChooseMonInput
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08123698: .4byte gTasks
-_0812369C: .4byte Task_HandleChooseMonInput
- thumb_func_end CursorCB_Cancel1
-
- thumb_func_start CursorCB_Item
-CursorCB_Item: @ 81236A0
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x5
- bl PlaySE
- ldr r4, _081236F0 @ =sPartyMenuInternal
- ldr r0, [r4]
- adds r0, 0xC
- bl PartyMenuRemoveWindow
- ldr r0, [r4]
- adds r0, 0xD
- bl PartyMenuRemoveWindow
- ldr r0, _081236F4 @ =gPlayerParty
- ldr r1, _081236F8 @ =gPartyMenu
- ldrb r1, [r1, 0x9]
- movs r2, 0x8
- bl SetPartyMonSelectionActions
- movs r0, 0x1
- bl DisplaySelectionWindow
- movs r0, 0x19
- bl DisplayPartyMenuStdMessage
- ldr r1, _081236FC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xFF
- strh r1, [r0, 0x8]
- ldr r1, _08123700 @ =Task_HandleSelectionMenuInput
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081236F0: .4byte sPartyMenuInternal
-_081236F4: .4byte gPlayerParty
-_081236F8: .4byte gPartyMenu
-_081236FC: .4byte gTasks
-_08123700: .4byte Task_HandleSelectionMenuInput
- thumb_func_end CursorCB_Item
-
- thumb_func_start CursorCB_Give
-CursorCB_Give: @ 8123704
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08123728 @ =sPartyMenuInternal
- ldr r1, [r0]
- ldr r0, _0812372C @ =CB2_SelectBagItemToGive
- str r0, [r1, 0x4]
- adds r0, r4, 0
- bl Task_ClosePartyMenu
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123728: .4byte sPartyMenuInternal
-_0812372C: .4byte CB2_SelectBagItemToGive
- thumb_func_end CursorCB_Give
-
- thumb_func_start CB2_SelectBagItemToGive
-CB2_SelectBagItemToGive: @ 8123730
- push {lr}
- ldr r2, _08123740 @ =CB2_GiveHoldItem
- movs r0, 0x1
- movs r1, 0x3
- bl GoToBagMenu
- pop {r0}
- bx r0
- .align 2, 0
-_08123740: .4byte CB2_GiveHoldItem
- thumb_func_end CB2_SelectBagItemToGive
-
- thumb_func_start CB2_GiveHoldItem
-CB2_GiveHoldItem: @ 8123744
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- ldr r6, _0812376C @ =gSpecialVar_ItemId
- ldrh r0, [r6]
- cmp r0, 0
- bne _08123778
- ldr r3, _08123770 @ =gPartyMenu
- ldrb r0, [r3, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r3, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _08123774 @ =Task_TryCreateSelectionWindow
- str r1, [sp, 0x4]
- ldr r1, [r3]
- b _081237AE
- .align 2, 0
-_0812376C: .4byte gSpecialVar_ItemId
-_08123770: .4byte gPartyMenu
-_08123774: .4byte Task_TryCreateSelectionWindow
-_08123778:
- ldr r4, _081237BC @ =sPartyMenuItemId
- ldr r5, _081237C0 @ =gPartyMenu
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- movs r1, 0x64
- mov r8, r1
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- ldr r7, _081237C4 @ =gPlayerParty
- adds r0, r7
- movs r1, 0xC
- bl GetMonData
- strh r0, [r4]
- lsls r0, 16
- cmp r0, 0
- beq _081237CC
- ldrb r0, [r5, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r5, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _081237C8 @ =Task_SwitchHoldItemsPrompt
- str r1, [sp, 0x4]
- ldr r1, [r5]
-_081237AE:
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl InitPartyMenu
- b _08123814
- .align 2, 0
-_081237BC: .4byte sPartyMenuItemId
-_081237C0: .4byte gPartyMenu
-_081237C4: .4byte gPlayerParty
-_081237C8: .4byte Task_SwitchHoldItemsPrompt
-_081237CC:
- ldrh r0, [r6]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _081237F8
- ldrh r0, [r6]
- movs r1, 0x1
- bl RemoveBagItem
- movs r0, 0x9
- ldrsb r0, [r5, r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- ldrh r1, [r6]
- bl GiveItemToMon
- bl CB2_WriteMailToGiveMon
- b _08123814
-_081237F8:
- ldrb r0, [r5, 0x8]
- lsls r0, 28
- lsrs r0, 28
- ldrb r2, [r5, 0xB]
- movs r1, 0x7F
- str r1, [sp]
- ldr r1, _08123820 @ =Task_GiveHoldItem
- str r1, [sp, 0x4]
- ldr r1, [r5]
- str r1, [sp, 0x8]
- movs r1, 0xFF
- movs r3, 0x1
- bl InitPartyMenu
-_08123814:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123820: .4byte Task_GiveHoldItem
- thumb_func_end CB2_GiveHoldItem
-
- thumb_func_start Task_GiveHoldItem
-Task_GiveHoldItem: @ 8123824
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0812388C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08123880
- ldr r0, _08123890 @ =gSpecialVar_ItemId
- ldrh r4, [r0]
- ldr r0, _08123894 @ =gPartyMenu
- mov r8, r0
- ldrb r0, [r0, 0x9]
- lsls r0, 24
- asrs r0, 24
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08123898 @ =gPlayerParty
- adds r0, r5
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl DisplayGaveHeldItemMessage
- mov r1, r8
- movs r0, 0x9
- ldrsb r0, [r1, r0]
- muls r0, r6
- adds r0, r5
- adds r1, r4, 0
- bl GiveItemToMon
- adds r0, r4, 0
- movs r1, 0x1
- bl RemoveBagItem
- ldr r1, _0812389C @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _081238A0 @ =Task_UpdateHeldItemSprite
- str r1, [r0]
-_08123880:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812388C: .4byte gPaletteFade
-_08123890: .4byte gSpecialVar_ItemId
-_08123894: .4byte gPartyMenu
-_08123898: .4byte gPlayerParty
-_0812389C: .4byte gTasks
-_081238A0: .4byte Task_UpdateHeldItemSprite
- thumb_func_end Task_GiveHoldItem
-
thumb_func_start Task_SwitchHoldItemsPrompt
Task_SwitchHoldItemsPrompt: @ 81238A4
push {r4,lr}
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index 337361dcf..460410f47 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -15947,7 +15947,7 @@ sub_80937B4: @ 80937B4
_080937C4: .4byte gUnknown_2039822
_080937C8:
ldr r4, _080937D8 @ =gUnknown_2039821
- bl sub_8138B20
+ bl GetLastViewedMonIndex
strb r0, [r4]
_080937D0:
pop {r4}
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index ee5a96156..b345231f3 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -42,7 +42,7 @@ _0813453C: .4byte gUnknown_203B140
_08134540: .4byte 0x00003308
_08134544: .4byte gUnknown_203B144
_08134548:
- ldr r0, _08134574 @ =gUnknown_203B16C
+ ldr r0, _08134574 @ =gLastViewedMonIndex
strb r6, [r0]
ldr r0, _08134578 @ =gUnknown_203B16D
movs r1, 0
@@ -64,7 +64,7 @@ _08134548:
movs r0, 0x1
b _08134596
.align 2, 0
-_08134574: .4byte gUnknown_203B16C
+_08134574: .4byte gLastViewedMonIndex
_08134578: .4byte gUnknown_203B16D
_0813457C: .4byte gUnknown_203B16E
_08134580: .4byte 0x000032f8
@@ -6839,8 +6839,8 @@ _08137E82:
adds r0, r1
ldr r0, [r0]
bl SetMainCallback2
- bl sub_8138B20
- ldr r1, _08137EE0 @ =gUnknown_203B16C
+ bl GetLastViewedMonIndex
+ ldr r1, _08137EE0 @ =gLastViewedMonIndex
strb r0, [r1]
ldr r0, [r4]
cmp r0, 0
@@ -6864,7 +6864,7 @@ _08137ECC:
_08137ED4: .4byte gUnknown_203B140
_08137ED8: .4byte 0x00003214
_08137EDC: .4byte 0x000032f8
-_08137EE0: .4byte gUnknown_203B16C
+_08137EE0: .4byte gLastViewedMonIndex
_08137EE4: .4byte gUnknown_203B144
thumb_func_end sub_8137E64
@@ -8397,14 +8397,14 @@ _08138B18: .4byte 0x00003220
_08138B1C: .4byte 0x00003221
thumb_func_end sub_8138A38
- thumb_func_start sub_8138B20
-sub_8138B20: @ 8138B20
- ldr r0, _08138B28 @ =gUnknown_203B16C
+ thumb_func_start GetLastViewedMonIndex
+GetLastViewedMonIndex: @ 8138B20
+ ldr r0, _08138B28 @ =gLastViewedMonIndex
ldrb r0, [r0]
bx lr
.align 2, 0
-_08138B28: .4byte gUnknown_203B16C
- thumb_func_end sub_8138B20
+_08138B28: .4byte gLastViewedMonIndex
+ thumb_func_end GetLastViewedMonIndex
thumb_func_start GetMoveSlotToReplace
GetMoveSlotToReplace: @ 8138B2C
@@ -8443,7 +8443,7 @@ sub_8138B4C: @ 8138B4C
ldrb r0, [r0]
cmp r0, 0x1
bne _08138B84
- ldr r0, _08138B80 @ =gUnknown_203B16C
+ ldr r0, _08138B80 @ =gLastViewedMonIndex
ldrb r0, [r0]
cmp r0, 0x3
bhi _08138B76
@@ -8454,7 +8454,7 @@ _08138B76:
b _08138B86
.align 2, 0
_08138B7C: .4byte gReceivedRemoteLinkPlayers
-_08138B80: .4byte gUnknown_203B16C
+_08138B80: .4byte gLastViewedMonIndex
_08138B84:
movs r0, 0
_08138B86:
@@ -8476,7 +8476,7 @@ sub_8138B8C: @ 8138B8C
adds r2, 0xD8
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
@@ -8493,7 +8493,7 @@ _08138BC4:
ldr r2, _08138BE8 @ =0x000032f4
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
@@ -9148,7 +9148,7 @@ sub_81390B0: @ 81390B0
ldr r1, _081391DC @ =0x000032f4
adds r0, r1
ldr r6, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
@@ -9294,7 +9294,7 @@ sub_81391EC: @ 81391EC
ldr r1, _08139318 @ =0x000032f4
adds r0, r1
ldr r6, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
@@ -9442,7 +9442,7 @@ sub_8139328: @ 8139328
adds r2, 0xD8
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0x64
@@ -9459,7 +9459,7 @@ _08139360:
ldr r2, _08139384 @ =0x000032f4
adds r0, r1, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
@@ -10269,7 +10269,7 @@ _081399DC: .4byte sub_804CF14
_081399E0: .4byte 0x00003024
_081399E4: .4byte 0x0000ffff
_081399E8:
- ldr r0, _08139A1C @ =gUnknown_203B16C
+ ldr r0, _08139A1C @ =gLastViewedMonIndex
ldrb r1, [r0]
movs r0, 0x3
bl sub_804455C
@@ -10293,7 +10293,7 @@ _081399E8:
bl CreateMonPicSprite
b _08139A40
.align 2, 0
-_08139A1C: .4byte gUnknown_203B16C
+_08139A1C: .4byte gLastViewedMonIndex
_08139A20: .4byte 0x0000ffff
_08139A24:
movs r0, 0x3C
@@ -10787,7 +10787,7 @@ _08139E20:
.align 2, 0
_08139E28: .4byte SpriteCallbackDummy
_08139E2C:
- ldr r0, _08139E48 @ =gUnknown_203B16C
+ ldr r0, _08139E48 @ =gLastViewedMonIndex
ldrb r1, [r0]
movs r0, 0x3
bl sub_804455C
@@ -10801,7 +10801,7 @@ _08139E2C:
str r4, [sp, 0x4]
b _08139E58
.align 2, 0
-_08139E48: .4byte gUnknown_203B16C
+_08139E48: .4byte gLastViewedMonIndex
_08139E4C: .4byte SpriteCallbackDummy
_08139E50:
ldr r1, _08139E98 @ =SpriteCallbackDummy
@@ -13221,7 +13221,7 @@ _0813B16C:
ldr r2, _0813B190 @ =0x000032f4
adds r0, r2
ldr r4, [r0]
- bl sub_8138B20
+ bl GetLastViewedMonIndex
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -13268,7 +13268,7 @@ _0813B1CC:
negs r1, r1
cmp r0, r1
beq _0813B1F4
- ldr r0, _0813B1FC @ =gUnknown_203B16C
+ ldr r0, _0813B1FC @ =gLastViewedMonIndex
strb r2, [r0]
ldr r0, _0813B200 @ =sub_813B3F0
movs r1, 0
@@ -13284,7 +13284,7 @@ _0813B1F4:
pop {r0}
bx r0
.align 2, 0
-_0813B1FC: .4byte gUnknown_203B16C
+_0813B1FC: .4byte gLastViewedMonIndex
_0813B200: .4byte sub_813B3F0
_0813B204: .4byte gUnknown_203B140
_0813B208: .4byte 0x0000328c
@@ -13311,7 +13311,7 @@ sub_813B20C: @ 813B20C
movs r1, 0x1
negs r1, r1
adds r5, r0, 0
- ldr r6, _0813B264 @ =gUnknown_203B16C
+ ldr r6, _0813B264 @ =gLastViewedMonIndex
cmp r3, r1
bne _0813B23E
ldrb r0, [r6]
@@ -13336,7 +13336,7 @@ _0813B252:
_0813B258: .4byte gUnknown_203B140
_0813B25C: .4byte 0x000032f4
_0813B260: .4byte 0x00003214
-_0813B264: .4byte gUnknown_203B16C
+_0813B264: .4byte gLastViewedMonIndex
_0813B268: .4byte 0x00003210
_0813B26C:
lsls r5, r4, 24
@@ -13346,7 +13346,7 @@ _0813B26E:
asrs r1, r5, 24
adds r0, r1
lsls r0, 24
- ldr r4, _0813B29C @ =gUnknown_203B16C
+ ldr r4, _0813B29C @ =gLastViewedMonIndex
lsrs r6, r0, 24
asrs r0, 24
ldrb r3, [r4]
@@ -13365,7 +13365,7 @@ _0813B294:
negs r0, r0
b _0813B2C0
.align 2, 0
-_0813B29C: .4byte gUnknown_203B16C
+_0813B29C: .4byte gLastViewedMonIndex
_0813B2A0: .4byte gUnknown_203B140
_0813B2A4: .4byte 0x00003210
_0813B2A8:
@@ -13514,7 +13514,7 @@ _0813B39E:
bhi _0813B3B6
ldr r4, _0813B3D4 @ =gUnknown_8463FB8
adds r4, r5, r4
- bl sub_8138B20
+ bl GetLastViewedMonIndex
ldrb r1, [r4]
lsls r0, 24
lsrs r0, 24
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index fdc835625..f20375675 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -16,7 +16,7 @@ void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 off
void DecompressAndLoadBgGfxUsingHeap2(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
void * MallocAndDecompress(const void * src, u32 * size);
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 CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height);
void ResetBgPositions(void);
void InitStandardTextBoxWindows(void);
void FreeAllOverworldWindowBuffers(void);
diff --git a/include/party_menu.h b/include/party_menu.h
index d3eb0181f..b100097df 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -63,7 +63,7 @@ void OpenPartyMenuInBattle(void);
void SwitchPartyOrderLinkMulti(u8 battlerId, u8 unk, u8 arrayIndex);
bool8 IsMultiBattle(void);
void CB2_ChooseMonToGiveItem(void);
-void DrawHeldItemIconsForTrade(u8 *partyCount, u8 (*icons)[6], u8 side);
+void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty);
void ChooseMonToGiveMailFromMailbox(void);
void CB2_PartyMenuFromStartMenu(void);
void ShowPartyMenuToShowcaseMultiBattleParty(void);
@@ -71,5 +71,6 @@ void SwitchPartyMonSlots(u8 slot, u8 slot2);
void LoadHeldItemIcons(void);
void OpenPartyMenuInTutorialBattle(u8 partyAction);
void ClearSelectedPartyOrder(void);
+void CB2_SelectBagItemToGive(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index cfc3c18f0..f0e5c8b9d 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -22,6 +22,6 @@ u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subprior
u8 UpdateMonIconFrame(struct Sprite * sprite);
void LoadMonIconPalette(u16 iconId);
void FreeMonIconPalette(u16 iconId);
-void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum);
+void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index 2655405e5..3695d46df 100644
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -32,7 +32,7 @@ enum PokemonSummaryScreenPage
PSS_PAGE_CONTEST_MOVES,
};
-s32 sub_8138B20(void);
+s32 GetLastViewedMonIndex(void);
void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4);
#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
diff --git a/include/quest_log.h b/include/quest_log.h
index 3f6c94de5..4040ed4c9 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -47,6 +47,7 @@ void sub_81139BC(void);
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
void sub_8110840(void *oldSave);
+void sub_8112F18(u8 windowId);
extern u8 gUnknown_203ADFA;
diff --git a/include/strings.h b/include/strings.h
index b60a5d568..16a107de7 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -344,6 +344,12 @@ extern const u8 gText_BagFullCouldNotRemoveItem[];
extern const u8 gText_PkmnCantParticipate[];
extern const u8 gText_CancelParticipation[];
extern const u8 gUnknown_8417494[];
+extern const u8 gMenuText_Confirm[];
+extern const u8 gText_Lv[];
+extern const u8 gText_MaleSymbol[];
+extern const u8 gText_FemaleSymbol[];
+extern const u8 gText_Slash[];
+extern const u8 gUnknown_8417457[];
// credits
extern const u8 gString_Dummy[];
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index decd000d6..d2421ed9f 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -357,7 +357,7 @@ void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palet
}
}
-void CopyRectIntoAltRect(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height)
+void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height)
{
u8 i,j;
const u16 *src = GetBgTilemapBuffer(bgId);
diff --git a/src/party_menu.c b/src/party_menu.c
index 73965c4ae..08600229a 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -27,6 +27,7 @@
#include "item_use.h"
#include "link.h"
#include "link_rfu.h"
+#include "load_save.h"
#include "mail.h"
#include "mail_data.h"
#include "main.h"
@@ -43,6 +44,7 @@
#include "pokemon_jump.h"
#include "pokemon_storage_system.h"
#include "pokemon_summary_screen.h"
+#include "quest_log.h"
#include "region_map.h"
#include "reshow_battle_screen.h"
#include "scanline_effect.h"
@@ -53,6 +55,7 @@
#include "string_util.h"
#include "strings.h"
#include "task.h"
+#include "teachy_tv.h"
#include "text.h"
#include "text_window.h"
#include "trade.h"
@@ -258,11 +261,39 @@ void sub_8120DE0(u8 taskId);
void sub_8120E1C(u8 taskId);
void sub_8120E58(u8 taskId);
void sub_8120EE0(u8 taskId);
+void sub_8120FF0(u8 taskId);
+void sub_8120FB0(void);
bool8 sub_8120F78(u8 taskId);
-bool8 sub_81220D4(void);
+u8 sub_81220D4(void);
void sub_8122084(u8 windowId, const u8 *str);
void sub_8122110(u8 windowId);
+void sub_812358C(void);
void CreateSelectionWindow(void);
+bool8 ShouldUseChooseMonText(void);
+void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon);
+void SpriteCB_UpdatePartyMonIcon(struct Sprite *sprite);
+void SpriteCB_BouncePartyMonIcon(struct Sprite *sprite);
+void SpriteCB_HeldItem(struct Sprite *sprite);
+void UpdatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox);
+void CreateHeldItemSpriteForTrade(u8 spriteId, bool8 isMail);
+void SetPartyMonAilmentGfx(struct Pokemon *mon, struct PartyMenuBox *menuBox);
+void UpdatePartyMonAilmentGfx(u8 status, struct PartyMenuBox *menuBox);
+void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId);
+u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *mon);
+u8 GetPartySlotEntryStatus(s8 slot);
+void Task_HandleSelectionMenuInput(u8 taskId);
+void CB2_ShowPokemonSummaryScreen(void);
+void CB2_ReturnToPartyMenuFromSummaryScreen(void);
+void UpdatePartyToBattleOrder(void);
+void SlidePartyMenuBoxOneStep(u8 taskId);
+void Task_SlideSelectedSlotsOffscreen(u8 taskId);
+void SwitchPartyMon(void);
+void Task_SlideSelectedSlotsOnscreen(u8 taskId);
+void CB2_WriteMailToGiveMon(void);
+void Task_SwitchHoldItemsPrompt(u8 taskId);
+void Task_GiveHoldItem(u8 taskId);
+void Task_UpdateHeldItemSprite(u8 taskId);
EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL;
EWRAM_DATA struct PartyMenu gPartyMenu = {0};
@@ -1936,24 +1967,1432 @@ void sub_8120EE0(u8 taskId)
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:
+ break;
+ }
+ ++data[0];
+ }
+}
+
+bool8 sub_8120F78(u8 taskId)
+{
+ if (JOY_NEW(B_BUTTON))
+ {
+ sPartyMenuInternal->exitCallback = sub_8120FB0;
+ Task_ClosePartyMenu(taskId);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_8120FB0(void)
+{
+ FreeRestoreBattleData();
+ LoadPlayerParty();
+ SetTeachyTvControllerModeToResume();
+ SetMainCallback2(CB2_ReturnToTeachyTV);
+}
+
+void sub_8120FCC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[0] = 0;
+ gTasks[taskId].func = sub_8120FF0;
+}
+
+void sub_8120FF0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE)
+ {
+ if (data[0] != 80)
+ {
++data[0];
+ }
+ else
+ {
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText);
+ }
+ }
+}
+
+void InitPartyMenuWindows(u8 layout)
+{
+ u8 i;
+
+ switch (layout)
+ {
+ case PARTY_LAYOUT_SINGLE:
+ InitWindows(sSinglePartyMenuWindowTemplate);
+ break;
+ case PARTY_LAYOUT_DOUBLE:
+ InitWindows(sDoublePartyMenuWindowTemplate);
+ break;
+ case PARTY_LAYOUT_MULTI:
+ InitWindows(sMultiPartyMenuWindowTemplate);
+ break;
+ default: // PARTY_LAYOUT_MULTI_SHOWCASE
+ InitWindows(sShowcaseMultiPartyMenuWindowTemplate);
+ break;
+ }
+ DeactivateAllTextPrinters();
+ for (i = 0; i < PARTY_SIZE; ++i)
+ FillWindowPixelBuffer(i, PIXEL_FILL(0));
+ TextWindow_SetUserSelectedFrame(0, 0x4F, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(0, 0x58, 0xF0);
+ LoadPalette(stdpal_get(2), 0xC0, 0x20);
+ LoadPalette(stdpal_get(0), 0xE0, 0x20);
+}
+
+void CreateCancelConfirmWindows(bool8 chooseHalf)
+{
+ u8 confirmWindowId;
+ u8 cancelWindowId;
+ u8 offset;
+
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ {
+ if (chooseHalf == TRUE)
+ {
+ confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate);
+ FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0));
+ AddTextPrinterParameterized4(confirmWindowId, 0, (48 - GetStringWidth(0, gMenuText_Confirm, 0)) / 2u, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm);
+ PutWindowTilemap(confirmWindowId);
+ CopyWindowToVram(confirmWindowId, 2);
+ cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate);
+ offset = 0;
+ }
+ else
+ {
+ cancelWindowId = AddWindow(&sCancelButtonWindowTemplate);
+ offset = 3;
+ }
+ FillWindowPixelBuffer(cancelWindowId, PIXEL_FILL(0));
+ // Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE)
+ {
+ offset += (48 - GetStringWidth(0, gFameCheckerText_Cancel, 0)) / 2;
+ AddTextPrinterParameterized3(cancelWindowId, 0, offset, 1, sFontColorTable[0], -1, gFameCheckerText_Cancel);
+ }
+ else
+ {
+ offset += (48 - GetStringWidth(0, gOtherText_Exit, 0)) / 2;
+ AddTextPrinterParameterized3(cancelWindowId, 0, offset, 1, sFontColorTable[0], -1, gOtherText_Exit);
+ }
+ PutWindowTilemap(cancelWindowId);
+ CopyWindowToVram(cancelWindowId, 2);
+ ScheduleBgCopyTilemapToVram(0);
+ }
+}
+
+u16 *GetPartyMenuPalBufferPtr(u8 paletteId)
+{
+ return &sPartyMenuInternal->palBuffer[paletteId];
+}
+
+void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, u8 width, u8 height)
+{
+ u8 *pixels = AllocZeroed(height * width * 32);
+ u8 i, j;
+
+ if (pixels != NULL)
+ {
+ for (i = 0; i < height; ++i)
+ for (j = 0; j < width; ++j)
+ CpuCopy16(GetPartyMenuBgTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32);
+ BlitBitmapToWindow(windowId, pixels, x * 8, y * 8, width * 8, height * 8);
+ Free(pixels);
+ }
+}
+
+void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
+{
+ if (width == 0 && height == 0)
+ {
+ width = 10;
+ height = 7;
+ }
+ if (!isEgg)
+ BlitBitmapToPartyWindow(windowId, sMainSlotTileNums, 10, x, y, width, height);
+ else
+ BlitBitmapToPartyWindow(windowId, sMainSlotTileNums_Egg, 10, x, y, width, height);
+}
+
+void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
+{
+ if (width == 0 && height == 0)
+ {
+ width = 18;
+ height = 3;
+ }
+ if (!isEgg)
+ BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums, 18, x, y, width, height);
+ else
+ BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums_Egg, 18, x, y, width, height);
+}
+
+void DrawEmptySlot(u8 windowId)
+{
+ BlitBitmapToPartyWindow(windowId, sEmptySlotTileNums, 18, 0, 0, 18, 3);
+}
+
+#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \
+{ \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, 2); \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, 2); \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, 2); \
+}
+
+void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags)
+{
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
+
+ if (palFlags & PARTY_PAL_TO_SOFTBOIL)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_SWITCHING)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else if (palFlags & PARTY_PAL_TO_SWITCH)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_FAINTED)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionFaintedPalIds, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_MULTI_ALT)
+ {
+ if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionMultiPalIds, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds2, sPartyBoxPalOffsets2);
+ }
+ }
+ else if (palFlags & PARTY_PAL_SELECTED)
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
+ }
+ else
+ {
+ LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds2, sPartyBoxPalOffsets2);
+ }
+}
+
+void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align)
+{
+ AddTextPrinterParameterized3(windowId, 0, align[0], align[1], sFontColorTable[color], 0, str);
+}
+
+void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c == 1)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[0] >> 3, menuBox->infoRects->dimensions[1] >> 3, menuBox->infoRects->dimensions[2] >> 3, menuBox->infoRects->dimensions[3] >> 3, FALSE);
+ GetMonNickname(mon, nickname);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, nickname, 0, menuBox->infoRects->dimensions);
+ }
+}
+
+void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ u8 ailment = GetMonAilment(mon);
+
+ if (ailment == AILMENT_NONE || ailment == AILMENT_PKRS)
+ {
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[4] >> 3, (menuBox->infoRects->dimensions[5] >> 3) + 1, menuBox->infoRects->dimensions[6] >> 3, menuBox->infoRects->dimensions[7] >> 3, FALSE);
+ if (c != 2)
+ DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), menuBox);
+ }
+ }
+}
+
+void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox)
+{
+ ConvertIntToDecimalStringN(gStringVar2, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar1, gText_Lv);
+ StringAppend(gStringVar1, gStringVar2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[4]);
+}
+
+void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ if (c == 1)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[8] >> 3, (menuBox->infoRects->dimensions[9] >> 3) + 1, menuBox->infoRects->dimensions[10] >> 3, menuBox->infoRects->dimensions[11] >> 3, FALSE);
+ GetMonNickname(mon, nickname);
+ DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, menuBox);
+}
+
+void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox)
+{
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
+
+ if (species == SPECIES_NONE)
+ return;
+ if ((species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) && StringCompare(nickname, gSpeciesNames[species]) == 0)
+ return;
+ switch (gender)
+ {
+ case MON_MALE:
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]);
+ break;
+ case MON_FEMALE:
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]);
+ break;
+ }
+}
+
+void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[12] >> 3, (menuBox->infoRects->dimensions[13] >> 3) + 1, menuBox->infoRects->dimensions[14] >> 3, menuBox->infoRects->dimensions[15] >> 3, FALSE);
+ if (c != 2)
+ DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), menuBox);
+ }
+}
+
+void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox)
+{
+ u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, STR_CONV_MODE_RIGHT_ALIGN, 3);
+
+ strOut[0] = CHAR_SLASH;
+ strOut[1] = EOS;
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[12]);
+}
+
+void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, (menuBox->infoRects->dimensions[16] >> 3) + 1, (menuBox->infoRects->dimensions[17] >> 3) + 1, menuBox->infoRects->dimensions[18] >> 3, menuBox->infoRects->dimensions[19] >> 3, FALSE);
+ if (c != 2)
+ DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), menuBox);
+ }
+}
+
+void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox)
+{
+ ConvertIntToDecimalStringN(gStringVar2, maxhp, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringCopy(gStringVar1, gText_Slash);
+ StringAppend(gStringVar1, gStringVar2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[16]);
+}
+
+void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), menuBox);
+}
+
+void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox)
+{
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
+ u8 hpFraction;
+
+ switch (GetHPBarLevel(hp, maxhp))
+ {
+ case HP_BAR_GREEN:
+ case HP_BAR_FULL:
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
+ break;
+ case HP_BAR_YELLOW:
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
+ break;
+ default:
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
+ break;
+ }
+ hpFraction = GetScaledHPFraction(hp, maxhp, menuBox->infoRects->dimensions[22]);
+ FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[1], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21], hpFraction, 1);
+ FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[0], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21] + 1, hpFraction, 2);
+ if (hpFraction != menuBox->infoRects->dimensions[22])
+ {
+ // This appears to be an alternating fill
+ FillWindowPixelRect(menuBox->windowId, 0x0D, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21], menuBox->infoRects->dimensions[22] - hpFraction, 1);
+ FillWindowPixelRect(menuBox->windowId, 0x02, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21] + 1, menuBox->infoRects->dimensions[22] - hpFraction, 2);
+ }
+ CopyWindowToVram(menuBox->windowId, 2);
+}
+
+void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox *menuBox, u8 c)
+{
+ if (c != 0)
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft >> 3, menuBox->infoRects->descTextTop >> 3, menuBox->infoRects->descTextWidth >> 3, menuBox->infoRects->descTextHeight >> 3, TRUE);
+ if (c != 2)
+ AddTextPrinterParameterized3(menuBox->windowId, 1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringId]);
+}
+
+void PartyMenuRemoveWindow(u8 *ptr)
+{
+ if (*ptr != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(*ptr, 0);
+ RemoveWindow(*ptr);
+ *ptr = 0xFF;
+ ScheduleBgCopyTilemapToVram(2);
+ }
+}
+
+void DisplayPartyMenuStdMessage(u32 stringId)
+{
+ u8 *windowPtr = &sPartyMenuInternal->windowId[1];
+
+ if (*windowPtr != 0xFF)
+ PartyMenuRemoveWindow(windowPtr);
+
+ if (stringId != PARTY_MSG_NONE)
+ {
+ switch (stringId)
+ {
+ case PARTY_MSG_DO_WHAT_WITH_MON:
+ *windowPtr = AddWindow(&sDoWhatWithMonMsgWindowTemplate);
+ break;
+ case PARTY_MSG_DO_WHAT_WITH_ITEM:
+ *windowPtr = AddWindow(&sDoWhatWithItemMsgWindowTemplate);
+ break;
+ case PARTY_MSG_DO_WHAT_WITH_MAIL:
+ *windowPtr = AddWindow(&sDoWhatWithMailMsgWindowTemplate);
+ break;
+ case PARTY_MSG_RESTORE_WHICH_MOVE:
+ case PARTY_MSG_BOOST_PP_WHICH_MOVE:
+ *windowPtr = AddWindow(&sWhichMoveMsgWindowTemplate);
+ break;
+ default:
+ *windowPtr = AddWindow(&sDefaultPartyMsgWindowTemplate);
+ break;
+ }
+
+ if (stringId == PARTY_MSG_CHOOSE_MON)
+ {
+ if (sPartyMenuInternal->chooseHalf)
+ stringId = PARTY_MSG_CHOOSE_MON_AND_CONFIRM;
+ else if (!ShouldUseChooseMonText())
+ stringId = PARTY_MSG_CHOOSE_MON_OR_CANCEL;
+ }
+ DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x58, 0xF);
+ StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]);
+ AddTextPrinterParameterized(*windowPtr, 2, gStringVar4, 0, 2, 0, 0);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+}
+
+bool8 ShouldUseChooseMonText(void)
+{
+ struct Pokemon *party = gPlayerParty;
+ u8 i;
+ u8 numAliveMons = 0;
+
+ if (gPartyMenu.action == PARTY_ACTION_SEND_OUT)
+ return TRUE;
+ for (i = 0; i < PARTY_SIZE; ++i)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && (GetMonData(&party[i], MON_DATA_HP) != 0 || GetMonData(&party[i], MON_DATA_IS_EGG)))
+ ++numAliveMons;
+ if (numAliveMons > 1)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u8 DisplaySelectionWindow(u8 windowType)
+{
+ struct WindowTemplate window;
+ u8 cursorDimension;
+ u8 fontAttribute;
+ u8 i;
+
+ switch (windowType)
+ {
+ case SELECTWINDOW_ACTIONS:
+ window = SetWindowTemplateFields(2, 19, 19 - (sPartyMenuInternal->numActions * 2), 10, sPartyMenuInternal->numActions * 2, 14, 0x2BF);
+ break;
+ case SELECTWINDOW_ITEM:
+ window = sItemGiveTakeWindowTemplate;
+ break;
+ case SELECTWINDOW_MAIL:
+ window = sMailReadTakeWindowTemplate;
+ break;
+ default: // SELECTWINDOW_MOVES
+ window = sMoveSelectWindowTemplate;
+ break;
+ }
+ sPartyMenuInternal->windowId[0] = AddWindow(&window);
+ DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
+ if (windowType == SELECTWINDOW_MOVES)
+ return sPartyMenuInternal->windowId[0];
+ cursorDimension = GetMenuCursorDimensionByFont(2, 0);
+ fontAttribute = GetFontAttribute(2, FONTATTR_LETTER_SPACING);
+ for (i = 0; i < sPartyMenuInternal->numActions; ++i)
+ {
+ u8 fontColorsId = (sPartyMenuInternal->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3;
+
+ AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], 2, cursorDimension, (i * 16) + 2, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text);
+ }
+ Menu_InitCursorInternal(sPartyMenuInternal->windowId[0], 2, 0, 2, 16, sPartyMenuInternal->numActions, 0, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ return sPartyMenuInternal->windowId[0];
+}
+
+void PartyMenuPrintText(const u8 *text)
+{
+ DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13);
+ gTextFlags.canABSpeedUpPrint = TRUE;
+ AddTextPrinterParameterized2(6, 2, text, GetTextSpeedSetting(), 0, 2, 1, 3);
+}
+
+void PartyMenuDisplayYesNoMenu(void)
+{
+ CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, 2, 0, 2, 0x4F, 13, 0);
+}
+
+u8 CreateLevelUpStatsWindow(void)
+{
+ sPartyMenuInternal->windowId[0] = AddWindow(&sLevelUpStatsWindowTemplate);
+ DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
+ return sPartyMenuInternal->windowId[0];
+}
+
+void RemoveLevelUpStatsWindow(void)
+{
+ ClearWindowTilemap(sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+}
+
+void sub_8122084(u8 windowId, const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ gTextFlags.canABSpeedUpPrint = TRUE;
+ AddTextPrinterParameterized2(windowId, 4, gStringVar4, GetTextSpeedSetting(), 0, 2, 1, 3);
+}
+
+bool8 sub_81220D4(void)
+{
+ u8 windowId = AddWindow(&gUnknown_845A170);
+
+ TextWindow_LoadResourcesStdFrame0(windowId, 0x4F, 0xE0);
+ DrawDialogFrameWithCustomTileAndPalette(windowId, 1, 0x4F, 0xE);
+ sub_8122084(windowId, gUnknown_8417457);
+ return windowId;
+}
+
+void sub_8122110(u8 windowId)
+{
+ ClearWindowTilemap(windowId);
+ ClearDialogWindowAndFrameToTransparent(windowId, FALSE);
+ RemoveWindow(windowId);
+ ScheduleBgCopyTilemapToVram(2);
+}
+
+void sub_8122138(u8 action)
+{
+ u8 attr;
+ struct PartyMenuInternal *ptr = sPartyMenuInternal;
+
+ if (action <= 17)
+ {
+ if (ptr->windowId[2] != 0xFF)
+ {
+ ClearWindowTilemap(ptr->windowId[2]);
+ RemoveWindow(ptr->windowId[2]);
+ ptr->windowId[2] = 0xFF;
+ ScheduleBgCopyTilemapToVram(2);
+ }
+ }
+ else
+ {
+ if (ptr->windowId[2] == 0xFF)
+ ptr->windowId[2] = AddWindow(&gUnknown_845A178);
+ sub_8112F18(ptr->windowId[2]);
+ attr = GetFontAttribute(2, FONTATTR_LETTER_SPACING);
+ AddTextPrinterParameterized4(ptr->windowId[2], 2, 3, 6, attr, 0, sFontColorTable[5], 0, sHMDescriptionTable[action - 18]);
+ PutWindowTilemap(ptr->windowId[2]);
+ ScheduleBgCopyTilemapToVram(2);
+ }
+}
+
+void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot)
+{
+ bool32 handleDeoxys = TRUE;
+ u16 species2;
+
+ // If in a multi battle, show partners Deoxys icon as Normal forme
+ if (IsMultiBattle() == TRUE && gMain.inBattle)
+ handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE;
+ species2 = GetMonData(mon, MON_DATA_SPECIES2);
+ CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys);
+ UpdatePartyMonHPBar(menuBox->monSpriteId, mon);
+}
+
+void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->monSpriteId = CreateMonIcon(species, SpriteCB_MonIcon, menuBox->spriteCoords[0], menuBox->spriteCoords[1], 4, pid, handleDeoxys);
+ gSprites[menuBox->monSpriteId].oam.priority = priority;
+ }
+}
+
+void UpdateHPBar(u8 spriteId, u16 hp, u16 maxhp)
+{
+ switch (GetHPBarLevel(hp, maxhp))
+ {
+ case HP_BAR_FULL:
+ SetPartyHPBarSprite(&gSprites[spriteId], 0);
+ break;
+ case HP_BAR_GREEN:
+ SetPartyHPBarSprite(&gSprites[spriteId], 1);
+ break;
+ case HP_BAR_YELLOW:
+ SetPartyHPBarSprite(&gSprites[spriteId], 2);
+ break;
+ case HP_BAR_RED:
+ SetPartyHPBarSprite(&gSprites[spriteId], 3);
+ break;
+ default:
+ SetPartyHPBarSprite(&gSprites[spriteId], 4);
+ break;
+ }
+}
+
+void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon)
+{
+ UpdateHPBar(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP));
+}
+
+void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum)
+{
+ gSprites[spriteId].data[0] = 0;
+ if (animNum == 0)
+ {
+ if (gSprites[spriteId].pos1.x == 16)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = -4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -4;
+ gSprites[spriteId].pos2.y = 0;
+ }
+ gSprites[spriteId].callback = SpriteCB_UpdatePartyMonIcon;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId].callback = SpriteCB_BouncePartyMonIcon;
+ }
+}
+
+void SpriteCB_BouncePartyMonIcon(struct Sprite *sprite)
+{
+ u8 animCmd = UpdateMonIconFrame(sprite);
+
+ if (animCmd != 0)
+ {
+ if (animCmd & 1) // % 2 also matches
+ sprite->pos2.y = -3;
+ else
+ sprite->pos2.y = 1;
+ }
+}
+
+void SpriteCB_UpdatePartyMonIcon(struct Sprite *sprite)
+{
+ UpdateMonIconFrame(sprite);
+}
+
+void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0);
+ UpdatePartyMonHeldItemSprite(mon, menuBox);
+ }
+}
+
+void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0);
+ gSprites[menuBox->itemSpriteId].oam.priority = 0;
+ ShowOrHideHeldItemSprite(item, menuBox);
+ }
+}
+
+void UpdatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ ShowOrHideHeldItemSprite(GetMonData(mon, MON_DATA_HELD_ITEM), menuBox);
+}
+
+void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox)
+{
+ if (item == ITEM_NONE)
+ {
+ gSprites[menuBox->itemSpriteId].invisible = TRUE;
+ }
+ else
+ {
+ if (ItemIsMail(item))
+ StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 1);
+ else
+ StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 0);
+ gSprites[menuBox->itemSpriteId].invisible = FALSE;
+ }
+}
+
+void LoadHeldItemIcons(void)
+{
+ LoadSpriteSheet(&sSpriteSheet_HeldItem);
+ LoadSpritePalette(&sSpritePalette_HeldItem);
+}
+
+void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty)
+{
+ u16 i;
+ u16 item;
+
+ switch (whichParty)
+ {
+ case TRADE_PLAYER:
+ for (i = 0; i < partyCounts[TRADE_PLAYER]; ++i)
+ {
+ item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ CreateHeldItemSpriteForTrade(partySpriteIds[i], ItemIsMail(item));
+ }
+ break;
+ case TRADE_PARTNER:
+ for (i = 0; i < partyCounts[TRADE_PARTNER]; ++i)
+ {
+ item = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ CreateHeldItemSpriteForTrade(partySpriteIds[i + PARTY_SIZE], ItemIsMail(item));
+ }
+ break;
+ }
+}
+
+void CreateHeldItemSpriteForTrade(u8 spriteId, bool8 isMail)
+{
+ u8 subpriority = gSprites[spriteId].subpriority;
+ u8 newSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, 250, 170, subpriority - 1);
+
+ gSprites[newSpriteId].pos2.x = 4;
+ gSprites[newSpriteId].pos2.y = 10;
+ gSprites[newSpriteId].callback = SpriteCB_HeldItem;
+ gSprites[newSpriteId].data[7] = spriteId;
+ StartSpriteAnim(&gSprites[newSpriteId], isMail);
+ gSprites[newSpriteId].callback(&gSprites[newSpriteId]);
+}
+
+void SpriteCB_HeldItem(struct Sprite *sprite)
+{
+ u8 otherSpriteId = sprite->data[7];
+
+ if (gSprites[otherSpriteId].invisible)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->pos1.x = gSprites[otherSpriteId].pos1.x + gSprites[otherSpriteId].pos2.x;
+ sprite->pos1.y = gSprites[otherSpriteId].pos1.y + gSprites[otherSpriteId].pos2.y;
+ }
+}
+
+void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8);
+}
+
+void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8);
+ gSprites[menuBox->pokeballSpriteId].oam.priority = 0;
+ }
+}
+
+// For Cancel when Confirm isnt present
+u8 CreatePokeballButtonSprite(u8 x, u8 y)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, x, y, 8);
+
+ gSprites[spriteId].oam.priority = 2;
+ return spriteId;
+}
+
+// For Confirm and Cancel when both are present
+u8 CreateSmallPokeballButtonSprite(u8 x, u8 y)
+{
+ return CreateSprite(&sSpriteTemplate_MenuPokeballSmall, x, y, 8);
+}
+
+void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum)
+{
+ StartSpriteAnim(&gSprites[spriteId], animNum);
+}
+
+// Unused. Might explain the large blank section in gPartyMenuPokeballSmall_Gfx
+// At the very least this is how the unused anim cmds for sSpriteAnimTable_MenuPokeballSmall were meant to be accessed
+void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum)
+{
+ if (animNum == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ StartSpriteAnim(&gSprites[spriteId2], 4);
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId2].pos2.y = 0;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 3);
+ StartSpriteAnim(&gSprites[spriteId2], 5);
+ gSprites[spriteId].pos2.y = -4;
+ gSprites[spriteId2].pos2.y = 4;
+ }
+}
+
+void LoadPartyMenuPokeballGfx(void)
+{
+ LoadCompressedSpriteSheet(&sSpriteSheet_MenuPokeball);
+ LoadCompressedSpriteSheet(&sSpriteSheet_MenuPokeballSmall);
+ LoadCompressedSpritePalette(&sSpritePalette_MenuPokeball);
+}
+
+void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0);
+ SetPartyMonAilmentGfx(mon, menuBox);
+ }
+}
+
+void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox)
+{
+ if (species != SPECIES_NONE)
+ {
+ menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0);
+ UpdatePartyMonAilmentGfx(status, menuBox);
+ gSprites[menuBox->statusSpriteId].oam.priority = 0;
+ }
+}
+
+void SetPartyMonAilmentGfx(struct Pokemon *mon, struct PartyMenuBox *menuBox)
+{
+ UpdatePartyMonAilmentGfx(GetMonAilment(mon), menuBox);
+}
+
+void UpdatePartyMonAilmentGfx(u8 status, struct PartyMenuBox *menuBox)
+{
+ switch (status)
+ {
+ case AILMENT_NONE:
+ case AILMENT_PKRS:
+ gSprites[menuBox->statusSpriteId].invisible = TRUE;
+ break;
+ default:
+ StartSpriteAnim(&gSprites[menuBox->statusSpriteId], status - 1);
+ gSprites[menuBox->statusSpriteId].invisible = FALSE;
+ break;
+ }
+}
+
+void LoadPartyMenuAilmentGfx(void)
+{
+ LoadCompressedSpriteSheet(&sSpriteSheet_StatusIcons);
+ LoadCompressedSpritePalette(&sSpritePalette_StatusIcons);
+}
+
+void SetPartyMonSelectionActions(struct Pokemon *mons, u8 slotId, u8 action)
+{
+ u8 i;
+
+ if (action == ACTIONS_NONE)
+ {
+ SetPartyMonFieldSelectionActions(mons, slotId);
+ }
+ else
+ {
+ sPartyMenuInternal->numActions = sPartyMenuActionCounts[action];
+ for (i = 0; i < sPartyMenuInternal->numActions; ++i)
+ sPartyMenuInternal->actions[i] = sPartyMenuActions[action][i];
+ }
+}
+
+void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId)
+{
+ u8 i, j;
+
+ sPartyMenuInternal->numActions = 0;
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SUMMARY);
+ // Add field moves to action list
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ for (j = 0; sFieldMoves[j] != FIELD_MOVE_END; ++j)
+ {
+ if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j])
+ {
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, j + MENU_FIELD_MOVES);
+ break;
+ }
+ }
+ }
+ if (GetMonData(&mons[1], MON_DATA_SPECIES) != SPECIES_NONE)
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SWITCH);
+ if (ItemIsMail(GetMonData(&mons[slotId], MON_DATA_HELD_ITEM)))
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_MAIL);
+ else
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_ITEM);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_CANCEL1);
+}
+
+u8 GetPartyMenuActionsType(struct Pokemon *mon)
+{
+ u32 actionType;
+
+ switch (gPartyMenu.menuType)
+ {
+ case PARTY_MENU_TYPE_FIELD:
+ if (GetMonData(mon, MON_DATA_IS_EGG))
+ actionType = ACTIONS_SWITCH;
+ else
+ actionType = ACTIONS_NONE; // actions populated by SetPartyMonFieldSelectionActions
+ break;
+ case PARTY_MENU_TYPE_IN_BATTLE:
+ actionType = GetPartyMenuActionsTypeInBattle(mon);
+ break;
+ case PARTY_MENU_TYPE_CHOOSE_HALF:
+ switch (GetPartySlotEntryStatus(gPartyMenu.slotId))
+ {
+ default: // Not eligible
+ actionType = ACTIONS_SUMMARY_ONLY;
+ break;
+ case 0: // Eligible
+ actionType = ACTIONS_ENTER;
+ break;
+ case 1: // Already selected
+ actionType = ACTIONS_NO_ENTRY;
break;
}
+ break;
+ case PARTY_MENU_TYPE_DAYCARE:
+ actionType = (GetMonData(mon, MON_DATA_IS_EGG)) ? ACTIONS_SUMMARY_ONLY : ACTIONS_STORE;
+ break;
+ case PARTY_MENU_TYPE_UNION_ROOM_REGISTER:
+ actionType = ACTIONS_REGISTER;
+ break;
+ case PARTY_MENU_TYPE_UNION_ROOM_TRADE:
+ actionType = ACTIONS_TRADE;
+ break;
+ case PARTY_MENU_TYPE_SPIN_TRADE:
+ actionType = ACTIONS_SPIN_TRADE;
+ break;
+ // The following have no selection actions (i.e. they exit immediately upon selection)
+ // PARTY_MENU_TYPE_CONTEST
+ // PARTY_MENU_TYPE_CHOOSE_MON
+ // PARTY_MENU_TYPE_MULTI_SHOWCASE
+ // PARTY_MENU_TYPE_MOVE_RELEARNER
+ // PARTY_MENU_TYPE_MINIGAME
+ default:
+ actionType = ACTIONS_NONE;
+ break;
+ }
+ return actionType;
+}
+
+void CreateSelectionWindow(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+
+ GetMonNickname(mon, gStringVar1);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon));
+ DisplaySelectionWindow(SELECTWINDOW_ACTIONS);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON);
+}
+
+void Task_TryCreateSelectionWindow(u8 taskId)
+{
+ CreateSelectionWindow();
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
+}
+
+void Task_HandleSelectionMenuInput(u8 taskId)
+{
+ if (!gPaletteFade.active && sub_80BF748() != TRUE)
+ {
+ s8 input;
+ s16 *data = gTasks[taskId].data;
+
+ if (sPartyMenuInternal->numActions <= 3)
+ input = Menu_ProcessInputNoWrapAround_other();
+ else
+ input = Menu_ProcessInput_other();
+ if (data[0] != Menu_GetCursorPos())
+ sub_8122138(sPartyMenuInternal->actions[Menu_GetCursorPos()]);
+ data[0] = Menu_GetCursorPos();
+ switch (input)
+ {
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[sPartyMenuInternal->numActions - 1]].func(taskId);
+ break;
+ default:
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[input]].func(taskId);
+ break;
+ }
+ }
+}
+
+void CursorCB_Summary(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sPartyMenuInternal->exitCallback = CB2_ShowPokemonSummaryScreen;
+ Task_ClosePartyMenu(taskId);
+}
+
+void CB2_ShowPokemonSummaryScreen(void)
+{
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ UpdatePartyToBattleOrder();
+ ShowPokemonSummaryScreen(gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen, 0);
+}
+
+void CB2_ReturnToPartyMenuFromSummaryScreen(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gPartyMenu.slotId = GetLastViewedMonIndex();
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
+}
+
+void CursorCB_Switch(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gPartyMenu.action = PARTY_ACTION_SWITCH;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuStdMessage(PARTY_MSG_MOVE_TO_WHERE);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ gPartyMenu.slotId2 = gPartyMenu.slotId;
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+#define tSlot1Left data[0]
+#define tSlot1Top data[1]
+#define tSlot1Width data[2]
+#define tSlot1Height data[3]
+#define tSlot2Left data[4]
+#define tSlot2Top data[5]
+#define tSlot2Width data[6]
+#define tSlot2Height data[7]
+#define tSlot1Offset data[8]
+#define tSlot2Offset data[9]
+#define tSlot1SlideDir data[10]
+#define tSlot2SlideDir data[11]
+
+void SwitchSelectedMons(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 windowIds[2];
+
+ if (gPartyMenu.slotId2 == gPartyMenu.slotId)
+ {
+ FinishTwoMonAction(taskId);
+ }
+ else
+ {
+ // Initialize switching party mons slide animation
+ sub_812358C();
+ windowIds[0] = sPartyMenuBoxes[gPartyMenu.slotId].windowId;
+ tSlot1Left = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT);
+ tSlot1Top = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP);
+ tSlot1Width = GetWindowAttribute(windowIds[0], WINDOW_WIDTH);
+ tSlot1Height = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT);
+ tSlot1Offset = 0;
+ if (tSlot1Width == 10)
+ tSlot1SlideDir = -1;
+ else
+ tSlot1SlideDir = 1;
+ windowIds[1] = sPartyMenuBoxes[gPartyMenu.slotId2].windowId;
+ tSlot2Left = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT);
+ tSlot2Top = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP);
+ tSlot2Width = GetWindowAttribute(windowIds[1], WINDOW_WIDTH);
+ tSlot2Height = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT);
+ tSlot2Offset = 0;
+ if (tSlot2Width == 10)
+ tSlot2SlideDir = -1;
+ else
+ tSlot2SlideDir = 1;
+ sSlot1TilemapBuffer = Alloc(tSlot1Width * (tSlot1Height << 1));
+ sSlot2TilemapBuffer = Alloc(tSlot2Width * (tSlot2Height << 1));
+ CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height);
+ CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height);
+ ClearWindowTilemap(windowIds[0]);
+ ClearWindowTilemap(windowIds[1]);
+ gPartyMenu.action = PARTY_ACTION_SWITCHING;
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ SlidePartyMenuBoxOneStep(taskId);
+ gTasks[taskId].func = Task_SlideSelectedSlotsOffscreen;
+ }
+}
+
+// returns FALSE if the slot has slid fully offscreen / back onscreen
+bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newWidth)
+{
+ if ((x + width) < 0)
+ return FALSE;
+ if (x > 31)
+ return FALSE;
+ if (x < 0)
+ {
+ *leftMove = x * -1;
+ *newX = 0;
+ *newWidth = width + x;
+ }
+ else
+ {
+ *leftMove = 0;
+ *newX = x;
+ if ((x + width) > 31)
+ *newWidth = 32 - x;
+ else
+ *newWidth = width;
+ }
+ return TRUE;
+}
+
+void MoveAndBufferPartySlot(const void *rectSrc, s16 x, s16 y, s16 width, s16 height, s16 dir)
+{
+ // The use of the dimension parameters here is a mess
+ u8 leftMove, newX, newWidth; // leftMove is used as a srcX, newX is used as both x and srcHeight, newWidth is used as both width and destY
+
+ if (TryMovePartySlot(x, width, &leftMove, &newX, &newWidth))
+ {
+ FillBgTilemapBufferRect_Palette0(0, 0, newX, y, newWidth, height);
+ if (TryMovePartySlot(x + dir, width, &leftMove, &newX, &newWidth))
+ CopyRectToBgTilemapBufferRect(0, rectSrc, leftMove, 0, width, height, newX, y, newWidth, height, 17, 0, 0);
+ }
+}
+
+void MovePartyMenuBoxSprites(struct PartyMenuBox *menuBox, s16 offset)
+{
+ gSprites[menuBox->pokeballSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->itemSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->monSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->statusSpriteId].pos2.x += offset * 8;
+}
+
+void SlidePartyMenuBoxSpritesOneStep(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (tSlot1SlideDir != 0)
+ MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId], tSlot1SlideDir);
+ if (tSlot2SlideDir != 0)
+ MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId2], tSlot2SlideDir);
+}
+
+void SlidePartyMenuBoxOneStep(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (tSlot1SlideDir != 0)
+ MoveAndBufferPartySlot(sSlot1TilemapBuffer, tSlot1Left + tSlot1Offset, tSlot1Top, tSlot1Width, tSlot1Height, tSlot1SlideDir);
+ if (tSlot2SlideDir != 0)
+ MoveAndBufferPartySlot(sSlot2TilemapBuffer, tSlot2Left + tSlot2Offset, tSlot2Top, tSlot2Width, tSlot2Height, tSlot2SlideDir);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+void Task_SlideSelectedSlotsOffscreen(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 slidingSlotPositions[2];
+
+ SlidePartyMenuBoxOneStep(taskId);
+ SlidePartyMenuBoxSpritesOneStep(taskId);
+ tSlot1Offset += tSlot1SlideDir;
+ tSlot2Offset += tSlot2SlideDir;
+ slidingSlotPositions[0] = tSlot1Left + tSlot1Offset;
+ slidingSlotPositions[1] = tSlot2Left + tSlot2Offset;
+ // Both slots have slid offscreen
+ if (slidingSlotPositions[0] > 33 && slidingSlotPositions[1] > 33)
+ {
+ tSlot1SlideDir *= -1;
+ tSlot2SlideDir *= -1;
+ SwitchPartyMon();
+ DisplayPartyPokemonData(gPartyMenu.slotId);
+ DisplayPartyPokemonData(gPartyMenu.slotId2);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height);
+ CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height);
+ ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ gTasks[taskId].func = Task_SlideSelectedSlotsOnscreen;
+ }
+}
+
+void Task_SlideSelectedSlotsOnscreen(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ SlidePartyMenuBoxOneStep(taskId);
+ SlidePartyMenuBoxSpritesOneStep(taskId);
+
+ // Both slots have slide back onscreen
+ if (tSlot1SlideDir == 0 && tSlot2SlideDir == 0)
+ {
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ ScheduleBgCopyTilemapToVram(0);
+ // memory leak
+ // Free(sSlot1TilemapBuffer);
+ // Free(sSlot2TilemapBuffer);
+ FinishTwoMonAction(taskId);
+ }
+ // Continue sliding
+ else
+ {
+ tSlot1Offset += tSlot1SlideDir;
+ tSlot2Offset += tSlot2SlideDir;
+ if (tSlot1Offset == 0)
+ tSlot1SlideDir = 0;
+ if (tSlot2Offset == 0)
+ tSlot2SlideDir = 0;
+ }
+}
+
+void SwitchMenuBoxSprites(u8 *spriteIdPtr1, u8 *spriteIdPtr2)
+{
+ u8 spriteIdBuffer = *spriteIdPtr1;
+ u16 xBuffer1, yBuffer1, xBuffer2, yBuffer2;
+
+ *spriteIdPtr1 = *spriteIdPtr2;
+ *spriteIdPtr2 = spriteIdBuffer;
+ xBuffer1 = gSprites[*spriteIdPtr1].pos1.x;
+ yBuffer1 = gSprites[*spriteIdPtr1].pos1.y;
+ xBuffer2 = gSprites[*spriteIdPtr1].pos2.x;
+ yBuffer2 = gSprites[*spriteIdPtr1].pos2.y;
+ gSprites[*spriteIdPtr1].pos1.x = gSprites[*spriteIdPtr2].pos1.x;
+ gSprites[*spriteIdPtr1].pos1.y = gSprites[*spriteIdPtr2].pos1.y;
+ gSprites[*spriteIdPtr1].pos2.x = gSprites[*spriteIdPtr2].pos2.x;
+ gSprites[*spriteIdPtr1].pos2.y = gSprites[*spriteIdPtr2].pos2.y;
+ gSprites[*spriteIdPtr2].pos1.x = xBuffer1;
+ gSprites[*spriteIdPtr2].pos1.y = yBuffer1;
+ gSprites[*spriteIdPtr2].pos2.x = xBuffer2;
+ gSprites[*spriteIdPtr2].pos2.y = yBuffer2;
+}
+
+void SwitchPartyMon(void)
+{
+ struct PartyMenuBox *menuBoxes[2];
+ struct Pokemon *mon1, *mon2;
+ struct Pokemon *monBuffer;
+
+ menuBoxes[0] = &sPartyMenuBoxes[gPartyMenu.slotId];
+ menuBoxes[1] = &sPartyMenuBoxes[gPartyMenu.slotId2];
+ mon1 = &gPlayerParty[gPartyMenu.slotId];
+ mon2 = &gPlayerParty[gPartyMenu.slotId2];
+ monBuffer = Alloc(sizeof(struct Pokemon));
+ *monBuffer = *mon1;
+ *mon1 = *mon2;
+ *mon2 = *monBuffer;
+ Free(monBuffer);
+ SwitchMenuBoxSprites(&menuBoxes[0]->pokeballSpriteId, &menuBoxes[1]->pokeballSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->itemSpriteId, &menuBoxes[1]->itemSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->monSpriteId, &menuBoxes[1]->monSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->statusSpriteId, &menuBoxes[1]->statusSpriteId);
+}
+
+void sub_812358C(void)
+{
+ u16 *buffer = Alloc(2 * sizeof(u16));
+
+ buffer[0] = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
+ buffer[1] = GetMonData(&gPlayerParty[gPartyMenu.slotId2], MON_DATA_SPECIES2);
+ sub_8113550(3, buffer);
+ Free(buffer);
+}
+
+// Finish switching mons or using Softboiled
+void FinishTwoMonAction(u8 taskId)
+{
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ gPartyMenu.action = PARTY_ACTION_CHOOSE_MON;
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = gPartyMenu.slotId2;
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+#undef tSlot1Left
+#undef tSlot1Top
+#undef tSlot1Width
+#undef tSlot1Height
+#undef tSlot2Left
+#undef tSlot2Top
+#undef tSlot2Width
+#undef tSlot2Height
+#undef tSlot1Offset
+#undef tSlot2Offset
+#undef tSlot1SlideDir
+#undef tSlot2SlideDir
+
+void CursorCB_Cancel1(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_DAYCARE)
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON_2);
+ else
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+void CursorCB_Item(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_ITEM);
+ DisplaySelectionWindow(SELECTWINDOW_ITEM);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_ITEM);
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
+}
+
+void CursorCB_Give(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sPartyMenuInternal->exitCallback = CB2_SelectBagItemToGive;
+ Task_ClosePartyMenu(taskId);
+}
+
+void CB2_SelectBagItemToGive(void)
+{
+ GoToBagMenu(1, 3, CB2_GiveHoldItem);
+}
+
+void CB2_GiveHoldItem(void)
+{
+ if (gSpecialVar_ItemId == ITEM_NONE)
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
+ }
+ else
+ {
+ sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
+ // Already holding item
+ if (sPartyMenuItemId != ITEM_NONE)
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_SwitchHoldItemsPrompt, gPartyMenu.exitCallback);
+ }
+ // Give mail
+ else if (ItemIsMail(gSpecialVar_ItemId))
+ {
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ CB2_WriteMailToGiveMon();
+ }
+ // Give item
+ else
+ {
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_GiveHoldItem, gPartyMenu.exitCallback);
+ }
+ }
+}
+
+void Task_GiveHoldItem(u8 taskId)
+{
+ u16 item;
+
+ if (!gPaletteFade.active)
+ {
+ item = gSpecialVar_ItemId;
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 0);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
+ RemoveBagItem(item, 1);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index f3492593c..4c7681231 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1276,7 +1276,7 @@ static void DestroyMonIconInternal(struct Sprite * sprite)
DestroySprite(sprite);
}
-void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum)
+void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum)
{
sprite->animNum = animNum;
sprite->animDelayCounter = 0;
diff --git a/src/quest_log.c b/src/quest_log.c
index 9683d7799..04369f1c2 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -1972,15 +1972,15 @@ void DestroyHelpMessageWindow(u8 a0)
}
#ifdef NONMATCHING
-void sub_8112F18(u8 a0)
+void sub_8112F18(u8 windowId)
{
- u8 width = GetWindowAttribute(a0, WINDOW_WIDTH);
- u8 height = GetWindowAttribute(a0, WINDOW_HEIGHT);
+ u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
+ u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
u8 *buffer = Alloc(32 * width * height);
u8 i, j;
u8 k;
- if (buffer)
+ if (buffer != NULL)
{
for (i = 0; i < height; i++)
{
@@ -1999,13 +1999,13 @@ void sub_8112F18(u8 a0)
);
}
}
- CopyToWindowPixelBuffer(a0, buffer, width * height * 32, 0);
+ CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0);
Free(buffer);
}
}
#else
NAKED
-void sub_8112F18(u8 a0)
+void sub_8112F18(u8 windowId)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
diff --git a/src/trade.c b/src/trade.c
index 85bd7b2ca..537a5503b 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -2053,9 +2053,9 @@ void sub_804CF14(void)
}
if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6)
- sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20();
+ sTradeMenuResourcesPtr->tradeMenuCursorPosition = GetLastViewedMonIndex();
else
- sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20() + 6;
+ sTradeMenuResourcesPtr->tradeMenuCursorPosition = GetLastViewedMonIndex() + 6;
sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2);
gMain.state = 16;
@@ -2633,14 +2633,14 @@ void sub_804CF14(void)
"\tldrb r0, [r0]\n"
"\tcmp r0, 0x5\n"
"\tbhi _0804D3B8\n"
- "\tbl sub_8138B20\n"
+ "\tbl GetLastViewedMonIndex\n"
"\tldr r1, [r4]\n"
"\tb _0804D3C0\n"
"\t.align 2, 0\n"
"_0804D3B0: .4byte sSpriteTemplate_Text\n"
"_0804D3B4: .4byte sTradeMenuResourcesPtr\n"
"_0804D3B8:\n"
- "\tbl sub_8138B20\n"
+ "\tbl GetLastViewedMonIndex\n"
"\tldr r1, [r4]\n"
"\tadds r0, 0x6\n"
"_0804D3C0:\n"
@@ -4243,7 +4243,7 @@ static void sub_804F964(void)
{
for (j = 0; j < sTradeMenuResourcesPtr->partyCounts[i]; j++)
{
- MonIcon_SetAnim(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->unk_5D[i][j]);
+ SetPartyHPBarSprite(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->unk_5D[i][j]);
}
}
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index e4de1e801..1fc0deab1 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -643,7 +643,7 @@ gUnknown_203B164: @ 203B164
gUnknown_203B168: @ 203B168
.space 0x4
-gUnknown_203B16C: @ 203B16C
+gLastViewedMonIndex: @ 203B16C
.space 0x1
gUnknown_203B16D: @ 203B16D