summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-01-10 16:32:32 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-01-10 16:32:32 -0500
commit3e79c7890fe3196f3c9142a796e18f9b628dd762 (patch)
tree47c9cbd6107cdab808f6e1d5472c92b64a98fe59
parent1a246cc567f91d3975a7b9ca26a74afd06245bc9 (diff)
through UpdateLvlInHealthbox
-rw-r--r--asm/battle_interface.s1252
-rw-r--r--data/battle_interface.s14
-rw-r--r--include/graphics.h3
-rw-r--r--include/pokemon_summary_screen.h1
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_interface.c383
6 files changed, 423 insertions, 1231 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 753b1696b..43a8a8391 100644
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -5,1202 +5,6 @@
.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}
@@ -1285,7 +89,7 @@ _080484BC:
adds r0, r4, r1
adds r1, r5, 0
movs r2, 0x1
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
ldr r2, _08048510 @ =0x06010a00
adds r4, r2
adds r1, r5, 0
@@ -1293,9 +97,9 @@ _080484BC:
adds r0, r4, 0
_080484FE:
movs r2, 0x2
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
ldr r0, [sp, 0x2C]
- bl sub_804A6D8
+ bl RemoveWindowOnHealthbox
b _080485F8
.align 2, 0
_0804850C: .4byte 0x060102e0
@@ -1332,7 +136,7 @@ _0804854C:
asrs r1, 16
mov r0, r9
mov r2, r8
- bl sub_8048618
+ bl UpdateHpTextInHealthboxInDoubles
b _080485F8
.align 2, 0
_0804855C: .4byte gUnknown_826052C
@@ -1427,8 +231,8 @@ _08048610: .4byte 0x06010000
_08048614: .4byte 0x04000008
thumb_func_end UpdateHpTextInHealthbox
- thumb_func_start sub_8048618
-sub_8048618: @ 8048618
+ thumb_func_start UpdateHpTextInHealthboxInDoubles
+UpdateHpTextInHealthboxInDoubles: @ 8048618
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -1651,10 +455,10 @@ _080487DC:
_080487EC: .4byte gSprites
_080487F0: .4byte 0x06010000
_080487F4: .4byte 0x04000008
- thumb_func_end sub_8048618
+ thumb_func_end UpdateHpTextInHealthboxInDoubles
- thumb_func_start sub_80487F8
-sub_80487F8: @ 80487F8
+ thumb_func_start PrintSafariMonInfo
+PrintSafariMonInfo: @ 80487F8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -1943,7 +747,7 @@ _08048A2C:
.align 2, 0
_08048A44: .4byte 0x060100c0
_08048A48: .4byte 0x04000008
- thumb_func_end sub_80487F8
+ thumb_func_end PrintSafariMonInfo
thumb_func_start SwapHpBarsWithHpText
SwapHpBarsWithHpText: @ 8048A4C
@@ -2087,7 +891,7 @@ _08048B16:
asrs r1, 16
adds r0, r4, 0
movs r2, 0
- bl sub_8048618
+ bl UpdateHpTextInHealthboxInDoubles
ldrb r4, [r6]
mov r2, r8
ldrh r0, [r2]
@@ -2153,7 +957,7 @@ _08048BE8:
muls r1, r2
ldr r2, _08048C10 @ =gEnemyParty
adds r1, r2
- bl sub_80487F8
+ bl PrintSafariMonInfo
b _08048CCA
.align 2, 0
_08048C0C: .4byte gBattleTypeFlags
@@ -2194,7 +998,7 @@ _08048C14:
asrs r1, 16
adds r0, r4, 0
movs r2, 0
- bl sub_8048618
+ bl UpdateHpTextInHealthboxInDoubles
ldrb r4, [r6]
mov r2, r8
ldrh r0, [r2]
@@ -2210,7 +1014,7 @@ _08048C6E:
asrs r1, 16
adds r0, r4, 0
movs r2, 0x1
- bl sub_8048618
+ bl UpdateHpTextInHealthboxInDoubles
b _08048CCA
.align 2, 0
_08048C88: .4byte 0x06010000
@@ -3667,7 +2471,7 @@ _08049782:
adds r0, r4, r1
adds r1, r6, 0
movs r2, 0x6
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
bl IsDoubleBattle
lsls r0, 24
ldr r2, _080497F0 @ =0x06010400
@@ -3681,7 +2485,7 @@ _080497D4:
adds r1, 0xC0
adds r0, r5, 0
movs r2, 0x1
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
b _08049804
.align 2, 0
_080497E4: .4byte gDisplayedStringBattle
@@ -3694,10 +2498,10 @@ _080497F8:
adds r0, r4, r1
adds r1, r6, 0
movs r2, 0x7
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
_08049804:
ldr r0, [sp, 0xC]
- bl sub_804A6D8
+ bl RemoveWindowOnHealthbox
add sp, 0x10
pop {r3}
mov r8, r3
@@ -4276,16 +3080,16 @@ UpdateSafariBallsTextOnHealthbox: @ 8049CAC
adds r0, r4, r1
adds r1, r5, 0
movs r2, 0x6
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
ldr r0, _08049D0C @ =0x06010800
adds r4, r0
adds r5, 0xC0
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x2
- bl sub_804A6E8
+ bl TextIntoHealthboxObject
ldr r0, [sp]
- bl sub_804A6D8
+ bl RemoveWindowOnHealthbox
add sp, 0x4
pop {r4,r5}
pop {r0}
@@ -4344,7 +3148,7 @@ UpdateLeftNoOfBallsTextOnHealthbox: @ 8049D10
movs r2, 0x4
bl sub_804A734
ldr r0, [sp, 0x10]
- bl sub_804A6D8
+ bl RemoveWindowOnHealthbox
add sp, 0x14
pop {r4,r5}
pop {r0}
@@ -5577,18 +4381,18 @@ AddTextPrinterAndCreateWindowOnHealthbox: @ 804A648
_0804A6D4: .4byte gUnknown_8260564
thumb_func_end AddTextPrinterAndCreateWindowOnHealthbox
- thumb_func_start sub_804A6D8
-sub_804A6D8: @ 804A6D8
+ thumb_func_start RemoveWindowOnHealthbox
+RemoveWindowOnHealthbox: @ 804A6D8
push {lr}
lsls r0, 24
lsrs r0, 24
bl RemoveWindow
pop {r0}
bx r0
- thumb_func_end sub_804A6D8
+ thumb_func_end RemoveWindowOnHealthbox
- thumb_func_start sub_804A6E8
-sub_804A6E8: @ 804A6E8
+ thumb_func_start TextIntoHealthboxObject
+TextIntoHealthboxObject: @ 804A6E8
push {r4-r6,lr}
adds r6, r0, 0
adds r5, r1, 0
@@ -5625,7 +4429,7 @@ _0804A724:
.align 2, 0
_0804A72C: .4byte 0x001fffff
_0804A730: .4byte 0x04000003
- thumb_func_end sub_804A6E8
+ thumb_func_end TextIntoHealthboxObject
thumb_func_start sub_804A734
sub_804A734: @ 804A734
diff --git a/data/battle_interface.s b/data/battle_interface.s
index f8cf4a4b9..12b46279c 100644
--- a/data/battle_interface.s
+++ b/data/battle_interface.s
@@ -14,25 +14,25 @@
gUnknown_8260270:: @ 8260270
.4byte 0xc0004000, 0x00000400
-gUnknown_8260278:: @ 8260278
+sHealthboxPlayerSpriteTemplates:: @ 8260278
spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-gUnknown_82602A8:: @ 82602A8
+sHealthboxOpponentSpriteTemplates:: @ 82602A8
spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-gUnknown_82602D8:: @ 82602D8
+sHealthboxSafariSpriteTemplate:: @ 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
+ spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar
+ spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar
+ spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar
+ spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar
gUnknown_8260358::
subsprite 240, 0, 1, 0x0000, 64x32
diff --git a/include/graphics.h b/include/graphics.h
index dc0389420..03c9e5de6 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4854,4 +4854,7 @@ extern const u32 gFireRedTrainerCard_Gfx[];
extern const u16 gEmeraldTrainerCard_Pal[];
extern const u32 gEmeraldTrainerCard_Gfx[];
+// battle_interface
+extern const u8 gHealthboxElementsGfxTable[][32];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index 3695d46df..6f96fa86d 100644
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -34,5 +34,6 @@ enum PokemonSummaryScreenPage
s32 GetLastViewedMonIndex(void);
void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4);
+extern const u8 *gNatureNames[];
#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
diff --git a/ld_script.txt b/ld_script.txt
index 995bed11f..d05f63e44 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -79,6 +79,7 @@ SECTIONS {
src/util.o(.text);
src/blend_palette.o(.text);
src/daycare.o(.text);
+ src/battle_interface.o(.text);
asm/battle_interface.o(.text);
asm/smokescreen.o(.text);
src/pokeball.o(.text);
diff --git a/src/battle_interface.c b/src/battle_interface.c
new file mode 100644
index 000000000..fd4f9af3e
--- /dev/null
+++ b/src/battle_interface.c
@@ -0,0 +1,383 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "graphics.h"
+#include "pokemon_summary_screen.h"
+#include "string_util.h"
+#include "strings.h"
+#include "text.h"
+
+void SpriteCB_HealthBoxOther(struct Sprite * sprite);
+const u8 *GetHealthboxElementGfxPtr(u8 which);
+u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId);
+void RemoveWindowOnHealthbox(u32 windowId);
+void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth);
+void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
+
+extern const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[];
+extern const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[];
+extern const struct SpriteTemplate sHealthboxSafariSpriteTemplate;
+extern const struct SpriteTemplate gUnknown_82602F8[];
+extern const struct SubspriteTable gUnknown_82603C4[];
+extern const u8 gUnknown_826051C[16];
+extern const u8 gUnknown_826052C[20];
+extern const u8 gUnknown_8260542[20];
+
+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];
+ }
+ }
+ }
+}
+
+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) == 0)
+ {
+ healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
+ healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
+
+ gSprites[healthboxLeftSpriteId].oam.shape = 0;
+ gSprites[healthboxRightSpriteId].oam.shape = 0;
+ 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) == 0)
+ {
+ 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 = 2;
+ sprite->oam.priority = 1;
+ CpuCopy32(GetHealthboxElementGfxPtr(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 = ST_OAM_SQUARE;
+ gSprites[healthboxRightSpriteId].oam.shape = ST_OAM_SQUARE;
+ gSprites[healthboxRightSpriteId].oam.tileNum += 0x40;
+ gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
+ gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId;
+ gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther;
+ return healthboxLeftSpriteId;
+}
+
+const u8 *GetHealthboxElementGfxPtr(u8 elementId)
+{
+ return gHealthboxElementsGfxTable[elementId];
+}
+
+// Syncs the position of healthbar accordingly with the healthbox.
+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;
+}
+
+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;
+}
+
+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);
+}
+
+void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
+{
+ u32 windowId, spriteTileNum;
+ u8 *windowTileData;
+ u8 text[16];
+ u32 xPos, var1;
+ void *objVram;
+
+ memcpy(text, gUnknown_826051C, 16);
+
+ 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);
+}