summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-01-12 14:54:43 -0500
committerGitHub <noreply@github.com>2020-01-12 14:54:43 -0500
commit15ff7eb2f87032797f6ce9ef9bb471c468b48a36 (patch)
tree60d1318e686a7e4c9621ee7697c890b3c21cd696
parent74fa8075ee4018ba9b7e610212cf7c7777c4edb4 (diff)
parent483613e128d8dc5b419ea9ff83c92aa2e4e55042 (diff)
Merge pull request #213 from PikalaxALT/script_pokemon_util
script_pokemon_util_80A0058, battle_interface
-rw-r--r--asm/battle_interface.s5660
-rw-r--r--asm/link_rfu_3.s8
-rw-r--r--asm/overworld.s2
-rw-r--r--asm/pokemon_summary_screen.s8
-rw-r--r--asm/script_pokemon_util_80A0058.s535
-rw-r--r--data/battle_interface.s164
-rw-r--r--data/event_scripts.s26
-rw-r--r--data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc2
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/scripts.inc2
-rw-r--r--data/maps/PokemonTower_5F/scripts.inc2
-rw-r--r--data/maps/SevenIsland_House_Room1/scripts.inc2
-rw-r--r--data/maps/SevenIsland_House_Room2/scripts.inc2
-rw-r--r--data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc2
-rw-r--r--data/pokemon_summary_screen.s2
-rw-r--r--data/specials.inc6
-rw-r--r--include/battle_interface.h4
-rw-r--r--include/battle_message.h3
-rw-r--r--include/graphics.h7
-rw-r--r--include/script_pokemon_util.h (renamed from include/script_pokemon_util_80A0058.h)8
-rw-r--r--include/text.h2
-rw-r--r--ld_script.txt6
-rw-r--r--src/battle_gfx_sfx_util.c4
-rw-r--r--src/battle_interface.c2800
-rw-r--r--src/battle_message.c2
-rw-r--r--src/battle_setup.c4
-rw-r--r--src/battle_tower.c2
-rw-r--r--src/post_battle_event_funcs.c4
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/script_pokemon_util.c217
-rw-r--r--src/text.c2
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;