summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/battle_interface.s558
-rw-r--r--data/battle_interface.s2
-rw-r--r--src/battle_interface.c211
3 files changed, 213 insertions, 558 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 6f91c86b6..a0cf8fad3 100755
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -6,548 +6,8 @@
.text
-
-
- thumb_func_start sub_8074310
-sub_8074310: @ 8074310
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r0, =gBattleTypeFlags
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _080743E6
- movs r0, 0x8
- ands r1, r0
- cmp r1, 0
- bne _080743E6
- ldr r6, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r0, r6
- ldrh r0, [r5, 0x3A]
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _080743E6
- ldr r1, =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gEnemyParty
- adds r0, r1
- 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 _080743E6
- ldrh r0, [r5, 0x38]
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r7, 0
- beq _080743C4
- movs r0, 0x46
- bl GetHealthboxElementGfxPtr
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r6
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 1
- adds r1, r2
- ldr r2, =0x06010000
- adds r1, r2
- ldr r2, =0x04000008
- bl CpuSet
- b _080743E6
- .pool
-_080743C4:
- str r7, [sp]
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r6
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r0, 0x80
- lsls r0, 1
- adds r1, r0
- ldr r0, =0x06010000
- adds r1, r0
- ldr r2, =0x05000008
- mov r0, sp
- bl CpuSet
-_080743E6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8074310
-
- thumb_func_start UpdateStatusIconInHealthbox
-UpdateStatusIconInHealthbox: @ 80743F8
- 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, =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 GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _08074468
- ldr r1, =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =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 _08074484
- movs r0, 0x1A
- mov r8, r0
- b _08074484
- .pool
-_08074468:
- ldr r1, =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gEnemyParty
- adds r0, r1
- movs r1, 0x37
- bl GetMonData
- adds r4, r0, 0
- movs r1, 0x11
- mov r8, r1
-_08074484:
- movs r0, 0x7
- ands r0, r4
- cmp r0, 0
- beq _080744AC
- movs r0, 0x1B
- adds r1, r7, 0
- bl sub_80746A8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealthboxElementGfxPtr
- adds r6, r0, 0
- movs r0, 0x2
- b _080745B8
- .pool
-_080744AC:
- movs r0, 0x88
- ands r0, r4
- cmp r0, 0
- beq _080744CA
- movs r0, 0x15
- adds r1, r7, 0
- bl sub_80746A8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealthboxElementGfxPtr
- adds r6, r0, 0
- movs r0, 0
- b _080745B8
-_080744CA:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _080744E8
- movs r0, 0x21
- adds r1, r7, 0
- bl sub_80746A8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealthboxElementGfxPtr
- adds r6, r0, 0
- movs r0, 0x4
- b _080745B8
-_080744E8:
- movs r0, 0x20
- ands r0, r4
- cmp r0, 0
- beq _08074506
- movs r0, 0x1E
- adds r1, r7, 0
- bl sub_80746A8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealthboxElementGfxPtr
- adds r6, r0, 0
- movs r0, 0x3
- b _080745B8
-_08074506:
- movs r0, 0x40
- ands r0, r4
- cmp r0, 0
- beq _08074524
- movs r0, 0x18
- adds r1, r7, 0
- bl sub_80746A8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealthboxElementGfxPtr
- adds r6, r0, 0
- movs r0, 0x1
- b _080745B8
-_08074524:
- 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, =gSprites
- add r0, r9
- lsls r0, 2
- adds r5, r0, r1
-_08074542:
- 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, =0x06010000
- adds r1, r3
- adds r0, r6, 0
- ldr r2, =0x04000008
- bl CpuSet
- adds r4, 0x1
- cmp r4, 0x2
- ble _08074542
- ldr r0, =gBattleSpritesDataPtr
- ldr r0, [r0]
- ldr r0, [r0]
- adds r0, r7, r0
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08074598
- movs r0, 0x1
- bl GetHealthboxElementGfxPtr
- ldr r2, =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, =0x06010000
- adds r1, r2
- ldr r2, =0x04000010
- bl CpuSet
-_08074598:
- mov r0, r9
- movs r1, 0x1
- bl sub_8074310
- b _0807467A
- .pool
-_080745B8:
- mov r1, r9
- lsls r5, r1, 4
- add r5, r9
- lsls r5, 2
- ldr r2, =gSprites
- adds r5, r2
- ldrb r4, [r5, 0x5]
- lsrs r4, 4
- lsls r4, 4
- adds r4, 0xC
- adds r4, r7
- ldr r1, =gUnknown_0832C3EC
- 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, =gPlttBufferUnfaded + 0x200
- adds r0, r4, r0
- ldr r1, =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, =0x06010000
- mov r8, r2
- add r1, r8
- ldr r2, =0x04000018
- adds r0, r6, 0
- bl CpuSet
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08074626
- adds r0, r7, 0
- bl GetBankSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08074672
-_08074626:
- ldr r0, =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 _08074672
- movs r0, 0
- bl GetHealthboxElementGfxPtr
- mov r3, r10
- lsls r4, r3, 4
- add r4, r10
- lsls r4, 2
- ldr r1, =gSprites
- adds r4, r1
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- add r1, r8
- ldr r5, =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
-_08074672:
- mov r0, r9
- movs r1, 0
- bl sub_8074310
-_0807467A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end UpdateStatusIconInHealthbox
-
- thumb_func_start sub_80746A8
-sub_80746A8: @ 80746A8
- 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 _08074768
- lsls r0, 2
- ldr r1, =_080746C8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080746C8:
- .4byte _080746FC
- .4byte _08074768
- .4byte _08074768
- .4byte _08074712
- .4byte _08074768
- .4byte _08074768
- .4byte _08074728
- .4byte _08074768
- .4byte _08074768
- .4byte _0807473E
- .4byte _08074768
- .4byte _08074768
- .4byte _08074754
-_080746FC:
- movs r2, 0x15
- cmp r3, 0
- beq _08074768
- movs r2, 0x47
- cmp r3, 0x1
- beq _08074768
- movs r2, 0x65
- cmp r3, 0x2
- bne _08074768
- movs r2, 0x56
- b _08074768
-_08074712:
- movs r2, 0x18
- cmp r3, 0
- beq _08074768
- movs r2, 0x4A
- cmp r3, 0x1
- beq _08074768
- movs r2, 0x68
- cmp r3, 0x2
- bne _08074768
- movs r2, 0x59
- b _08074768
-_08074728:
- movs r2, 0x1B
- cmp r3, 0
- beq _08074768
- movs r2, 0x4D
- cmp r3, 0x1
- beq _08074768
- movs r2, 0x6B
- cmp r3, 0x2
- bne _08074768
- movs r2, 0x5C
- b _08074768
-_0807473E:
- movs r2, 0x1E
- cmp r3, 0
- beq _08074768
- movs r2, 0x50
- cmp r3, 0x1
- beq _08074768
- movs r2, 0x6E
- cmp r3, 0x2
- bne _08074768
- movs r2, 0x5F
- b _08074768
-_08074754:
- movs r2, 0x21
- cmp r3, 0
- beq _08074768
- movs r2, 0x53
- cmp r3, 0x1
- beq _08074768
- movs r2, 0x71
- cmp r3, 0x2
- bne _08074768
- movs r2, 0x62
-_08074768:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80746A8
-
- thumb_func_start sub_8074770
-sub_8074770: @ 8074770
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gText_SafariBalls
- add r1, sp, 0x4
- str r1, [sp]
- movs r1, 0
- movs r2, 0x3
- movs r3, 0x2
- bl AddTextPrinterAndCreateWindowOnHealthbox
- adds r5, r0, 0
- ldr r1, =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, =0x06010040
- adds r0, r4, r1
- adds r1, r5, 0
- movs r2, 0x6
- bl sub_8075198
- ldr r0, =0x06010800
- adds r4, r0
- adds r5, 0xC0
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x2
- bl sub_8075198
- ldr r0, [sp, 0x4]
- bl RemoveWindow_
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8074770
-
- thumb_func_start sub_80747D8
-sub_80747D8: @ 80747D8
+ thumb_func_start UpdateLeftNoOfBallsTextOnHealthbox
+UpdateLeftNoOfBallsTextOnHealthbox: @ 80747D8
push {r4,r5,lr}
sub sp, 0x18
adds r4, r0, 0
@@ -594,13 +54,13 @@ sub_80747D8: @ 80747D8
movs r2, 0x4
bl sub_80751E4
ldr r0, [sp, 0x14]
- bl RemoveWindow_
+ bl RemoveWindowOnHealthbox
add sp, 0x18
pop {r4,r5}
pop {r0}
bx r0
.pool
- thumb_func_end sub_80747D8
+ thumb_func_end UpdateLeftNoOfBallsTextOnHealthbox
thumb_func_start UpdateHealthboxAttribute
UpdateHealthboxAttribute: @ 8074860
@@ -797,7 +257,7 @@ _080749EC:
cmp r7, 0xA
bne _080749F6
adds r0, r6, 0
- bl sub_8074770
+ bl UpdateSafariBallsTextOnHealthbox
_080749F6:
adds r0, r7, 0
subs r0, 0xA
@@ -806,7 +266,7 @@ _080749F6:
cmp r0, 0x1
bhi _08074A8E
adds r0, r6, 0
- bl sub_80747D8
+ bl UpdateLeftNoOfBallsTextOnHealthbox
b _08074A8E
.pool
_08074A18:
@@ -1740,15 +1200,15 @@ AddTextPrinterAndCreateWindowOnHealthbox: @ 8075094
.pool
thumb_func_end AddTextPrinterAndCreateWindowOnHealthbox
- thumb_func_start RemoveWindow_
-RemoveWindow_: @ 807512C
+ thumb_func_start RemoveWindowOnHealthbox
+RemoveWindowOnHealthbox: @ 807512C
push {lr}
lsls r0, 24
lsrs r0, 24
bl RemoveWindow
pop {r0}
bx r0
- thumb_func_end RemoveWindow_
+ thumb_func_end RemoveWindowOnHealthbox
thumb_func_start sub_807513C
sub_807513C: @ 807513C
diff --git a/data/battle_interface.s b/data/battle_interface.s
index d000a27ea..39f69ba5f 100644
--- a/data/battle_interface.s
+++ b/data/battle_interface.s
@@ -130,7 +130,7 @@ gUnknown_0832C3D8:: @ 832C3D8
.byte 0x00, 0x00, 0x00, 0x00
.align 2
-gUnknown_0832C3EC:: @ 832C3EC
+gBattleInterfaceStatusIcons_DynPals:: @ 832C3EC
.byte 0x98, 0x61, 0xf7, 0x0e, 0x94, 0x46, 0xd1, 0x72
.byte 0xdc, 0x29, 0x00, 0x00
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 9080b3905..bab2c5122 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -15,6 +15,10 @@
#include "gpu_regs.h"
#include "battle_message.h"
#include "species.h"
+#include "pokedex.h"
+#include "palette.h"
+#include "international_string_util.h"
+#include "safari_zone.h"
extern bool8 IsDoubleBattle(void);
extern u8 gBanksByIdentity[BATTLE_BANKS_COUNT];
@@ -29,9 +33,9 @@ extern const u8 gText_Slash[];
void sub_8072924(struct Sprite *sprite);
void sub_80728B4(struct Sprite *sprite);
const u32 *GetHealthboxElementGfxPtr(u8 elementId);
-u32 AddTextPrinterAndCreateWindowOnHealthbox(u8 *str, u32 x, u32 y, u32 arg3, u32 *windowId);
+u32 AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 arg3, u32 *windowId);
void sub_8075198(void *objVram, u32 windowTileData, u32 arg2);
-void RemoveWindow_(u32 windowId);
+void RemoveWindowOnHealthbox(u32 windowId);
void sub_8075170(void *dest, u32 arg1, u32 arg2);
void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void sub_807513C(void *dest, u32 arg1, u32 arg2);
@@ -42,6 +46,7 @@ void sub_8073F98(u8 taskId);
void sub_8073E64(u8 taskId);
void sub_8074158(struct Sprite *sprite);
void sub_8074090(struct Sprite *sprite);
+u8 GetStatusIconForBankId(u8 statusElementId, u8 bank);
// const rom data
const struct OamData gUnknown_0832C138 =
@@ -186,6 +191,7 @@ extern const struct SpriteTemplate gUnknown_0832C364[2];
extern const struct SpriteTemplate gUnknown_0832C394[2];
extern const struct SubspriteTable gUnknown_0832C2C4;
extern const struct SubspriteTable gUnknown_0832C2CC;
+extern const u16 gBattleInterfaceStatusIcons_DynPals[];
u8 sub_8072304(void)
{
@@ -773,7 +779,7 @@ void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
objVram += spriteTileNum + 0x400;
}
sub_8075198(objVram, windowTileData, 3);
- RemoveWindow_(windowId);
+ RemoveWindowOnHealthbox(windowId);
}
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
@@ -792,7 +798,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
objVram = (void*)(OBJ_VRAM0);
objVram += spriteTileNum + 0xB40;
sub_8075170(objVram, windowTileData, 2);
- RemoveWindow_(windowId);
+ RemoveWindowOnHealthbox(windowId);
}
else // singles, current
{
@@ -806,7 +812,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
objVram = (void*)(OBJ_VRAM0);
objVram += spriteTileNum + 0xB00;
sub_8075170(objVram, windowTileData + 0x20, 2);
- RemoveWindow_(windowId);
+ RemoveWindowOnHealthbox(windowId);
}
}
@@ -871,7 +877,7 @@ void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrC
ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 0, &windowId);
sub_8075170((void*)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2);
- RemoveWindow_(windowId);
+ RemoveWindowOnHealthbox(windowId);
CpuCopy32(GetHealthboxElementGfxPtr(0x74),
(void*)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * 32),
0x20);
@@ -884,7 +890,7 @@ void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrC
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 0, &windowId);
sub_807513C(objVram, 0, 3);
sub_8075170((void*)(OBJ_VRAM0 + 0x60) + spriteTileNum, windowTileData, 3);
- RemoveWindow_(windowId);
+ RemoveWindowOnHealthbox(windowId);
}
}
}
@@ -1580,5 +1586,194 @@ void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
sub_8075198((void*)(0x6010020 + spriteTileNum), windowTileData, 7);
}
- RemoveWindow_(windowId);
+ RemoveWindowOnHealthbox(windowId);
+}
+
+void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
+{
+ u8 bank, healthboxSpriteId_2;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
+ return;
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ return;
+
+ bank = gSprites[healthboxSpriteId].data6;
+ if (GetBankSide(bank) == SIDE_PLAYER)
+ return;
+ if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
+ return;
+
+ healthboxSpriteId_2 = gSprites[healthboxSpriteId].data5;
+
+ if (noStatus)
+ CpuCopy32(GetHealthboxElementGfxPtr(0x46), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 8) * 32), 32);
+ else
+ CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 8) * 32), 32);
+}
+
+void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
+{
+ s32 i;
+ u8 bank, healthboxSpriteId_2;
+ u32 status, pltAdder;
+ const u32 *statusGfxPtr;
+ s16 tileNumAdder;
+ u8 statusPalId;
+
+ bank = gSprites[healthboxSpriteId].data6;
+ healthboxSpriteId_2 = gSprites[healthboxSpriteId].data5;
+ if (GetBankSide(bank) == SIDE_PLAYER)
+ {
+ status = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_STATUS);
+ if (!IsDoubleBattle())
+ tileNumAdder = 0x1A;
+ else
+ tileNumAdder = 0x12;
+ }
+ else
+ {
+ status = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_STATUS);
+ tileNumAdder = 0x11;
+ }
+
+ if (status & STATUS_SLEEP)
+ {
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(0x1B, bank));
+ statusPalId = 2;
+ }
+ else if (status & STATUS_PSN_ANY)
+ {
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(0x15, bank));
+ statusPalId = 0;
+ }
+ else if (status & STATUS_BURN)
+ {
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(0x21, bank));
+ statusPalId = 4;
+ }
+ else if (status & STATUS_FREEZE)
+ {
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(0x1E, bank));
+ statusPalId = 3;
+ }
+ else if (status & STATUS_PARALYSIS)
+ {
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(0x18, bank));
+ statusPalId = 1;
+ }
+ else
+ {
+ statusGfxPtr = GetHealthboxElementGfxPtr(0x27);
+
+ for (i = 0; i < 3; i++)
+ CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * 32), 32);
+
+ if (!gBattleSpritesDataPtr->bankData[bank].hpNumbersNoBars)
+ CpuCopy32(GetHealthboxElementGfxPtr(1), (void *)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 64);
+
+ TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE);
+ return;
+ }
+
+ pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16;
+ pltAdder += bank + 12;
+
+ FillPalette(gBattleInterfaceStatusIcons_DynPals[statusPalId], pltAdder + 0x100, 2);
+ CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2);
+ CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * 32), 96);
+ if (IsDoubleBattle() == TRUE || GetBankSide(bank) == SIDE_OPPONENT)
+ {
+ if (!gBattleSpritesDataPtr->bankData[bank].hpNumbersNoBars)
+ {
+ CpuCopy32(GetHealthboxElementGfxPtr(0), (void*)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(0x41), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 1) * 32), 32);
+ }
+ }
+ TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
+}
+
+u8 GetStatusIconForBankId(u8 statusElementId, u8 bank)
+{
+ u8 ret = statusElementId;
+
+ switch (statusElementId)
+ {
+ case 21:
+ if (bank == 0)
+ ret = 21;
+ else if (bank == 1)
+ ret = 71;
+ else if (bank == 2)
+ ret = 86;
+ else
+ ret = 101;
+ break;
+ case 24:
+ if (bank == 0)
+ ret = 24;
+ else if (bank == 1)
+ ret = 74;
+ else if (bank == 2)
+ ret = 89;
+ else
+ ret = 104;
+ break;
+ case 27:
+ if (bank == 0)
+ ret = 27;
+ else if (bank == 1)
+ ret = 77;
+ else if (bank == 2)
+ ret = 92;
+ else
+ ret = 107;
+ break;
+ case 30:
+ if (bank == 0)
+ ret = 30;
+ else if (bank == 1)
+ ret = 80;
+ else if (bank == 2)
+ ret = 95;
+ else
+ ret = 110;
+ break;
+ case 33:
+ if (bank == 0)
+ ret = 33;
+ else if (bank == 1)
+ ret = 83;
+ else if (bank == 2)
+ ret = 98;
+ else
+ ret = 113;
+ break;
+ }
+ return ret;
+}
+
+extern const u8 gText_SafariBalls[];
+extern const u8 gText_SafariBallLeft[];
+
+void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId)
+{
+ u32 windowId, windowTileData, spriteTileNum;
+
+ windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, 2, &windowId);
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
+ sub_8075198((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6);
+ sub_8075198((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2);
+ RemoveWindowOnHealthbox(windowId);
+}
+
+void UpdateLeftNoOfBallsTextOnHealthbox(healthboxSpriteId)
+{
+ u8 text[20];
+ u8 *txtPtr;
+ u32 windowId, windowTileData, spriteTileNum;
+
+ txtPtr = StringCopy(text, gText_SafariBallLeft);
+ ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2);
+ windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, 1));
}