summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-09-23 15:08:32 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-09-23 20:50:35 -0700
commitc3792f2bd4c6ee3fecea548f45b2a54a9b468ab1 (patch)
tree5df71b16ae1b4330d8dfbfb061841e1412c1a836
parente27de6bda3ab58f4190582532b399620082e385a (diff)
Decompile HeldItemIcon funcs in party_menu
-rw-r--r--asm/party_menu.s709
-rw-r--r--data/party_menu.s2
-rw-r--r--include/party_menu.h6
-rw-r--r--src/battle_party_menu.c2
-rw-r--r--src/choose_party.c2
-rw-r--r--src/party_menu.c410
6 files changed, 413 insertions, 718 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 7839aacb7..2dfba003b 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -5650,713 +5650,4 @@ _0806DA8E:
_0806DA94: .4byte UpdateMonIconFrame_806DA0C
thumb_func_end UpdateMonIconFrame_806DA44
- thumb_func_start LoadHeldItemIconGraphics
-LoadHeldItemIconGraphics: @ 806DA98
- push {lr}
- ldr r0, _0806DAAC @ =gUnknown_083765DC
- bl LoadSpriteSheet
- ldr r0, _0806DAB0 @ =gUnknown_083765E4
- bl LoadSpritePalette
- pop {r0}
- bx r0
- .align 2, 0
-_0806DAAC: .4byte gUnknown_083765DC
-_0806DAB0: .4byte gUnknown_083765E4
- thumb_func_end LoadHeldItemIconGraphics
-
- thumb_func_start SpriteCB_HeldItemIcon
-SpriteCB_HeldItemIcon: @ 806DAB4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x3C]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _0806DAE4 @ =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 _0806DAE8
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0806DB06
- .align 2, 0
-_0806DAE4: .4byte gSprites
-_0806DAE8:
- 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]
-_0806DB06:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_HeldItemIcon
-
- thumb_func_start CreateHeldItemIcon
-CreateHeldItemIcon: @ 806DB0C
- 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, _0806DB84 @ =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, _0806DB88 @ =gSpriteTemplate_837660C
- 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, _0806DB8C @ =SpriteCB_HeldItemIcon
- 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
-_0806DB84: .4byte gSprites
-_0806DB88: .4byte gSpriteTemplate_837660C
-_0806DB8C: .4byte SpriteCB_HeldItemIcon
- thumb_func_end CreateHeldItemIcon
-
- thumb_func_start CreateHeldItemIcons
-CreateHeldItemIcons: @ 806DB90
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0
- beq _0806DBA4
- cmp r2, 0x1
- beq _0806DBEC
- b _0806DC28
-_0806DBA4:
- movs r5, 0
- ldrb r0, [r6]
- cmp r5, r0
- bcs _0806DC28
-_0806DBAC:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0806DBE8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _0806DBD8
- 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 CreateHeldItemIcon
-_0806DBD8:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrb r0, [r6]
- cmp r5, r0
- bcc _0806DBAC
- b _0806DC28
- .align 2, 0
-_0806DBE8: .4byte gPlayerParty
-_0806DBEC:
- movs r5, 0
- b _0806DC22
-_0806DBF0:
- movs r0, 0x64
- muls r0, r5
- ldr r1, _0806DC30 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _0806DC1C
- 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 CreateHeldItemIcon
-_0806DC1C:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
-_0806DC22:
- ldrb r0, [r6, 0x1]
- cmp r5, r0
- bcc _0806DBF0
-_0806DC28:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DC30: .4byte gEnemyParty
- thumb_func_end CreateHeldItemIcons
-
- thumb_func_start CreateHeldItemIcons_806DC34
-CreateHeldItemIcons_806DC34: @ 806DC34
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r7, 0
- ldr r0, _0806DCC8 @ =gSprites
- mov r9, r0
- movs r1, 0x1C
- add r1, r9
- mov r10, r1
-_0806DC50:
- movs r0, 0x64
- muls r0, r7
- ldr r1, _0806DCCC @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0806DCB0
- mov r0, r8
- adds r1, r7, 0
- bl GetMonIconSpriteId_maybe
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _0806DCD0 @ =gSpriteTemplate_837660C
- movs r1, 0xFA
- movs r2, 0xAA
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- mov r1, r9
- adds r6, r4, r1
- movs r1, 0x4
- strh r1, [r6, 0x24]
- movs r1, 0xA
- strh r1, [r6, 0x26]
- strh r5, [r6, 0x3C]
- lsls r1, r5, 4
- adds r1, r5
- lsls r1, 2
- add r1, r9
- strh r0, [r1, 0x3C]
- mov r0, r8
- adds r1, r7, 0
- bl SetHeldItemIconVisibility
- add r4, r10
- ldr r1, [r4]
- adds r0, r6, 0
- bl _call_via_r1
-_0806DCB0:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x5
- bls _0806DC50
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DCC8: .4byte gSprites
-_0806DCCC: .4byte gPlayerParty
-_0806DCD0: .4byte gSpriteTemplate_837660C
- thumb_func_end CreateHeldItemIcons_806DC34
-
- thumb_func_start CreateHeldItemIcon_806DCD4
-CreateHeldItemIcon_806DCD4: @ 806DCD4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 16
- lsrs r7, r2, 16
- bl GetMonIconSpriteId_maybe
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0806DD2C @ =gSpriteTemplate_837660C
- movs r1, 0xFA
- movs r2, 0xAA
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _0806DD30 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r5, r0, r1
- movs r0, 0x4
- strh r0, [r5, 0x24]
- movs r0, 0xA
- strh r0, [r5, 0x26]
- strh r4, [r5, 0x3C]
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- strh r6, [r0, 0x3C]
- cmp r7, 0
- bne _0806DD34
- adds r0, r5, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0806DD5C
- .align 2, 0
-_0806DD2C: .4byte gSpriteTemplate_837660C
-_0806DD30: .4byte gSprites
-_0806DD34:
- adds r0, r7, 0
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0806DD46
- adds r0, r5, 0
- movs r1, 0x1
- b _0806DD4A
-_0806DD46:
- adds r0, r5, 0
- movs r1, 0
-_0806DD4A:
- bl StartSpriteAnim
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_0806DD5C:
- ldr r2, _0806DD78 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r1, r2, 0
- adds r1, 0x1C
- adds r1, r0, r1
- adds r0, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DD78: .4byte gSprites
- thumb_func_end CreateHeldItemIcon_806DCD4
-
- thumb_func_start SpriteCB_HeldItemIcon_806DD7C
-SpriteCB_HeldItemIcon_806DD7C: @ 806DD7C
- ldrh r2, [r0, 0x3C]
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _0806DD9C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r2, [r1, 0x24]
- ldrh r3, [r1, 0x20]
- adds r2, r3
- strh r2, [r0, 0x20]
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_0806DD9C: .4byte gSprites
- thumb_func_end SpriteCB_HeldItemIcon_806DD7C
-
- thumb_func_start GetMonIconSpriteId_maybe
-GetMonIconSpriteId_maybe: @ 806DDA0
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r0, r1, 24
- cmp r0, 0x5
- bhi _0806DE38
- lsls r0, 2
- ldr r1, _0806DDB8 @ =_0806DDBC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0806DDB8: .4byte _0806DDBC
- .align 2, 0
-_0806DDBC:
- .4byte _0806DE38
- .4byte _0806DDD4
- .4byte _0806DDE8
- .4byte _0806DDFC
- .4byte _0806DE10
- .4byte _0806DE24
-_0806DDD4:
- ldr r0, _0806DDE4 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrb r0, [r1, 0x8]
- b _0806DE46
- .align 2, 0
-_0806DDE4: .4byte gTasks
-_0806DDE8:
- ldr r0, _0806DDF8 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0xA]
- b _0806DE44
- .align 2, 0
-_0806DDF8: .4byte gTasks
-_0806DDFC:
- ldr r0, _0806DE0C @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrb r0, [r1, 0xA]
- b _0806DE46
- .align 2, 0
-_0806DE0C: .4byte gTasks
-_0806DE10:
- ldr r0, _0806DE20 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0xC]
- b _0806DE44
- .align 2, 0
-_0806DE20: .4byte gTasks
-_0806DE24:
- ldr r0, _0806DE34 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrb r0, [r1, 0xC]
- b _0806DE46
- .align 2, 0
-_0806DE34: .4byte gTasks
-_0806DE38:
- ldr r0, _0806DE4C @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
-_0806DE44:
- lsrs r0, 8
-_0806DE46:
- pop {r1}
- bx r1
- .align 2, 0
-_0806DE4C: .4byte gTasks
- thumb_func_end GetMonIconSpriteId_maybe
-
- thumb_func_start SetMonIconSpriteId_maybe
-SetMonIconSpriteId_maybe: @ 806DE50
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r0, r1, 24
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r0, 0x5
- bhi _0806DF24
- lsls r0, 2
- ldr r1, _0806DE6C @ =_0806DE70
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0806DE6C: .4byte _0806DE70
- .align 2, 0
-_0806DE70:
- .4byte _0806DE88
- .4byte _0806DEA0
- .4byte _0806DEC0
- .4byte _0806DED8
- .4byte _0806DEF8
- .4byte _0806DF10
-_0806DE88:
- ldr r1, _0806DE9C @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldrb r1, [r0, 0x8]
- lsls r2, r4, 8
- orrs r1, r2
- strh r1, [r0, 0x8]
- b _0806DF24
- .align 2, 0
-_0806DE9C: .4byte gTasks
-_0806DEA0:
- ldr r0, _0806DEB8 @ =gTasks
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0x8]
- ldr r0, _0806DEBC @ =0xffffff00
- ands r0, r2
- orrs r0, r4
- strh r0, [r1, 0x8]
- b _0806DF24
- .align 2, 0
-_0806DEB8: .4byte gTasks
-_0806DEBC: .4byte 0xffffff00
-_0806DEC0:
- ldr r1, _0806DED4 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldrb r1, [r0, 0xA]
- lsls r2, r4, 8
- orrs r1, r2
- strh r1, [r0, 0xA]
- b _0806DF24
- .align 2, 0
-_0806DED4: .4byte gTasks
-_0806DED8:
- ldr r0, _0806DEF0 @ =gTasks
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0xA]
- ldr r0, _0806DEF4 @ =0xffffff00
- ands r0, r2
- orrs r0, r4
- strh r0, [r1, 0xA]
- b _0806DF24
- .align 2, 0
-_0806DEF0: .4byte gTasks
-_0806DEF4: .4byte 0xffffff00
-_0806DEF8:
- ldr r1, _0806DF0C @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldrb r1, [r0, 0xC]
- lsls r2, r4, 8
- orrs r1, r2
- strh r1, [r0, 0xC]
- b _0806DF24
- .align 2, 0
-_0806DF0C: .4byte gTasks
-_0806DF10:
- ldr r0, _0806DF2C @ =gTasks
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0xC]
- ldr r0, _0806DF30 @ =0xffffff00
- ands r0, r2
- orrs r0, r4
- strh r0, [r1, 0xC]
-_0806DF24:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DF2C: .4byte gTasks
-_0806DF30: .4byte 0xffffff00
- thumb_func_end SetMonIconSpriteId_maybe
-
- thumb_func_start GetHeldItemIconSpriteIdByMon_maybe
-GetHeldItemIconSpriteIdByMon_maybe: @ 806DF34
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- bl GetMonIconSpriteId_maybe
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0806DF5C @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_0806DF5C: .4byte gSprites
- thumb_func_end GetHeldItemIconSpriteIdByMon_maybe
-
- thumb_func_start SetHeldItemIconVisibility
-SetHeldItemIconVisibility: @ 806DF60
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsrs r4, 24
- adds r1, r4, 0
- bl GetHeldItemIconSpriteIdByMon_maybe
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0806DFA4 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- cmp r0, 0
- bne _0806DFAC
- ldr r1, _0806DFA8 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0806DFF6
- .align 2, 0
-_0806DFA4: .4byte gPlayerParty
-_0806DFA8: .4byte gSprites
-_0806DFAC:
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0806DFD8
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r0, _0806DFD4 @ =gSprites
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x1
- b _0806DFE6
- .align 2, 0
-_0806DFD4: .4byte gSprites
-_0806DFD8:
- lsls r4, r6, 4
- adds r4, r6
- lsls r4, 2
- ldr r0, _0806DFFC @ =gSprites
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0
-_0806DFE6:
- bl StartSpriteAnim
- adds r4, 0x3E
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
-_0806DFF6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806DFFC: .4byte gSprites
- thumb_func_end SetHeldItemIconVisibility
-
.align 2, 0 @ Don't pad with nop.
diff --git a/data/party_menu.s b/data/party_menu.s
index 5596ff2ed..0911ac987 100644
--- a/data/party_menu.s
+++ b/data/party_menu.s
@@ -102,7 +102,7 @@ gSpriteAnimTable_8376604:: @ 8376604
.align 2
gSpriteTemplate_837660C:: @ 837660C
- spr_template 55120, 55120, gOamData_83765EC, gSpriteAnimTable_8376604, NULL, gDummySpriteAffineAnimTable, SpriteCB_HeldItemIcon_806DD7C
+ spr_template 55120, 55120, gOamData_83765EC, gSpriteAnimTable_8376604, NULL, gDummySpriteAffineAnimTable, SpriteCB_UpdateHeldItemIconPosition
.align 2
gUnknown_08376624:: @ 8376624
diff --git a/include/party_menu.h b/include/party_menu.h
index cc1f9f772..cf6d06650 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -97,10 +97,8 @@ void SetMonIconAnim();
void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *);
void LoadHeldItemIconGraphics(void);
void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c);
-void CreateHeldItemIcons_806DC34(); // undefined args
-void CreateHeldItemIcons_806DC34();
-u8 GetMonIconSpriteId_maybe();
-void SetHeldItemIconVisibility();
+void CreateHeldItemIcons_806DC34(u8 taskId);
+void SetHeldItemIconVisibility(u8 a, u8 monIndex);
void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer);
void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon);
void PrintPartyMenuMonNicknames(void);
diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c
index e80737210..f8f43e2bd 100644
--- a/src/battle_party_menu.c
+++ b/src/battle_party_menu.c
@@ -24,8 +24,6 @@ extern u8 ewram[];
extern u8 IsLinkDoubleBattle(void);
extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *);
-extern void LoadHeldItemIconGraphics(void);
-extern void CreateHeldItemIcons_806DC34();
extern u8 sub_806BD58(u8, u8);
extern void PartyMenuPrintMonsLevelOrStatus(void);
extern void nullsub_13(void);
diff --git a/src/choose_party.c b/src/choose_party.c
index 6e2d2382a..aa2e04f03 100644
--- a/src/choose_party.c
+++ b/src/choose_party.c
@@ -44,8 +44,6 @@ EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0};
extern void OpenPartyMenu();
extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *);
-extern void LoadHeldItemIconGraphics(void);
-extern void CreateHeldItemIcons_806DC34();
extern u8 sub_806BD58(u8, u8);
extern void PartyMenuPrintMonsLevelOrStatus(void);
extern void sub_806BC3C(u8, u8);
diff --git a/src/party_menu.c b/src/party_menu.c
index 10b2719e4..48576a156 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -85,11 +85,14 @@ extern u16 *const gUnknown_08376858[][6];
extern const u8 gUnknown_083769A8[];
extern const u8 gUnknown_08376D1C[NUM_STATS];
extern const u16 gUnknown_08376504[];
+extern const struct SpriteSheet gUnknown_083765DC;
+extern const struct SpritePalette gUnknown_083765E4;
extern void (*const gUnknown_08376B54[])(u8);
extern const u8 *const gUnknown_08376D04[NUM_STATS];
extern const struct UnknownStruct5 gUnknown_08376BB4[][6];
extern u8 gUnknown_02039460[];
extern u8 gTileBuffer[];
+extern const struct SpriteTemplate gSpriteTemplate_837660C[];
static void sub_806E884(u8 taskId);
static void sub_8070D90(u8 taskId);
@@ -118,6 +121,413 @@ void sub_806AEDC(void)
#define WINDOW_RIGHT (29)
#endif
+extern u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex);
+
+
+void LoadHeldItemIconGraphics(void)
+{
+ LoadSpriteSheet(&gUnknown_083765DC);
+ LoadSpritePalette(&gUnknown_083765E4);
+}
+
+void SpriteCB_HeldItemIcon(struct Sprite *sprite)
+{
+
+ u8 data7 = sprite->data7;
+ if (gSprites[data7].invisible)
+ {
+ sprite->invisible = 1;
+ }
+ else
+ {
+ sprite->invisible = 0;
+ sprite->pos1.x = gSprites[data7].pos1.x + gSprites[data7].pos2.x;
+ sprite->pos1.y = gSprites[data7].pos1.y + gSprites[data7].pos2.y;
+ }
+}
+
+void CreateHeldItemIcon(u8 a, u8 b)
+{
+ u8 subPriority;
+ u8 spriteId;
+
+ subPriority = gSprites[a].subpriority;
+ spriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, subPriority - 1);
+
+ gSprites[spriteId].pos2.x = 4;
+ gSprites[spriteId].pos2.y = 10;
+ gSprites[spriteId].callback = SpriteCB_HeldItemIcon;
+ gSprites[spriteId].data7 = a;
+
+ StartSpriteAnim(&gSprites[spriteId], b);
+ gSprites[spriteId].callback(&gSprites[spriteId]);
+}
+
+void CreateHeldItemIcons(u8 *a, u8 *b, u8 c)
+{
+ u16 i;
+ u16 heldItem;
+
+ switch(c)
+ {
+ case 0:
+ i = 0;
+ while (i < a[0])
+ {
+ heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (heldItem)
+ {
+ CreateHeldItemIcon(b[i], ItemIsMail(heldItem));
+ }
+
+ i++;
+ }
+ break;
+ case 1:
+ i = 0;
+ while (i < a[1])
+ {
+ heldItem = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM);
+ if (heldItem)
+ {
+ CreateHeldItemIcon(b[i + 6], ItemIsMail(heldItem));
+ }
+
+ i++;
+ }
+ break;
+ }
+}
+
+void CreateHeldItemIcons_806DC34(u8 taskId)
+{
+ u8 i;
+ u8 monIconSpriteId;
+ u8 heldItemSpriteId;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
+ {
+ monIconSpriteId = GetMonIconSpriteId_maybe(taskId, i);
+ heldItemSpriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, 4);
+
+ gSprites[heldItemSpriteId].pos2.x = 4;
+ gSprites[heldItemSpriteId].pos2.y = 10;
+ gSprites[heldItemSpriteId].data7 = monIconSpriteId;
+ gSprites[monIconSpriteId].data7 = heldItemSpriteId;
+
+ SetHeldItemIconVisibility(taskId, i);
+ gSprites[heldItemSpriteId].callback(&gSprites[heldItemSpriteId]);
+ }
+ }
+}
+
+#ifdef NONMATCHING
+void CreateHeldItemIcon_806DCD4(int taskId, u8 monIndex, int item)
+{
+ u8 monIconSpriteId;
+ u8 heldItemSpriteId;
+
+ monIconSpriteId = GetMonIconSpriteId_maybe(taskId, monIndex);
+ heldItemSpriteId = CreateSprite(gSpriteTemplate_837660C, 0xFA, 0xAA, 4);
+
+ gSprites[heldItemSpriteId].pos2.x = 4;
+ gSprites[heldItemSpriteId].pos2.y = 10;
+ gSprites[heldItemSpriteId].data7 = monIconSpriteId;
+ gSprites[monIconSpriteId].data7 = heldItemSpriteId;
+
+ if (!item)
+ {
+ gSprites[heldItemSpriteId].invisible = 1;
+ }
+ else
+ {
+ if (ItemIsMail(item))
+ {
+ StartSpriteAnim(&gSprites[heldItemSpriteId], 1);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[heldItemSpriteId], 0);
+ }
+
+ gSprites[heldItemSpriteId].invisible = 0;
+ }
+
+ gSprites[heldItemSpriteId].callback(&gSprites[heldItemSpriteId]);
+}
+#else
+__attribute__((naked))
+void CreateHeldItemIcon_806DCD4(u8 a, u8 monIndex)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ lsls r2, 16\n\
+ lsrs r7, r2, 16\n\
+ bl GetMonIconSpriteId_maybe\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ ldr r0, _0806DD2C @ =gSpriteTemplate_837660C\n\
+ movs r1, 0xFA\n\
+ movs r2, 0xAA\n\
+ movs r3, 0x4\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r1, _0806DD30 @ =gSprites\n\
+ lsls r0, r6, 4\n\
+ adds r0, r6\n\
+ lsls r0, 2\n\
+ adds r5, r0, r1\n\
+ movs r0, 0x4\n\
+ strh r0, [r5, 0x24]\n\
+ movs r0, 0xA\n\
+ strh r0, [r5, 0x26]\n\
+ strh r4, [r5, 0x3C]\n\
+ lsls r0, r4, 4\n\
+ adds r0, r4\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ strh r6, [r0, 0x3C]\n\
+ cmp r7, 0\n\
+ bne _0806DD34\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x3E\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x4\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _0806DD5C\n\
+ .align 2, 0\n\
+_0806DD2C: .4byte gSpriteTemplate_837660C\n\
+_0806DD30: .4byte gSprites\n\
+_0806DD34:\n\
+ adds r0, r7, 0\n\
+ bl ItemIsMail\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0806DD46\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x1\n\
+ b _0806DD4A\n\
+_0806DD46:\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+_0806DD4A:\n\
+ bl StartSpriteAnim\n\
+ adds r2, r5, 0\n\
+ adds r2, 0x3E\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x5\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+_0806DD5C:\n\
+ ldr r2, _0806DD78 @ =gSprites\n\
+ lsls r0, r6, 4\n\
+ adds r0, r6\n\
+ lsls r0, 2\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x1C\n\
+ adds r1, r0, r1\n\
+ adds r0, r2\n\
+ ldr r1, [r1]\n\
+ bl _call_via_r1\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0806DD78: .4byte gSprites\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite)
+{
+ u8 spriteId = sprite->data7;
+
+ sprite->pos1.x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x;
+ sprite->pos1.y = gSprites[spriteId].pos1.y;
+}
+
+u8 GetMonIconSpriteId_maybe(u8 taskId, u8 monIndex)
+{
+ switch(monIndex)
+ {
+ case 1:
+ return gTasks[taskId].data[0];
+ break;
+ case 2:
+ return gTasks[taskId].data[1] >> 8;
+ break;
+ case 3:
+ return gTasks[taskId].data[1];
+ break;
+ case 4:
+ return gTasks[taskId].data[2] >> 8;
+ break;
+ case 5:
+ return gTasks[taskId].data[2];
+ break;
+ case 0:
+ default:
+ return gTasks[taskId].data[0] >> 8;
+ break;
+ }
+}
+
+void SetMonIconSpriteId_maybe(u8 taskId, u8 monIndex, u8 c)
+{
+ switch(monIndex)
+ {
+ case 0:
+ gTasks[taskId].data[0] = (u8)gTasks[taskId].data[0] | (c << 8);
+ break;
+ case 1:
+ gTasks[taskId].data[0] = (gTasks[taskId].data[0] & -0x100) | c;
+ break;
+ case 2:
+ gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1] | (c << 8);
+ break;
+ case 3:
+ gTasks[taskId].data[1] = (gTasks[taskId].data[1] & -0x100) | c;
+ break;
+ case 4:
+ gTasks[taskId].data[2] = (u8)gTasks[taskId].data[2] | (c << 8);
+ break;
+ case 5:
+ gTasks[taskId].data[2] = (gTasks[taskId].data[2] & -0x100) | c;
+ break;
+ }
+}
+
+u16 GetHeldItemIconSpriteIdByMon_maybe(u8 taskId, u8 monIndex)
+{
+ u8 spriteId = GetMonIconSpriteId_maybe(taskId, monIndex);
+ u8 retVal = gSprites[spriteId].data7;
+ return retVal;
+}
+
+#ifdef NONMATCHING
+void SetHeldItemIconVisibility(u8 taskId, u8 monIndex)
+{
+ u8 spriteId;
+ u16 heldItem;
+
+ spriteId = GetHeldItemIconSpriteIdByMon_maybe(taskId, monIndex);
+ if (!GetMonData(&gPlayerParty[monIndex], MON_DATA_HELD_ITEM))
+ {
+ gSprites[spriteId].invisible = 1;
+ }
+ else
+ {
+ struct Sprite *sprite;
+
+ heldItem = GetMonData(&gPlayerParty[monIndex], MON_DATA_HELD_ITEM);
+ sprite = &gSprites[spriteId];
+ if (ItemIsMail(heldItem))
+ {
+ StartSpriteAnim(sprite, 1);
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+
+ sprite->invisible = 0;
+ }
+}
+#else
+__attribute__((naked))
+void SetHeldItemIconVisibility(u8 a, u8 monIndex)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ adds r4, r1, 0\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ adds r1, r4, 0\n\
+ bl GetHeldItemIconSpriteIdByMon_maybe\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ adds r6, r5, 0\n\
+ movs r0, 0x64\n\
+ adds r1, r4, 0\n\
+ muls r1, r0\n\
+ ldr r0, _0806DFA4 @ =gPlayerParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xC\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0806DFAC\n\
+ ldr r1, _0806DFA8 @ =gSprites\n\
+ lsls r0, r5, 4\n\
+ adds r0, r5\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ adds r0, 0x3E\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x4\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+ b _0806DFF6\n\
+ .align 2, 0\n\
+_0806DFA4: .4byte gPlayerParty\n\
+_0806DFA8: .4byte gSprites\n\
+_0806DFAC:\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xC\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ bl ItemIsMail\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0806DFD8\n\
+ lsls r4, r5, 4\n\
+ adds r4, r5\n\
+ lsls r4, 2\n\
+ ldr r0, _0806DFD4 @ =gSprites\n\
+ adds r4, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x1\n\
+ b _0806DFE6\n\
+ .align 2, 0\n\
+_0806DFD4: .4byte gSprites\n\
+_0806DFD8:\n\
+ lsls r4, r6, 4\n\
+ adds r4, r6\n\
+ lsls r4, 2\n\
+ ldr r0, _0806DFFC @ =gSprites\n\
+ adds r4, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0\n\
+_0806DFE6:\n\
+ bl StartSpriteAnim\n\
+ adds r4, 0x3E\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x5\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r4]\n\
+_0806DFF6:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0806DFFC: .4byte gSprites\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer)
{