diff options
-rw-r--r-- | asm/party_menu.s | 311 | ||||
-rw-r--r-- | include/battle_interface.h | 2 | ||||
-rw-r--r-- | include/party_menu.h | 3 | ||||
-rw-r--r-- | src/battle_interface.c | 6 | ||||
-rw-r--r-- | src/battle_party_menu.c | 1 | ||||
-rw-r--r-- | src/choose_party.c | 1 | ||||
-rw-r--r-- | src/party_menu.c | 105 |
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)) |