diff options
30 files changed, 3079 insertions, 6411 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s deleted file mode 100644 index 753b1696b..000000000 --- a/asm/battle_interface.s +++ /dev/null @@ -1,5660 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8047B0C -sub_8047B0C: @ 8047B0C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r7, r1, 0 - lsls r0, 16 - lsrs r5, r0, 16 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - movs r3, 0 - movs r2, 0 -_08047B28: - lsls r0, r3, 24 - asrs r0, 24 - mov r3, sp - adds r1, r3, r0 - strb r2, [r1] - adds r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08047B28 - movs r3, 0x3 - movs r0, 0x1 - negs r0, r0 - mov r9, r0 - mov r8, sp -_08047B48: - lsls r0, r5, 16 - asrs r6, r0, 16 - cmp r6, 0 - ble _08047B76 - lsls r4, r3, 24 - asrs r4, 24 - mov r1, sp - adds r5, r1, r4 - adds r0, r6, 0 - movs r1, 0xA - bl __modsi3 - strb r0, [r5] - adds r0, r6, 0 - movs r1, 0xA - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - subs r4, 0x1 - lsls r4, 24 - lsrs r3, r4, 24 - b _08047B48 -_08047B76: - lsls r1, r3, 24 - asrs r0, r1, 24 - cmp r0, r9 - ble _08047B9A - movs r4, 0xFF - movs r3, 0x1 - negs r3, r3 -_08047B84: - asrs r2, r1, 24 - mov r5, sp - adds r1, r5, r2 - ldrb r0, [r1] - orrs r0, r4 - strb r0, [r1] - subs r2, 0x1 - lsls r1, r2, 24 - asrs r0, r1, 24 - cmp r0, r3 - bgt _08047B84 -_08047B9A: - mov r1, r8 - ldrb r0, [r1, 0x3] - cmp r0, 0xFF - bne _08047BA6 - movs r0, 0 - strb r0, [r1, 0x3] -_08047BA6: - mov r2, r10 - cmp r2, 0 - bne _08047C36 - movs r3, 0 - movs r1, 0 - movs r6, 0xFC - lsls r6, 8 - movs r5, 0x1E - mov r12, r5 -_08047BB8: - lsls r1, 24 - asrs r2, r1, 24 - mov r0, sp - adds r5, r0, r2 - ldrb r0, [r5] - mov r8, r1 - cmp r0, 0xFF - bne _08047BEE - lsls r1, r2, 1 - adds r1, r7 - ldrh r2, [r1] - adds r0, r6, 0 - ands r0, r2 - mov r2, r12 - orrs r0, r2 - strh r0, [r1] - lsls r3, 24 - asrs r1, r3, 23 - adds r1, r7 - adds r1, 0x40 - ldrh r2, [r1] - adds r0, r6, 0 - ands r0, r2 - mov r5, r12 - orrs r0, r5 - strh r0, [r1] - b _08047C1E -_08047BEE: - lsls r2, 1 - adds r2, r7 - ldrh r0, [r2] - adds r1, r6, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x14 - orrs r1, r0 - strh r1, [r2] - lsls r4, r3, 24 - asrs r3, r4, 24 - lsls r2, r3, 1 - adds r2, r7 - adds r2, 0x40 - ldrh r0, [r2] - adds r1, r6, 0 - ands r1, r0 - mov r5, sp - adds r0, r5, r3 - ldrb r0, [r0] - adds r0, 0x34 - orrs r1, r0 - strh r1, [r2] - adds r3, r4, 0 -_08047C1E: - movs r0, 0x80 - lsls r0, 17 - add r0, r8 - lsrs r1, r0, 24 - movs r2, 0x80 - lsls r2, 17 - adds r0, r3, r2 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08047BB8 - b _08047C9A -_08047C36: - movs r3, 0 - movs r4, 0xFC - lsls r4, 8 - movs r6, 0x1E -_08047C3E: - lsls r1, r3, 24 - asrs r2, r1, 24 - mov r3, sp - adds r5, r3, r2 - ldrb r0, [r5] - adds r3, r1, 0 - cmp r0, 0xFF - bne _08047C6A - lsls r1, r2, 1 - adds r1, r7 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r1] - adds r1, 0x40 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - orrs r0, r6 - strh r0, [r1] - b _08047C8C -_08047C6A: - lsls r2, 1 - adds r2, r7 - ldrh r0, [r2] - adds r1, r4, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x14 - orrs r1, r0 - strh r1, [r2] - adds r2, 0x40 - ldrh r0, [r2] - adds r1, r4, 0 - ands r1, r0 - ldrb r0, [r5] - adds r0, 0x34 - orrs r1, r0 - strh r1, [r2] -_08047C8C: - movs r5, 0x80 - lsls r5, 17 - adds r0, r3, r5 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x3 - ble _08047C3E -_08047C9A: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8047B0C - - thumb_func_start sub_8047CAC -sub_8047CAC: @ 8047CAC - push {r4,r5,lr} - adds r4, r0, 0 - adds r0, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - movs r1, 0x1E - strh r1, [r5, 0x8] - lsls r0, 16 - asrs r0, 16 - adds r1, r5, 0 - movs r2, 0 - bl sub_8047B0C - lsls r4, 16 - asrs r4, 16 - adds r5, 0xA - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_8047B0C - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8047CAC - - thumb_func_start CreateBattlerHealthboxSprites -CreateBattlerHealthboxSprites: @ 8047CE0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r0, 0 - str r0, [sp] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08047DF4 - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08047D78 - ldr r4, _08047D68 @ =gUnknown_8260278 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08047D6C @ =gSprites - lsls r1, r6, 4 - adds r1, r6 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x1] - movs r3, 0x3F - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1, 0x1] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r2, r4 - ldrb r0, [r2, 0x1] - ands r3, r0 - strb r3, [r2, 0x1] - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x40 - ldr r4, _08047D70 @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _08047D74 @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - b _08047DBE - .align 2, 0 -_08047D68: .4byte gUnknown_8260278 -_08047D6C: .4byte gSprites -_08047D70: .4byte 0x000003ff -_08047D74: .4byte 0xfffffc00 -_08047D78: - ldr r4, _08047DE0 @ =gUnknown_82602A8 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08047DE4 @ =gSprites - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r2, r0 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08047DE8 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08047DEC @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - movs r0, 0x2 - str r0, [sp] -_08047DBE: - ldr r2, _08047DE4 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r2 - strh r7, [r0, 0x6] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r1, r0, r2 - strh r6, [r1, 0x38] - adds r2, 0x1C - adds r0, r2 - ldr r1, _08047DF0 @ =sub_8048128 - str r1, [r0] - b _08047F1C - .align 2, 0 -_08047DE0: .4byte gUnknown_82602A8 -_08047DE4: .4byte gSprites -_08047DE8: .4byte 0x000003ff -_08047DEC: .4byte 0xfffffc00 -_08047DF0: .4byte sub_8048128 -_08047DF4: - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08047E98 - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r4, _08047E84 @ =gUnknown_8260278 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08047E88 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x6] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r3, r2, r4 - strh r6, [r3, 0x38] - ldrh r1, [r3, 0x4] - mov r8, r1 - mov r5, r8 - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08047E8C @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08047E90 @ =0xfffffc00 - mov r5, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] - adds r4, 0x1C - adds r2, r4 - ldr r0, _08047E94 @ =sub_8048128 - str r0, [r2] - movs r0, 0x1 - b _08047F1A - .align 2, 0 -_08047E84: .4byte gUnknown_8260278 -_08047E88: .4byte gSprites -_08047E8C: .4byte 0x000003ff -_08047E90: .4byte 0xfffffc00 -_08047E94: .4byte sub_8048128 -_08047E98: - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r4, _08047FE0 @ =gUnknown_82602A8 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r10 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r7, r0, 24 - ldr r4, _08047FE4 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r4 - strh r7, [r0, 0x6] - lsls r2, r7, 4 - adds r2, r7 - lsls r2, 2 - adds r3, r2, r4 - strh r6, [r3, 0x38] - ldrh r1, [r3, 0x4] - mov r8, r1 - mov r5, r8 - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x20 - ldr r5, _08047FE8 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _08047FEC @ =0xfffffc00 - mov r5, r8 - ands r0, r5 - orrs r0, r1 - strh r0, [r3, 0x4] - adds r4, 0x1C - adds r2, r4 - ldr r0, _08047FF0 @ =sub_8048128 - str r0, [r2] - movs r0, 0x2 -_08047F1A: - str r0, [sp] -_08047F1C: - ldr r0, _08047FF4 @ =gBattlerPositions - add r0, r10 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, _08047FF8 @ =gUnknown_82602F8 - adds r0, r1 - movs r1, 0x8C - movs r2, 0x3C - movs r3, 0 - bl CreateSpriteAtEnd - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 4 - adds r4, r5 - lsls r4, 2 - ldr r1, _08047FE4 @ =gSprites - mov r8, r1 - add r4, r8 - mov r0, r10 - bl GetBattlerSide - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 21 - ldr r0, _08047FFC @ =gUnknown_82603C4 - adds r1, r0 - adds r0, r4, 0 - bl SetSubspriteTables - adds r2, r4, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r2, 0x4 - mov r9, r2 - mov r1, r9 - orrs r0, r1 - strb r0, [r4, 0x5] - movs r0, 0x1 - bl GetHealthboxElementGfxPtr - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08048000 @ =0x06010000 - adds r1, r2 - ldr r2, _08048004 @ =0x04000010 - bl CpuSet - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - add r0, r8 - strh r5, [r0, 0x38] - mov r2, r10 - strh r2, [r0, 0x3A] - adds r0, 0x3E - ldrb r1, [r0] - mov r5, r9 - orrs r1, r5 - strb r1, [r0] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - add r0, r8 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r5 - strb r1, [r0] - strh r6, [r4, 0x38] - mov r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x3A] - adds r4, 0x3E - ldrb r0, [r4] - orrs r0, r5 - strb r0, [r4] - adds r0, r6, 0 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08047FE0: .4byte gUnknown_82602A8 -_08047FE4: .4byte gSprites -_08047FE8: .4byte 0x000003ff -_08047FEC: .4byte 0xfffffc00 -_08047FF0: .4byte sub_8048128 -_08047FF4: .4byte gBattlerPositions -_08047FF8: .4byte gUnknown_82602F8 -_08047FFC: .4byte gUnknown_82603C4 -_08048000: .4byte 0x06010000 -_08048004: .4byte 0x04000010 - thumb_func_end CreateBattlerHealthboxSprites - - thumb_func_start CreateSafariPlayerHealthboxSprites -CreateSafariPlayerHealthboxSprites: @ 8048008 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, _08048094 @ =gUnknown_82602D8 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSprite - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0xA0 - movs r3, 0x1 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08048098 @ =gSprites - mov r9, r1 - lsls r4, r6, 4 - adds r4, r6 - lsls r4, 2 - add r4, r9 - ldrb r3, [r4, 0x1] - movs r2, 0x3F - adds r1, r2, 0 - ands r1, r3 - strb r1, [r4, 0x1] - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - mov r7, r9 - adds r5, r3, r7 - ldrb r1, [r5, 0x1] - ands r2, r1 - strb r2, [r5, 0x1] - ldrh r1, [r5, 0x4] - mov r8, r1 - mov r7, r8 - lsls r2, r7, 22 - lsrs r2, 22 - adds r2, 0x40 - ldr r7, _0804809C @ =0x000003ff - adds r1, r7, 0 - ands r2, r1 - ldr r1, _080480A0 @ =0xfffffc00 - mov r7, r8 - ands r1, r7 - orrs r1, r2 - strh r1, [r5, 0x4] - strh r0, [r4, 0x6] - strh r6, [r5, 0x38] - movs r0, 0x1C - add r9, r0 - add r3, r9 - ldr r0, _080480A4 @ =sub_8048128 - str r0, [r3] - adds r0, r6, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08048094: .4byte gUnknown_82602D8 -_08048098: .4byte gSprites -_0804809C: .4byte 0x000003ff -_080480A0: .4byte 0xfffffc00 -_080480A4: .4byte sub_8048128 - thumb_func_end CreateSafariPlayerHealthboxSprites - - thumb_func_start GetHealthboxElementGfxPtr -GetHealthboxElementGfxPtr: @ 80480A8 - lsls r0, 24 - lsrs r0, 19 - ldr r1, _080480B4 @ =gHealthboxElementsGfxTable - adds r0, r1 - bx lr - .align 2, 0 -_080480B4: .4byte gHealthboxElementsGfxTable - thumb_func_end GetHealthboxElementGfxPtr - - thumb_func_start sub_80480B8 -sub_80480B8: @ 80480B8 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x38] - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080480E8 - cmp r0, 0x1 - bgt _080480FC - cmp r0, 0 - bne _080480FC - ldr r2, _080480E4 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x10 - b _0804810A - .align 2, 0 -_080480E4: .4byte gSprites -_080480E8: - ldr r2, _080480F8 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x10 - b _0804810A - .align 2, 0 -_080480F8: .4byte gSprites -_080480FC: - ldr r2, _08048124 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x20] - adds r0, 0x8 -_0804810A: - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x22] - strh r0, [r4, 0x22] - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x24] - strh r1, [r4, 0x24] - ldrh r0, [r0, 0x26] - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08048124: .4byte gSprites - thumb_func_end sub_80480B8 - - thumb_func_start sub_8048128 -sub_8048128: @ 8048128 - ldrh r1, [r0, 0x38] - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0804814C @ =gSprites - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x20] - adds r1, 0x40 - strh r1, [r0, 0x20] - ldrh r1, [r2, 0x22] - strh r1, [r0, 0x22] - ldrh r1, [r2, 0x24] - strh r1, [r0, 0x24] - ldrh r1, [r2, 0x26] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_0804814C: .4byte gSprites - thumb_func_end sub_8048128 - - thumb_func_start SetBattleBarStruct -SetBattleBarStruct: @ 8048150 - push {r4-r7,lr} - ldr r7, [sp, 0x14] - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08048180 @ =gBattleSpritesDataPtr - ldr r4, [r6] - ldr r5, [r4, 0xC] - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 2 - adds r5, r4, r5 - strb r1, [r5] - ldr r0, [r6] - ldr r0, [r0, 0xC] - adds r4, r0 - str r2, [r4, 0x4] - str r3, [r4, 0x8] - str r7, [r4, 0xC] - ldr r0, _08048184 @ =0xffff8000 - str r0, [r4, 0x10] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048180: .4byte gBattleSpritesDataPtr -_08048184: .4byte 0xffff8000 - thumb_func_end SetBattleBarStruct - - thumb_func_start SetHealthboxSpriteInvisible -SetHealthboxSpriteInvisible: @ 8048188 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080481D0 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - adds r1, r2, 0 - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - movs r0, 0x38 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - ldrh r1, [r2, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080481D0: .4byte gSprites - thumb_func_end SetHealthboxSpriteInvisible - - thumb_func_start SetHealthboxSpriteVisible -SetHealthboxSpriteVisible: @ 80481D4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08048224 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - adds r4, r2, 0 - adds r4, 0x3E - ldrb r1, [r4] - movs r3, 0x5 - negs r3, r3 - adds r0, r3, 0 - ands r0, r1 - strb r0, [r4] - movs r0, 0x38 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r4, [r0] - adds r1, r3, 0 - ands r1, r4 - strb r1, [r0] - ldrh r1, [r2, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08048224: .4byte gSprites - thumb_func_end SetHealthboxSpriteVisible - - thumb_func_start UpdateSpritePos -UpdateSpritePos: @ 8048228 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08048244 @ =gSprites - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - adds r3, r4 - strh r1, [r3, 0x20] - strh r2, [r3, 0x22] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08048244: .4byte gSprites - thumb_func_end UpdateSpritePos - - thumb_func_start DestoryHealthboxSprite -DestoryHealthboxSprite: @ 8048248 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08048284 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r5 - ldrh r1, [r4, 0x6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - movs r0, 0x38 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - adds r0, r4, 0 - bl DestroySprite - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08048284: .4byte gSprites - thumb_func_end DestoryHealthboxSprite - - thumb_func_start DummyBattleInterfaceFunc -DummyBattleInterfaceFunc: @ 8048288 - bx lr - thumb_func_end DummyBattleInterfaceFunc - - thumb_func_start UpdateOamPriorityInAllHealthboxes -UpdateOamPriorityInAllHealthboxes: @ 804828C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - ldr r1, _08048310 @ =gBattlersCount - mov r8, r1 - ldrb r2, [r1] - cmp r6, r2 - bge _08048304 - ldr r1, _08048314 @ =gSprites - mov r12, r1 - movs r1, 0x3 - ands r0, r1 - lsls r5, r0, 2 - movs r7, 0xD - negs r7, r7 - ldr r2, _08048318 @ =gHealthboxSpriteIds - mov r9, r2 -_080482B6: - mov r1, r9 - adds r0, r6, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - ldrb r4, [r1, 0x6] - ldrh r3, [r1, 0x38] - lsls r3, 24 - lsrs r3, 24 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - add r1, r12 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - adds r6, 0x1 - mov r2, r8 - ldrb r2, [r2] - cmp r6, r2 - blt _080482B6 -_08048304: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048310: .4byte gBattlersCount -_08048314: .4byte gSprites -_08048318: .4byte gHealthboxSpriteIds - thumb_func_end UpdateOamPriorityInAllHealthboxes - - thumb_func_start InitBattlerHealthboxCoords -InitBattlerHealthboxCoords: @ 804831C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - movs r4, 0 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048348 - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08048342 - movs r5, 0x2C - movs r4, 0x1E - b _08048380 -_08048342: - movs r5, 0x9E - movs r4, 0x58 - b _08048380 -_08048348: - adds r0, r6, 0 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08048376 - cmp r0, 0x1 - bgt _08048360 - cmp r0, 0 - beq _0804836A - b _08048380 -_08048360: - cmp r0, 0x2 - beq _08048370 - cmp r0, 0x3 - beq _0804837C - b _08048380 -_0804836A: - movs r5, 0x9F - movs r4, 0x4B - b _08048380 -_08048370: - movs r5, 0xAB - movs r4, 0x64 - b _08048380 -_08048376: - movs r5, 0x2C - movs r4, 0x13 - b _08048380 -_0804837C: - movs r5, 0x20 - movs r4, 0x2C -_08048380: - ldr r0, _08048394 @ =gHealthboxSpriteIds - adds r0, r6, r0 - ldrb r0, [r0] - adds r1, r5, 0 - adds r2, r4, 0 - bl UpdateSpritePos - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08048394: .4byte gHealthboxSpriteIds - thumb_func_end InitBattlerHealthboxCoords - - thumb_func_start UpdateLvlInHealthbox -UpdateLvlInHealthbox: @ 8048398 - push {r4-r6,lr} - sub sp, 0x14 - adds r5, r0, 0 - adds r4, r1, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08048410 @ =gUnknown_826051C - mov r0, sp - movs r2, 0x10 - bl memcpy - mov r0, sp - adds r0, 0x2 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r1, r0, 0 - subs r1, 0x2 - mov r0, sp - subs r1, r0 - movs r0, 0x3 - subs r0, r1 - lsls r1, r0, 2 - adds r1, r0 - add r3, sp, 0x10 - mov r0, sp - movs r2, 0x3 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r6, r0, 0 - ldr r0, _08048414 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r4, r0, 17 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048420 - bl IsDoubleBattle - lsls r0, 24 - ldr r2, _08048418 @ =0x06010420 - adds r1, r4, r2 - cmp r0, 0 - bne _08048424 - ldr r0, _0804841C @ =0x06010820 - adds r1, r4, r0 - b _08048424 - .align 2, 0 -_08048410: .4byte gUnknown_826051C -_08048414: .4byte gSprites -_08048418: .4byte 0x06010420 -_0804841C: .4byte 0x06010820 -_08048420: - ldr r2, _0804843C @ =0x06010400 - adds r1, r4, r2 -_08048424: - adds r0, r1, 0 - adds r1, r6, 0 - movs r2, 0x3 - bl sub_804A6E8 - ldr r0, [sp, 0x10] - bl sub_804A6D8 - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804843C: .4byte 0x06010400 - thumb_func_end UpdateLvlInHealthbox - - thumb_func_start UpdateHpTextInHealthbox -UpdateHpTextInHealthbox: @ 8048440 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r1, _080484B4 @ =gSprites - lsls r0, 4 - add r0, r9 - lsls r0, 2 - adds r4, r0, r1 - ldrh r0, [r4, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048514 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048514 - mov r0, r8 - cmp r0, 0 - beq _080484BC - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - add r0, sp, 0x10 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - add r3, sp, 0x2C - add r0, sp, 0x10 - movs r1, 0 - movs r2, 0x5 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldrh r0, [r4, 0x4] - lsls r0, 22 - lsrs r0, 17 - ldr r1, _080484B8 @ =0x06010a40 - adds r0, r1 - adds r1, r5, 0 - b _080484FE - .align 2, 0 -_080484B4: .4byte gSprites -_080484B8: .4byte 0x06010a40 -_080484BC: - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - add r0, sp, 0x10 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r1, 0xBA - strb r1, [r0] - movs r1, 0xFF - strb r1, [r0, 0x1] - add r3, sp, 0x2C - add r0, sp, 0x10 - movs r1, 0x4 - movs r2, 0x5 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldrh r4, [r4, 0x4] - lsls r4, 22 - lsrs r4, 17 - ldr r1, _0804850C @ =0x060102e0 - adds r0, r4, r1 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_804A6E8 - ldr r2, _08048510 @ =0x06010a00 - adds r4, r2 - adds r1, r5, 0 - adds r1, 0x20 - adds r0, r4, 0 -_080484FE: - movs r2, 0x2 - bl sub_804A6E8 - ldr r0, [sp, 0x2C] - bl sub_804A6D8 - b _080485F8 - .align 2, 0 -_0804850C: .4byte 0x060102e0 -_08048510: .4byte 0x06010a00 -_08048514: - add r5, sp, 0x18 - ldr r1, _0804855C @ =gUnknown_826052C - adds r0, r5, 0 - movs r2, 0x14 - bl memcpy - ldr r1, _08048560 @ =gSprites - mov r0, r9 - lsls r4, r0, 4 - adds r0, r4, r0 - lsls r0, 2 - adds r7, r0, r1 - ldrh r0, [r7, 0x3A] - lsls r0, 24 - lsrs r6, r0, 24 - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0804854C - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08048564 -_0804854C: - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - mov r0, r9 - mov r2, r8 - bl sub_8048618 - b _080485F8 - .align 2, 0 -_0804855C: .4byte gUnknown_826052C -_08048560: .4byte gSprites -_08048564: - ldrh r0, [r7, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048580 - movs r6, 0x59 - mov r0, r8 - cmp r0, 0 - bne _0804858A - movs r6, 0x1D - b _0804858A -_08048580: - movs r6, 0x30 - mov r1, r8 - cmp r1, 0 - bne _0804858A - movs r6, 0x14 -_0804858A: - mov r0, sp - adds r0, 0x1E - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r0, _08048608 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - adds r2, r5, 0 - movs r3, 0 - bl RenderTextFont9 - movs r5, 0 - ldr r1, _0804860C @ =gSprites - mov r2, r9 - adds r0, r4, r2 - lsls r0, 2 - adds r4, r0, r1 -_080485C6: - ldr r0, _08048608 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - lsls r1, r5, 6 - adds r1, 0x20 - ldr r0, [r0] - adds r0, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r6 - adds r1, r5 - lsls r1, 5 - ldr r2, _08048610 @ =0x06010000 - adds r1, r2 - ldr r2, _08048614 @ =0x04000008 - bl CpuSet - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _080485C6 -_080485F8: - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048608: .4byte gMonSpritesGfxPtr -_0804860C: .4byte gSprites -_08048610: .4byte 0x06010000 -_08048614: .4byte 0x04000008 - thumb_func_end UpdateHpTextInHealthbox - - thumb_func_start sub_8048618 -sub_8048618: @ 8048618 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r1, _080486F8 @ =gUnknown_8260542 - add r0, sp, 0x10 - movs r2, 0x14 - bl memcpy - ldr r5, _080486FC @ =gSprites - mov r1, r9 - lsls r0, r1, 4 - add r0, r9 - lsls r0, 2 - adds r2, r0, r5 - ldrh r0, [r2, 0x3A] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r0, _08048700 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - mov r3, r10 - lsls r0, r3, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0804866A - b _080487DC -_0804866A: - movs r6, 0x4 - mov r1, r8 - negs r0, r1 - orrs r0, r1 - asrs r0, 31 - ands r6, r0 - ldrh r0, [r2, 0x38] - lsls r0, 24 - lsrs r7, r0, 24 - mov r0, sp - adds r0, 0x16 - lsls r1, r4, 16 - asrs r1, 16 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - mov r2, r8 - cmp r2, 0 - bne _08048698 - ldr r1, _08048704 @ =gUnknown_8260540 - bl StringCopy -_08048698: - ldr r0, _08048708 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - ldr r0, [r0] - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - add r2, sp, 0x10 - movs r3, 0 - bl RenderTextFont9 - adds r4, r6, 0 - adds r0, r4, 0x3 - cmp r4, r0 - bge _08048748 - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r5, r0, r5 -_080486C6: - cmp r4, 0x2 - bhi _08048714 - ldr r0, _08048708 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - subs r1, r4, r6 - lsls r1, 6 - adds r1, 0x20 - ldr r0, [r0] - adds r0, r1 - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r4, 0x1 - adds r1, r4 - lsls r1, 5 - ldr r2, _0804870C @ =0x06010000 - adds r1, r2 - ldr r2, _08048710 @ =0x04000008 - bl CpuSet - b _0804873E - .align 2, 0 -_080486F8: .4byte gUnknown_8260542 -_080486FC: .4byte gSprites -_08048700: .4byte gBattleSpritesDataPtr -_08048704: .4byte gUnknown_8260540 -_08048708: .4byte gMonSpritesGfxPtr -_0804870C: .4byte 0x06010000 -_08048710: .4byte 0x04000008 -_08048714: - ldr r0, _08048790 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - subs r1, r4, r6 - lsls r1, 6 - adds r1, 0x20 - ldr r0, [r0] - adds r0, r1 - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r4, r1 - lsls r1, 5 - ldr r2, _08048794 @ =0x06010020 - adds r1, r2 - ldr r2, _08048798 @ =0x04000008 - bl CpuSet - adds r4, 0x1 -_0804873E: - lsls r0, r4, 24 - lsrs r4, r0, 24 - adds r0, r6, 0x3 - cmp r4, r0 - blt _080486C6 -_08048748: - mov r3, r8 - cmp r3, 0 - bne _080487A8 - ldr r0, _08048790 @ =gMonSpritesGfxPtr - ldr r0, [r0] - movs r1, 0xBA - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - adds r0, 0xE0 - ldr r1, _0804879C @ =gSprites - lsls r4, r7, 4 - adds r4, r7 - lsls r4, 2 - adds r4, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, 0x80 - ldr r5, _080487A0 @ =0x06010000 - adds r1, r5 - ldr r2, _08048798 @ =0x04000008 - bl CpuSet - mov r2, r8 - str r2, [sp, 0x24] - add r0, sp, 0x24 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, r5 - ldr r2, _080487A4 @ =0x05000008 - bl CpuSet - b _080487DC - .align 2, 0 -_08048790: .4byte gMonSpritesGfxPtr -_08048794: .4byte 0x06010020 -_08048798: .4byte 0x04000008 -_0804879C: .4byte gSprites -_080487A0: .4byte 0x06010000 -_080487A4: .4byte 0x05000008 -_080487A8: - mov r0, r10 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080487DC - movs r0, 0x74 - bl GetHealthboxElementGfxPtr - ldr r2, _080487EC @ =gSprites - mov r3, r9 - lsls r1, r3, 4 - add r1, r9 - lsls r1, 2 - adds r1, r2 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0xD0 - lsls r2, 3 - adds r1, r2 - ldr r2, _080487F0 @ =0x06010000 - adds r1, r2 - ldr r2, _080487F4 @ =0x04000008 - bl CpuSet -_080487DC: - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080487EC: .4byte gSprites -_080487F0: .4byte 0x06010000 -_080487F4: .4byte 0x04000008 - thumb_func_end sub_8048618 - - thumb_func_start sub_80487F8 -sub_80487F8: @ 80487F8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - ldr r1, _080488AC @ =gUnknown_826052C - add r0, sp, 0x10 - movs r2, 0x14 - bl memcpy - ldr r1, _080488B0 @ =gSprites - ldr r2, [sp, 0x24] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerPosition - ldr r1, _080488B4 @ =gMonSpritesGfxPtr - ldr r2, [r1] - movs r3, 0xBA - lsls r3, 1 - adds r2, r3 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 7 - movs r0, 0xA4 - lsls r0, 3 - adds r1, r0 - ldr r0, [r2] - adds r6, r0, r1 - movs r1, 0x5 - mov r8, r1 - adds r0, r4, 0 - bl GetNature - lsls r0, 24 - mov r4, sp - adds r4, 0x16 - ldr r1, _080488B8 @ =gNatureNames - lsrs r0, 22 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r6, 0 - movs r1, 0 - add r2, sp, 0x10 - movs r3, 0 - bl RenderTextFont9 - movs r7, 0x6 - movs r5, 0 - mov r2, sp - adds r2, 0x19 - str r2, [sp, 0x28] -_08048888: - mov r0, sp - adds r0, r7 - adds r0, 0x10 - ldrb r1, [r0] - adds r0, r1, 0 - subs r0, 0x37 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bls _080488A8 - adds r0, r1, 0 - adds r0, 0x79 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x13 - bhi _080488BC -_080488A8: - movs r0, 0x2C - b _080488DA - .align 2, 0 -_080488AC: .4byte gUnknown_826052C -_080488B0: .4byte gSprites -_080488B4: .4byte gMonSpritesGfxPtr -_080488B8: .4byte gNatureNames -_080488BC: - adds r0, r1, 0 - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bls _080488D4 - adds r0, r1, 0 - adds r0, 0x65 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _080488D8 -_080488D4: - movs r0, 0x2D - b _080488DA -_080488D8: - movs r0, 0x2B -_080488DA: - bl GetHealthboxElementGfxPtr - lsls r1, r5, 6 - adds r1, r6, r1 - ldr r2, _080489F8 @ =0x04000008 - bl CpuSet - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, 0x1 - cmp r5, r8 - bcc _08048888 - movs r7, 0x1 - ldr r3, [sp, 0x24] - lsls r3, 4 - str r3, [sp, 0x2C] - movs r0, 0x1 - add r0, r8 - mov r9, r0 - cmp r7, r9 - bge _08048966 - ldr r1, _080489FC @ =gSprites - ldr r2, _080489F8 @ =0x04000008 - mov r10, r2 - ldr r2, [sp, 0x24] - adds r0, r3, r2 - lsls r0, 2 - adds r0, r1 - mov r8, r0 -_08048916: - mov r3, r8 - ldrh r0, [r3, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r5, r7, 0 - cmp r7, 0 - bge _08048926 - adds r5, r7, 0x7 -_08048926: - asrs r5, 3 - lsls r4, r5, 3 - subs r4, r7, r4 - adds r0, r4 - lsls r5, 6 - adds r0, r5 - lsls r0, 5 - ldr r2, _08048A00 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - mov r3, r8 - ldrh r0, [r3, 0x4] - lsls r0, 22 - lsrs r0, 22 - adds r4, 0x8 - adds r0, r4 - adds r0, r5 - lsls r0, 5 - ldr r2, _08048A00 @ =0x06010000 - adds r1, r0, r2 - adds r0, r6, 0 - mov r2, r10 - bl CpuSet - adds r6, 0x20 - adds r7, 0x1 - cmp r7, r9 - blt _08048916 -_08048966: - ldr r6, _080489FC @ =gSprites - ldr r3, [sp, 0x2C] - ldr r1, [sp, 0x24] - adds r0, r3, r1 - lsls r0, 2 - adds r0, r6 - ldrh r4, [r0, 0x38] - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08048A04 @ =gBattleStruct - ldr r0, [r5] - adds r0, 0x7C - ldrb r1, [r0] - mov r0, sp - adds r0, 0x16 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, [r5] - adds r0, 0x7B - ldrb r1, [r0] - ldr r0, [sp, 0x28] - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - add r0, sp, 0x10 - movs r1, 0 - strb r1, [r0, 0x5] - adds r2, r0, 0 - movs r0, 0xBA - strb r0, [r2, 0x8] - ldr r5, _08048A08 @ =gMonSpritesGfxPtr - ldr r0, [r5] - movs r2, 0xBA - lsls r2, 1 - adds r0, r2 - ldr r0, [r0] - str r1, [sp] - str r1, [sp, 0x4] - str r1, [sp, 0x8] - str r1, [sp, 0xC] - add r2, sp, 0x10 - movs r3, 0 - bl RenderTextFont9 - movs r7, 0 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r6, r0, r6 - movs r4, 0x20 -_080489D0: - cmp r7, 0x1 - bgt _08048A0C - ldr r0, [r5] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - ldr r0, [r0] - adds r0, r4 - ldrh r1, [r6, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r7, 0x2 - adds r1, r2 - lsls r1, 5 - ldr r2, _08048A00 @ =0x06010000 - adds r1, r2 - ldr r2, _080489F8 @ =0x04000008 - bl CpuSet - b _08048A2C - .align 2, 0 -_080489F8: .4byte 0x04000008 -_080489FC: .4byte gSprites -_08048A00: .4byte 0x06010000 -_08048A04: .4byte gBattleStruct -_08048A08: .4byte gMonSpritesGfxPtr -_08048A0C: - ldr r0, [r5] - movs r3, 0xBA - lsls r3, 1 - adds r0, r3 - ldr r0, [r0] - adds r0, r4 - ldrh r1, [r6, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r7, r1 - lsls r1, 5 - ldr r2, _08048A44 @ =0x060100c0 - adds r1, r2 - ldr r2, _08048A48 @ =0x04000008 - bl CpuSet -_08048A2C: - adds r4, 0x40 - adds r7, 0x1 - cmp r7, 0x4 - ble _080489D0 - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048A44: .4byte 0x060100c0 -_08048A48: .4byte 0x04000008 - thumb_func_end sub_80487F8 - - thumb_func_start SwapHpBarsWithHpText -SwapHpBarsWithHpText: @ 8048A4C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - mov r9, r0 - ldr r0, _08048B78 @ =gBattlersCount - ldrb r0, [r0] - cmp r9, r0 - blt _08048A66 - b _08048CF2 -_08048A66: - ldr r1, _08048B7C @ =gSprites - mov r10, r1 - ldr r2, _08048B80 @ =gBattlerPartyIndexes - mov r8, r2 -_08048A6E: - ldr r0, _08048B84 @ =gHealthboxSpriteIds - mov r1, r9 - adds r6, r1, r0 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - mov r1, r10 - adds r1, 0x1C - adds r0, r1 - ldr r1, [r0] - ldr r0, _08048B88 @ =SpriteCallbackDummy - cmp r1, r0 - beq _08048A8C - b _08048CE0 -_08048A8C: - mov r2, r9 - lsls r0, r2, 24 - lsrs r7, r0, 24 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08048AA2 - b _08048CE0 -_08048AA2: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048ABA - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048ABA - b _08048CE0 -_08048ABA: - ldr r5, _08048B8C @ =gBattleSpritesDataPtr - ldr r0, [r5] - ldr r3, [r0] - mov r0, r9 - lsls r4, r0, 2 - adds r3, r4, r3 - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 31 - movs r2, 0x1 - eors r2, r0 - lsls r2, 4 - mov r12, r2 - ldrb r0, [r3] - movs r2, 0x11 - negs r2, r2 - adds r1, r2, 0 - ands r0, r1 - mov r1, r12 - orrs r0, r1 - strb r0, [r3] - ldr r0, [r5] - ldr r0, [r0] - adds r4, r0 - ldr r0, [r4] - lsls r0, 27 - lsrs r4, r0, 31 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048BE8 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048B08 - b _08048CE0 -_08048B08: - ldr r0, _08048B90 @ =gBattleTypeFlags - ldr r2, [r0] - movs r0, 0x80 - ands r2, r0 - cmp r2, 0 - beq _08048B16 - b _08048CE0 -_08048B16: - cmp r4, 0x1 - bne _08048BA0 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r1, r0, 24 - str r2, [sp] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08048B94 @ =0x06010000 - adds r1, r2 - mov r0, sp - ldr r2, _08048B98 @ =0x05000040 - bl CpuSet - ldrb r4, [r6] - mov r1, r8 - ldrh r0, [r1] - movs r2, 0x64 - muls r0, r2 - ldr r1, _08048B9C @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_8048618 - ldrb r4, [r6] - mov r2, r8 - ldrh r0, [r2] - movs r1, 0x64 - muls r0, r1 - ldr r2, _08048B9C @ =gPlayerParty - b _08048C6E - .align 2, 0 -_08048B78: .4byte gBattlersCount -_08048B7C: .4byte gSprites -_08048B80: .4byte gBattlerPartyIndexes -_08048B84: .4byte gHealthboxSpriteIds -_08048B88: .4byte SpriteCallbackDummy -_08048B8C: .4byte gBattleSpritesDataPtr -_08048B90: .4byte gBattleTypeFlags -_08048B94: .4byte 0x06010000 -_08048B98: .4byte 0x05000040 -_08048B9C: .4byte gPlayerParty -_08048BA0: - ldrb r0, [r6] - bl UpdateStatusIconInHealthbox - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - movs r2, 0x64 - muls r1, r2 - ldr r2, _08048BDC @ =gPlayerParty - adds r1, r2 - movs r2, 0x5 - bl UpdateHealthboxAttribute - movs r0, 0x75 - bl GetHealthboxElementGfxPtr - ldrb r2, [r6] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r10 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08048BE0 @ =0x06010680 - adds r1, r2 - ldr r2, _08048BE4 @ =0x04000008 - bl CpuSet - b _08048CCA - .align 2, 0 -_08048BDC: .4byte gPlayerParty -_08048BE0: .4byte 0x06010680 -_08048BE4: .4byte 0x04000008 -_08048BE8: - cmp r4, 0x1 - bne _08048C94 - ldr r0, _08048C0C @ =gBattleTypeFlags - ldr r2, [r0] - movs r0, 0x80 - ands r2, r0 - cmp r2, 0 - beq _08048C14 - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - movs r2, 0x64 - muls r1, r2 - ldr r2, _08048C10 @ =gEnemyParty - adds r1, r2 - bl sub_80487F8 - b _08048CCA - .align 2, 0 -_08048C0C: .4byte gBattleTypeFlags -_08048C10: .4byte gEnemyParty -_08048C14: - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r1, r0, 24 - str r2, [sp] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r0, _08048C88 @ =0x06010000 - adds r1, r0 - mov r0, sp - ldr r2, _08048C8C @ =0x05000040 - bl CpuSet - ldrb r4, [r6] - mov r1, r8 - ldrh r0, [r1] - movs r2, 0x64 - muls r0, r2 - ldr r1, _08048C90 @ =gEnemyParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_8048618 - ldrb r4, [r6] - mov r2, r8 - ldrh r0, [r2] - movs r1, 0x64 - muls r0, r1 - ldr r2, _08048C90 @ =gEnemyParty -_08048C6E: - adds r0, r2 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - movs r2, 0x1 - bl sub_8048618 - b _08048CCA - .align 2, 0 -_08048C88: .4byte 0x06010000 -_08048C8C: .4byte 0x05000040 -_08048C90: .4byte gEnemyParty -_08048C94: - ldrb r0, [r6] - bl UpdateStatusIconInHealthbox - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - movs r5, 0x64 - muls r1, r5 - ldr r4, _08048D04 @ =gEnemyParty - adds r1, r4 - movs r2, 0x5 - bl UpdateHealthboxAttribute - ldr r0, _08048D08 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08048CCA - ldrb r0, [r6] - mov r2, r8 - ldrh r1, [r2] - muls r1, r5 - adds r1, r4 - movs r2, 0x4 - bl UpdateHealthboxAttribute -_08048CCA: - ldr r0, _08048D0C @ =gHealthboxSpriteIds - add r0, r9 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r1, [r0, 0x3C] - movs r2, 0x1 - eors r1, r2 - strh r1, [r0, 0x3C] -_08048CE0: - movs r0, 0x2 - add r8, r0 - movs r1, 0x1 - add r9, r1 - ldr r0, _08048D10 @ =gBattlersCount - ldrb r0, [r0] - cmp r9, r0 - bge _08048CF2 - b _08048A6E -_08048CF2: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08048D04: .4byte gEnemyParty -_08048D08: .4byte gBattleTypeFlags -_08048D0C: .4byte gHealthboxSpriteIds -_08048D10: .4byte gBattlersCount - thumb_func_end SwapHpBarsWithHpText - - thumb_func_start CreatePartyStatusSummarySprites -CreatePartyStatusSummarySprites: @ 8048D14 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - str r1, [sp, 0xC] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - lsls r2, 24 - lsrs r2, 24 - adds r4, r2, 0 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x10] - cmp r4, 0 - beq _08048D44 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08048D88 -_08048D44: - ldr r0, [sp, 0x8] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08048D64 - movs r7, 0 - movs r1, 0x88 - movs r2, 0x60 - movs r0, 0x64 - mov r8, r0 - ldr r5, _08048D60 @ =0x0000fffb - b _08048D94 - .align 2, 0 -_08048D60: .4byte 0x0000fffb -_08048D64: - movs r7, 0x1 - cmp r4, 0 - beq _08048D74 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08048D7A -_08048D74: - movs r1, 0x68 - movs r2, 0x28 - b _08048D7E -_08048D7A: - movs r1, 0x68 - movs r2, 0x10 -_08048D7E: - ldr r3, _08048D84 @ =0x0000ff9c - mov r8, r3 - b _08048D92 - .align 2, 0 -_08048D84: .4byte 0x0000ff9c -_08048D88: - movs r7, 0x1 - movs r1, 0x68 - movs r2, 0x28 - ldr r5, _08048E40 @ =0x0000ff9c - mov r8, r5 -_08048D92: - movs r5, 0x5 -_08048D94: - movs r6, 0 - str r6, [sp, 0x14] - lsls r4, r7, 3 - ldr r0, _08048E44 @ =gUnknown_826046C - mov r10, r0 - lsls r3, r7, 1 - mov r9, r3 - lsls r1, 16 - str r1, [sp, 0x20] - lsls r2, 16 - str r2, [sp, 0x24] - ldr r2, _08048E48 @ =0x0000ffff - ldr r1, [sp, 0xC] - movs r6, 0x5 -_08048DB0: - ldrh r0, [r1] - cmp r0, r2 - beq _08048DC4 - ldr r3, [sp, 0x14] - lsls r0, r3, 24 - movs r3, 0x80 - lsls r3, 17 - adds r0, r3 - lsrs r0, 24 - str r0, [sp, 0x14] -_08048DC4: - adds r1, 0x8 - subs r6, 0x1 - cmp r6, 0 - bge _08048DB0 - mov r6, r10 - adds r0, r4, r6 - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _08048E4C @ =gUnknown_826049C - adds r0, r4, r0 - bl LoadSpriteSheet - ldr r0, _08048E50 @ =gUnknown_826047C - adds r0, r4, r0 - bl LoadSpritePalette - ldr r0, _08048E54 @ =gUnknown_826048C - adds r0, r4, r0 - bl LoadSpritePalette - mov r1, r9 - adds r0, r1, r7 - lsls r0, 3 - ldr r1, _08048E58 @ =gUnknown_82604BC - adds r0, r1 - ldr r2, [sp, 0x20] - asrs r1, r2, 16 - ldr r3, [sp, 0x24] - asrs r2, r3, 16 - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - lsls r0, 4 - ldr r6, [sp, 0x18] - adds r0, r6 - lsls r0, 2 - ldr r1, _08048E5C @ =gSprites - adds r4, r0, r1 - ldr r1, _08048E60 @ =gUnknown_82603FC - adds r0, r4, 0 - bl SetSubspriteTables - mov r0, r8 - strh r0, [r4, 0x24] - strh r5, [r4, 0x2E] - cmp r7, 0 - beq _08048E64 - ldrh r0, [r4, 0x20] - subs r0, 0x60 - strh r0, [r4, 0x20] - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r4, 0x3] - b _08048E6A - .align 2, 0 -_08048E40: .4byte 0x0000ff9c -_08048E44: .4byte gUnknown_826046C -_08048E48: .4byte 0x0000ffff -_08048E4C: .4byte gUnknown_826049C -_08048E50: .4byte gUnknown_826047C -_08048E54: .4byte gUnknown_826048C -_08048E58: .4byte gUnknown_82604BC -_08048E5C: .4byte gSprites -_08048E60: .4byte gUnknown_82603FC -_08048E64: - ldrh r0, [r4, 0x20] - adds r0, 0x60 - strh r0, [r4, 0x20] -_08048E6A: - movs r6, 0 - ldr r1, _08048F14 @ =gSprites - mov r10, r1 - mov r4, sp - mov r2, r9 - adds r0, r2, r7 - lsls r0, 3 - str r0, [sp, 0x1C] - movs r3, 0xA - mov r9, r3 - mov r8, r6 -_08048E80: - ldr r0, _08048F18 @ =gUnknown_82604EC - ldr r5, [sp, 0x24] - ldr r1, _08048F1C @ =0xfffc0000 - adds r2, r5, r1 - ldr r3, [sp, 0x1C] - adds r0, r3, r0 - ldr r5, [sp, 0x20] - asrs r1, r5, 16 - asrs r2, 16 - movs r3, 0x9 - bl CreateSpriteAtEnd - strb r0, [r4] - ldr r0, [sp, 0x10] - cmp r0, 0 - bne _08048EB0 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r2, _08048F20 @ =gSprites + 0x1C - adds r1, r2 - ldr r0, _08048F24 @ =SpriteCB_StatusSummaryBallsOnSwitchout - str r0, [r1] -_08048EB0: - ldr r5, _08048F14 @ =gSprites - cmp r7, 0 - bne _08048ECE - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - strh r7, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r10 - strh r7, [r0, 0x26] -_08048ECE: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0 - mov r3, sp - ldrh r3, [r3, 0x18] - strh r3, [r0, 0x2E] - cmp r7, 0 - bne _08048F28 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrh r0, [r1, 0x20] - adds r0, 0x18 - add r0, r8 - strh r0, [r1, 0x20] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r9 - strh r1, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x78 - b _08048F66 - .align 2, 0 -_08048F14: .4byte gSprites -_08048F18: .4byte gUnknown_82604EC -_08048F1C: .4byte 0xfffc0000 -_08048F20: .4byte gSprites + 0x1C -_08048F24: .4byte SpriteCB_StatusSummaryBallsOnSwitchout -_08048F28: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - ldrh r3, [r2, 0x20] - subs r3, 0x18 - movs r1, 0x5 - subs r1, r6 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - subs r3, r0 - strh r3, [r2, 0x20] - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - movs r1, 0x6 - subs r1, r6 - lsls r0, r1, 3 - subs r0, r1 - adds r0, 0xA - strh r0, [r2, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08048FD4 @ =0x0000ff88 -_08048F66: - strh r1, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r7, [r0, 0x32] - adds r4, 0x1 - movs r2, 0x7 - add r9, r2 - movs r3, 0xA - add r8, r3 - adds r6, 0x1 - cmp r6, 0x5 - bgt _08048F86 - b _08048E80 -_08048F86: - ldr r0, [sp, 0x8] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0804906E - movs r6, 0 - ldr r5, _08048FD8 @ =gBattleTypeFlags - mov r10, r5 - ldr r0, _08048FDC @ =0x0000ffff - mov r9, r0 - ldr r7, _08048FE0 @ =gSprites - ldr r1, _08048FE4 @ =0x000003ff - mov r12, r1 - ldr r2, _08048FE8 @ =0xfffffc00 - mov r8, r2 - mov r4, sp - ldr r5, [sp, 0xC] -_08048FAA: - mov r3, r10 - ldr r0, [r3] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08048FEC - ldrh r0, [r5] - cmp r0, r9 - beq _08048FF6 - cmp r0, 0 - bne _0804903E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049056 - .align 2, 0 -_08048FD4: .4byte 0x0000ff88 -_08048FD8: .4byte gBattleTypeFlags -_08048FDC: .4byte 0x0000ffff -_08048FE0: .4byte gSprites -_08048FE4: .4byte 0x000003ff -_08048FE8: .4byte 0xfffffc00 -_08048FEC: - ldr r1, [sp, 0x14] - lsls r0, r1, 24 - asrs r0, 24 - cmp r6, r0 - blt _08049024 -_08048FF6: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x1 - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - movs r1, 0x1 - strh r1, [r0, 0x3C] - b _08049062 -_08049024: - ldrh r0, [r5] - cmp r0, 0 - bne _0804903E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049056 -_0804903E: - ldr r0, [r5, 0x4] - cmp r0, 0 - beq _08049062 - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x2 -_08049056: - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] -_08049062: - adds r4, 0x1 - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _08048FAA - b _08049148 -_0804906E: - movs r6, 0 - ldr r1, _080490B4 @ =gBattleTypeFlags - mov r10, r1 - ldr r2, _080490B8 @ =0x0000ffff - mov r9, r2 - ldr r7, _080490BC @ =gSprites - ldr r3, _080490C0 @ =0x000003ff - mov r12, r3 - ldr r5, _080490C4 @ =0xfffffc00 - mov r8, r5 - ldr r5, [sp, 0xC] - mov r4, sp - adds r4, 0x5 -_08049088: - mov r1, r10 - ldr r0, [r1] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080490C8 - ldrh r0, [r5] - cmp r0, r9 - beq _080490D2 - cmp r0, 0 - bne _0804911A - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049132 - .align 2, 0 -_080490B4: .4byte gBattleTypeFlags -_080490B8: .4byte 0x0000ffff -_080490BC: .4byte gSprites -_080490C0: .4byte 0x000003ff -_080490C4: .4byte 0xfffffc00 -_080490C8: - ldr r1, [sp, 0x14] - lsls r0, r1, 24 - asrs r0, 24 - cmp r6, r0 - blt _08049100 -_080490D2: - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x1 - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r7 - movs r1, 0x1 - strh r1, [r0, 0x3C] - b _0804913E -_08049100: - ldrh r0, [r5] - cmp r0, 0 - bne _0804911A - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x3 - b _08049132 -_0804911A: - ldr r0, [r5, 0x4] - cmp r0, 0 - beq _0804913E - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r7 - ldrh r3, [r2, 0x4] - lsls r1, r3, 22 - lsrs r1, 22 - adds r1, 0x2 -_08049132: - mov r0, r12 - ands r1, r0 - mov r0, r8 - ands r0, r3 - orrs r0, r1 - strh r0, [r2, 0x4] -_0804913E: - subs r4, 0x1 - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _08049088 -_08049148: - ldr r0, _080491A8 @ =TaskDummy - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _080491AC @ =gTasks - lsls r3, r4, 2 - adds r1, r3, r4 - lsls r1, 3 - adds r0, r1, r2 - mov r5, sp - ldrh r5, [r5, 0x8] - strh r5, [r0, 0x8] - mov r6, sp - ldrh r6, [r6, 0x18] - strh r6, [r0, 0xA] - movs r6, 0 - adds r0, r2, 0 - adds r0, 0xE - adds r1, r0 -_08049172: - mov r5, sp - adds r0, r5, r6 - ldrb r0, [r0] - strh r0, [r1] - adds r1, 0x2 - adds r6, 0x1 - cmp r6, 0x5 - ble _08049172 - adds r0, r3, r4 - lsls r0, 3 - adds r0, r2 - ldrh r6, [r5, 0x10] - strh r6, [r0, 0x1C] - movs r0, 0x6B - movs r1, 0 - bl PlaySE12WithPanning - adds r0, r4, 0 - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080491A8: .4byte TaskDummy -_080491AC: .4byte gTasks - thumb_func_end CreatePartyStatusSummarySprites - - thumb_func_start Task_HidePartyStatusSummary -Task_HidePartyStatusSummary: @ 80491B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r2, _080492C0 @ =gTasks - lsls r3, r0, 2 - adds r1, r3, r0 - lsls r1, 3 - adds r0, r1, r2 - ldrb r7, [r0, 0x1C] - ldrb r4, [r0, 0xA] - mov r10, r4 - ldrb r0, [r0, 0x8] - str r0, [sp, 0x8] - movs r5, 0 - str r3, [sp, 0xC] - adds r2, 0xE - adds r2, r1, r2 -_080491DE: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _080491DE - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldr r1, _080492C0 @ =gTasks - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r1 - movs r1, 0x10 - strh r1, [r0, 0x26] - movs r5, 0 - mov r1, r10 - lsls r1, 4 - str r1, [sp, 0x10] - ldr r3, _080492C4 @ =gSprites - movs r6, 0xD - negs r6, r6 - mov r12, r3 - movs r4, 0x4 -_08049220: - mov r2, sp - adds r0, r2, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrb r2, [r1, 0x1] - adds r0, r6, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1, 0x1] - adds r5, 0x1 - cmp r5, 0x5 - ble _08049220 - ldr r2, [sp, 0x10] - add r2, r10 - lsls r2, 2 - add r2, r12 - ldrb r1, [r2, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x1] - cmp r7, 0 - bne _0804925A - b _08049360 -_0804925A: - movs r5, 0 - mov r6, r12 - mov r9, r5 - adds r3, r6, 0 - adds r3, 0x1C - mov r4, sp - movs r7, 0 -_08049268: - ldr r0, [sp, 0x8] - str r3, [sp, 0x14] - bl GetBattlerSide - lsls r0, 24 - lsrs r2, r0, 24 - ldr r3, [sp, 0x14] - cmp r2, 0 - beq _080492CC - movs r0, 0x5 - subs r0, r5 - mov r1, sp - adds r2, r1, r0 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r7, [r0, 0x30] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r9 - strh r1, [r0, 0x34] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r9 - strh r1, [r0, 0x36] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _080492C8 @ =sub_8049630 - str r1, [r0] - ldr r2, _080492C4 @ =gSprites - mov r12, r2 - b _08049302 - .align 2, 0 -_080492C0: .4byte gTasks -_080492C4: .4byte gSprites -_080492C8: .4byte sub_8049630 -_080492CC: - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r7, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r2, [r0, 0x34] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r2, [r0, 0x36] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _08049348 @ =sub_8049630 - str r1, [r0] - ldr r0, _0804934C @ =gSprites - mov r12, r0 -_08049302: - adds r4, 0x1 - adds r7, 0x7 - adds r5, 0x1 - cmp r5, 0x5 - ble _08049268 - ldr r3, [sp, 0x10] - add r3, r10 - lsls r3, 2 - mov r1, r12 - adds r0, r3, r1 - movs r2, 0x2E - ldrsh r1, [r0, r2] - lsrs r2, r1, 31 - adds r1, r2 - asrs r1, 1 - movs r2, 0 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - mov r1, r12 - adds r1, 0x1C - adds r3, r1 - ldr r1, _08049350 @ =sub_8049568 - str r1, [r3] - ldr r1, _08049354 @ =gUnknown_8260404 - bl SetSubspriteTables - ldr r1, _08049358 @ =gTasks - ldr r0, [sp, 0xC] - add r0, r8 - lsls r0, 3 - adds r0, r1 - ldr r1, _0804935C @ =sub_8049388 - str r1, [r0] - b _0804936E - .align 2, 0 -_08049348: .4byte sub_8049630 -_0804934C: .4byte gSprites -_08049350: .4byte sub_8049568 -_08049354: .4byte gUnknown_8260404 -_08049358: .4byte gTasks -_0804935C: .4byte sub_8049388 -_08049360: - ldr r0, _08049380 @ =gTasks - ldr r1, [sp, 0xC] - add r1, r8 - lsls r1, 3 - adds r1, r0 - ldr r0, _08049384 @ =sub_804948C - str r0, [r1] -_0804936E: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049380: .4byte gTasks -_08049384: .4byte sub_804948C - thumb_func_end Task_HidePartyStatusSummary - - thumb_func_start sub_8049388 -sub_8049388: @ 8049388 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080493DC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r0, [r4, 0x1E] - adds r1, r0, 0x1 - strh r1, [r4, 0x1E] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080493C8 - ldrh r0, [r4, 0x26] - subs r1, r0, 0x1 - strh r1, [r4, 0x26] - lsls r0, r1, 16 - cmp r0, 0 - blt _080493D4 - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg -_080493C8: - movs r1, 0x26 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080493D4 - ldr r0, _080493E0 @ =sub_80493E4 - str r0, [r4] -_080493D4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080493DC: .4byte gTasks -_080493E0: .4byte sub_80493E4 - thumb_func_end sub_8049388 - - thumb_func_start sub_80493E4 -sub_80493E4: @ 80493E4 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r7, _0804945C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - adds r1, r6, r7 - ldrh r0, [r1, 0x26] - subs r0, 0x1 - strh r0, [r1, 0x26] - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - bne _08049464 - ldrb r3, [r1, 0xA] - movs r5, 0 - adds r0, r7, 0 - adds r0, 0xE - adds r2, r6, r0 -_08049412: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _08049412 - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - ldr r4, _08049460 @ =gSprites - adds r0, r4 - bl DestroySpriteAndFreeResources - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySpriteAndFreeResources - movs r5, 0x1 -_08049442: - mov r1, sp - adds r0, r1, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r5, 0x1 - cmp r5, 0x5 - ble _08049442 - b _08049482 - .align 2, 0 -_0804945C: .4byte gTasks -_08049460: .4byte gSprites -_08049464: - movs r0, 0x3 - negs r0, r0 - cmp r2, r0 - bne _08049482 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyTask -_08049482: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80493E4 - - thumb_func_start sub_804948C -sub_804948C: @ 804948C - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r7, _080494C4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - adds r3, r6, r7 - ldrh r0, [r3, 0x26] - subs r1, r0, 0x1 - strh r1, [r3, 0x26] - lsls r0, r1, 16 - asrs r2, r0, 16 - cmp r2, 0 - blt _080494C8 - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - b _08049546 - .align 2, 0 -_080494C4: .4byte gTasks -_080494C8: - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - bne _08049528 - ldrb r3, [r3, 0xA] - movs r5, 0 - adds r0, r7, 0 - adds r0, 0xE - adds r2, r6, r0 -_080494DA: - mov r0, sp - adds r1, r0, r5 - ldrh r0, [r2] - strb r0, [r1] - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - ble _080494DA - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - ldr r4, _08049524 @ =gSprites - adds r0, r4 - bl DestroySpriteAndFreeResources - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySpriteAndFreeResources - movs r5, 0x1 -_0804950A: - mov r1, sp - adds r0, r1, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - adds r5, 0x1 - cmp r5, 0x5 - ble _0804950A - b _08049546 - .align 2, 0 -_08049524: .4byte gSprites -_08049528: - movs r0, 0x3 - negs r0, r0 - cmp r2, r0 - bne _08049546 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyTask -_08049546: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804948C - - thumb_func_start SpriteCB_StatusSummaryBar -SpriteCB_StatusSummaryBar: @ 8049550 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x24] - movs r3, 0x24 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _08049564 - ldrh r0, [r1, 0x2E] - adds r0, r2, r0 - strh r0, [r1, 0x24] -_08049564: - pop {r0} - bx r0 - thumb_func_end SpriteCB_StatusSummaryBar - - thumb_func_start sub_8049568 -sub_8049568: @ 8049568 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - adds r1, r0, 0 - adds r1, 0x20 - strh r1, [r2, 0x30] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _08049586 - lsls r0, r1, 16 - asrs r0, 20 - ldrh r1, [r2, 0x24] - adds r0, r1 - b _0804958E -_08049586: - lsls r1, 16 - asrs r1, 20 - ldrh r0, [r2, 0x24] - subs r0, r1 -_0804958E: - strh r0, [r2, 0x24] - ldrh r1, [r2, 0x30] - movs r0, 0xF - ands r0, r1 - strh r0, [r2, 0x30] - pop {r0} - bx r0 - thumb_func_end sub_8049568 - - thumb_func_start SpriteCB_StatusSummaryBallsOnBattleStart -SpriteCB_StatusSummaryBallsOnBattleStart: @ 804959C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080495B0 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - b _08049626 -_080495B0: - ldrh r0, [r4, 0x32] - lsls r0, 24 - lsrs r3, r0, 24 - ldrh r2, [r4, 0x34] - adds r0, r2, 0 - adds r0, 0x38 - lsls r1, r0, 16 - lsrs r2, r1, 16 - ldr r0, _080495E0 @ =0x0000fff0 - ands r2, r0 - strh r2, [r4, 0x34] - cmp r3, 0 - beq _080495E4 - lsrs r0, r1, 20 - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - ble _080495F4 - movs r0, 0 - strh r0, [r4, 0x24] - b _080495F4 - .align 2, 0 -_080495E0: .4byte 0x0000fff0 -_080495E4: - lsrs r1, 20 - ldrh r0, [r4, 0x24] - subs r0, r1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - bge _080495F4 - strh r3, [r4, 0x24] -_080495F4: - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _08049626 - movs r1, 0x3F - cmp r3, 0 - beq _08049604 - movs r1, 0xC0 -_08049604: - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08049618 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x6D - bl PlaySE2WithPanning - b _08049622 -_08049618: - lsls r1, 24 - asrs r1, 24 - movs r0, 0x6C - bl PlaySE1WithPanning -_08049622: - ldr r0, _0804962C @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_08049626: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804962C: .4byte SpriteCallbackDummy - thumb_func_end SpriteCB_StatusSummaryBallsOnBattleStart - - thumb_func_start sub_8049630 -sub_8049630: @ 8049630 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x30] - movs r2, 0x30 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _08049644 - subs r0, r1, 0x1 - strh r0, [r3, 0x30] - b _08049694 -_08049644: - ldrh r0, [r3, 0x32] - lsls r0, 24 - ldrh r2, [r3, 0x34] - adds r1, r2, 0 - adds r1, 0x38 - lsls r4, r1, 16 - lsrs r2, r4, 16 - ldr r1, _08049664 @ =0x0000fff0 - ands r2, r1 - strh r2, [r3, 0x34] - cmp r0, 0 - beq _08049668 - lsrs r0, r4, 20 - ldrh r1, [r3, 0x24] - adds r0, r1 - b _0804966E - .align 2, 0 -_08049664: .4byte 0x0000fff0 -_08049668: - lsrs r1, r4, 20 - ldrh r0, [r3, 0x24] - subs r0, r1 -_0804966E: - strh r0, [r3, 0x24] - movs r2, 0x24 - ldrsh r0, [r3, r2] - movs r2, 0x20 - ldrsh r1, [r3, r2] - adds r0, r1 - adds r0, 0x8 - movs r1, 0x80 - lsls r1, 1 - cmp r0, r1 - bls _08049694 - adds r2, r3, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0804969C @ =SpriteCallbackDummy - str r0, [r3, 0x1C] -_08049694: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804969C: .4byte SpriteCallbackDummy - thumb_func_end sub_8049630 - - thumb_func_start SpriteCB_StatusSummaryBallsOnSwitchout -SpriteCB_StatusSummaryBallsOnSwitchout: @ 80496A0 - ldrh r2, [r0, 0x2E] - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080496BC @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrh r2, [r1, 0x24] - strh r2, [r0, 0x24] - ldrh r1, [r1, 0x26] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_080496BC: .4byte gSprites - thumb_func_end SpriteCB_StatusSummaryBallsOnSwitchout - - thumb_func_start sub_80496C0 -sub_80496C0: @ 80496C0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08049760 @ =gDisplayedStringBattle - ldr r1, _08049764 @ =gUnknown_8260556 - bl StringCopy - adds r5, r0, 0 - adds r0, r7, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - mov r0, sp - bl StringGetEnd10 - adds r0, r5, 0 - mov r1, sp - bl StringCopy - adds r5, r0, 0 - movs r0, 0xFC - strb r0, [r5] - adds r5, 0x1 - movs r0, 0x1 - strb r0, [r5] - adds r5, 0x1 - adds r0, r7, 0 - bl GetMonGender - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r7, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, 0x1D - beq _08049720 - cmp r0, 0x20 - bne _08049734 -_08049720: - movs r0, 0xB - muls r1, r0 - ldr r0, _08049768 @ =gSpeciesNames - adds r1, r0 - mov r0, sp - bl StringCompare - cmp r0, 0 - bne _08049734 - movs r6, 0x64 -_08049734: - ldr r1, _0804976C @ =gSprites - mov r0, r8 - lsls r4, r0, 4 - adds r0, r4, r0 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x3A] - lsls r1, 24 - lsrs r1, 24 - adds r0, r7, 0 - bl CheckBattleTypeGhost - lsls r0, 24 - cmp r0, 0 - beq _08049754 - movs r6, 0x64 -_08049754: - cmp r6, 0 - beq _08049770 - cmp r6, 0xFE - beq _0804977A - movs r0, 0xB - b _08049782 - .align 2, 0 -_08049760: .4byte gDisplayedStringBattle -_08049764: .4byte gUnknown_8260556 -_08049768: .4byte gSpeciesNames -_0804976C: .4byte gSprites -_08049770: - movs r0, 0xB - strb r0, [r5] - adds r5, 0x1 - movs r0, 0xB5 - b _08049782 -_0804977A: - movs r0, 0xA - strb r0, [r5] - adds r5, 0x1 - movs r0, 0xB6 -_08049782: - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] - ldr r0, _080497E4 @ =gDisplayedStringBattle - add r3, sp, 0xC - movs r1, 0 - movs r2, 0x3 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r6, r0, 0 - ldr r0, _080497E8 @ =gSprites - mov r2, r8 - adds r1, r4, r2 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r4, r0, 17 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080497F8 - ldr r1, _080497EC @ =0x06010040 - adds r0, r4, r1 - adds r1, r6, 0 - movs r2, 0x6 - bl sub_804A6E8 - bl IsDoubleBattle - lsls r0, 24 - ldr r2, _080497F0 @ =0x06010400 - adds r5, r4, r2 - cmp r0, 0 - bne _080497D4 - ldr r0, _080497F4 @ =0x06010800 - adds r5, r4, r0 -_080497D4: - adds r1, r6, 0 - adds r1, 0xC0 - adds r0, r5, 0 - movs r2, 0x1 - bl sub_804A6E8 - b _08049804 - .align 2, 0 -_080497E4: .4byte gDisplayedStringBattle -_080497E8: .4byte gSprites -_080497EC: .4byte 0x06010040 -_080497F0: .4byte 0x06010400 -_080497F4: .4byte 0x06010800 -_080497F8: - ldr r1, _08049818 @ =0x06010020 - adds r0, r4, r1 - adds r1, r6, 0 - movs r2, 0x7 - bl sub_804A6E8 -_08049804: - ldr r0, [sp, 0xC] - bl sub_804A6D8 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049818: .4byte 0x06010020 - thumb_func_end sub_80496C0 - - thumb_func_start sub_804981C -sub_804981C: @ 804981C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r0, _080498DC @ =gBattleTypeFlags - ldr r1, [r0] - ldr r0, _080498E0 @ =0x00010210 - ands r0, r1 - cmp r0, 0 - bne _0804991C - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - bne _0804991C - ldr r0, _080498E4 @ =gSprites - mov r9, r0 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r9 - mov r8, r0 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0804991C - ldr r1, _080498E8 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r5, r0, r1 - ldrh r0, [r5] - movs r7, 0x64 - muls r0, r7 - ldr r6, _080498EC @ =gEnemyParty - adds r0, r6 - adds r1, r4, 0 - bl CheckBattleTypeGhost - lsls r0, 24 - cmp r0, 0 - bne _0804991C - ldrh r0, [r5] - muls r0, r7 - adds r0, r6 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _0804991C - mov r1, r8 - ldrh r0, [r1, 0x38] - lsls r0, 24 - lsrs r4, r0, 24 - mov r2, r10 - cmp r2, 0 - beq _080498F8 - movs r0, 0x46 - bl GetHealthboxElementGfxPtr - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r9 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2 - ldr r2, _080498F0 @ =0x06010000 - adds r1, r2 - ldr r2, _080498F4 @ =0x04000008 - bl CpuSet - b _0804991C - .align 2, 0 -_080498DC: .4byte gBattleTypeFlags -_080498E0: .4byte 0x00010210 -_080498E4: .4byte gSprites -_080498E8: .4byte gBattlerPartyIndexes -_080498EC: .4byte gEnemyParty -_080498F0: .4byte 0x06010000 -_080498F4: .4byte 0x04000008 -_080498F8: - mov r0, r10 - str r0, [sp] - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - add r0, r9 - ldrh r1, [r0, 0x4] - lsls r1, 22 - lsrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2 - ldr r0, _0804992C @ =0x06010000 - adds r1, r0 - ldr r2, _08049930 @ =0x05000008 - mov r0, sp - bl CpuSet -_0804991C: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804992C: .4byte 0x06010000 -_08049930: .4byte 0x05000008 - thumb_func_end sub_804981C - - thumb_func_start UpdateStatusIconInHealthbox -UpdateStatusIconInHealthbox: @ 8049934 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _08049998 @ =gSprites - mov r2, r9 - lsls r1, r2, 4 - add r1, r9 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x3A] - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r1, 0x38] - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080499A4 - ldr r1, _0804999C @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080499A0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x37 - bl GetMonData - adds r4, r0, 0 - bl IsDoubleBattle - lsls r0, 24 - movs r3, 0x12 - mov r8, r3 - cmp r0, 0 - bne _080499C0 - movs r0, 0x1A - mov r8, r0 - b _080499C0 - .align 2, 0 -_08049998: .4byte gSprites -_0804999C: .4byte gBattlerPartyIndexes -_080499A0: .4byte gPlayerParty -_080499A4: - ldr r1, _080499E0 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080499E4 @ =gEnemyParty - adds r0, r1 - movs r1, 0x37 - bl GetMonData - adds r4, r0, 0 - movs r1, 0x11 - mov r8, r1 -_080499C0: - movs r0, 0x7 - ands r0, r4 - cmp r0, 0 - beq _080499E8 - movs r0, 0x1B - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x2 - b _08049AF4 - .align 2, 0 -_080499E0: .4byte gBattlerPartyIndexes -_080499E4: .4byte gEnemyParty -_080499E8: - movs r0, 0x88 - ands r0, r4 - cmp r0, 0 - beq _08049A06 - movs r0, 0x15 - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0 - b _08049AF4 -_08049A06: - movs r0, 0x10 - ands r0, r4 - cmp r0, 0 - beq _08049A24 - movs r0, 0x21 - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x4 - b _08049AF4 -_08049A24: - movs r0, 0x20 - ands r0, r4 - cmp r0, 0 - beq _08049A42 - movs r0, 0x1E - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x3 - b _08049AF4 -_08049A42: - movs r0, 0x40 - ands r0, r4 - cmp r0, 0 - beq _08049A60 - movs r0, 0x18 - adds r1, r7, 0 - bl GetStatusIconForBankId - lsls r0, 24 - lsrs r0, 24 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r0, 0x1 - b _08049AF4 -_08049A60: - movs r0, 0x27 - bl GetHealthboxElementGfxPtr - adds r6, r0, 0 - movs r4, 0 - mov r2, r9 - lsls r0, r2, 4 - mov r3, r8 - lsls r3, 16 - mov r8, r3 - lsls r7, 2 - ldr r1, _08049AE0 @ =gSprites - add r0, r9 - lsls r0, 2 - adds r5, r0, r1 -_08049A7E: - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - mov r2, r8 - asrs r0, r2, 16 - adds r1, r0 - adds r1, r4 - lsls r1, 5 - ldr r3, _08049AE4 @ =0x06010000 - adds r1, r3 - adds r0, r6, 0 - ldr r2, _08049AE8 @ =0x04000008 - bl CpuSet - adds r4, 0x1 - cmp r4, 0x2 - ble _08049A7E - ldr r0, _08049AEC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - adds r0, r7, r0 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08049AD4 - movs r0, 0x1 - bl GetHealthboxElementGfxPtr - ldr r2, _08049AE0 @ =gSprites - mov r3, r10 - lsls r1, r3, 4 - add r1, r10 - lsls r1, 2 - adds r1, r2 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _08049AE4 @ =0x06010000 - adds r1, r2 - ldr r2, _08049AF0 @ =0x04000010 - bl CpuSet -_08049AD4: - mov r0, r9 - movs r1, 0x1 - bl sub_804981C - b _08049BB6 - .align 2, 0 -_08049AE0: .4byte gSprites -_08049AE4: .4byte 0x06010000 -_08049AE8: .4byte 0x04000008 -_08049AEC: .4byte gBattleSpritesDataPtr -_08049AF0: .4byte 0x04000010 -_08049AF4: - mov r1, r9 - lsls r5, r1, 4 - add r5, r9 - lsls r5, 2 - ldr r2, _08049BC4 @ =gSprites - adds r5, r2 - ldrb r4, [r5, 0x5] - lsrs r4, 4 - lsls r4, 4 - adds r4, 0xC - adds r4, r7 - ldr r1, _08049BC8 @ =gUnknown_826055A - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - movs r3, 0x80 - lsls r3, 1 - adds r1, r4, r3 - movs r2, 0x2 - bl FillPalette - lsls r4, 1 - ldr r0, _08049BCC @ =gPlttBufferUnfaded + 0x200 - adds r0, r4, r0 - ldr r1, _08049BD0 @ =0x05000200 - adds r4, r1 - adds r1, r4, 0 - movs r2, 0x1 - bl CpuSet - ldrh r1, [r5, 0x4] - lsls r1, 22 - lsrs r1, 22 - add r1, r8 - lsls r1, 5 - ldr r2, _08049BD4 @ =0x06010000 - mov r8, r2 - add r1, r8 - ldr r2, _08049BD8 @ =0x04000018 - adds r0, r6, 0 - bl CpuSet - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08049B62 - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08049BAE -_08049B62: - ldr r0, _08049BDC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r7, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08049BAE - movs r0, 0 - bl GetHealthboxElementGfxPtr - mov r3, r10 - lsls r4, r3, 4 - add r4, r10 - lsls r4, 2 - ldr r1, _08049BC4 @ =gSprites - adds r4, r1 - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - add r1, r8 - ldr r5, _08049BE0 @ =0x04000008 - adds r2, r5, 0 - bl CpuSet - movs r0, 0x41 - bl GetHealthboxElementGfxPtr - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 17 - adds r1, 0x20 - add r1, r8 - adds r2, r5, 0 - bl CpuSet -_08049BAE: - mov r0, r9 - movs r1, 0 - bl sub_804981C -_08049BB6: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08049BC4: .4byte gSprites -_08049BC8: .4byte gUnknown_826055A -_08049BCC: .4byte gPlttBufferUnfaded + 0x200 -_08049BD0: .4byte 0x05000200 -_08049BD4: .4byte 0x06010000 -_08049BD8: .4byte 0x04000018 -_08049BDC: .4byte gBattleSpritesDataPtr -_08049BE0: .4byte 0x04000008 - thumb_func_end UpdateStatusIconInHealthbox - - thumb_func_start GetStatusIconForBankId -GetStatusIconForBankId: @ 8049BE4 - push {lr} - lsls r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsrs r2, r0, 24 - adds r0, r2, 0 - subs r0, 0x15 - cmp r0, 0xC - bhi _08049CA4 - lsls r0, 2 - ldr r1, _08049C00 @ =_08049C04 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08049C00: .4byte _08049C04 - .align 2, 0 -_08049C04: - .4byte _08049C38 - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C4E - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C64 - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C7A - .4byte _08049CA4 - .4byte _08049CA4 - .4byte _08049C90 -_08049C38: - movs r2, 0x15 - cmp r3, 0 - beq _08049CA4 - movs r2, 0x47 - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x65 - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x56 - b _08049CA4 -_08049C4E: - movs r2, 0x18 - cmp r3, 0 - beq _08049CA4 - movs r2, 0x4A - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x68 - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x59 - b _08049CA4 -_08049C64: - movs r2, 0x1B - cmp r3, 0 - beq _08049CA4 - movs r2, 0x4D - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x6B - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x5C - b _08049CA4 -_08049C7A: - movs r2, 0x1E - cmp r3, 0 - beq _08049CA4 - movs r2, 0x50 - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x6E - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x5F - b _08049CA4 -_08049C90: - movs r2, 0x21 - cmp r3, 0 - beq _08049CA4 - movs r2, 0x53 - cmp r3, 0x1 - beq _08049CA4 - movs r2, 0x71 - cmp r3, 0x2 - bne _08049CA4 - movs r2, 0x62 -_08049CA4: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end GetStatusIconForBankId - - thumb_func_start UpdateSafariBallsTextOnHealthbox -UpdateSafariBallsTextOnHealthbox: @ 8049CAC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08049D00 @ =gUnknown_83FE80C - movs r1, 0 - movs r2, 0x3 - mov r3, sp - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldr r1, _08049D04 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r4, [r0, 0x4] - lsls r4, 22 - lsrs r4, 17 - ldr r1, _08049D08 @ =0x06010040 - adds r0, r4, r1 - adds r1, r5, 0 - movs r2, 0x6 - bl sub_804A6E8 - ldr r0, _08049D0C @ =0x06010800 - adds r4, r0 - adds r5, 0xC0 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl sub_804A6E8 - ldr r0, [sp] - bl sub_804A6D8 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08049D00: .4byte gUnknown_83FE80C -_08049D04: .4byte gSprites -_08049D08: .4byte 0x06010040 -_08049D0C: .4byte 0x06010800 - thumb_func_end UpdateSafariBallsTextOnHealthbox - - thumb_func_start UpdateLeftNoOfBallsTextOnHealthbox -UpdateLeftNoOfBallsTextOnHealthbox: @ 8049D10 - push {r4,r5,lr} - sub sp, 0x14 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08049D84 @ =gText_HighlightRed_Left - mov r0, sp - bl StringCopy - ldr r1, _08049D88 @ =gNumSafariBalls - ldrb r1, [r1] - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - movs r0, 0 - mov r1, sp - movs r2, 0 - bl GetStringWidth - movs r1, 0x2F - subs r1, r0 - add r3, sp, 0x10 - mov r0, sp - movs r2, 0x3 - bl AddTextPrinterAndCreateWindowOnHealthbox - adds r5, r0, 0 - ldr r1, _08049D8C @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r4, [r0, 0x4] - lsls r4, 22 - lsrs r4, 17 - ldr r1, _08049D90 @ =0x060102c0 - adds r0, r4, r1 - adds r1, r5, 0 - movs r2, 0x2 - bl sub_804A734 - ldr r0, _08049D94 @ =0x06010a00 - adds r4, r0 - adds r5, 0x40 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x4 - bl sub_804A734 - ldr r0, [sp, 0x10] - bl sub_804A6D8 - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08049D84: .4byte gText_HighlightRed_Left -_08049D88: .4byte gNumSafariBalls -_08049D8C: .4byte gSprites -_08049D90: .4byte 0x060102c0 -_08049D94: .4byte 0x06010a00 - thumb_func_end UpdateLeftNoOfBallsTextOnHealthbox - - thumb_func_start UpdateHealthboxAttribute -UpdateHealthboxAttribute: @ 8049D98 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r1 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, 24 - lsrs r7, r2, 24 - ldr r1, _08049F44 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - cmp r7, 0 - bne _08049DD4 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08049DD4 - mov r0, r9 - bl GetBattlerSide -_08049DD4: - ldr r1, _08049F44 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x3A] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08049DF0 - b _08049F50 -_08049DF0: - cmp r7, 0x3 - beq _08049DF8 - cmp r7, 0 - bne _08049E0C -_08049DF8: - mov r0, r8 - movs r1, 0x38 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl UpdateLvlInHealthbox -_08049E0C: - cmp r7, 0x1 - bhi _08049E26 - mov r0, r8 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r6, 0 - movs r2, 0 - bl UpdateHpTextInHealthbox -_08049E26: - cmp r7, 0x2 - beq _08049E2E - cmp r7, 0 - bne _08049E44 -_08049E2E: - mov r0, r8 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r6, 0 - movs r2, 0x1 - bl UpdateHpTextInHealthbox -_08049E44: - cmp r7, 0x5 - beq _08049E4C - cmp r7, 0 - bne _08049E80 -_08049E4C: - movs r0, 0 - bl LoadBattleBarGfx - mov r0, r8 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - movs r0, 0 - str r0, [sp] - mov r0, r9 - adds r1, r6, 0 - adds r2, r4, 0 - bl SetBattleBarStruct - mov r0, r9 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0 - bl MoveBattleBar -_08049E80: - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - cmp r0, 0 - bne _08049F06 - cmp r7, 0x6 - beq _08049E96 - cmp r7, 0 - bne _08049F06 -_08049E96: - movs r0, 0x3 - bl LoadBattleBarGfx - mov r0, r8 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - mov r0, r8 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - movs r1, 0x19 - bl GetMonData - adds r3, r0, 0 - ldr r0, _08049F48 @ =gExperienceTables - mov r12, r0 - lsls r1, r4, 2 - ldr r2, _08049F4C @ =gBaseStats - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r2 - adds r1, r0 - add r1, r12 - ldr r1, [r1] - subs r3, r1 - adds r4, 0x1 - lsls r4, 2 - adds r4, r0 - add r4, r12 - ldr r2, [r4] - subs r2, r1 - mov r0, r10 - str r0, [sp] - mov r0, r9 - adds r1, r6, 0 - bl SetBattleBarStruct - mov r0, r9 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0 - bl MoveBattleBar -_08049F06: - cmp r7, 0x4 - beq _08049F0E - cmp r7, 0 - bne _08049F16 -_08049F0E: - adds r0, r6, 0 - mov r1, r8 - bl sub_80496C0 -_08049F16: - cmp r7, 0x9 - beq _08049F1E - cmp r7, 0 - bne _08049F24 -_08049F1E: - adds r0, r6, 0 - bl UpdateStatusIconInHealthbox -_08049F24: - cmp r7, 0xA - bne _08049F2E - adds r0, r6, 0 - bl UpdateSafariBallsTextOnHealthbox -_08049F2E: - adds r0, r7, 0 - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08049FC6 - adds r0, r6, 0 - bl UpdateLeftNoOfBallsTextOnHealthbox - b _08049FC6 - .align 2, 0 -_08049F44: .4byte gSprites -_08049F48: .4byte gExperienceTables -_08049F4C: .4byte gBaseStats -_08049F50: - cmp r7, 0x3 - beq _08049F58 - cmp r7, 0 - bne _08049F6C -_08049F58: - mov r0, r8 - movs r1, 0x38 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl UpdateLvlInHealthbox -_08049F6C: - cmp r7, 0x5 - beq _08049F74 - cmp r7, 0 - bne _08049FA8 -_08049F74: - movs r0, 0 - bl LoadBattleBarGfx - mov r0, r8 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - movs r0, 0 - str r0, [sp] - mov r0, r9 - adds r1, r6, 0 - adds r2, r4, 0 - bl SetBattleBarStruct - mov r0, r9 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0 - bl MoveBattleBar -_08049FA8: - cmp r7, 0x4 - beq _08049FB0 - cmp r7, 0 - bne _08049FB8 -_08049FB0: - adds r0, r6, 0 - mov r1, r8 - bl sub_80496C0 -_08049FB8: - cmp r7, 0x9 - beq _08049FC0 - cmp r7, 0 - bne _08049FC6 -_08049FC0: - adds r0, r6, 0 - bl UpdateStatusIconInHealthbox -_08049FC6: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end UpdateHealthboxAttribute - - thumb_func_start MoveBattleBar -MoveBattleBar: @ 8049FD8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - cmp r2, 0 - bne _0804A024 - ldr r0, _0804A020 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0xC] - mov r1, r8 - lsls r5, r1, 2 - adds r3, r5, r1 - lsls r3, 2 - adds r3, r0 - ldr r0, [r3, 0x4] - ldr r1, [r3, 0x8] - ldr r2, [r3, 0xC] - adds r3, 0x10 - movs r4, 0x6 - str r4, [sp] - movs r4, 0x1 - str r4, [sp, 0x4] - bl sub_804A2F0 - adds r4, r0, 0 - adds r7, r5, 0 - b _0804A080 - .align 2, 0 -_0804A020: .4byte gBattleSpritesDataPtr -_0804A024: - ldr r2, _0804A0D0 @ =gBattleSpritesDataPtr - mov r10, r2 - ldr r0, [r2] - ldr r2, [r0, 0xC] - mov r0, r8 - lsls r4, r0, 2 - adds r0, r4, r0 - lsls r6, r0, 2 - adds r2, r6, r2 - ldr r0, [r2, 0x8] - ldr r1, [r2, 0xC] - ldr r2, [r2, 0x4] - movs r3, 0x8 - bl GetScaledExpFraction - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r4, 0 - cmp r5, 0 - bne _0804A04E - movs r5, 0x1 -_0804A04E: - mov r1, r10 - ldr r0, [r1] - ldr r0, [r0, 0xC] - adds r4, r6, r0 - ldr r6, [r4, 0xC] - adds r0, r6, 0 - adds r1, r5, 0 - bl __divsi3 - cmp r0, 0 - bge _0804A066 - negs r0, r0 -_0804A066: - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r4, 0x4] - ldr r1, [r4, 0x8] - adds r3, r4, 0 - adds r3, 0x10 - movs r2, 0x8 - str r2, [sp] - str r5, [sp, 0x4] - adds r2, r6, 0 - bl sub_804A2F0 - adds r4, r0, 0 -_0804A080: - mov r2, r9 - cmp r2, 0x1 - beq _0804A09C - cmp r2, 0 - bne _0804A0A4 - ldr r0, _0804A0D0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - adds r0, r7, r0 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0804A0A4 -_0804A09C: - mov r0, r8 - mov r1, r9 - bl sub_804A0D4 -_0804A0A4: - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - bne _0804A0BE - ldr r0, _0804A0D0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0xC] - mov r2, r8 - adds r0, r7, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - str r1, [r0, 0x10] -_0804A0BE: - adds r0, r4, 0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0804A0D0: .4byte gBattleSpritesDataPtr - thumb_func_end MoveBattleBar - - thumb_func_start sub_804A0D4 -sub_804A0D4: @ 804A0D4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0 - beq _0804A0F0 - cmp r1, 0x1 - beq _0804A1D8 - b _0804A2D6 -_0804A0F0: - ldr r0, _0804A184 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0xC] - lsls r5, r6, 2 - adds r3, r5, r6 - lsls r3, 2 - adds r3, r0 - ldr r0, [r3, 0x4] - ldr r1, [r3, 0x8] - ldr r2, [r3, 0xC] - adds r3, 0x10 - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x6 - str r4, [sp, 0x4] - bl sub_804A3C4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - mov r9, r1 - adds r7, r5, 0 - cmp r0, 0x18 - bhi _0804A12C - movs r2, 0x38 - mov r9, r2 - cmp r0, 0x9 - bls _0804A12C - movs r4, 0x2F - mov r9, r4 -_0804A12C: - movs r5, 0 - ldr r0, _0804A188 @ =gSprites - mov r8, r0 -_0804A132: - ldr r0, _0804A184 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0xC] - adds r0, r7, r6 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrh r0, [r0, 0x38] - lsls r0, 24 - lsrs r4, r0, 24 - cmp r5, 0x1 - bhi _0804A194 - mov r0, r9 - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r5, 0x2 - adds r1, r2 - lsls r1, 5 - ldr r2, _0804A18C @ =0x06010000 - adds r1, r2 - ldr r2, _0804A190 @ =0x04000008 - bl CpuSet - b _0804A1C2 - .align 2, 0 -_0804A184: .4byte gBattleSpritesDataPtr -_0804A188: .4byte gSprites -_0804A18C: .4byte 0x06010000 -_0804A190: .4byte 0x04000008 -_0804A194: - mov r0, r9 - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r5, r1 - lsls r1, 5 - ldr r4, _0804A1D0 @ =0x06010040 - adds r1, r4 - ldr r2, _0804A1D4 @ =0x04000008 - bl CpuSet -_0804A1C2: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0804A132 - b _0804A2D6 - .align 2, 0 -_0804A1D0: .4byte 0x06010040 -_0804A1D4: .4byte 0x04000008 -_0804A1D8: - ldr r0, _0804A27C @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0xC] - lsls r5, r6, 2 - adds r3, r5, r6 - lsls r3, 2 - adds r3, r0 - ldr r0, [r3, 0x4] - ldr r1, [r3, 0x8] - ldr r2, [r3, 0xC] - adds r3, 0x10 - add r4, sp, 0x8 - str r4, [sp] - movs r4, 0x8 - str r4, [sp, 0x4] - bl sub_804A3C4 - ldr r1, _0804A280 @ =gBattlerPartyIndexes - lsls r0, r6, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0804A284 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - adds r7, r5, 0 - cmp r0, 0x64 - bne _0804A230 - movs r5, 0 - movs r1, 0 -_0804A21E: - mov r0, sp - adds r0, r5 - adds r0, 0x8 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0804A21E -_0804A230: - movs r5, 0 - ldr r0, _0804A288 @ =gSprites - mov r8, r0 - adds r0, r7, r6 - lsls r4, r0, 2 -_0804A23A: - cmp r5, 0x3 - bhi _0804A294 - movs r0, 0xC - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - ldr r1, _0804A27C @ =gBattleSpritesDataPtr - ldr r1, [r1] - ldr r1, [r1, 0xC] - adds r1, r4, r1 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r2, r5, 0 - adds r2, 0x24 - adds r1, r2 - lsls r1, 5 - ldr r2, _0804A28C @ =0x06010000 - adds r1, r2 - ldr r2, _0804A290 @ =0x04000008 - bl CpuSet - b _0804A2CC - .align 2, 0 -_0804A27C: .4byte gBattleSpritesDataPtr -_0804A280: .4byte gBattlerPartyIndexes -_0804A284: .4byte gPlayerParty -_0804A288: .4byte gSprites -_0804A28C: .4byte 0x06010000 -_0804A290: .4byte 0x04000008 -_0804A294: - movs r0, 0xC - bl GetHealthboxElementGfxPtr - mov r1, sp - adds r1, r5 - adds r1, 0x8 - ldrb r1, [r1] - lsls r1, 5 - adds r0, r1 - ldr r1, _0804A2E4 @ =gBattleSpritesDataPtr - ldr r1, [r1] - ldr r1, [r1, 0xC] - adds r1, r4, r1 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 22 - adds r1, r5, r1 - lsls r1, 5 - ldr r2, _0804A2E8 @ =0x06010b80 - adds r1, r2 - ldr r2, _0804A2EC @ =0x04000008 - bl CpuSet -_0804A2CC: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _0804A23A -_0804A2D6: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804A2E4: .4byte gBattleSpritesDataPtr -_0804A2E8: .4byte 0x06010b80 -_0804A2EC: .4byte 0x04000008 - thumb_func_end sub_804A0D4 - - thumb_func_start sub_804A2F0 -sub_804A2F0: @ 804A2F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r4, r1, 0 - mov r8, r2 - adds r5, r3, 0 - ldr r1, [sp, 0x18] - ldr r0, [sp, 0x1C] - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 27 - lsrs r2, r1, 24 - ldr r1, [r5] - ldr r0, _0804A31C @ =0xffff8000 - cmp r1, r0 - bne _0804A322 - cmp r7, r2 - bge _0804A320 - lsls r0, r4, 8 - str r0, [r5] - b _0804A322 - .align 2, 0 -_0804A31C: .4byte 0xffff8000 -_0804A320: - str r4, [r5] -_0804A322: - mov r0, r8 - subs r4, r0 - cmp r4, 0 - bge _0804A32E - movs r4, 0 - b _0804A334 -_0804A32E: - cmp r4, r7 - ble _0804A334 - adds r4, r7, 0 -_0804A334: - cmp r7, r2 - bge _0804A350 - ldr r0, [r5] - asrs r1, r0, 8 - adds r6, r0, 0 - cmp r4, r1 - bne _0804A35C - movs r0, 0xFF - ands r0, r6 - cmp r0, 0 - bne _0804A35C - movs r0, 0x1 - negs r0, r0 - b _0804A3B8 -_0804A350: - ldr r6, [r5] - cmp r4, r6 - bne _0804A35C - movs r0, 0x1 - negs r0, r0 - b _0804A3B8 -_0804A35C: - cmp r7, r2 - bge _0804A396 - lsls r0, r7, 8 - adds r1, r2, 0 - bl __divsi3 - mov r1, r8 - cmp r1, 0 - bge _0804A37A - adds r0, r6, r0 - str r0, [r5] - asrs r2, r0, 8 - cmp r2, r4 - blt _0804A3B6 - b _0804A38E -_0804A37A: - subs r0, r6, r0 - str r0, [r5] - asrs r2, r0, 8 - movs r1, 0xFF - ands r0, r1 - cmp r0, 0 - ble _0804A38A - adds r2, 0x1 -_0804A38A: - cmp r2, r4 - bgt _0804A3B6 -_0804A38E: - lsls r0, r4, 8 - str r0, [r5] - adds r2, r4, 0 - b _0804A3B6 -_0804A396: - mov r0, r8 - cmp r0, 0 - bge _0804A3A8 - ldr r0, [r5] - adds r0, r3 - str r0, [r5] - cmp r0, r4 - ble _0804A3B4 - b _0804A3B2 -_0804A3A8: - ldr r0, [r5] - subs r0, r3 - str r0, [r5] - cmp r0, r4 - bge _0804A3B4 -_0804A3B2: - str r4, [r5] -_0804A3B4: - ldr r2, [r5] -_0804A3B6: - adds r0, r2, 0 -_0804A3B8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804A2F0 - - thumb_func_start sub_804A3C4 -sub_804A3C4: @ 804A3C4 - push {r4-r7,lr} - adds r4, r0, 0 - mov r12, r3 - ldr r7, [sp, 0x14] - ldr r0, [sp, 0x18] - lsls r0, 24 - lsrs r6, r0, 24 - subs r5, r1, r2 - cmp r5, 0 - bge _0804A3DC - movs r5, 0 - b _0804A3E2 -_0804A3DC: - cmp r5, r4 - ble _0804A3E2 - adds r5, r4, 0 -_0804A3E2: - lsls r0, r6, 27 - lsrs r3, r0, 24 - movs r1, 0 - cmp r1, r6 - bcs _0804A3FC - movs r2, 0 -_0804A3EE: - adds r0, r7, r1 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r6 - bcc _0804A3EE -_0804A3FC: - cmp r4, r3 - bge _0804A410 - mov r1, r12 - ldr r0, [r1] - muls r0, r3 - adds r1, r4, 0 - bl __divsi3 - asrs r0, 8 - b _0804A41C -_0804A410: - mov r1, r12 - ldr r0, [r1] - muls r0, r3 - adds r1, r4, 0 - bl __divsi3 -_0804A41C: - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - cmp r3, 0 - bne _0804A432 - cmp r5, 0 - ble _0804A432 - movs r0, 0x1 - strb r0, [r7] - movs r3, 0x1 - b _0804A456 -_0804A432: - movs r1, 0 - movs r4, 0x8 -_0804A436: - cmp r1, r6 - bcs _0804A456 - cmp r2, 0x7 - bls _0804A452 - adds r0, r7, r1 - strb r4, [r0] - adds r0, r2, 0 - subs r0, 0x8 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - b _0804A436 -_0804A452: - adds r0, r7, r1 - strb r2, [r0] -_0804A456: - adds r0, r3, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804A3C4 - - thumb_func_start sub_804A460 -sub_804A460: @ 804A460 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x8 - mov r9, r0 - mov r10, r1 - adds r6, r2, 0 - mov r8, r3 - ldr r5, [sp, 0x24] - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r5, 24 - lsrs r5, 24 - mov r1, r9 - ldr r0, [r1] - ldr r1, [r1, 0x4] - mov r3, r9 - ldr r2, [r3, 0x8] - movs r3, 0x6 - str r3, [sp] - movs r3, 0x1 - str r3, [sp, 0x4] - mov r3, r10 - bl sub_804A2F0 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - str r5, [sp] - mov r0, r9 - mov r1, r10 - adds r2, r6, 0 - mov r3, r8 - bl sub_804A510 - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_804A460 - - thumb_func_start sub_804A4C8 -sub_804A4C8: @ 804A4C8 - push {r4,lr} - sub sp, 0x8 - adds r3, r1, 0 - ldr r4, [r0] - ldr r1, [r0, 0x4] - ldr r2, [r0, 0x8] - movs r0, 0x6 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - adds r0, r4, 0 - bl sub_804A2F0 - lsls r0, 16 - asrs r0, 16 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_804A4C8 - - thumb_func_start sub_804A4F0 -sub_804A4F0: @ 804A4F0 - push {r4,lr} - sub sp, 0x4 - ldr r4, [sp, 0xC] - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp] - bl sub_804A510 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804A4F0 - - thumb_func_start sub_804A510 -sub_804A510: @ 804A510 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, [sp, 0x40] - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, [r4] - ldr r1, [r4, 0x4] - ldr r2, [r4, 0x8] - add r3, sp, 0xC - str r3, [sp] - movs r3, 0x6 - str r3, [sp, 0x4] - adds r3, r5, 0 - bl sub_804A3C4 - movs r3, 0 - add r6, sp, 0x14 - adds r7, r6, 0 - ldrb r0, [r4, 0xC] - lsls r5, r0, 27 - ldr r4, [r4, 0x10] -_0804A554: - lsls r2, r3, 1 - adds r2, r7, r2 - lsrs r1, r5, 15 - mov r0, sp - adds r0, r3 - adds r0, 0xC - ldrb r0, [r0] - adds r0, r4, r0 - orrs r1, r0 - strh r1, [r2] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - bls _0804A554 - movs r0, 0x6 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - mov r0, r9 - adds r1, r6, 0 - mov r2, r10 - mov r3, r8 - bl CopyToBgTilemapBufferRect_ChangePalette - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804A510 - - thumb_func_start GetScaledExpFraction -GetScaledExpFraction: @ 804A59C - push {r4-r7,lr} - adds r6, r2, 0 - lsls r3, 27 - lsrs r7, r3, 24 - subs r5, r0, r1 - cmp r5, 0 - bge _0804A5AE - movs r5, 0 - b _0804A5B4 -_0804A5AE: - cmp r5, r6 - ble _0804A5B4 - adds r5, r6, 0 -_0804A5B4: - muls r0, r7 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - muls r0, r7 - adds r1, r6, 0 - bl __divsi3 - lsls r4, 24 - asrs r4, 24 - lsls r0, 24 - asrs r0, 24 - subs r0, r4, r0 - cmp r0, 0 - bge _0804A5DC - negs r0, r0 -_0804A5DC: - lsls r0, 24 - lsrs r0, 24 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GetScaledExpFraction - - thumb_func_start GetScaledHPFraction -GetScaledHPFraction: @ 804A5E8 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - muls r0, r2 - lsls r1, 16 - asrs r1, 16 - bl __divsi3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0804A60C - cmp r4, 0 - ble _0804A60C - movs r0, 0x1 -_0804A60C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetScaledHPFraction - - thumb_func_start GetHPBarLevel -GetHPBarLevel: @ 804A614 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bne _0804A626 - movs r0, 0x4 - b _0804A642 -_0804A626: - movs r2, 0x30 - bl GetScaledHPFraction - lsls r0, 24 - lsrs r1, r0, 24 - movs r0, 0x3 - cmp r1, 0x18 - bhi _0804A642 - movs r0, 0x2 - cmp r1, 0x9 - bhi _0804A642 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 -_0804A642: - pop {r1} - bx r1 - thumb_func_end GetHPBarLevel - - thumb_func_start AddTextPrinterAndCreateWindowOnHealthbox -AddTextPrinterAndCreateWindowOnHealthbox: @ 804A648 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x20 - mov r9, r0 - adds r6, r1, 0 - mov r8, r2 - mov r10, r3 - ldr r0, _0804A6D4 @ =gUnknown_8260564 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - add r0, sp, 0x18 - bl AddWindow - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, r4, 24 - lsrs r5, 24 - adds r0, r5, 0 - movs r1, 0x22 - bl FillWindowPixelBuffer - add r1, sp, 0x14 - movs r2, 0 - movs r0, 0x2 - strb r0, [r1] - movs r0, 0x1 - strb r0, [r1, 0x1] - movs r0, 0x3 - strb r0, [r1, 0x2] - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - str r2, [sp] - str r2, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0xC] - mov r0, r9 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0 - adds r2, r6, 0 - mov r3, r8 - bl AddTextPrinterParameterized4 - mov r0, r10 - str r4, [r0] - adds r0, r5, 0 - movs r1, 0x7 - bl GetWindowAttribute - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0804A6D4: .4byte gUnknown_8260564 - thumb_func_end AddTextPrinterAndCreateWindowOnHealthbox - - thumb_func_start sub_804A6D8 -sub_804A6D8: @ 804A6D8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl RemoveWindow - pop {r0} - bx r0 - thumb_func_end sub_804A6D8 - - thumb_func_start sub_804A6E8 -sub_804A6E8: @ 804A6E8 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r4, r2, 0 - movs r1, 0x80 - lsls r1, 1 - adds r0, r5, r1 - adds r1, r6, r1 - lsls r2, r4, 3 - ldr r3, _0804A72C @ =0x001fffff - ands r2, r3 - movs r3, 0x80 - lsls r3, 19 - orrs r2, r3 - bl CpuSet - cmp r4, 0 - ble _0804A724 -_0804A70C: - adds r0, r5, 0 - adds r0, 0x14 - adds r1, r6, 0 - adds r1, 0x14 - ldr r2, _0804A730 @ =0x04000003 - bl CpuSet - adds r6, 0x20 - adds r5, 0x20 - subs r4, 0x1 - cmp r4, 0 - bne _0804A70C -_0804A724: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804A72C: .4byte 0x001fffff -_0804A730: .4byte 0x04000003 - thumb_func_end sub_804A6E8 - - thumb_func_start sub_804A734 -sub_804A734: @ 804A734 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - lsls r4, r2, 3 - ldr r0, _0804A768 @ =0x001fffff - ands r4, r0 - movs r0, 0x80 - lsls r0, 19 - orrs r4, r0 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl CpuSet - movs r0, 0x80 - lsls r0, 1 - adds r5, r0 - adds r6, r0 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl CpuSet - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804A768: .4byte 0x001fffff - thumb_func_end sub_804A734 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 1f47f7214..96a599bc9 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -3272,7 +3272,7 @@ sub_81173C0: @ 81173C0 adds r6, r0, 0 lsls r6, 16 lsrs r6, 16 - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r5, _0811742C @ =gLinkPlayers @@ -3660,7 +3660,7 @@ _081177A0: ldr r0, _081177C4 @ =gBlockSendBuffer movs r1, 0x1 bl sub_8117594 - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag movs r0, 0x1 @@ -3673,7 +3673,7 @@ _081177A0: _081177C4: .4byte gBlockSendBuffer _081177C8: bl CleanupOverworldWindowsAndTilemaps - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r0, _081177EC @ =gBlockSendBuffer @@ -3689,7 +3689,7 @@ _081177C8: _081177EC: .4byte gBlockSendBuffer _081177F0: bl CleanupOverworldWindowsAndTilemaps - bl sp000_heal_pokemon + bl HealPlayerParty bl SavePlayerParty bl LoadPlayerBag ldr r0, _08117814 @ =gBlockSendBuffer diff --git a/asm/overworld.s b/asm/overworld.s index 4fbe39153..9939296af 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -19,7 +19,7 @@ sub_8054BC8: @ 8054BC8 adds r1, r0, 0 adds r0, r4, 0 bl RemoveMoney - bl sp000_heal_pokemon + bl HealPlayerParty bl sub_8054DD8 bl sub_80554BC bl WarpIntoMap diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 45eba1df8..d14d64ee4 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -5755,7 +5755,7 @@ sub_8137578: @ 8137578 bl GetNature lsls r0, 24 lsrs r6, r0, 24 - ldr r1, _081375F0 @ =gNatureNames + ldr r1, _081375F0 @ =gNatureNamePointers lsls r0, r6, 2 adds r0, r1 ldr r1, [r0] @@ -5796,7 +5796,7 @@ _081375B2: .align 2, 0 _081375E8: .4byte gUnknown_203B140 _081375EC: .4byte 0x00003290 -_081375F0: .4byte gNatureNames +_081375F0: .4byte gNatureNamePointers _081375F4: ldr r0, [r7] ldr r1, _08137614 @ =0x00003024 @@ -5952,7 +5952,7 @@ sub_8137724: @ 8137724 bl GetNature lsls r0, 24 lsrs r6, r0, 24 - ldr r1, _081377A8 @ =gNatureNames + ldr r1, _081377A8 @ =gNatureNamePointers lsls r0, r6, 2 adds r0, r1 ldr r1, [r0] @@ -5997,7 +5997,7 @@ _08137790: .align 2, 0 _081377A0: .4byte gUnknown_203B140 _081377A4: .4byte 0x00003290 -_081377A8: .4byte gNatureNames +_081377A8: .4byte gNatureNamePointers _081377AC: cmp r5, 0xFF bne _081377D0 diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s deleted file mode 100644 index 6f451b90a..000000000 --- a/asm/script_pokemon_util_80A0058.s +++ /dev/null @@ -1,535 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sp000_heal_pokemon -sp000_heal_pokemon: @ 80A0058 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r0, 0 - mov r8, r0 - ldr r0, _080A0114 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r8, r0 - bcs _080A0104 - ldr r1, _080A0118 @ =gPlayerParty - mov r10, r1 - mov r6, sp -_080A0076: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - add r4, r10 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - lsls r1, r0, 16 - strb r0, [r6] - lsrs r1, 24 - strb r1, [r6, 0x1] - adds r0, r4, 0 - movs r1, 0x39 - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x15 - bl GetMonData - lsls r0, 24 - lsrs r7, r0, 24 - movs r5, 0 - movs r1, 0x1 - add r1, r8 - mov r9, r1 -_080A00AC: - adds r1, r5, 0 - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r7, 0 - adds r2, r5, 0 - bl CalculatePPWithBonus - strb r0, [r6] - adds r1, r5, 0 - adds r1, 0x11 - adds r0, r4, 0 - mov r2, sp - bl SetMonData - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _080A00AC - movs r0, 0 - strb r0, [r6] - strb r0, [r6, 0x1] - strb r0, [r6, 0x2] - strb r0, [r6, 0x3] - movs r1, 0x64 - mov r0, r8 - muls r0, r1 - add r0, r10 - movs r1, 0x37 - mov r2, sp - bl SetMonData - mov r1, r9 - lsls r0, r1, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _080A0114 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r8, r0 - bcc _080A0076 -_080A0104: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A0114: .4byte gPlayerPartyCount -_080A0118: .4byte gPlayerParty - thumb_func_end sp000_heal_pokemon - - thumb_func_start ScriptGiveMon -ScriptGiveMon: @ 80A011C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r6, 16 - lsrs r6, 16 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r0, r5, 16 - mov r8, r0 - movs r0, 0x64 - bl AllocZeroed - adds r7, r0, 0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r4, 0 - movs r3, 0x20 - bl CreateMon - add r0, sp, 0x10 - mov r1, r8 - strb r1, [r0] - lsrs r5, 24 - strb r5, [r0, 0x1] - adds r0, r7, 0 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData - adds r0, r7, 0 - bl GiveMonToPlayer - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r6, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r5, r0, 16 - cmp r4, 0x1 - bgt _080A0196 - cmp r4, 0 - blt _080A0196 - adds r0, r5, 0 - movs r1, 0x2 - bl GetSetPokedexFlag - adds r0, r5, 0 - movs r1, 0x3 - bl GetSetPokedexFlag -_080A0196: - adds r0, r7, 0 - bl Free - adds r0, r4, 0 - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ScriptGiveMon - - thumb_func_start ScriptGiveEgg -ScriptGiveEgg: @ 80A01AC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x64 - bl AllocZeroed - adds r5, r0, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl CreateEgg - movs r1, 0x1 - mov r0, sp - strb r1, [r0] - adds r0, r5, 0 - movs r1, 0x2D - mov r2, sp - bl SetMonData - adds r0, r5, 0 - bl GiveMonToPlayer - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - bl Free - adds r0, r4, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end ScriptGiveEgg - - thumb_func_start CheckForAlivePartyMons -CheckForAlivePartyMons: @ 80A01F4 - push {lr} - bl GetMonsStateToDoubles - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1 - beq _080A0210 - cmp r1, 0x1 - bgt _080A020C - cmp r1, 0 - beq _080A0210 - b _080A0214 -_080A020C: - cmp r1, 0x2 - bne _080A0214 -_080A0210: - ldr r0, _080A0218 @ =gSpecialVar_Result - strh r1, [r0] -_080A0214: - pop {r0} - bx r0 - .align 2, 0 -_080A0218: .4byte gSpecialVar_Result - thumb_func_end CheckForAlivePartyMons - - thumb_func_start CheckPartyMonHasHeldItem -CheckPartyMonHasHeldItem: @ 80A021C - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - movs r5, 0 - movs r7, 0xCE - lsls r7, 1 -_080A0228: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080A0258 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _080A025C - cmp r0, r7 - beq _080A025C - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - cmp r0, r6 - bne _080A025C - movs r0, 0x1 - b _080A0264 - .align 2, 0 -_080A0258: .4byte gPlayerParty -_080A025C: - adds r5, 0x1 - cmp r5, 0x5 - ble _080A0228 - movs r0, 0 -_080A0264: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckPartyMonHasHeldItem - - thumb_func_start GetNameOfEnigmaBerryInPlayerParty -GetNameOfEnigmaBerryInPlayerParty: @ 80A026C - push {r4,lr} - movs r0, 0xAF - bl CheckPartyMonHasHeldItem - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r4, 0x1 - bne _080A028E - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080A0298 @ =gStringVar1 - bl GetBerryNameByBerryType -_080A028E: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080A0298: .4byte gStringVar1 - thumb_func_end GetNameOfEnigmaBerryInPlayerParty - - thumb_func_start CreateScriptedWildMon -CreateScriptedWildMon: @ 80A029C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - lsls r7, r2, 16 - lsrs r6, r7, 16 - bl ZeroEnemyPartyMons - ldr r0, _080A02F8 @ =gEnemyParty - mov r8, r0 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - mov r0, r8 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x20 - bl CreateMon - cmp r6, 0 - beq _080A02EA - add r0, sp, 0x10 - strb r6, [r0] - adds r1, r0, 0 - lsrs r0, r7, 24 - strb r0, [r1, 0x1] - mov r0, r8 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData -_080A02EA: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A02F8: .4byte gEnemyParty - thumb_func_end CreateScriptedWildMon - - thumb_func_start ScriptSetMonMoveSlot -ScriptSetMonMoveSlot: @ 80A02FC - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r2, 24 - cmp r3, 0x6 - bls _080A0318 - ldr r0, _080A032C @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 -_080A0318: - movs r0, 0x64 - muls r0, r3 - ldr r1, _080A0330 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl SetMonMoveSlot - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A032C: .4byte gPlayerPartyCount -_080A0330: .4byte gPlayerParty - thumb_func_end ScriptSetMonMoveSlot - - thumb_func_start sub_80A0334 -sub_80A0334: @ 80A0334 - push {lr} - ldr r1, _080A0348 @ =gMain - ldr r0, _080A034C @ =sub_80A0350 - str r0, [r1, 0x8] - movs r0, 0 - bl InitChooseHalfPartyForBattle - pop {r0} - bx r0 - .align 2, 0 -_080A0348: .4byte gMain -_080A034C: .4byte sub_80A0350 - thumb_func_end sub_80A0334 - - thumb_func_start sub_80A0350 -sub_80A0350: @ 80A0350 - push {lr} - ldr r0, _080A0360 @ =gSelectedOrderFromParty - ldrb r1, [r0] - cmp r1, 0 - bne _080A0368 - ldr r0, _080A0364 @ =gSpecialVar_Result - strh r1, [r0] - b _080A036E - .align 2, 0 -_080A0360: .4byte gSelectedOrderFromParty -_080A0364: .4byte gSpecialVar_Result -_080A0368: - ldr r1, _080A0378 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080A036E: - ldr r0, _080A037C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080A0378: .4byte gSpecialVar_Result -_080A037C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80A0350 - - thumb_func_start ChooseBattleTowerPlayerParty -ChooseBattleTowerPlayerParty: @ 80A0380 - push {lr} - ldr r1, _080A0394 @ =gMain - ldr r0, _080A0398 @ =sub_80A039C - str r0, [r1, 0x8] - movs r0, 0x1 - bl InitChooseHalfPartyForBattle - pop {r0} - bx r0 - .align 2, 0 -_080A0394: .4byte gMain -_080A0398: .4byte sub_80A039C - thumb_func_end ChooseBattleTowerPlayerParty - - thumb_func_start sub_80A039C -sub_80A039C: @ 80A039C - push {r4,lr} - ldr r0, _080A03B0 @ =gSelectedOrderFromParty - ldrb r4, [r0] - cmp r4, 0 - bne _080A03B8 - bl LoadPlayerParty - ldr r0, _080A03B4 @ =gSpecialVar_Result - strh r4, [r0] - b _080A03C2 - .align 2, 0 -_080A03B0: .4byte gSelectedOrderFromParty -_080A03B4: .4byte gSpecialVar_Result -_080A03B8: - bl ReducePlayerPartyToThree - ldr r1, _080A03D0 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080A03C2: - ldr r0, _080A03D4 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A03D0: .4byte gSpecialVar_Result -_080A03D4: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80A039C - - thumb_func_start ReducePlayerPartyToThree -ReducePlayerPartyToThree: @ 80A03D8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r0, 0x96 - lsls r0, 1 - bl AllocZeroed - adds r7, r0, 0 - movs r5, 0 - movs r0, 0x64 - mov r8, r0 - ldr r6, _080A0454 @ =gPlayerParty - adds r4, r7, 0 -_080A03F4: - ldr r0, _080A0458 @ =gSelectedOrderFromParty - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _080A040E - subs r0, 0x1 - mov r1, r8 - muls r1, r0 - adds r1, r6 - adds r0, r4, 0 - movs r2, 0x64 - bl memcpy -_080A040E: - adds r4, 0x64 - adds r5, 0x1 - cmp r5, 0x2 - ble _080A03F4 - movs r0, 0 - str r0, [sp] - ldr r4, _080A0454 @ =gPlayerParty - ldr r2, _080A045C @ =0x05000096 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - adds r5, r7, 0 - adds r6, r7, 0 - adds r6, 0xC8 -_080A042C: - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - adds r5, 0x64 - adds r4, 0x64 - cmp r5, r6 - ble _080A042C - bl CalculatePlayerPartyCount - adds r0, r7, 0 - bl Free - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A0454: .4byte gPlayerParty -_080A0458: .4byte gSelectedOrderFromParty -_080A045C: .4byte 0x05000096 - thumb_func_end ReducePlayerPartyToThree - - .align 2, 0 @ Don't pad with nop. diff --git a/data/battle_interface.s b/data/battle_interface.s deleted file mode 100644 index f8cf4a4b9..000000000 --- a/data/battle_interface.s +++ /dev/null @@ -1,164 +0,0 @@ -#include "constants/region_map.h" -#include "constants/trainer_classes.h" -#include "constants/songs.h" -#include "constants/flags.h" -#include "constants/region_map.h" -#include "constants/maps.h" -#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2, 0 - -gUnknown_8260270:: @ 8260270 - .4byte 0xc0004000, 0x00000400 - -gUnknown_8260278:: @ 8260278 - spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_82602A8:: @ 82602A8 - spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_82602D8:: @ 82602D8 - spr_template 55051, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_82602F0:: - .4byte 0x40004000, 0x00000400 - -gUnknown_82602F8:: @ 82602F8 - spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8 - -gUnknown_8260358:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - subsprite 240, 32, 1, 0x0030, 32x8 - subsprite 16, 32, 1, 0x0034, 32x8 - subsprite 48, 32, 1, 0x0038, 32x8 - -gUnknown_826036C:: - subsprite 240, 0, 1, 0x0040, 64x32 - subsprite 48, 0, 1, 0x0060, 32x32 - subsprite 240, 32, 1, 0x0070, 32x8 - subsprite 16, 32, 1, 0x0074, 32x8 - subsprite 48, 32, 1, 0x0078, 32x8 - -gUnknown_8260380:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - -gUnknown_8260388:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - -gUnknown_8260390:: - subsprite 240, 0, 1, 0x0000, 32x8 - subsprite 16, 0, 1, 0x0004, 32x8 - -gUnknown_8260398:: - subsprite 240, 0, 1, 0x0000, 32x8 - subsprite 16, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 8x8 - -gUnknown_82603A4:: - .4byte 5, gUnknown_8260358 - .4byte 2, gUnknown_8260380 - .4byte 5, gUnknown_826036C - .4byte 2, gUnknown_8260388 - -gUnknown_82603C4:: @ 82603C4 - .4byte 2, gUnknown_8260390 - .4byte 3, gUnknown_8260398 - -gUnknown_82603D4:: - subsprite 160, 0, 1, 0x0000, 32x8 - subsprite 192, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 32x8 - subsprite 0, 0, 1, 0x000c, 32x8 - -gUnknown_82603E4:: - subsprite 160, 0, 1, 0x0000, 32x8 - subsprite 192, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 32x8 - subsprite 0, 0, 1, 0x0008, 32x8 - subsprite 32, 0, 1, 0x0008, 32x8 - subsprite 64, 0, 1, 0x000c, 32x8 - -gUnknown_82603FC:: @ 82603FC - .4byte 4, gUnknown_82603D4 - -gUnknown_8260404:: @ 8260404 - .4byte 6, gUnknown_82603E4 - -gUnknown_26040C:: - .incbin "graphics/battle_interface/unk_826404C.4bpp" - -gUnknown_826046C:: @ 826046C - obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052 - obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053 - -gUnknown_826047C:: @ 826047C - obj_pal gBattleInterface_BallStatusBarPal, 55056 - obj_pal gBattleInterface_BallStatusBarPal, 55057 - -gUnknown_826048C:: @ 826048C - obj_pal gBattleInterface_BallDisplayPal, 55058 - obj_pal gBattleInterface_BallDisplayPal, 55059 - -gUnknown_826049C:: @ 826049C - obj_tiles gUnknown_8D12404, 0x0080, 55060 - obj_tiles gUnknown_8D12404, 0x0080, 55061 - -gUnknown_82604AC:: - .4byte 0xc0004000, 0x00000400 - -gUnknown_82604B4:: - .4byte 0x00000000, 0x00000400 - -gUnknown_82604BC:: @ 82604BC - spr_template 55052, 55056, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar - spr_template 55053, 55057, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar - -gUnknown_82604EC:: @ 82604EC - spr_template 55060, 55058, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart - spr_template 55061, 55059, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart - -gUnknown_826051C:: @ 826051C - .string "{LV_2}$", 16 - -gUnknown_826052C:: @ 826052C - .string "{COLOR 01}{HIGHLIGHT 02}", 20 - -gUnknown_8260540:: @ 8260540 - .string "/$" - -gUnknown_8260542:: @ 8260542 - .string "{COLOR 01}{HIGHLIGHT 00}", 20 - -gUnknown_8260556:: @ 8260556 - .string "{HIGHLIGHT 02}$" - -gUnknown_826055A:: @ 826055A - .2byte RGB(24, 12, 24) - .2byte RGB(23, 23, 3) - .2byte RGB(20, 20, 17) - .2byte RGB(17, 22, 28) - .2byte RGB(28, 14, 10) - -gUnknown_8260564:: @ 8260564 - .byte 0, 0, 0, 8, 2, 0 - .2byte 0x0000 - @ { - @ .bg = 0, - @ .tilemapLeft = 0, - @ .tilemapTop = 0, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 0, - @ .baseBlock = 0x0000 - @ } diff --git a/data/event_scripts.s b/data/event_scripts.s index 21fdffe43..13bba19f8 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -871,7 +871,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 81A4EE9 specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F20 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4F19 special PlayTrainerEncounterMusic @@ -923,7 +923,7 @@ EventScript_TryDoDoubleRematchBattle:: @ 81A4F73 specialvar VAR_RESULT, ScrSpecial_GetTrainerEyeRematchFlag compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A4FB0 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1A4FB1 special PlayTrainerEncounterMusic @@ -1617,7 +1617,7 @@ EventScript_1A65CE:: @ 81A65CE waitfieldeffect 25 applymovement VAR_LAST_TALKED, Movement_1A75ED waitmovement 0 - special sp000_heal_pokemon + special HealPlayerParty return EventScript_1A65EC:: @ 81A65EC @@ -2161,7 +2161,7 @@ EventScript_FadeOut_Heal_FadeIn:: @ 81A6C26 fadescreen 1 playfanfare MUS_ME_ASA waitfanfare - special sp000_heal_pokemon + special HealPlayerParty fadescreen 0 return @@ -8644,7 +8644,7 @@ EventScript_1BB519:: @ 81BB519 end EventScript_1BB51A:: @ 81BB51A - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1BB533 setvar VAR_0x8004, 2 @@ -8693,7 +8693,7 @@ EventScript_1BB54C:: @ 81BB54C end EventScript_1BB5B3:: @ 81BB5B3 - special sp000_heal_pokemon + special HealPlayerParty special SavePlayerParty special LoadPlayerBag copyvar VAR_0x406F, VAR_0x8004 @@ -9019,7 +9019,7 @@ UnknownMap_00_00_EventScript_1BB8CF:: @ 81BB8CF gUnknown_81BB8DB:: @ 81BB8DB UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9032,7 +9032,7 @@ UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB gUnknown_81BB8F8:: @ 81BB8F8 UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9045,7 +9045,7 @@ UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8 gUnknown_81BB915:: @ 81BB915 UnknownMap_00_03_EventScript_1BB915:: @ 81BB915 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9058,7 +9058,7 @@ UnknownMap_00_03_EventScript_1BB915:: @ 81BB915 gUnknown_81BB932:: @ 81BB932 UnknownMap_00_03_EventScript_1BB932:: @ 81BB932 fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1BB94F @@ -9217,7 +9217,7 @@ EventScript_1BBA94:: @ 81BBA94 goto_if eq, EventScript_1BB82F msgbox gUnknown_81BD86A closemessage - special sp000_heal_pokemon + special HealPlayerParty setvar VAR_0x8004, 6 copyvar VAR_0x406F, VAR_0x8004 special HelpSystem_Disable @@ -9368,7 +9368,7 @@ EventScript_1BBCF4:: @ 81BBCF4 end EventScript_1BBCF5:: @ 81BBCF5 - special CheckForAlivePartyMons + special HasEnoughMonsForDoubleBattle compare_var_to_value VAR_RESULT, 0 goto_if ne, EventScript_1BBD0E setvar VAR_0x8004, 1 @@ -14241,7 +14241,7 @@ EventScript_1C52D7: end EventScript_1C52E0:: @ 81C52E0 - special sp000_heal_pokemon + special HealPlayerParty setvar VAR_0x8004, 11 special sub_815D9E8 warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 9, 7 diff --git a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc index 71c8cf0ee..a713b044f 100644 --- a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc +++ b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc @@ -45,7 +45,7 @@ EventScript_1653C5:: @ 81653C5 OneIsland_KindleRoad_EmberSpa_EventScript_1653CF:: @ 81653CF lockall fadescreen 3 - special sp000_heal_pokemon + special HealPlayerParty fadescreen 2 msgbox gUnknown_817D450 setvar VAR_0x4001, 1 diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc index 850182c08..38d85f0d1 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -488,7 +488,7 @@ Movement_1694BE:: @ 81694BE step_end EventScript_1694C2:: @ 81694C2 - special sp000_heal_pokemon + special HealPlayerParty msgbox gUnknown_818DE38 closemessage playbgm MUS_RIVAL2, 0 diff --git a/data/maps/PokemonTower_5F/scripts.inc b/data/maps/PokemonTower_5F/scripts.inc index 85517e241..dee5b5bbd 100644 --- a/data/maps/PokemonTower_5F/scripts.inc +++ b/data/maps/PokemonTower_5F/scripts.inc @@ -8,7 +8,7 @@ PokemonTower_5F_EventScript_163433:: @ 8163433 PokemonTower_5F_EventScript_16343C:: @ 816343C lockall fadescreen 3 - special sp000_heal_pokemon + special HealPlayerParty fadescreen 2 msgbox gUnknown_817A1FA setvar VAR_0x4001, 1 diff --git a/data/maps/SevenIsland_House_Room1/scripts.inc b/data/maps/SevenIsland_House_Room1/scripts.inc index fd83fa051..f136b8de2 100644 --- a/data/maps/SevenIsland_House_Room1/scripts.inc +++ b/data/maps/SevenIsland_House_Room1/scripts.inc @@ -128,7 +128,7 @@ EventScript_170A11:: @ 8170A11 EventScript_170A1E:: @ 8170A1E msgbox gUnknown_81A06AB fadescreen 1 - special sub_80A0334 + special ChooseHalfPartyForBattle waitstate return diff --git a/data/maps/SevenIsland_House_Room2/scripts.inc b/data/maps/SevenIsland_House_Room2/scripts.inc index f2928f916..0ca956c55 100644 --- a/data/maps/SevenIsland_House_Room2/scripts.inc +++ b/data/maps/SevenIsland_House_Room2/scripts.inc @@ -29,7 +29,7 @@ EventScript_170A97:: @ 8170A97 compare_var_to_value VAR_RESULT, 2 call_if eq, EventScript_170B17 closemessage - special sp000_heal_pokemon + special HealPlayerParty applymovement 255, Movement_170B28 waitmovement 0 special LoadPlayerParty diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc index 142f33ee3..b0074f4b3 100644 --- a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc +++ b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc @@ -196,7 +196,7 @@ EventScript_164A53:: @ 8164A53 EventScript_164AA0:: @ 8164AA0 copyvar VAR_0x8005, VAR_RESULT setvar VAR_MAP_SCENE_TRAINER_TOWER, 1 - special sp000_heal_pokemon + special HealPlayerParty msgbox gUnknown_817C8BF setvar VAR_0x8004, 6 special sub_815D9E8 diff --git a/data/pokemon_summary_screen.s b/data/pokemon_summary_screen.s index ff732f5ae..3400c9ae0 100644 --- a/data/pokemon_summary_screen.s +++ b/data/pokemon_summary_screen.s @@ -266,7 +266,7 @@ gUnknown_8463E57:: @ 8463E57 .string "QUIRKY$" .align 2 -gNatureNames:: @ 8463E60 dataptr +gNatureNamePointers:: @ 8463E60 dataptr .4byte gUnknown_8463DBC .4byte gUnknown_8463DC2 .4byte gUnknown_8463DC9 diff --git a/data/specials.inc b/data/specials.inc index 922d9677e..8678a14a4 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -8,7 +8,7 @@ .set __special__, 0 .align 2 gSpecials:: @ 815FD60 - def_special sp000_heal_pokemon + def_special HealPlayerParty def_special SetCableClubWarp def_special DoCableClubWarp def_special sub_807E704 @@ -49,7 +49,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special SavePlayerParty def_special LoadPlayerParty - def_special sub_80A0334 + def_special ChooseHalfPartyForBattle def_special sp02A_crash_sound def_special nullsub_75 def_special nullsub_75 @@ -69,7 +69,7 @@ gSpecials:: @ 815FD60 def_special ScrSpecial_GetTrainerEyeRematchFlag def_special ScrSpecial_StartTrainerEyeRematch def_special ShowPokemonStorageSystem - def_special CheckForAlivePartyMons + def_special HasEnoughMonsForDoubleBattle def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 diff --git a/include/battle_interface.h b/include/battle_interface.h index 162faa8cb..01f3c4b29 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -79,8 +79,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u8 GetHPBarLevel(s16 hp, s16 maxhp); -void sub_80496C0(u8 spriteId, struct Pokemon *mon); -void sub_804981C(u8 spriteId, u8); +void UpdateNickInHealthbox(u8 spriteId, struct Pokemon *mon); +void TryAddPokeballIconToHealthbox(u8 spriteId, u8); s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/battle_message.h b/include/battle_message.h index 612b253cf..2e2baa278 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -248,4 +248,7 @@ extern const u8 gUnknown_83FE85C[]; extern const u8 gUnknown_83FE860[]; extern const u8 gUnknown_83FE864[]; +extern const u8 gText_SafariBalls[]; +extern const u8 gText_HighlightRed_Left[]; + #endif // GUARD_BATTLE_MESSAGE_H diff --git a/include/graphics.h b/include/graphics.h index dc0389420..a668364bd 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4854,4 +4854,11 @@ extern const u32 gFireRedTrainerCard_Gfx[]; extern const u16 gEmeraldTrainerCard_Pal[]; extern const u32 gEmeraldTrainerCard_Gfx[]; +// battle_interface +extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[]; +extern const u8 gHealthboxElementsGfxTable[][32]; +extern const u16 gBattleInterface_BallStatusBarPal[]; +extern const u16 gBattleInterface_BallDisplayPal[]; +extern const u16 gUnknown_8D12404[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util.h index 75e826e93..5f7dc4306 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util.h @@ -1,11 +1,11 @@ -#ifndef GUARD_SCRIPT_POKEMON_UTIL_80A0058_H -#define GUARD_SCRIPT_POKEMON_UTIL_80A0058_H +#ifndef GUARD_SCRIPT_POKEMON_UTIL_H +#define GUARD_SCRIPT_POKEMON_UTIL_H bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3); bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); -void sp000_heal_pokemon(void); +void HealPlayerParty(void); void ReducePlayerPartyToThree(void); void CreateScriptedWildMon(u16 species, u8 level, u16 item); -#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H +#endif //GUARD_SCRIPT_POKEMON_UTIL_H diff --git a/include/text.h b/include/text.h index a15b42c92..e538123fd 100644 --- a/include/text.h +++ b/include/text.h @@ -250,7 +250,7 @@ u16 RenderText(struct TextPrinter *textPrinter); s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing); s32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str); +u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); u8 GetKeypadIconWidth(u8 keypadIconId); diff --git a/ld_script.txt b/ld_script.txt index b18f0d5f2..2544f8d42 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -79,7 +79,7 @@ SECTIONS { src/util.o(.text); src/blend_palette.o(.text); src/daycare.o(.text); - asm/battle_interface.o(.text); + src/battle_interface.o(.text); asm/smokescreen.o(.text); src/pokeball.o(.text); src/load_save.o(.text); @@ -145,7 +145,7 @@ SECTIONS { src/script_menu.o(.text); asm/naming_screen.o(.text); src/money.o(.text); - asm/script_pokemon_util_80A0058.o(.text); + src/script_pokemon_util.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); src/pc_screen_effect.o(.text); @@ -405,7 +405,7 @@ SECTIONS { src/util.o(.rodata); src/daycare.o(.rodata); src/battle_gfx_sfx_util.o(.rodata); - data/battle_interface.o(.rodata); + src/battle_interface.o(.rodata); src/pokeball.o(.rodata); src/trade.o(.rodata); src/trade_scene.o(.rodata); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d7bccb298..60cff27be 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -687,8 +687,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform) gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]); SetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_NICKNAME, gSpeciesNames[targetSpecies]); - sub_80496C0(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]); - sub_804981C(gHealthboxSpriteIds[battlerAtk], 1); + UpdateNickInHealthbox(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]); + TryAddPokeballIconToHealthbox(gHealthboxSpriteIds[battlerAtk], 1); } else if (notTransform) { diff --git a/src/battle_interface.c b/src/battle_interface.c new file mode 100644 index 000000000..6d16c0902 --- /dev/null +++ b/src/battle_interface.c @@ -0,0 +1,2800 @@ +#include "global.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "menu.h" +#include "palette.h" +#include "pokedex.h" +#include "pokemon_summary_screen.h" +#include "safari_zone.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "window.h" +#include "constants/songs.h" + +#define GetStringRightAlignXOffset(fontId, string, destWidth) ({ \ + s32 w = GetStringWidth(fontId, string, 0); \ + destWidth - w; \ +}) + +#define abs(a) ((a) < 0 ? -(a) : (a)) + +#define Q_24_8(n) ((s32)((n) * 256)) +#define Q_24_8_TO_INT(n) ((int)((n) >> 8)) + +struct TestingBar +{ + s32 maxValue; + s32 oldValue; + s32 receivedValue; + u32 pal:5; + u32 tileOffset; +}; + +enum +{ // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c + // These are indexes into the tables, which are filled with 8x8 square pixel data. + HEALTHBOX_GFX_0, //hp bar [black section] + HEALTHBOX_GFX_1, //hp bar "H" + HEALTHBOX_GFX_2, //hp bar "P" + HEALTHBOX_GFX_HP_BAR_GREEN, //hp bar [0 pixels] + HEALTHBOX_GFX_4, //hp bar [1 pixels] + HEALTHBOX_GFX_5, //hp bar [2 pixels] + HEALTHBOX_GFX_6, //hp bar [3 pixels] + HEALTHBOX_GFX_7, //hp bar [4 pixels] + HEALTHBOX_GFX_8, //hp bar [5 pixels] + HEALTHBOX_GFX_9, //hp bar [6 pixels] + HEALTHBOX_GFX_10, //hp bar [7 pixels] + HEALTHBOX_GFX_11, //hp bar [8 pixels] + HEALTHBOX_GFX_12, //exp bar [0 pixels] + HEALTHBOX_GFX_13, //exp bar [1 pixels] + HEALTHBOX_GFX_14, //exp bar [2 pixels] + HEALTHBOX_GFX_15, //exp bar [3 pixels] + HEALTHBOX_GFX_16, //exp bar [4 pixels] + HEALTHBOX_GFX_17, //exp bar [5 pixels] + HEALTHBOX_GFX_18, //exp bar [6 pixels] + HEALTHBOX_GFX_19, //exp bar [7 pixels] + HEALTHBOX_GFX_20, //exp bar [8 pixels] + HEALTHBOX_GFX_STATUS_PSN_BATTLER0, //status psn "(P" + HEALTHBOX_GFX_22, //status psn "SN" + HEALTHBOX_GFX_23, //status psn "|)"" + HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, //status prz + HEALTHBOX_GFX_25, + HEALTHBOX_GFX_26, + HEALTHBOX_GFX_STATUS_SLP_BATTLER0, //status slp + HEALTHBOX_GFX_28, + HEALTHBOX_GFX_29, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, //status frz + HEALTHBOX_GFX_31, + HEALTHBOX_GFX_32, + HEALTHBOX_GFX_STATUS_BRN_BATTLER0, //status brn + HEALTHBOX_GFX_34, + HEALTHBOX_GFX_35, + HEALTHBOX_GFX_36, //misc [Black section] + HEALTHBOX_GFX_37, //misc [Black section] + HEALTHBOX_GFX_38, //misc [Black section] + HEALTHBOX_GFX_39, //misc [Blank Health Window?] + HEALTHBOX_GFX_40, //misc [Blank Health Window?] + HEALTHBOX_GFX_41, //misc [Blank Health Window?] + HEALTHBOX_GFX_42, //misc [Blank Health Window?] + HEALTHBOX_GFX_43, //misc [Top of Health Window?] + HEALTHBOX_GFX_44, //misc [Top of Health Window?] + HEALTHBOX_GFX_45, //misc [Top of Health Window?] + HEALTHBOX_GFX_46, //misc [Blank Health Window?] + HEALTHBOX_GFX_HP_BAR_YELLOW, //hp bar yellow [0 pixels] + HEALTHBOX_GFX_48, //hp bar yellow [1 pixels] + HEALTHBOX_GFX_49, //hp bar yellow [2 pixels] + HEALTHBOX_GFX_50, //hp bar yellow [3 pixels] + HEALTHBOX_GFX_51, //hp bar yellow [4 pixels] + HEALTHBOX_GFX_52, //hp bar yellow [5 pixels] + HEALTHBOX_GFX_53, //hp bar yellow [6 pixels] + HEALTHBOX_GFX_54, //hp bar yellow [7 pixels] + HEALTHBOX_GFX_55, //hp bar yellow [8 pixels] + HEALTHBOX_GFX_HP_BAR_RED, //hp bar red [0 pixels] + HEALTHBOX_GFX_57, //hp bar red [1 pixels] + HEALTHBOX_GFX_58, //hp bar red [2 pixels] + HEALTHBOX_GFX_59, //hp bar red [3 pixels] + HEALTHBOX_GFX_60, //hp bar red [4 pixels] + HEALTHBOX_GFX_61, //hp bar red [5 pixels] + HEALTHBOX_GFX_62, //hp bar red [6 pixels] + HEALTHBOX_GFX_63, //hp bar red [7 pixels] + HEALTHBOX_GFX_64, //hp bar red [8 pixels] + HEALTHBOX_GFX_65, //hp bar frame end + HEALTHBOX_GFX_66, //status ball [full] + HEALTHBOX_GFX_67, //status ball [empty] + HEALTHBOX_GFX_68, //status ball [fainted] + HEALTHBOX_GFX_69, //status ball [statused] + HEALTHBOX_GFX_70, //status ball [unused extra] + HEALTHBOX_GFX_STATUS_PSN_BATTLER1, //status2 "PSN" + HEALTHBOX_GFX_72, + HEALTHBOX_GFX_73, + HEALTHBOX_GFX_STATUS_PRZ_BATTLER1, //status2 "PRZ" + HEALTHBOX_GFX_75, + HEALTHBOX_GFX_76, + HEALTHBOX_GFX_STATUS_SLP_BATTLER1, //status2 "SLP" + HEALTHBOX_GFX_78, + HEALTHBOX_GFX_79, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER1, //status2 "FRZ" + HEALTHBOX_GFX_81, + HEALTHBOX_GFX_82, + HEALTHBOX_GFX_STATUS_BRN_BATTLER1, //status2 "BRN" + HEALTHBOX_GFX_84, + HEALTHBOX_GFX_85, + HEALTHBOX_GFX_STATUS_PSN_BATTLER2, //status3 "PSN" + HEALTHBOX_GFX_87, + HEALTHBOX_GFX_88, + HEALTHBOX_GFX_STATUS_PRZ_BATTLER2, //status3 "PRZ" + HEALTHBOX_GFX_90, + HEALTHBOX_GFX_91, + HEALTHBOX_GFX_STATUS_SLP_BATTLER2, //status3 "SLP" + HEALTHBOX_GFX_93, + HEALTHBOX_GFX_94, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER2, //status3 "FRZ" + HEALTHBOX_GFX_96, + HEALTHBOX_GFX_97, + HEALTHBOX_GFX_STATUS_BRN_BATTLER2, //status3 "BRN" + HEALTHBOX_GFX_99, + HEALTHBOX_GFX_100, + HEALTHBOX_GFX_STATUS_PSN_BATTLER3, //status4 "PSN" + HEALTHBOX_GFX_102, + HEALTHBOX_GFX_103, + HEALTHBOX_GFX_STATUS_PRZ_BATTLER3, //status4 "PRZ" + HEALTHBOX_GFX_105, + HEALTHBOX_GFX_106, + HEALTHBOX_GFX_STATUS_SLP_BATTLER3, //status4 "SLP" + HEALTHBOX_GFX_108, + HEALTHBOX_GFX_109, + HEALTHBOX_GFX_STATUS_FRZ_BATTLER3, //status4 "FRZ" + HEALTHBOX_GFX_111, + HEALTHBOX_GFX_112, + HEALTHBOX_GFX_STATUS_BRN_BATTLER3, //status4 "BRN" + HEALTHBOX_GFX_114, + HEALTHBOX_GFX_115, + HEALTHBOX_GFX_116, //unknown_D12FEC + HEALTHBOX_GFX_117, //unknown_D1300C +}; + +static void SpriteCB_HealthBoxOther(struct Sprite * sprite); +static void SpriteCB_HealthBar(struct Sprite * sprite); +static const u8 *GetHealthboxElementGfxPtr(u8 which); +static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +static void sub_8049388(u8 taskId); +static void sub_80493E4(u8 taskId); +static void sub_8049568(struct Sprite * sprite); +static void sub_8049630(struct Sprite * sprite); +static void sub_804948C(u8 taskId); +static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); +static void UpdateStatusIconInHealthbox(u8 spriteId); +static void SpriteCB_StatusSummaryBar(struct Sprite * sprite); +static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); +static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); +static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); +static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale); +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); +static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); +static void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y); +static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); +static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); +static void RemoveWindowOnHealthbox(u32 windowId); +static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); + +static const struct OamData gOamData_8260270 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { + { + .tileTag = 55039, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, { + .tileTag = 55040, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +static const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { + { + .tileTag = 55041, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, { + .tileTag = 55042, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +static const struct SpriteTemplate sHealthboxSafariSpriteTemplate = +{ + .tileTag = 55051, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData gUnknown_82602F0 = { + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .priority = 1 +}; + +static const struct SpriteTemplate gUnknown_82602F8[] = { + { + .tileTag = 55044, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55045, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55046, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55047, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + } +}; + +static const struct Subsprite gUnknown_8260358[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 }, + { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0030, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0034, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0038, 1 } +}; + +static const struct Subsprite gUnknown_826036C[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0040, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0060, 1 }, + { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0070, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0074, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0078, 1 } +}; + +static const struct Subsprite gUnknown_8260380[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +}; + +static const struct Subsprite gUnknown_8260388[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +}; + +static const struct Subsprite gUnknown_8260390[] = { + { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 } +}; + +static const struct Subsprite gUnknown_8260398[] = { + { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(8x8), SPRITE_SIZE(8x8), 0x0008, 1 } +}; + +static const struct SubspriteTable gUnknown_82603A4[] = { + {NELEMS(gUnknown_8260358), gUnknown_8260358}, + {NELEMS(gUnknown_8260380), gUnknown_8260380}, + {NELEMS(gUnknown_826036C), gUnknown_826036C}, + {NELEMS(gUnknown_8260388), gUnknown_8260388} +}; + +static const struct SubspriteTable gUnknown_82603C4[] = { + {NELEMS(gUnknown_8260390), gUnknown_8260390}, + {NELEMS(gUnknown_8260398), gUnknown_8260398} +}; + +static const struct Subsprite gUnknown_82603D4[] = { + { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +}; + +static const struct Subsprite gUnknown_82603E4[] = { + { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 32, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +}; + +static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = +{ + {NELEMS(gUnknown_82603D4), gUnknown_82603D4} +}; + +static const struct SubspriteTable gUnknown_8260404[] = { + {NELEMS(gUnknown_82603E4), gUnknown_82603E4} +}; + +static const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); + +static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheets[] = { + {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, + {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} +}; + +static const struct SpritePalette sStatusSummaryBarSpritePals[] = { + {gBattleInterface_BallStatusBarPal, 55056}, + {gBattleInterface_BallStatusBarPal, 55057} +}; + +static const struct SpritePalette sStatusSummaryBallsSpritePals[] = { + {gBattleInterface_BallDisplayPal, 55058}, + {gBattleInterface_BallDisplayPal, 55059} +}; + +static const struct SpriteSheet sStatusSummaryBallsSpriteSheets[] = { + {gUnknown_8D12404, 0x0080, 55060}, + {gUnknown_8D12404, 0x0080, 55061} +}; + +static const struct OamData gUnknown_82604AC = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const struct OamData gUnknown_82604B4 = { + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .priority = 1 +}; + +static const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { + { + .tileTag = 55052, + .paletteTag = 55056, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBar + }, { + .tileTag = 55053, + .paletteTag = 55057, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBar + } +}; + +static const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { + { + .tileTag = 55060, + .paletteTag = 55058, + .oam = &gUnknown_82604B4, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBallsOnBattleStart + }, { + .tileTag = 55061, + .paletteTag = 55059, + .oam = &gUnknown_82604B4, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBallsOnBattleStart + } +}; + +static void sub_8047B0C(s16 number, u16 *dest, bool8 unk) +{ + s8 i, j; + u8 buff[4]; + + for (i = 0; i < 4; i++) + { + buff[i] = 0; + } + + for (i = 3; ; i--) + { + if (number > 0) + { + buff[i] = number % 10; + number /= 10; + } + else + { + for (; i > -1; i--) + { + buff[i] = 0xFF; + } + if (buff[3] == 0xFF) + buff[3] = 0; + break; + } + } + + + + if (!unk) + { + for (i = 0, j = 0; i < 4; i++) + { + if (buff[j] == 0xFF) + { + dest[j + 0x00] &= 0xFC00; + dest[j + 0x00] |= 0x1E; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x1E; + } + else + { + dest[j + 0x00] &= 0xFC00; + dest[j + 0x00] |= 0x14 + buff[j]; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x34 + buff[i]; + } + j++; + } + } + else + { + for (i = 0; i < 4; i++) + { + if (buff[i] == 0xFF) + { + dest[i + 0x00] &= 0xFC00; + dest[i + 0x00] |= 0x1E; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x1E; + } + else + { + dest[i + 0x00] &= 0xFC00; + dest[i + 0x00] |= 0x14 + buff[i]; + dest[i + 0x20] &= 0xFC00; + dest[i + 0x20] |= 0x34 + buff[i]; + } + } + } +} + +static void sub_8047CAC(s16 num1, s16 num2, u16 *dest) +{ + dest[4] = 0x1E; + sub_8047B0C(num2, &dest[0], FALSE); + sub_8047B0C(num1, &dest[5], TRUE); +} + +// Because the healthbox is too large to fit into one sprite, it is divided into two sprites. +// healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. +// healthboxRight or healthboxOther is the right part of the healthbox. +// There's also the third sprite under name of healthbarSprite that refers to the healthbar visible on the healtbox. + +// data fields for healthboxMain +// oam.affineParam holds healthboxRight spriteId +#define hMain_HealthBarSpriteId data[5] +#define hMain_Battler data[6] +#define hMain_Data7 data[7] + +// data fields for healthboxRight +#define hOther_HealthBoxSpriteId data[5] + +// data fields for healthbar +#define hBar_HealthBoxSpriteId data[5] +#define hBar_Data6 data[6] + +u8 CreateBattlerHealthboxSprites(u8 a) +{ + s16 data6 = 0; + u8 healthboxLeftSpriteId; + u8 healthboxRightSpriteId; + u8 healthbarSpriteId; + struct Sprite *sprite; + + if (!IsDoubleBattle()) + { + if (GetBattlerSide(a) == B_SIDE_PLAYER) + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxRightSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxRightSpriteId].oam.tileNum += 64; + } + else + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1); + + gSprites[healthboxRightSpriteId].oam.tileNum += 32; + data6 = 2; + } + + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + } + else + { + if (GetBattlerSide(a) == B_SIDE_PLAYER) + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].oam.tileNum += 32; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + data6 = 1; + } + else + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(a) / 2], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].oam.tileNum += 32; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + data6 = 2; + } + } + healthbarSpriteId = CreateSpriteAtEnd(&gUnknown_82602F8[gBattlerPositions[a]], 140, 60, 0); + sprite = &gSprites[healthbarSpriteId]; + SetSubspriteTables(sprite, &gUnknown_82603C4[GetBattlerSide(a)]); + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + sprite->oam.priority = 1; + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); + + gSprites[healthboxLeftSpriteId].hBar_HealthBoxSpriteId = healthbarSpriteId; + gSprites[healthboxLeftSpriteId].hBar_Data6 = a; + gSprites[healthboxLeftSpriteId].invisible = TRUE; + gSprites[healthboxRightSpriteId].invisible = TRUE; + sprite->data[5] = healthboxLeftSpriteId; + sprite->data[6] = data6; + sprite->invisible = TRUE; + + return healthboxLeftSpriteId; +} + +u8 CreateSafariPlayerHealthboxSprites(void) +{ + u8 healthboxLeftSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1); + u8 healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxRightSpriteId].oam.shape = SPRITE_SHAPE(64x64); + gSprites[healthboxRightSpriteId].oam.tileNum += 0x40; + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + return healthboxLeftSpriteId; +} + +static const u8 *GetHealthboxElementGfxPtr(u8 elementId) +{ + return gHealthboxElementsGfxTable[elementId]; +} + +// Syncs the position of healthbar accordingly with the healthbox. +static void SpriteCB_HealthBar(struct Sprite *sprite) +{ + u8 r5 = sprite->data[5]; + + switch (sprite->data[6]) + { + case 0: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + case 1: + sprite->pos1.x = gSprites[r5].pos1.x + 16; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + default: + case 2: + sprite->pos1.x = gSprites[r5].pos1.x + 8; + sprite->pos1.y = gSprites[r5].pos1.y; + break; + } + sprite->pos2.x = gSprites[r5].pos2.x; + sprite->pos2.y = gSprites[r5].pos2.y; +} + +static void SpriteCB_HealthBoxOther(struct Sprite *sprite) +{ + u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; + + sprite->pos1.x = gSprites[healthboxMainSpriteId].pos1.x + 64; + sprite->pos1.y = gSprites[healthboxMainSpriteId].pos1.y; + + sprite->pos2.x = gSprites[healthboxMainSpriteId].pos2.x; + sprite->pos2.y = gSprites[healthboxMainSpriteId].pos2.y; +} + +void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue) +{ + gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId; + gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal; + gBattleSpritesDataPtr->battleBars[battlerId].oldValue = oldVal; + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue; + gBattleSpritesDataPtr->battleBars[battlerId].currValue = -32768; +} + +void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) +{ + gSprites[healthboxSpriteId].invisible = TRUE; + gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; + gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; +} + +void SetHealthboxSpriteVisible(u8 healthboxSpriteId) +{ + gSprites[healthboxSpriteId].invisible = FALSE; + gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; + gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; +} + +static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) +{ + gSprites[spriteId].pos1.x = x; + gSprites[spriteId].pos1.y = y; +} + +void DestoryHealthboxSprite(u8 healthboxSpriteId) +{ + DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); + DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); + DestroySprite(&gSprites[healthboxSpriteId]); +} + +void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerOnly) +{ + +} + +void UpdateOamPriorityInAllHealthboxes(u8 priority) +{ + s32 i; + + for (i = 0; i < gBattlersCount; i++) + { + u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i]; + u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam; + u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + + gSprites[healthboxLeftSpriteId].oam.priority = priority; + gSprites[healthboxRightSpriteId].oam.priority = priority; + gSprites[healthbarSpriteId].oam.priority = priority; + } +} + +void InitBattlerHealthboxCoords(u8 battler) +{ + s16 x = 0, y = 0; + + if (!IsDoubleBattle()) + { + if (GetBattlerSide(battler) != B_SIDE_PLAYER) + x = 44, y = 30; + else + x = 158, y = 88; + } + else + { + switch (GetBattlerPosition(battler)) + { + case B_POSITION_PLAYER_LEFT: + x = 159, y = 75; + break; + case B_POSITION_PLAYER_RIGHT: + x = 171, y = 100; + break; + case B_POSITION_OPPONENT_LEFT: + x = 44, y = 19; + break; + case B_POSITION_OPPONENT_RIGHT: + x = 32, y = 44; + break; + } + } + + UpdateSpritePos(gHealthboxSpriteIds[battler], x, y); +} + +static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + u8 text[16] = _("{LV_2}"); + u32 xPos, var1; + void *objVram; + + xPos = (u32) ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + // Alright, that part was unmatchable. It's basically doing: + // xPos = 5 * (3 - (u32)(&text[2])); + xPos--; + xPos--; + xPos -= ((u32)(text)); + var1 = (3 - xPos); + xPos = 4 * var1; + xPos += var1; + + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + + if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + { + objVram = (void*)(OBJ_VRAM0); + if (!IsDoubleBattle()) + objVram += spriteTileNum + 0x820; + else + objVram += spriteTileNum + 0x420; + } + else + { + objVram = (void*)(OBJ_VRAM0); + objVram += spriteTileNum + 0x400; + } + TextIntoHealthboxObject(objVram, windowTileData, 3); + RemoveWindowOnHealthbox(windowId); +} + +void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + u8 *strptr; + void *objVram; + + if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle()) + { + u8 text[8]; + if (maxOrCurrent != HP_CURRENT) // singles, max + { + ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum; + TextIntoHealthboxObject( (void*)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0xA40, windowTileData, 2); + RemoveWindowOnHealthbox(windowId); + } + else // singles, current + { + strptr = ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + *strptr++ = CHAR_SLASH; + *strptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum; + TextIntoHealthboxObject((void *)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0x2E0, windowTileData, 1); + TextIntoHealthboxObject((void *)(OBJ_VRAM0) + spriteTileNum * TILE_SIZE_4BPP + 0xA00, windowTileData + 0x20, 2); + RemoveWindowOnHealthbox(windowId); + } + } + else + { + u8 battler; + + u8 text[20] = __("{COLOR 01}{HIGHLIGHT 02}"); + battler = gSprites[healthboxSpriteId].hMain_Battler; + if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT) + { + UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, value, maxOrCurrent); + } + else + { + u32 var; + u8 i; + + if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + { + if (maxOrCurrent == HP_CURRENT) + var = 29; + else + var = 89; + } + else + { + if (maxOrCurrent == HP_CURRENT) + var = 20; + else + var = 48; + } + + ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + + for (i = 0; i < 3; i++) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32], + (void*)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)), + 0x20); + } + } + } +} + +static const u8 gUnknown_8260540[] = _("/"); + +static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + void *objVram; + + u8 battlerId; + + u8 text[20] = __("{COLOR 01}{HIGHLIGHT 00}"); + battlerId = gSprites[healthboxSpriteId].hMain_Battler; + + if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible + { + u8 var = 4; + u8 r7; + u8 *txtPtr; + u8 i; + + if (maxOrCurrent == HP_CURRENT) + var = 0; + + r7 = gSprites[healthboxSpriteId].data[5]; + txtPtr = ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3); + if (!maxOrCurrent) + StringCopy(txtPtr, gUnknown_8260540); + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + + for (i = var; i < var + 3; i++) + { + if (i < 3) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], + (void*)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)), + 0x20); + } + else + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32], + (void*)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)), + 0x20); + } + } + + if (maxOrCurrent == HP_CURRENT) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224], + (void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)), + 0x20); + CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20); + } + else + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side. + { + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116), + (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP), + 0x20); + } + } + } +} + +// Prints mon's nature, catch and flee rate. Probably used to test pokeblock-related features. +static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) +{ + u8 text[20] = __("{COLOR 01}{HIGHLIGHT 02}"); + s32 j, spriteTileNum; + u8 *barFontGfx; + u8 i, var, nature, healthBarSpriteId; + + barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)]; + var = 5; + nature = GetNature(mon); + StringCopy(text + 6, gNatureNamePointers[nature]); + RenderTextFont9(barFontGfx, 0, text, 0, 0, 0, 0, 0); + + for (j = 6, i = 0; i < var; i++, j++) + { + u8 elementId; + + if ((text[j] >= 55 && text[j] <= 74) || (text[j] >= 135 && text[j] <= 154)) + elementId = HEALTHBOX_GFX_44; + else if ((text[j] >= 75 && text[j] <= 79) || (text[j] >= 155 && text[j] <= 159)) + elementId = HEALTHBOX_GFX_45; + else + elementId = HEALTHBOX_GFX_43; + + CpuCopy32(GetHealthboxElementGfxPtr(elementId), barFontGfx + (i * 64), 0x20); + } + + for (j = 1; j < var + 1; j++) + { + spriteTileNum = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP; + CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20); + barFontGfx += 0x20; + + spriteTileNum = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP; + CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20); + barFontGfx += 0x20; + } + + healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2); + text[5] = CHAR_SPACE; + text[8] = CHAR_SLASH; + RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 0, text, 0, 0, 0, 0, 0); + + j = healthBarSpriteId; // Needed to match for some reason. + for (j = 0; j < 5; j++) + { + if (j <= 1) + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20], + (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP, + 32); + } + else + { + CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20], + (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP, + 32); + } + } +} + +void SwapHpBarsWithHpText(void) +{ + s32 i; + u8 healthBarSpriteId; + + for (i = 0; i < gBattlersCount; i++) + { + if (gSprites[gHealthboxSpriteIds[i]].callback == SpriteCallbackDummy + && GetBattlerSide(i) != B_SIDE_OPPONENT + && (IsDoubleBattle() || GetBattlerSide(i) != B_SIDE_PLAYER)) + { + bool8 noBars; + + gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars ^= 1; + noBars = gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars; + if (GetBattlerSide(i) == B_SIDE_PLAYER) + { + if (!IsDoubleBattle()) + continue; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + continue; + + if (noBars == TRUE) // bars to text + { + healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + + CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); + } + else // text to bars + { + UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); + } + } + else + { + if (noBars == TRUE) // bars to text + { + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + // Most likely a debug function. + PrintSafariMonInfo(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]]); + } + else + { + healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; + + CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT); + UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX); + } + } + else // text to bars + { + UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR); + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], HEALTHBOX_NICK); + } + } + gSprites[gHealthboxSpriteIds[i]].hMain_Data7 ^= 1; + } + } +} + +#define tBattler data[0] +#define tSummaryBarSpriteId data[1] +#define tBallIconSpriteId(n) data[3 + n] +#define tIsBattleStart data[10] +#define tData15 data[15] + +#ifdef NONMATCHING +static u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +{ + bool8 isOpponent; + s8 sp14; + s16 bar_X, bar_Y, bar_pos2_X, bar_data0; + s32 i; + u8 summaryBarSpriteId; + u8 ballIconSpritesIds[PARTY_SIZE]; + u8 taskId; + + if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + isOpponent = FALSE; + bar_X = 136, bar_Y = 96; + bar_pos2_X = 100; + bar_data0 = -5; + } + else + { + isOpponent = TRUE; + + if (!arg2 || !IsDoubleBattle()) + bar_X = 104, bar_Y = 40; + else + bar_X = 104, bar_Y = 16; + + bar_pos2_X = -100; + bar_data0 = 5; + } + } + else + { + isOpponent = TRUE; + bar_X = 104, bar_Y = 40; + bar_pos2_X = -100; + bar_data0 = 5; + } + + for (i = 0, sp14 = 0; i < PARTY_SIZE; i++) + { + if (partyInfo[i].hp != 0xFFFF) + sp14++; + } + + LoadCompressedSpriteSheetUsingHeap(&sStatusSummaryBarSpriteSheets[isOpponent]); + LoadSpriteSheet(&sStatusSummaryBallsSpriteSheets[isOpponent]); + LoadSpritePalette(&sStatusSummaryBarSpritePals[isOpponent]); + LoadSpritePalette(&sStatusSummaryBallsSpritePals[isOpponent]); + + summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10); + SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable); + gSprites[summaryBarSpriteId].pos2.x = bar_pos2_X; + gSprites[summaryBarSpriteId].data[0] = bar_data0; + + if (isOpponent) + { + gSprites[summaryBarSpriteId].pos1.x -= 96; + gSprites[summaryBarSpriteId].oam.matrixNum = ST_OAM_HFLIP; + } + else + { + gSprites[summaryBarSpriteId].pos1.x += 96; + } + + for (i = 0; i < PARTY_SIZE; i++) + { + ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9); + + if (!isBattleStart) + gSprites[ballIconSpritesIds[i]].callback = SpriteCB_StatusSummaryBallsOnSwitchout; + + if (!isOpponent) + { + gSprites[ballIconSpritesIds[i]].pos2.x = 0; + gSprites[ballIconSpritesIds[i]].pos2.y = 0; + } + + gSprites[ballIconSpritesIds[i]].data[0] = summaryBarSpriteId; + + if (!isOpponent) + { + gSprites[ballIconSpritesIds[i]].pos1.x += 10 * i + 24; + gSprites[ballIconSpritesIds[i]].data[1] = i * 7 + 10; + gSprites[ballIconSpritesIds[i]].pos2.x = 120; + } + else + { + gSprites[ballIconSpritesIds[i]].pos1.x -= 10 * (5 - i) + 24; + gSprites[ballIconSpritesIds[i]].data[1] = (6 - i) * 7 + 10; + gSprites[ballIconSpritesIds[i]].pos2.x = -120; + } + + gSprites[ballIconSpritesIds[i]].data[2] = isOpponent; + } + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + for (i = 0; i < PARTY_SIZE; i++) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; + } + } + else + { + if (i >= sp14) // empty slot or an egg + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[i]].oam.tileNum += 2; + } + } + } + } + else + { + /* + * FIXME: r4 and r5 are loaded correctly but in the wrong + * order. + */ + for (i = 0; i < PARTY_SIZE; i++) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 2; + } + } + else + { + if (i >= sp14) // empty slot or an egg + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; + gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; + } + else if (partyInfo[i].hp == 0) // fainted mon + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 3; + } + else if (partyInfo[i].status != 0) // mon with major status + { + gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 2; + } + } + } + } + + taskId = CreateTask(TaskDummy, 5); + gTasks[taskId].tBattler = battlerId; + gTasks[taskId].tSummaryBarSpriteId = summaryBarSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + gTasks[taskId].tBallIconSpriteId(i) = ballIconSpritesIds[i]; + + gTasks[taskId].tIsBattleStart = isBattleStart; + PlaySE12WithPanning(SE_TB_START, 0); + return taskId; +} +#else +NAKED +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x28\n" + "\tstr r1, [sp, 0xC]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x8]\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tadds r4, r2, 0\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tstr r3, [sp, 0x10]\n" + "\tcmp r4, 0\n" + "\tbeq _08048D44\n" + "\tbl GetBattlerPosition\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x3\n" + "\tbeq _08048D88\n" + "_08048D44:\n" + "\tldr r0, [sp, 0x8]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08048D64\n" + "\tmovs r7, 0\n" + "\tmovs r1, 0x88\n" + "\tmovs r2, 0x60\n" + "\tmovs r0, 0x64\n" + "\tmov r8, r0\n" + "\tldr r5, _08048D60 @ =0x0000fffb\n" + "\tb _08048D94\n" + "\t.align 2, 0\n" + "_08048D60: .4byte 0x0000fffb\n" + "_08048D64:\n" + "\tmovs r7, 0x1\n" + "\tcmp r4, 0\n" + "\tbeq _08048D74\n" + "\tbl IsDoubleBattle\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08048D7A\n" + "_08048D74:\n" + "\tmovs r1, 0x68\n" + "\tmovs r2, 0x28\n" + "\tb _08048D7E\n" + "_08048D7A:\n" + "\tmovs r1, 0x68\n" + "\tmovs r2, 0x10\n" + "_08048D7E:\n" + "\tldr r3, _08048D84 @ =0x0000ff9c\n" + "\tmov r8, r3\n" + "\tb _08048D92\n" + "\t.align 2, 0\n" + "_08048D84: .4byte 0x0000ff9c\n" + "_08048D88:\n" + "\tmovs r7, 0x1\n" + "\tmovs r1, 0x68\n" + "\tmovs r2, 0x28\n" + "\tldr r5, _08048E40 @ =0x0000ff9c\n" + "\tmov r8, r5\n" + "_08048D92:\n" + "\tmovs r5, 0x5\n" + "_08048D94:\n" + "\tmovs r6, 0\n" + "\tstr r6, [sp, 0x14]\n" + "\tlsls r4, r7, 3\n" + "\tldr r0, _08048E44 @ =sStatusSummaryBarSpriteSheets\n" + "\tmov r10, r0\n" + "\tlsls r3, r7, 1\n" + "\tmov r9, r3\n" + "\tlsls r1, 16\n" + "\tstr r1, [sp, 0x20]\n" + "\tlsls r2, 16\n" + "\tstr r2, [sp, 0x24]\n" + "\tldr r2, _08048E48 @ =0x0000ffff\n" + "\tldr r1, [sp, 0xC]\n" + "\tmovs r6, 0x5\n" + "_08048DB0:\n" + "\tldrh r0, [r1]\n" + "\tcmp r0, r2\n" + "\tbeq _08048DC4\n" + "\tldr r3, [sp, 0x14]\n" + "\tlsls r0, r3, 24\n" + "\tmovs r3, 0x80\n" + "\tlsls r3, 17\n" + "\tadds r0, r3\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x14]\n" + "_08048DC4:\n" + "\tadds r1, 0x8\n" + "\tsubs r6, 0x1\n" + "\tcmp r6, 0\n" + "\tbge _08048DB0\n" + "\tmov r6, r10\n" + "\tadds r0, r4, r6\n" + "\tbl LoadCompressedSpriteSheetUsingHeap\n" + "\tldr r0, _08048E4C @ =sStatusSummaryBallsSpriteSheets\n" + "\tadds r0, r4, r0\n" + "\tbl LoadSpriteSheet\n" + "\tldr r0, _08048E50 @ =sStatusSummaryBarSpritePals\n" + "\tadds r0, r4, r0\n" + "\tbl LoadSpritePalette\n" + "\tldr r0, _08048E54 @ =sStatusSummaryBallsSpritePals\n" + "\tadds r0, r4, r0\n" + "\tbl LoadSpritePalette\n" + "\tmov r1, r9\n" + "\tadds r0, r1, r7\n" + "\tlsls r0, 3\n" + "\tldr r1, _08048E58 @ =sStatusSummaryBarSpriteTemplates\n" + "\tadds r0, r1\n" + "\tldr r2, [sp, 0x20]\n" + "\tasrs r1, r2, 16\n" + "\tldr r3, [sp, 0x24]\n" + "\tasrs r2, r3, 16\n" + "\tmovs r3, 0xA\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x18]\n" + "\tlsls r0, 4\n" + "\tldr r6, [sp, 0x18]\n" + "\tadds r0, r6\n" + "\tlsls r0, 2\n" + "\tldr r1, _08048E5C @ =gSprites\n" + "\tadds r4, r0, r1\n" + "\tldr r1, _08048E60 @ =sStatusSummaryBar_SubspriteTable\n" + "\tadds r0, r4, 0\n" + "\tbl SetSubspriteTables\n" + "\tmov r0, r8\n" + "\tstrh r0, [r4, 0x24]\n" + "\tstrh r5, [r4, 0x2E]\n" + "\tcmp r7, 0\n" + "\tbeq _08048E64\n" + "\tldrh r0, [r4, 0x20]\n" + "\tsubs r0, 0x60\n" + "\tstrh r0, [r4, 0x20]\n" + "\tldrb r1, [r4, 0x3]\n" + "\tmovs r0, 0x3F\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tmovs r1, 0x10\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x3]\n" + "\tb _08048E6A\n" + "\t.align 2, 0\n" + "_08048E40: .4byte 0x0000ff9c\n" + "_08048E44: .4byte sStatusSummaryBarSpriteSheets\n" + "_08048E48: .4byte 0x0000ffff\n" + "_08048E4C: .4byte sStatusSummaryBallsSpriteSheets\n" + "_08048E50: .4byte sStatusSummaryBarSpritePals\n" + "_08048E54: .4byte sStatusSummaryBallsSpritePals\n" + "_08048E58: .4byte sStatusSummaryBarSpriteTemplates\n" + "_08048E5C: .4byte gSprites\n" + "_08048E60: .4byte sStatusSummaryBar_SubspriteTable\n" + "_08048E64:\n" + "\tldrh r0, [r4, 0x20]\n" + "\tadds r0, 0x60\n" + "\tstrh r0, [r4, 0x20]\n" + "_08048E6A:\n" + "\tmovs r6, 0\n" + "\tldr r1, _08048F14 @ =gSprites\n" + "\tmov r10, r1\n" + "\tmov r4, sp\n" + "\tmov r2, r9\n" + "\tadds r0, r2, r7\n" + "\tlsls r0, 3\n" + "\tstr r0, [sp, 0x1C]\n" + "\tmovs r3, 0xA\n" + "\tmov r9, r3\n" + "\tmov r8, r6\n" + "_08048E80:\n" + "\tldr r0, _08048F18 @ =sStatusSummaryBallsSpriteTemplates\n" + "\tldr r5, [sp, 0x24]\n" + "\tldr r1, _08048F1C @ =0xfffc0000\n" + "\tadds r2, r5, r1\n" + "\tldr r3, [sp, 0x1C]\n" + "\tadds r0, r3, r0\n" + "\tldr r5, [sp, 0x20]\n" + "\tasrs r1, r5, 16\n" + "\tasrs r2, 16\n" + "\tmovs r3, 0x9\n" + "\tbl CreateSpriteAtEnd\n" + "\tstrb r0, [r4]\n" + "\tldr r0, [sp, 0x10]\n" + "\tcmp r0, 0\n" + "\tbne _08048EB0\n" + "\tldrb r0, [r4]\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tldr r2, _08048F20 @ =gSprites + 0x1C\n" + "\tadds r1, r2\n" + "\tldr r0, _08048F24 @ =SpriteCB_StatusSummaryBallsOnSwitchout\n" + "\tstr r0, [r1]\n" + "_08048EB0:\n" + "\tldr r5, _08048F14 @ =gSprites\n" + "\tcmp r7, 0\n" + "\tbne _08048ECE\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadd r0, r10\n" + "\tstrh r7, [r0, 0x24]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadd r0, r10\n" + "\tstrh r7, [r0, 0x26]\n" + "_08048ECE:\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tmovs r1, 0\n" + "\tmov r3, sp\n" + "\tldrh r3, [r3, 0x18]\n" + "\tstrh r3, [r0, 0x2E]\n" + "\tcmp r7, 0\n" + "\tbne _08048F28\n" + "\tldrb r0, [r4]\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r5\n" + "\tldrh r0, [r1, 0x20]\n" + "\tadds r0, 0x18\n" + "\tadd r0, r8\n" + "\tstrh r0, [r1, 0x20]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tmov r1, r9\n" + "\tstrh r1, [r0, 0x30]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tmovs r1, 0x78\n" + "\tb _08048F66\n" + "\t.align 2, 0\n" + "_08048F14: .4byte gSprites\n" + "_08048F18: .4byte sStatusSummaryBallsSpriteTemplates\n" + "_08048F1C: .4byte 0xfffc0000\n" + "_08048F20: .4byte gSprites + 0x1C\n" + "_08048F24: .4byte SpriteCB_StatusSummaryBallsOnSwitchout\n" + "_08048F28:\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r5\n" + "\tldrh r3, [r2, 0x20]\n" + "\tsubs r3, 0x18\n" + "\tmovs r1, 0x5\n" + "\tsubs r1, r6\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 1\n" + "\tsubs r3, r0\n" + "\tstrh r3, [r2, 0x20]\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r5\n" + "\tmovs r1, 0x6\n" + "\tsubs r1, r6\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tadds r0, 0xA\n" + "\tstrh r0, [r2, 0x30]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tldr r1, _08048FD4 @ =0x0000ff88\n" + "_08048F66:\n" + "\tstrh r1, [r0, 0x24]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r5\n" + "\tstrh r7, [r0, 0x32]\n" + "\tadds r4, 0x1\n" + "\tmovs r2, 0x7\n" + "\tadd r9, r2\n" + "\tmovs r3, 0xA\n" + "\tadd r8, r3\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tbgt _08048F86\n" + "\tb _08048E80\n" + "_08048F86:\n" + "\tldr r0, [sp, 0x8]\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0804906E\n" + "\tmovs r6, 0\n" + "\tldr r5, _08048FD8 @ =gBattleTypeFlags\n" + "\tmov r10, r5\n" + "\tldr r0, _08048FDC @ =0x0000ffff\n" + "\tmov r9, r0\n" + "\tldr r7, _08048FE0 @ =gSprites\n" + "\tldr r1, _08048FE4 @ =0x000003ff\n" + "\tmov r12, r1\n" + "\tldr r2, _08048FE8 @ =0xfffffc00\n" + "\tmov r8, r2\n" + "\tmov r4, sp\n" + "\tldr r5, [sp, 0xC]\n" + "_08048FAA:\n" + "\tmov r3, r10\n" + "\tldr r0, [r3]\n" + "\tmovs r1, 0x40\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08048FEC\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, r9\n" + "\tbeq _08048FF6\n" + "\tcmp r0, 0\n" + "\tbne _0804903E\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049056\n" + "\t.align 2, 0\n" + "_08048FD4: .4byte 0x0000ff88\n" + "_08048FD8: .4byte gBattleTypeFlags\n" + "_08048FDC: .4byte 0x0000ffff\n" + "_08048FE0: .4byte gSprites\n" + "_08048FE4: .4byte 0x000003ff\n" + "_08048FE8: .4byte 0xfffffc00\n" + "_08048FEC:\n" + "\tldr r1, [sp, 0x14]\n" + "\tlsls r0, r1, 24\n" + "\tasrs r0, 24\n" + "\tcmp r6, r0\n" + "\tblt _08049024\n" + "_08048FF6:\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x1\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x1\n" + "\tstrh r1, [r0, 0x3C]\n" + "\tb _08049062\n" + "_08049024:\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, 0\n" + "\tbne _0804903E\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049056\n" + "_0804903E:\n" + "\tldr r0, [r5, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _08049062\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x2\n" + "_08049056:\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "_08049062:\n" + "\tadds r4, 0x1\n" + "\tadds r5, 0x8\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _08048FAA\n" + "\tb _08049148\n" + "_0804906E:\n" + "\tmovs r6, 0\n" + "\tldr r1, _080490B4 @ =gBattleTypeFlags\n" + "\tmov r10, r1\n" + "\tldr r2, _080490B8 @ =0x0000ffff\n" + "\tmov r9, r2\n" + "\tldr r7, _080490BC @ =gSprites\n" + "\tldr r3, _080490C0 @ =0x000003ff\n" + "\tmov r12, r3\n" + "\tldr r5, _080490C4 @ =0xfffffc00\n" + "\tmov r8, r5\n" + "\tldr r5, [sp, 0xC]\n" + "\tmov r4, sp\n" + "\tadds r4, 0x5\n" + "_08049088:\n" + "\tmov r1, r10\n" + "\tldr r0, [r1]\n" + "\tmovs r1, 0x40\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080490C8\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, r9\n" + "\tbeq _080490D2\n" + "\tcmp r0, 0\n" + "\tbne _0804911A\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049132\n" + "\t.align 2, 0\n" + "_080490B4: .4byte gBattleTypeFlags\n" + "_080490B8: .4byte 0x0000ffff\n" + "_080490BC: .4byte gSprites\n" + "_080490C0: .4byte 0x000003ff\n" + "_080490C4: .4byte 0xfffffc00\n" + "_080490C8:\n" + "\tldr r1, [sp, 0x14]\n" + "\tlsls r0, r1, 24\n" + "\tasrs r0, 24\n" + "\tcmp r6, r0\n" + "\tblt _08049100\n" + "_080490D2:\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x1\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "\tldrb r1, [r4]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x1\n" + "\tstrh r1, [r0, 0x3C]\n" + "\tb _0804913E\n" + "_08049100:\n" + "\tldrh r0, [r5]\n" + "\tcmp r0, 0\n" + "\tbne _0804911A\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x3\n" + "\tb _08049132\n" + "_0804911A:\n" + "\tldr r0, [r5, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _0804913E\n" + "\tldrb r0, [r4]\n" + "\tlsls r2, r0, 4\n" + "\tadds r2, r0\n" + "\tlsls r2, 2\n" + "\tadds r2, r7\n" + "\tldrh r3, [r2, 0x4]\n" + "\tlsls r1, r3, 22\n" + "\tlsrs r1, 22\n" + "\tadds r1, 0x2\n" + "_08049132:\n" + "\tmov r0, r12\n" + "\tands r1, r0\n" + "\tmov r0, r8\n" + "\tands r0, r3\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2, 0x4]\n" + "_0804913E:\n" + "\tsubs r4, 0x1\n" + "\tadds r5, 0x8\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _08049088\n" + "_08049148:\n" + "\tldr r0, _080491A8 @ =TaskDummy\n" + "\tmovs r1, 0x5\n" + "\tbl CreateTask\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r2, _080491AC @ =gTasks\n" + "\tlsls r3, r4, 2\n" + "\tadds r1, r3, r4\n" + "\tlsls r1, 3\n" + "\tadds r0, r1, r2\n" + "\tmov r5, sp\n" + "\tldrh r5, [r5, 0x8]\n" + "\tstrh r5, [r0, 0x8]\n" + "\tmov r6, sp\n" + "\tldrh r6, [r6, 0x18]\n" + "\tstrh r6, [r0, 0xA]\n" + "\tmovs r6, 0\n" + "\tadds r0, r2, 0\n" + "\tadds r0, 0xE\n" + "\tadds r1, r0\n" + "_08049172:\n" + "\tmov r5, sp\n" + "\tadds r0, r5, r6\n" + "\tldrb r0, [r0]\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _08049172\n" + "\tadds r0, r3, r4\n" + "\tlsls r0, 3\n" + "\tadds r0, r2\n" + "\tldrh r6, [r5, 0x10]\n" + "\tstrh r6, [r0, 0x1C]\n" + "\tmovs r0, 0x6B\n" + "\tmovs r1, 0\n" + "\tbl PlaySE12WithPanning\n" + "\tadds r0, r4, 0\n" + "\tadd sp, 0x28\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_080491A8: .4byte TaskDummy\n" + "_080491AC: .4byte gTasks"); +} +#endif //NONMATCHING + +void Task_HidePartyStatusSummary(u8 taskId) +{ + u8 ballIconSpriteIds[PARTY_SIZE]; + bool8 isBattleStart; + u8 summaryBarSpriteId; + u8 battlerId; + s32 i; + + isBattleStart = gTasks[taskId].tIsBattleStart; + summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; + battlerId = gTasks[taskId].tBattler; + + for (i = 0; i < PARTY_SIZE; i++) + ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i); + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + + gTasks[taskId].tData15 = 16; + + for (i = 0; i < PARTY_SIZE; i++) + gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND; + + gSprites[summaryBarSpriteId].oam.objMode = ST_OAM_OBJ_BLEND; + + if (isBattleStart) + { + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i; + gSprites[ballIconSpriteIds[5 - i]].data[3] = 0; + gSprites[ballIconSpriteIds[5 - i]].data[4] = 0; + gSprites[ballIconSpriteIds[5 - i]].callback = sub_8049630; + } + else + { + gSprites[ballIconSpriteIds[i]].data[1] = 7 * i; + gSprites[ballIconSpriteIds[i]].data[3] = 0; + gSprites[ballIconSpriteIds[i]].data[4] = 0; + gSprites[ballIconSpriteIds[i]].callback = sub_8049630; + } + } + gSprites[summaryBarSpriteId].data[0] /= 2; + gSprites[summaryBarSpriteId].data[1] = 0; + gSprites[summaryBarSpriteId].callback = sub_8049568; + SetSubspriteTables(&gSprites[summaryBarSpriteId], gUnknown_8260404); + gTasks[taskId].func = sub_8049388; + } + else + { + gTasks[taskId].func = sub_804948C; + } +} + +static void sub_8049388(u8 taskId) +{ + if ((gTasks[taskId].data[11]++ % 2) == 0) + { + if (--gTasks[taskId].tData15 < 0) + return; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + } + if (gTasks[taskId].tData15 == 0) + gTasks[taskId].func = sub_80493E4; +} + +static void sub_80493E4(u8 taskId) +{ + u8 ballIconSpriteIds[PARTY_SIZE]; + s32 i; + + u8 battlerId = gTasks[taskId].tBattler; + if (--gTasks[taskId].tData15 == -1) + { + u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i); + + DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]); + DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]); + + for (i = 1; i < PARTY_SIZE; i++) + DestroySprite(&gSprites[ballIconSpriteIds[i]]); + } + else if (gTasks[taskId].tData15 == -3) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyTask(taskId); + } +} + +static void sub_804948C(u8 taskId) +{ + u8 ballIconSpriteIds[PARTY_SIZE]; + s32 i; + u8 battlerId = gTasks[taskId].tBattler; + + if (--gTasks[taskId].tData15 >= 0) + { + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15])); + } + else if (gTasks[taskId].tData15 == -1) + { + u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId; + + for (i = 0; i < PARTY_SIZE; i++) + ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i); + + DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]); + DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]); + + for (i = 1; i < PARTY_SIZE; i++) + DestroySprite(&gSprites[ballIconSpriteIds[i]]); + } + else if (gTasks[taskId].tData15 == -3) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyTask(taskId); + } +} + +#undef tBattler +#undef tSummaryBarSpriteId +#undef tBallIconSpriteId +#undef tIsBattleStart +#undef tData15 + +static void SpriteCB_StatusSummaryBar(struct Sprite *sprite) +{ + if (sprite->pos2.x != 0) + sprite->pos2.x += sprite->data[0]; +} + +static void sub_8049568(struct Sprite *sprite) +{ + sprite->data[1] += 32; + if (sprite->data[0] > 0) + sprite->pos2.x += sprite->data[1] >> 4; + else + sprite->pos2.x -= sprite->data[1] >> 4; + sprite->data[1] &= 0xF; +} + +static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite) +{ + u8 var1; + u16 var2; + s8 pan; + + if (sprite->data[1] > 0) + { + sprite->data[1]--; + return; + } + + var1 = sprite->data[2]; + var2 = sprite->data[3]; + var2 += 56; + sprite->data[3] = var2 & 0xFFF0; + + if (var1 != 0) + { + sprite->pos2.x += var2 >> 4; + if (sprite->pos2.x > 0) + sprite->pos2.x = 0; + } + else + { + sprite->pos2.x -= var2 >> 4; + if (sprite->pos2.x < 0) + sprite->pos2.x = 0; + } + + if (sprite->pos2.x == 0) + { + pan = SOUND_PAN_TARGET; + if (var1 != 0) + pan = SOUND_PAN_ATTACKER; + + if (sprite->data[7] != 0) + PlaySE2WithPanning(SE_TB_KARA, pan); + else + PlaySE1WithPanning(SE_TB_KON, pan); + + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_8049630(struct Sprite *sprite) +{ + u8 var1; + u16 var2; + + if (sprite->data[1] > 0) + { + sprite->data[1]--; + return; + } + var1 = sprite->data[2]; + var2 = sprite->data[3]; + var2 += 56; + sprite->data[3] = var2 & 0xFFF0; + if (var1 != 0) + sprite->pos2.x += var2 >> 4; + else + sprite->pos2.x -= var2 >> 4; + if (sprite->pos2.x + sprite->pos1.x > 248 + || sprite->pos2.x + sprite->pos1.x < -8) + { + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + } +} + +static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite) +{ + u8 barSpriteId = sprite->data[0]; + + sprite->pos2.x = gSprites[barSpriteId].pos2.x; + sprite->pos2.y = gSprites[barSpriteId].pos2.y; +} + +static const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); + +void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u8 *ptr; + u32 windowId, spriteTileNum; + u8 *windowTileData; + u16 species; + u8 gender; + + ptr = StringCopy(gDisplayedStringBattle, gUnknown_8260556); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringGetEnd10(nickname); + ptr = StringCopy(ptr, nickname); + *ptr++ = EXT_CTRL_CODE_BEGIN; + *ptr++ = EXT_CTRL_CODE_COLOR; + + gender = GetMonGender(mon); + species = GetMonData(mon, MON_DATA_SPECIES); + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && StringCompare(nickname, gSpeciesNames[species]) == 0) + gender = 100; + + if (CheckBattleTypeGhost(mon, gSprites[healthboxSpriteId].hMain_Battler)) + gender = 100; + + // AddTextPrinterAndCreateWindowOnHealthbox's arguments are the same in all 3 cases. + // It's possible they may have been different in early development phases. + switch (gender) + { + default: + *ptr++ = TEXT_DYNAMIC_COLOR_2; + *ptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId); + break; + case MON_MALE: + *ptr++ = TEXT_DYNAMIC_COLOR_2; + *ptr++ = CHAR_MALE; + *ptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId); + break; + case MON_FEMALE: + *ptr++ = TEXT_DYNAMIC_COLOR_1; + *ptr++ = CHAR_FEMALE; + *ptr++ = EOS; + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId); + break; + } + + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + + if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) + { + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6); + ptr = (void*)(OBJ_VRAM0); + if (!IsDoubleBattle()) + ptr += spriteTileNum + 0x800; + else + ptr += spriteTileNum + 0x400; + TextIntoHealthboxObject(ptr, windowTileData + 0xC0, 1); + } + else + { + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7); + } + + RemoveWindowOnHealthbox(windowId); +} +void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) +{ + u8 battlerId, healthBarSpriteId; + + if (gBattleTypeFlags & (BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_OLD_MAN_TUTORIAL | BATTLE_TYPE_POKEDUDE)) + return; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + return; + + battlerId = gSprites[healthboxSpriteId].hMain_Battler; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + return; + if (CheckBattleTypeGhost(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId)) + return; + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT)) + return; + + healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + + if (noStatus) + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); + else + CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32); +} + +enum +{ + PAL_STATUS_PSN, + PAL_STATUS_PAR, + PAL_STATUS_SLP, + PAL_STATUS_FRZ, + PAL_STATUS_BRN +}; + +static const u16 sStatusIconColors[] = { + [PAL_STATUS_PSN] = RGB(24, 12, 24), + [PAL_STATUS_PAR] = RGB(23, 23, 3), + [PAL_STATUS_SLP] = RGB(20, 20, 17), + [PAL_STATUS_FRZ] = RGB(17, 22, 28), + [PAL_STATUS_BRN] = RGB(28, 14, 10) +}; + +static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) +{ + s32 i; + u8 battlerId, healthBarSpriteId; + u32 status, pltAdder; + const u8 *statusGfxPtr; + s16 tileNumAdder; + u8 statusPalId; + + battlerId = gSprites[healthboxSpriteId].hMain_Battler; + healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); + if (!IsDoubleBattle()) + tileNumAdder = 0x1A; + else + tileNumAdder = 0x12; + } + else + { + status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); + tileNumAdder = 0x11; + } + + if (status & STATUS1_SLEEP) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_SLP_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_SLP; + } + else if (status & STATUS1_PSN_ANY) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PSN_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_PSN; + } + else if (status & STATUS1_BURN) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_BRN_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_BRN; + } + else if (status & STATUS1_FREEZE) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_FRZ; + } + else if (status & STATUS1_PARALYSIS) + { + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battlerId)); + statusPalId = PAL_STATUS_PAR; + } + else + { + statusGfxPtr = GetHealthboxElementGfxPtr(HEALTHBOX_GFX_39); + + for (i = 0; i < 3; i++) + CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32); + + if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64); + + TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE); + return; + } + + pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16; + pltAdder += battlerId + 12; + + FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); + CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2); + CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96); + if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + { + if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) + { + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32); + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32); + } + } + TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE); +} + +static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId) +{ + u8 ret = statusElementId; + + switch (statusElementId) + { + case HEALTHBOX_GFX_STATUS_PSN_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_PRZ_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_SLP_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_FRZ_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER3; + break; + case HEALTHBOX_GFX_STATUS_BRN_BATTLER0: + if (battlerId == 0) + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER0; + else if (battlerId == 1) + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER1; + else if (battlerId == 2) + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER2; + else + ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER3; + break; + } + return ret; +} + +static void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6); + TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2); + RemoveWindowOnHealthbox(windowId); +} + +static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) +{ + u8 text[16]; + u8 *txtPtr; + u32 windowId, spriteTileNum; + u8 *windowTileData; + + txtPtr = StringCopy(text, gText_HighlightRed_Left); + ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2); + + windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, text, 0x2F), 3, &windowId); + spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; + SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2); + SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4); + RemoveWindowOnHealthbox(windowId); +} + +void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId) +{ + s32 maxHp, currHp; + u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; + + if (elementId == HEALTHBOX_ALL && !IsDoubleBattle()) + GetBattlerSide(battlerId); // Pointless function call. + + if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER) + { + u8 isDoubles; + + if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL) + UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL)); + if (elementId == HEALTHBOX_CURRENT_HP || elementId == HEALTHBOX_ALL) + UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_HP), HP_CURRENT); + if (elementId == HEALTHBOX_MAX_HP || elementId == HEALTHBOX_ALL) + UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_MAX_HP), HP_MAX); + if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL) + { + LoadBattleBarGfx(0); + maxHp = GetMonData(mon, MON_DATA_MAX_HP); + currHp = GetMonData(mon, MON_DATA_HP); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); + MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0); + } + isDoubles = IsDoubleBattle(); + if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL)) + { + u16 species; + u32 exp, currLevelExp; + s32 currExpBarValue, maxExpBarValue; + u8 level; + + LoadBattleBarGfx(3); + species = GetMonData(mon, MON_DATA_SPECIES); + level = GetMonData(mon, MON_DATA_LEVEL); + exp = GetMonData(mon, MON_DATA_EXP); + currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; + currExpBarValue = exp - currLevelExp; + maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; + SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles); + MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0); + } + if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL) + UpdateNickInHealthbox(healthboxSpriteId, mon); + if (elementId == HEALTHBOX_STATUS_ICON || elementId == HEALTHBOX_ALL) + UpdateStatusIconInHealthbox(healthboxSpriteId); + if (elementId == HEALTHBOX_SAFARI_ALL_TEXT) + UpdateSafariBallsTextOnHealthbox(healthboxSpriteId); + if (elementId == HEALTHBOX_SAFARI_ALL_TEXT || elementId == HEALTHBOX_SAFARI_BALLS_TEXT) + UpdateLeftNoOfBallsTextOnHealthbox(healthboxSpriteId); + } + else + { + if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL) + UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL)); + if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL) + { + LoadBattleBarGfx(0); + maxHp = GetMonData(mon, MON_DATA_MAX_HP); + currHp = GetMonData(mon, MON_DATA_HP); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); + MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0); + } + if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL) + UpdateNickInHealthbox(healthboxSpriteId, mon); + if (elementId == HEALTHBOX_STATUS_ICON || elementId == HEALTHBOX_ALL) + UpdateStatusIconInHealthbox(healthboxSpriteId); + } +} + +#define B_EXPBAR_PIXELS 64 +#define B_HEALTHBAR_PIXELS 48 + +s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused) +{ + s32 currentBarValue; + + if (whichBar == HEALTH_BAR) // health bar + { + currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + B_HEALTHBAR_PIXELS / 8, 1); + } + else // exp bar + { + u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8); + if (expFraction == 0) + expFraction = 1; + expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction); + + currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + B_EXPBAR_PIXELS / 8, expFraction); + } + + if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)) + MoveBattleBarGraphically(battlerId, whichBar); + + if (currentBarValue == -1) + gBattleSpritesDataPtr->battleBars[battlerId].currValue = 0; + + return currentBarValue; +} + +static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar) +{ + u8 array[8]; + u8 filledPixelsCount, level; + u8 barElementId; + u8 i; + + switch (whichBar) + { + case HEALTH_BAR: + filledPixelsCount = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + array, B_HEALTHBAR_PIXELS / 8); + + if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp + barElementId = HEALTHBOX_GFX_HP_BAR_GREEN; + else if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp + barElementId = HEALTHBOX_GFX_HP_BAR_YELLOW; + else + barElementId = HEALTHBOX_GFX_HP_BAR_RED; // 20 % or less + + for (i = 0; i < 6; i++) + { + u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId; + if (i < 2) + CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, + (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32); + else + CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, + (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + } + break; + case EXP_BAR: + CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].oldValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].currValue, + array, B_EXPBAR_PIXELS / 8); + level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL); + if (level == MAX_LEVEL) + { + for (i = 0; i < 8; i++) + array[i] = 0; + } + for (i = 0; i < 8; i++) + { + if (i < 4) + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, + (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32); + else + CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, + (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32); + } + break; + } +} +static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 scale, u16 toAdd) +{ + s32 ret, newValue; + scale *= 8; + + if (*currValue == -32768) // first function call + { + if (maxValue < scale) + *currValue = Q_24_8(oldValue); + else + *currValue = oldValue; + } + + newValue = oldValue - receivedValue; + if (newValue < 0) + newValue = 0; + else if (newValue > maxValue) + newValue = maxValue; + + if (maxValue < scale) + { + if (newValue == Q_24_8_TO_INT(*currValue) && (*currValue & 0xFF) == 0) + return -1; + } + else + { + if (newValue == *currValue) // we're done, the bar's value has been updated + return -1; + } + + if (maxValue < scale) // handle cases of max var having less pixels than the whole bar + { + s32 toAdd_ = Q_24_8(maxValue) / scale; + + if (receivedValue < 0) // fill bar right + { + *currValue += toAdd_; + ret = Q_24_8_TO_INT(*currValue); + if (ret >= newValue) + { + *currValue = Q_24_8(newValue); + ret = newValue; + } + } + else // move bar left + { + *currValue -= toAdd_; + ret = Q_24_8_TO_INT(*currValue); + // try round up + if ((*currValue & 0xFF) > 0) + ret++; + if (ret <= newValue) + { + *currValue = Q_24_8(newValue); + ret = newValue; + } + } + } + else + { + if (receivedValue < 0) // fill bar right + { + *currValue += toAdd; + if (*currValue > newValue) + *currValue = newValue; + ret = *currValue; + } + else // move bar left + { + *currValue -= toAdd; + if (*currValue < newValue) + *currValue = newValue; + ret = *currValue; + } + } + + return ret; +} + +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) +{ + u8 pixels, filledPixels, totalPixels; + u8 i; + + s32 newValue = oldValue - receivedValue; + if (newValue < 0) + newValue = 0; + else if (newValue > maxValue) + newValue = maxValue; + + totalPixels = scale * 8; + + for (i = 0; i < scale; i++) + arg4[i] = 0; + + if (maxValue < totalPixels) + pixels = (*currValue * totalPixels / maxValue) >> 8; + else + pixels = *currValue * totalPixels / maxValue; + + filledPixels = pixels; + + if (filledPixels == 0 && newValue > 0) + { + arg4[0] = 1; + filledPixels = 1; + } + else + { + for (i = 0; i < scale; i++) + { + if (pixels >= 8) + { + arg4[i] = 8; + } + else + { + arg4[i] = pixels; + break; + } + pixels -= 8; + } + } + + return filledPixels; +} + +// These functions seem as if they were made for testing the health bar. +static s16 sub_804A460(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +{ + s16 ret; + + ret = CalcNewBarValue(barInfo->maxValue, + barInfo->oldValue, + barInfo->receivedValue, + currValue, B_HEALTHBAR_PIXELS / 8, 1); + + sub_804A510(barInfo, currValue, bg, x, y); + + return ret; +} + +static s16 sub_804A4C8(struct TestingBar *barInfo, s32 *currValue) +{ + s16 ret; + + ret = CalcNewBarValue(barInfo->maxValue, + barInfo->oldValue, + barInfo->receivedValue, + currValue, B_HEALTHBAR_PIXELS / 8, 1); + + return ret; +} + +static void sub_804A4F0(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +{ + sub_804A510(barInfo, currValue, bg, x, y); +} + +static void sub_804A510(struct TestingBar *barInfo, s32 *currValue, u8 bg, u8 x, u8 y) +{ + u8 spC[B_HEALTHBAR_PIXELS / 8]; + u16 tiles[B_HEALTHBAR_PIXELS / 8]; + u8 i; + + CalcBarFilledPixels(barInfo->maxValue, + barInfo->oldValue, + barInfo->receivedValue, + currValue, spC, B_HEALTHBAR_PIXELS / 8); + + for (i = 0; i < B_HEALTHBAR_PIXELS / 8; i++) + { + tiles[i] = (barInfo->pal << 12) | (barInfo->tileOffset + spC[i]); + } + + CopyToBgTilemapBufferRect_ChangePalette(bg, tiles, x, y, 6, 1, 17); +} + +static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) +{ + s32 newVal, result; + s8 oldToMax, newToMax; + + scale *= 8; + newVal = oldValue - receivedValue; + + if (newVal < 0) + newVal = 0; + else if (newVal > maxValue) + newVal = maxValue; + + oldToMax = oldValue * scale / maxValue; + newToMax = newVal * scale / maxValue; + result = oldToMax - newToMax; + + return abs(result); +} + +u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale) +{ + u8 result = hp * scale / maxhp; + + if (result == 0 && hp > 0) + return 1; + + return result; +} + +u8 GetHPBarLevel(s16 hp, s16 maxhp) +{ + u8 result; + + if (hp == maxhp) + { + result = HP_BAR_FULL; + } + else + { + u8 fraction = GetScaledHPFraction(hp, maxhp, B_HEALTHBAR_PIXELS); + if (fraction > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp + result = HP_BAR_GREEN; + else if (fraction > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp + result = HP_BAR_YELLOW; + else if (fraction > 0) + result = HP_BAR_RED; + else + result = HP_BAR_EMPTY; + } + + return result; +} + +static const struct WindowTemplate sHealthboxWindowTemplate = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 8, + .height = 2, + .paletteNum = 0, + .baseBlock = 0x000 +}; + + +static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId) +{ + u16 winId; + u8 color[3]; + struct WindowTemplate winTemplate = sHealthboxWindowTemplate; + + winId = AddWindow(&winTemplate); + FillWindowPixelBuffer(winId, PIXEL_FILL(2)); + + color[0] = 2; + color[1] = 1; + color[2] = 3; + + AddTextPrinterParameterized4(winId, 0, x, y, 0, 0, color, -1, str); + + *windowId = winId; + return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); +} + +static void RemoveWindowOnHealthbox(u32 windowId) +{ + RemoveWindow(windowId); +} + +static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth) +{ + CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); +// + 256 as that prevents the top 4 blank rows of sHealthboxWindowTemplate from being copied + if (windowWidth > 0) + { + do + { + CpuCopy32(windowTileData + 20, dest + 20, 12); + dest += 32, windowTileData += 32; + windowWidth--; + } while (windowWidth != 0); + } +} + +static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth) +{ + CpuCopy32(windowTileData, dest, windowWidth * TILE_SIZE_4BPP); + CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); +} diff --git a/src/battle_message.c b/src/battle_message.c index 396c4c7f0..2513aaff6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1254,7 +1254,7 @@ const u8 *const gUnknown_83FE7F4[] = { sText_Speed }; -const u8 gUnknown_83FE80C[] = _("{HIGHLIGHT 2}SAFARI BALLS"); // +const u8 gText_SafariBalls[] = _("{HIGHLIGHT 2}SAFARI BALLS"); // const u8 gText_HighlightRed_Left[] = _("{HIGHLIGHT 2}Left: "); const u8 gText_HighlightRed[] = _("{HIGHLIGHT 2}"); const u8 gText_Sleep[] = _("sleep"); diff --git a/src/battle_setup.c b/src/battle_setup.c index 17da53083..056fe9273 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -9,7 +9,7 @@ #include "safari_zone.h" #include "quest_log.h" #include "script.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "strings.h" #include "string_util.h" #include "event_data.h" @@ -901,7 +901,7 @@ static void CB2_EndTrainerBattle(void) gSpecialVar_Result = 1; if (gUnknown_20386CC & 1) { - sp000_heal_pokemon(); + HealPlayerParty(); } else { diff --git a/src/battle_tower.c b/src/battle_tower.c index c8098abf4..fb22d4fd1 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -18,7 +18,7 @@ #include "new_game.h" #include "save.h" #include "item.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "constants/species.h" #include "constants/items.h" #include "constants/moves.h" diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 6d4652f35..112889710 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -1,5 +1,5 @@ #include "global.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "event_data.h" #include "credits.h" #include "overworld.h" @@ -14,7 +14,7 @@ bool8 Special_HallOfFame(void) bool8 *r7; int i; bool8 gaveAtLeastOneRibbon; - sp000_heal_pokemon(); + HealPlayerParty(); if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) { gHasHallOfFameRecords = TRUE; diff --git a/src/scrcmd.c b/src/scrcmd.c index 6d2b1f430..4eaea9cef 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -27,7 +27,7 @@ #include "data.h" #include "field_specials.h" #include "constants/items.h" -#include "script_pokemon_util_80A0058.h" +#include "script_pokemon_util.h" #include "pokemon_storage_system.h" #include "party_menu.h" #include "money.h" diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c new file mode 100644 index 000000000..4069f09fa --- /dev/null +++ b/src/script_pokemon_util.c @@ -0,0 +1,217 @@ +#include "global.h" +#include "battle.h" +#include "berry.h" +#include "daycare.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "load_save.h" +#include "malloc.h" +#include "overworld.h" +#include "party_menu.h" +#include "pokedex.h" +#include "script_pokemon_util.h" +#include "constants/items.h" +#include "constants/species.h" + +static void CB2_ReturnFromChooseHalfParty(void); +static void CB2_ReturnFromChooseBattleTowerParty(void); + +void HealPlayerParty(void) +{ + u8 i, j; + u8 ppBonuses; + u8 arg[4]; + + // restore HP. + for(i = 0; i < gPlayerPartyCount; i++) + { + u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + arg[0] = maxHP; + arg[1] = maxHP >> 8; + SetMonData(&gPlayerParty[i], MON_DATA_HP, arg); + ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES); + + // restore PP. + for(j = 0; j < MAX_MON_MOVES; j++) + { + arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg); + } + + // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData. + arg[0] = 0; + arg[1] = 0; + arg[2] = 0; + arg[3] = 0; + SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg); + } +} + +u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3) +{ + u16 nationalDexNum; + int sentToPc; + u8 heldItem[2]; + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + + CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + sentToPc = GiveMonToPlayer(mon); + nationalDexNum = SpeciesToNationalPokedexNum(species); + + switch(sentToPc) + { + case MON_GIVEN_TO_PARTY: + case MON_GIVEN_TO_PC: + GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN); + GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT); + break; + } + + Free(mon); + return sentToPc; +} + +u8 ScriptGiveEgg(u16 species) +{ + struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon)); + bool8 isEgg; + bool8 sentToPc; + + CreateEgg(mon, species, TRUE); + isEgg = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); + + sentToPc = GiveMonToPlayer(mon); + Free(mon); + return sentToPc; +} + +void HasEnoughMonsForDoubleBattle(void) +{ + switch (GetMonsStateToDoubles()) + { + case PLAYER_HAS_TWO_USABLE_MONS: + gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS; + break; + case PLAYER_HAS_ONE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_MON; + break; + case PLAYER_HAS_ONE_USABLE_MON: + gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON; + break; + } +} + +static bool8 CheckPartyMonHasHeldItem(u16 item) +{ + int i; + + for(i = 0; i < PARTY_SIZE; i++) + { + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) + return TRUE; + } + return FALSE; +} + +bool8 GetNameOfEnigmaBerryInPlayerParty(void) +{ + bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); + if (hasItem == TRUE) + GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1); + + return hasItem; +} + +void CreateScriptedWildMon(u16 species, u8 level, u16 item) +{ + u8 heldItem[2]; + + ZeroEnemyPartyMons(); + CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + if (item) + { + heldItem[0] = item; + heldItem[1] = item >> 8; + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem); + } +} + +void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) +{ + if (monIndex > PARTY_SIZE) + monIndex = gPlayerPartyCount - 1; + + SetMonMoveSlot(&gPlayerParty[monIndex], move, slot); +} + +// Note: When control returns to the event script, gSpecialVar_Result will be +// TRUE if the party selection was successful. +void ChooseHalfPartyForBattle(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseHalfParty; +// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); + InitChooseHalfPartyForBattle(0); +} + +static void CB2_ReturnFromChooseHalfParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + gSpecialVar_Result = FALSE; + break; + default: + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ChooseBattleTowerPlayerParty(void) +{ + gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty; + InitChooseHalfPartyForBattle(1); +} + +static void CB2_ReturnFromChooseBattleTowerParty(void) +{ + switch (gSelectedOrderFromParty[0]) + { + case 0: + LoadPlayerParty(); + gSpecialVar_Result = FALSE; + break; + default: + ReducePlayerPartyToThree(); + gSpecialVar_Result = TRUE; + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void ReducePlayerPartyToThree(void) +{ + struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon)); + int i; + + // copy the selected pokemon according to the order. + for (i = 0; i < 3; i++) + if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop + party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal + + CpuFill32(0, gPlayerParty, sizeof gPlayerParty); + + // overwrite the first 3 with the order copied to. + for (i = 0; i < 3; i++) + gPlayerParty[i] = party[i]; + + CalculatePlayerPartyCount(); + Free(party); +} diff --git a/src/text.c b/src/text.c index 93a35a07d..a0da0399f 100644 --- a/src/text.c +++ b/src/text.c @@ -1180,7 +1180,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) +u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7) { u8 shadowColor; u8 *strLocal; |