diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-11 11:25:36 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-11 11:25:36 -0500 |
commit | 854e8cd3f341e0487b2aaa71d8ac7d0b43e0d242 (patch) | |
tree | 22457994124315eccf37f675d89f516c59ce14bc | |
parent | 9d2f1af103fb52ec5d06e185a4ddf25d91554549 (diff) |
SwapHpBarsWithHpText
-rw-r--r-- | asm/battle_interface.s | 362 | ||||
-rw-r--r-- | src/battle_interface.c | 96 |
2 files changed, 100 insertions, 358 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s index f277fbf17..aeffb047f 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,340 +5,6 @@ .text - 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 UpdateHpTextInHealthboxInDoubles - 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 PrintSafariMonInfo - 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 UpdateHpTextInHealthboxInDoubles - 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 UpdateHpTextInHealthboxInDoubles - 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} @@ -412,7 +78,7 @@ _08048D94: movs r6, 0 str r6, [sp, 0x14] lsls r4, r7, 3 - ldr r0, _08048E44 @ =gUnknown_826046C + ldr r0, _08048E44 @ =sStatusSummaryBarSpriteSheets mov r10, r0 lsls r3, r7, 1 mov r9, r3 @@ -442,19 +108,19 @@ _08048DC4: mov r6, r10 adds r0, r4, r6 bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _08048E4C @ =gUnknown_826049C + ldr r0, _08048E4C @ =sStatusSummaryBallsSpriteSheets adds r0, r4, r0 bl LoadSpriteSheet - ldr r0, _08048E50 @ =gUnknown_826047C + ldr r0, _08048E50 @ =sStatusSummaryBarSpritePals adds r0, r4, r0 bl LoadSpritePalette - ldr r0, _08048E54 @ =gUnknown_826048C + ldr r0, _08048E54 @ =sStatusSummaryBallsSpritePals adds r0, r4, r0 bl LoadSpritePalette mov r1, r9 adds r0, r1, r7 lsls r0, 3 - ldr r1, _08048E58 @ =gUnknown_82604BC + ldr r1, _08048E58 @ =sStatusSummaryBarSpriteTemplates adds r0, r1 ldr r2, [sp, 0x20] asrs r1, r2, 16 @@ -471,7 +137,7 @@ _08048DC4: lsls r0, 2 ldr r1, _08048E5C @ =gSprites adds r4, r0, r1 - ldr r1, _08048E60 @ =gUnknown_82603FC + ldr r1, _08048E60 @ =sStatusSummaryBar_SubspriteTable adds r0, r4, 0 bl SetSubspriteTables mov r0, r8 @@ -492,14 +158,14 @@ _08048DC4: b _08048E6A .align 2, 0 _08048E40: .4byte 0x0000ff9c -_08048E44: .4byte gUnknown_826046C +_08048E44: .4byte sStatusSummaryBarSpriteSheets _08048E48: .4byte 0x0000ffff -_08048E4C: .4byte gUnknown_826049C -_08048E50: .4byte gUnknown_826047C -_08048E54: .4byte gUnknown_826048C -_08048E58: .4byte gUnknown_82604BC +_08048E4C: .4byte sStatusSummaryBallsSpriteSheets +_08048E50: .4byte sStatusSummaryBarSpritePals +_08048E54: .4byte sStatusSummaryBallsSpritePals +_08048E58: .4byte sStatusSummaryBarSpriteTemplates _08048E5C: .4byte gSprites -_08048E60: .4byte gUnknown_82603FC +_08048E60: .4byte sStatusSummaryBar_SubspriteTable _08048E64: ldrh r0, [r4, 0x20] adds r0, 0x60 @@ -517,7 +183,7 @@ _08048E6A: mov r9, r3 mov r8, r6 _08048E80: - ldr r0, _08048F18 @ =gUnknown_82604EC + ldr r0, _08048F18 @ =sStatusSummaryBallsSpriteTemplates ldr r5, [sp, 0x24] ldr r1, _08048F1C @ =0xfffc0000 adds r2, r5, r1 @@ -593,7 +259,7 @@ _08048ECE: b _08048F66 .align 2, 0 _08048F14: .4byte gSprites -_08048F18: .4byte gUnknown_82604EC +_08048F18: .4byte sStatusSummaryBallsSpriteTemplates _08048F1C: .4byte 0xfffc0000 _08048F20: .4byte gSprites + 0x1C _08048F24: .4byte SpriteCB_StatusSummaryBallsOnSwitchout diff --git a/src/battle_interface.c b/src/battle_interface.c index 2f8a8c2a1..e8a1f5a02 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1,22 +1,27 @@ #include "global.h" #include "battle_anim.h" #include "battle_interface.h" +#include "decompress.h" #include "graphics.h" #include "pokemon_summary_screen.h" +#include "sound.h" #include "string_util.h" #include "strings.h" #include "text.h" #include "window.h" +#include "constants/songs.h" void SpriteCB_HealthBoxOther(struct Sprite * sprite); void SpriteCB_HealthBar(struct Sprite * sprite); +const u8 *GetHealthboxElementGfxPtr(u8 which); +void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite); +void UpdateStatusIconInHealthbox(u8 spriteId); void SpriteCB_StatusSummaryBar(struct Sprite * sprite); void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); -const u8 *GetHealthboxElementGfxPtr(u8 which); u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); void RemoveWindowOnHealthbox(u32 windowId); void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); -void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); const struct OamData gOamData_8260270 = { .shape = SPRITE_SHAPE(64x32), @@ -173,29 +178,32 @@ const struct Subsprite gUnknown_82603E4[] = { { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } }; -const struct SubspriteTable gUnknown_82603FC = -{NELEMS(gUnknown_82603D4), gUnknown_82603D4}; +const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] = +{ + {NELEMS(gUnknown_82603D4), gUnknown_82603D4} +}; + const struct SubspriteTable gUnknown_8260404 = {NELEMS(gUnknown_82603E4), gUnknown_82603E4}; const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); -const struct CompressedSpriteSheet gUnknown_826046C[] = { +const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheets[] = { {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} }; -const struct SpritePalette gUnknown_826047C[] = { +const struct SpritePalette sStatusSummaryBarSpritePals[] = { {gBattleInterface_BallStatusBarPal, 55056}, {gBattleInterface_BallStatusBarPal, 55057} }; -const struct SpritePalette gUnknown_826048C[] = { +const struct SpritePalette sStatusSummaryBallsSpritePals[] = { {gBattleInterface_BallDisplayPal, 55058}, {gBattleInterface_BallDisplayPal, 55059} }; -const struct SpriteSheet gUnknown_826049C[] = { +const struct SpriteSheet sStatusSummaryBallsSpriteSheets[] = { {gUnknown_8D12404, 0x0080, 55060}, {gUnknown_8D12404, 0x0080, 55061} }; @@ -212,7 +220,7 @@ const struct OamData gUnknown_82604B4 = { .priority = 1 }; -const struct SpriteTemplate gUnknown_82604BC[] = { +const struct SpriteTemplate sStatusSummaryBarSpriteTemplates[] = { { .tileTag = 55052, .paletteTag = 55056, @@ -230,7 +238,7 @@ const struct SpriteTemplate gUnknown_82604BC[] = { } }; -const struct SpriteTemplate gUnknown_82604EC[] = { +const struct SpriteTemplate sStatusSummaryBallsSpriteTemplates[] = { { .tileTag = 55060, .paletteTag = 55058, @@ -809,6 +817,74 @@ void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon) } } +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(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; + } + } +} + const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}"); const u16 gUnknown_826055A[] = { |