summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/party_menu.s311
-rw-r--r--include/battle_interface.h2
-rw-r--r--include/party_menu.h3
-rw-r--r--src/battle_interface.c6
-rw-r--r--src/battle_party_menu.c1
-rw-r--r--src/choose_party.c1
-rw-r--r--src/party_menu.c105
7 files changed, 110 insertions, 319 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 1fa1dd726..e615435f3 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -6901,315 +6901,4 @@ PartyMenuPutNicknameTilemap: @ 806E3C0
_0806E41C: .4byte gStringVar1
thumb_func_end PartyMenuPutNicknameTilemap
- thumb_func_start PartyMenuDoPrintHP
-PartyMenuDoPrintHP: @ 806E420
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r1, r2, 0
- adds r5, r3, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 16
- lsrs r1, 16
- lsls r5, 16
- lsrs r5, 16
- ldr r2, _0806E48C @ =gStringVar1
- adds r0, r2, 0
- movs r2, 0xF
- movs r3, 0x1
- bl sub_8072C14
- adds r2, r0, 0
- movs r0, 0xBA
- strb r0, [r2]
- adds r2, 0x1
- adds r0, r2, 0
- adds r1, r5, 0
- movs r2, 0x23
- movs r3, 0x1
- bl sub_8072C14
- movs r0, 0
- str r0, [sp]
- ldr r5, _0806E490 @ =gUnknown_02039460
- ldr r2, _0806E494 @ =0x01000040
- mov r0, sp
- adds r1, r5, 0
- bl CpuFastSet
- ldr r0, _0806E498 @ =gWindowConfig_81E6CAC
- ldr r2, _0806E49C @ =0xffffff00
- adds r1, r5, r2
- ldr r2, _0806E48C @ =gStringVar1
- bl sub_8004E3C
- lsls r4, 10
- ldr r0, _0806E4A0 @ =0x06014300
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x40
- bl CpuFastSet
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806E48C: .4byte gStringVar1
-_0806E490: .4byte gUnknown_02039460
-_0806E494: .4byte 0x01000040
-_0806E498: .4byte gWindowConfig_81E6CAC
-_0806E49C: .4byte 0xffffff00
-_0806E4A0: .4byte 0x06014300
- thumb_func_end PartyMenuDoPrintHP
-
- thumb_func_start PartyMenuPrintHP
-PartyMenuPrintHP: @ 806E4A4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x3A
- bl GetMonData
- adds r3, r0, 0
- lsls r3, 16
- lsrs r3, 16
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl PartyMenuDoPrintHP
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end PartyMenuPrintHP
-
- thumb_func_start PartyMenuTryPrintHP
-PartyMenuTryPrintHP: @ 806E4E8
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0806E534
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0806E534
- bl IsLinkDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806E522
- adds r0, r5, 0
- movs r1, 0x2
- adds r2, r4, 0
- bl PartyMenuPrintHP
- b _0806E534
-_0806E522:
- bl IsDoubleBattle
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- adds r2, r4, 0
- bl PartyMenuPrintHP
-_0806E534:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end PartyMenuTryPrintHP
-
- thumb_func_start PartyMenuTryPrintMonsHP
-PartyMenuTryPrintMonsHP: @ 806E53C
- push {r4-r6,lr}
- movs r4, 0
- movs r6, 0x64
- ldr r5, _0806E560 @ =gPlayerParty
-_0806E544:
- adds r1, r4, 0
- muls r1, r6
- adds r1, r5
- adds r0, r4, 0
- bl PartyMenuTryPrintHP
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0806E544
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806E560: .4byte gPlayerParty
- thumb_func_end PartyMenuTryPrintMonsHP
-
- thumb_func_start unref_sub_806E564
-unref_sub_806E564: @ 806E564
- bx lr
- thumb_func_end unref_sub_806E564
-
- thumb_func_start unref_sub_806E568
-unref_sub_806E568: @ 806E568
- bx lr
- thumb_func_end unref_sub_806E568
-
- thumb_func_start nullsub_12
-nullsub_12: @ 806E56C
- bx lr
- thumb_func_end nullsub_12
-
- thumb_func_start nullsub_13
-nullsub_13: @ 806E570
- bx lr
- thumb_func_end nullsub_13
-
- thumb_func_start PartyMenuDoDrawHPBar
-PartyMenuDoDrawHPBar: @ 806E574
- push {r4-r6,lr}
- sub sp, 0x18
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- ldr r0, _0806E624 @ =0xffff8000
- str r0, [sp, 0x14]
- str r3, [sp]
- str r2, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- lsls r2, 16
- asrs r2, 16
- lsls r3, 16
- asrs r3, 16
- adds r0, r2, 0
- adds r1, r3, 0
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r3, r0, 24
- adds r4, r3, 0
- cmp r3, 0x2
- bls _0806E5BE
- mov r2, sp
- ldrb r1, [r2, 0xC]
- movs r0, 0x20
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0xC]
-_0806E5BE:
- cmp r3, 0x2
- bne _0806E5D2
- mov r2, sp
- ldrb r1, [r2, 0xC]
- movs r0, 0x20
- negs r0, r0
- ands r0, r1
- movs r1, 0x5
- orrs r0, r1
- strb r0, [r2, 0xC]
-_0806E5D2:
- cmp r4, 0x1
- bhi _0806E5E6
- mov r2, sp
- ldrb r1, [r2, 0xC]
- movs r0, 0x20
- negs r0, r0
- ands r0, r1
- movs r1, 0x6
- orrs r0, r1
- strb r0, [r2, 0xC]
-_0806E5E6:
- movs r0, 0x80
- lsls r0, 1
- str r0, [sp, 0x10]
- ldr r2, _0806E628 @ =gUnknown_08376858
- lsls r1, r6, 2
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 3
- adds r1, r0
- adds r1, r2
- ldr r4, [r1]
- add r1, sp, 0x14
- mov r0, sp
- adds r2, r4, 0
- movs r3, 0
- bl sub_80460C8
- subs r4, 0x4
- ldr r1, _0806E62C @ =0x00003109
- adds r0, r1, 0
- strh r0, [r4]
- adds r1, 0x1
- adds r0, r1, 0
- strh r0, [r4, 0x2]
- adds r1, 0x1
- adds r0, r1, 0
- strh r0, [r4, 0x10]
- add sp, 0x18
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806E624: .4byte 0xffff8000
-_0806E628: .4byte gUnknown_08376858
-_0806E62C: .4byte 0x00003109
- thumb_func_end PartyMenuDoDrawHPBar
-
- thumb_func_start PartyMenuDrawHPBar
-PartyMenuDrawHPBar: @ 806E630
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r8
- movs r1, 0x3A
- bl GetMonData
- adds r3, r0, 0
- lsls r3, 16
- lsrs r3, 16
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl PartyMenuDoDrawHPBar
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end PartyMenuDrawHPBar
-
.align 2, 0 @ Don't pad with nop.
diff --git a/include/battle_interface.h b/include/battle_interface.h
index 8230c7502..db41ee735 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -29,7 +29,7 @@ u8 sub_8044804(u8, const struct BattleInterfaceStruct2 *, u8, u8);
void sub_8044CA0(u8);
void sub_8045A5C(u8, struct Pokemon *, u8);
s32 sub_8045C78(u8, u8, u8, u8);
-s16 sub_80460C8(struct BattleInterfaceStruct1 *, int *, void *, int);
+s16 sub_80460C8(struct BattleInterfaceStruct1 *, int *, u16 *, int);
u8 GetScaledHPFraction(s16, s16, u8);
u8 GetHPBarLevel(s16, s16);
void sub_80440EC(u8 a, s16 b, u8 c);
diff --git a/include/party_menu.h b/include/party_menu.h
index dfd231081..853f9b2e1 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -109,9 +109,10 @@ void PartyMenuClearLevelStatusTilemap();
void PartyMenuPrintMonLevelOrStatus();
void PartyMenuPrintMonsLevelOrStatus(void);
void PartyMenuPrintMonsLevelOrStatus(void);
-void PartyMenuDoPrintHP(u8, int, u16, u16);
+void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP);
void PartyMenuTryPrintMonsHP(void);
void nullsub_13(void);
+void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP);
void PartyMenuDrawHPBar(u8 monIndex, u8 b, struct Pokemon *pokemon);
void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon);
void PartyMenuDrawHPBars(void);
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 246bda62b..95f8f73c0 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -97,7 +97,7 @@ static int sub_8045F58(s32, s32, int, int *, u8, u16);
static u8 GetScaledExpFraction(int, int, int, u8);
static void sub_8045D58(u8, u8);
static u8 sub_804602C(int, int, int, int *, u8 *, u8);
-static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c);
+static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, u16 *c);
static int do_nothing(s16 unused1, s16 unused2, int unused3)
{
@@ -2972,7 +2972,7 @@ static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f)
return r3;
}
-s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d)
+s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, u16 *c, int d)
{
u16 r7;
s16 r1;
@@ -2987,7 +2987,7 @@ s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d)
return r7;
}
-static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c)
+static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, u16 *c)
{
u8 sp8[6];
u16 sp10[6];
diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c
index a21a76683..595cdcc48 100644
--- a/src/battle_party_menu.c
+++ b/src/battle_party_menu.c
@@ -29,7 +29,6 @@ extern void CreateHeldItemIcons_806DC34();
extern u8 sub_806BD58(u8, u8);
extern void PartyMenuPrintMonsLevelOrStatus(void);
extern void PrintPartyMenuMonNicknames(void);
-extern void PartyMenuTryPrintMonsHP(void);
extern void nullsub_13(void);
extern u8 sub_806B58C(u8);
extern void sub_806D5A4(void);
diff --git a/src/choose_party.c b/src/choose_party.c
index 28d6a8c9d..55ce3583d 100644
--- a/src/choose_party.c
+++ b/src/choose_party.c
@@ -76,7 +76,6 @@ extern bool8 sub_80F9344(void);
extern void sub_806D4AC();
extern void sub_806D3B4();
extern void PartyMenuDoPrintLevel(u8, u8, u8);
-extern void PartyMenuDoDrawHPBar(u8, u8, u16, u16);
extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *);
extern void box_print(u8, int, const u8 *);
extern void sub_806BCE8(void);
diff --git a/src/party_menu.c b/src/party_menu.c
index 5baa0f8f3..bd20ce5ed 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -74,13 +74,15 @@ extern u16 gMoveToLearn;
//extern const u16 gUnknown_083769A8[][6];
//extern const u8 gUnknown_083769A8[][12];
-extern void *const gUnknown_08376858[][6];
+extern u16 *const gUnknown_08376858[][6];
extern const u8 gUnknown_083769A8[];
extern const u8 gUnknown_08376D1C[NUM_STATS];
extern const u16 gUnknown_08376504[];
extern void (*const gUnknown_08376B54[])(u8);
extern const u8 *const gUnknown_08376D04[NUM_STATS];
extern const struct UnknownStruct5 gUnknown_08376BB4[][6];
+extern u8 gUnknown_02039460[];
+extern u8 gTileBuffer[];
static void sub_806E884(u8 taskId);
static void sub_8070D90(u8 taskId);
@@ -110,6 +112,107 @@ void sub_806AEDC(void)
#endif
+void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP)
+{
+ u32 *var;
+ register u8 *stringVar1 asm("r2") = gStringVar1;
+ register u8 *textPtr asm("r2") = sub_8072C14(stringVar1, currentHP, 15, 1);
+ textPtr[0] = CHAR_SLASH;
+
+ sub_8072C14(++textPtr, maxHP, 35, 1);
+ var = 0;
+
+ CpuFastSet(&var, gUnknown_02039460, 0x1000040);
+ sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100, gStringVar1);
+ CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x300 + (monIndex * 0x400)), 64);
+}
+
+void PartyMenuPrintHP(u8 monIndex, u8 b, struct Pokemon *pokemon)
+{
+ u16 currentHP;
+ u16 maxHP;
+
+ currentHP = GetMonData(pokemon, MON_DATA_HP);
+ maxHP = GetMonData(pokemon, MON_DATA_MAX_HP);
+
+ PartyMenuDoPrintHP(monIndex, b, currentHP, maxHP);
+}
+
+void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon)
+{
+ if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG))
+ {
+ u8 isDoubleBattle = IsLinkDoubleBattle();
+ if (isDoubleBattle == TRUE)
+ {
+ PartyMenuPrintHP(monIndex, 2, pokemon);
+ }
+ else
+ {
+ PartyMenuPrintHP(monIndex, IsDoubleBattle(), pokemon);
+ }
+ }
+}
+
+void PartyMenuTryPrintMonsHP(void)
+{
+ u8 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ PartyMenuTryPrintHP(i, &gPlayerParty[i]);
+ }
+}
+
+void unref_sub_806E564(void) { }
+void unref_sub_806E568(void) { }
+void nullsub_12(void) { }
+void nullsub_13(void) { }
+
+void PartyMenuDoDrawHPBar(u8 monIndex, u8 b, u16 currentHP, u16 maxHP)
+{
+ u8 hpBarLevel;
+ u16 *vramPtr;
+ int var = -32768;
+ struct BattleInterfaceStruct1 battleInterface;
+ battleInterface.unk0 = maxHP;
+ battleInterface.unk4 = currentHP;
+ battleInterface.unk8 = 0;
+
+ hpBarLevel = GetHPBarLevel(currentHP, maxHP);
+ if (hpBarLevel > 2)
+ {
+ battleInterface.unkC_0 = 4;
+ }
+ if (hpBarLevel == 2)
+ {
+ battleInterface.unkC_0 = 5;
+ }
+ if (hpBarLevel < 2)
+ {
+ battleInterface.unkC_0 = 6;
+ }
+
+ battleInterface.unk10 = 0x100;
+
+ vramPtr = gUnknown_08376858[b][monIndex];
+ sub_80460C8(&battleInterface, &var, vramPtr, 0);
+
+ vramPtr -= 2;
+
+ vramPtr[0] = 0x3109;
+ vramPtr[1] = 0x310A;
+ vramPtr[8] = 0x310B;
+}
+
+void PartyMenuDrawHPBar(u8 monIndex, u8 b, struct Pokemon *pokemon)
+{
+ u16 currentHP = GetMonData(pokemon, MON_DATA_HP);
+ u16 maxHP = GetMonData(pokemon, MON_DATA_MAX_HP);
+
+ PartyMenuDoDrawHPBar(monIndex, b, currentHP, maxHP);
+}
+
void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon)
{
if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG))