diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-09-23 15:08:32 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-09-23 20:50:35 -0700 |
commit | c3792f2bd4c6ee3fecea548f45b2a54a9b468ab1 (patch) | |
tree | 5df71b16ae1b4330d8dfbfb061841e1412c1a836 | |
parent | e27de6bda3ab58f4190582532b399620082e385a (diff) |
Decompile HeldItemIcon funcs in party_menu
-rw-r--r-- | asm/party_menu.s | 709 | ||||
-rw-r--r-- | data/party_menu.s | 2 | ||||
-rw-r--r-- | include/party_menu.h | 6 | ||||
-rw-r--r-- | src/battle_party_menu.c | 2 | ||||
-rw-r--r-- | src/choose_party.c | 2 | ||||
-rw-r--r-- | src/party_menu.c | 410 |
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) { |