diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-10 16:32:32 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-10 16:32:32 -0500 |
commit | 3e79c7890fe3196f3c9142a796e18f9b628dd762 (patch) | |
tree | 47c9cbd6107cdab808f6e1d5472c92b64a98fe59 | |
parent | 1a246cc567f91d3975a7b9ca26a74afd06245bc9 (diff) |
through UpdateLvlInHealthbox
-rw-r--r-- | asm/battle_interface.s | 1252 | ||||
-rw-r--r-- | data/battle_interface.s | 14 | ||||
-rw-r--r-- | include/graphics.h | 3 | ||||
-rw-r--r-- | include/pokemon_summary_screen.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_interface.c | 383 |
6 files changed, 423 insertions, 1231 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s index 753b1696b..43a8a8391 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -5,1202 +5,6 @@ .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} @@ -1285,7 +89,7 @@ _080484BC: adds r0, r4, r1 adds r1, r5, 0 movs r2, 0x1 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r2, _08048510 @ =0x06010a00 adds r4, r2 adds r1, r5, 0 @@ -1293,9 +97,9 @@ _080484BC: adds r0, r4, 0 _080484FE: movs r2, 0x2 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r0, [sp, 0x2C] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox b _080485F8 .align 2, 0 _0804850C: .4byte 0x060102e0 @@ -1332,7 +136,7 @@ _0804854C: asrs r1, 16 mov r0, r9 mov r2, r8 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles b _080485F8 .align 2, 0 _0804855C: .4byte gUnknown_826052C @@ -1427,8 +231,8 @@ _08048610: .4byte 0x06010000 _08048614: .4byte 0x04000008 thumb_func_end UpdateHpTextInHealthbox - thumb_func_start sub_8048618 -sub_8048618: @ 8048618 + thumb_func_start UpdateHpTextInHealthboxInDoubles +UpdateHpTextInHealthboxInDoubles: @ 8048618 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1651,10 +455,10 @@ _080487DC: _080487EC: .4byte gSprites _080487F0: .4byte 0x06010000 _080487F4: .4byte 0x04000008 - thumb_func_end sub_8048618 + thumb_func_end UpdateHpTextInHealthboxInDoubles - thumb_func_start sub_80487F8 -sub_80487F8: @ 80487F8 + thumb_func_start PrintSafariMonInfo +PrintSafariMonInfo: @ 80487F8 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -1943,7 +747,7 @@ _08048A2C: .align 2, 0 _08048A44: .4byte 0x060100c0 _08048A48: .4byte 0x04000008 - thumb_func_end sub_80487F8 + thumb_func_end PrintSafariMonInfo thumb_func_start SwapHpBarsWithHpText SwapHpBarsWithHpText: @ 8048A4C @@ -2087,7 +891,7 @@ _08048B16: asrs r1, 16 adds r0, r4, 0 movs r2, 0 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles ldrb r4, [r6] mov r2, r8 ldrh r0, [r2] @@ -2153,7 +957,7 @@ _08048BE8: muls r1, r2 ldr r2, _08048C10 @ =gEnemyParty adds r1, r2 - bl sub_80487F8 + bl PrintSafariMonInfo b _08048CCA .align 2, 0 _08048C0C: .4byte gBattleTypeFlags @@ -2194,7 +998,7 @@ _08048C14: asrs r1, 16 adds r0, r4, 0 movs r2, 0 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles ldrb r4, [r6] mov r2, r8 ldrh r0, [r2] @@ -2210,7 +1014,7 @@ _08048C6E: asrs r1, 16 adds r0, r4, 0 movs r2, 0x1 - bl sub_8048618 + bl UpdateHpTextInHealthboxInDoubles b _08048CCA .align 2, 0 _08048C88: .4byte 0x06010000 @@ -3667,7 +2471,7 @@ _08049782: adds r0, r4, r1 adds r1, r6, 0 movs r2, 0x6 - bl sub_804A6E8 + bl TextIntoHealthboxObject bl IsDoubleBattle lsls r0, 24 ldr r2, _080497F0 @ =0x06010400 @@ -3681,7 +2485,7 @@ _080497D4: adds r1, 0xC0 adds r0, r5, 0 movs r2, 0x1 - bl sub_804A6E8 + bl TextIntoHealthboxObject b _08049804 .align 2, 0 _080497E4: .4byte gDisplayedStringBattle @@ -3694,10 +2498,10 @@ _080497F8: adds r0, r4, r1 adds r1, r6, 0 movs r2, 0x7 - bl sub_804A6E8 + bl TextIntoHealthboxObject _08049804: ldr r0, [sp, 0xC] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox add sp, 0x10 pop {r3} mov r8, r3 @@ -4276,16 +3080,16 @@ UpdateSafariBallsTextOnHealthbox: @ 8049CAC adds r0, r4, r1 adds r1, r5, 0 movs r2, 0x6 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r0, _08049D0C @ =0x06010800 adds r4, r0 adds r5, 0xC0 adds r0, r4, 0 adds r1, r5, 0 movs r2, 0x2 - bl sub_804A6E8 + bl TextIntoHealthboxObject ldr r0, [sp] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox add sp, 0x4 pop {r4,r5} pop {r0} @@ -4344,7 +3148,7 @@ UpdateLeftNoOfBallsTextOnHealthbox: @ 8049D10 movs r2, 0x4 bl sub_804A734 ldr r0, [sp, 0x10] - bl sub_804A6D8 + bl RemoveWindowOnHealthbox add sp, 0x14 pop {r4,r5} pop {r0} @@ -5577,18 +4381,18 @@ AddTextPrinterAndCreateWindowOnHealthbox: @ 804A648 _0804A6D4: .4byte gUnknown_8260564 thumb_func_end AddTextPrinterAndCreateWindowOnHealthbox - thumb_func_start sub_804A6D8 -sub_804A6D8: @ 804A6D8 + thumb_func_start RemoveWindowOnHealthbox +RemoveWindowOnHealthbox: @ 804A6D8 push {lr} lsls r0, 24 lsrs r0, 24 bl RemoveWindow pop {r0} bx r0 - thumb_func_end sub_804A6D8 + thumb_func_end RemoveWindowOnHealthbox - thumb_func_start sub_804A6E8 -sub_804A6E8: @ 804A6E8 + thumb_func_start TextIntoHealthboxObject +TextIntoHealthboxObject: @ 804A6E8 push {r4-r6,lr} adds r6, r0, 0 adds r5, r1, 0 @@ -5625,7 +4429,7 @@ _0804A724: .align 2, 0 _0804A72C: .4byte 0x001fffff _0804A730: .4byte 0x04000003 - thumb_func_end sub_804A6E8 + thumb_func_end TextIntoHealthboxObject thumb_func_start sub_804A734 sub_804A734: @ 804A734 diff --git a/data/battle_interface.s b/data/battle_interface.s index f8cf4a4b9..12b46279c 100644 --- a/data/battle_interface.s +++ b/data/battle_interface.s @@ -14,25 +14,25 @@ gUnknown_8260270:: @ 8260270 .4byte 0xc0004000, 0x00000400 -gUnknown_8260278:: @ 8260278 +sHealthboxPlayerSpriteTemplates:: @ 8260278 spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -gUnknown_82602A8:: @ 82602A8 +sHealthboxOpponentSpriteTemplates:: @ 82602A8 spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -gUnknown_82602D8:: @ 82602D8 +sHealthboxSafariSpriteTemplate:: @ 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 + spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar + spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar + spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar + spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar gUnknown_8260358:: subsprite 240, 0, 1, 0x0000, 64x32 diff --git a/include/graphics.h b/include/graphics.h index dc0389420..03c9e5de6 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4854,4 +4854,7 @@ extern const u32 gFireRedTrainerCard_Gfx[]; extern const u16 gEmeraldTrainerCard_Pal[]; extern const u32 gEmeraldTrainerCard_Gfx[]; +// battle_interface +extern const u8 gHealthboxElementsGfxTable[][32]; + #endif //GUARD_GRAPHICS_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3695d46df..6f96fa86d 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -34,5 +34,6 @@ enum PokemonSummaryScreenPage s32 GetLastViewedMonIndex(void); void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); +extern const u8 *gNatureNames[]; #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/ld_script.txt b/ld_script.txt index 995bed11f..d05f63e44 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -79,6 +79,7 @@ SECTIONS { src/util.o(.text); src/blend_palette.o(.text); src/daycare.o(.text); + src/battle_interface.o(.text); asm/battle_interface.o(.text); asm/smokescreen.o(.text); src/pokeball.o(.text); diff --git a/src/battle_interface.c b/src/battle_interface.c new file mode 100644 index 000000000..fd4f9af3e --- /dev/null +++ b/src/battle_interface.c @@ -0,0 +1,383 @@ +#include "global.h" +#include "battle_anim.h" +#include "battle_interface.h" +#include "graphics.h" +#include "pokemon_summary_screen.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +void SpriteCB_HealthBoxOther(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); + +extern const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[]; +extern const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[]; +extern const struct SpriteTemplate sHealthboxSafariSpriteTemplate; +extern const struct SpriteTemplate gUnknown_82602F8[]; +extern const struct SubspriteTable gUnknown_82603C4[]; +extern const u8 gUnknown_826051C[16]; +extern const u8 gUnknown_826052C[20]; +extern const u8 gUnknown_8260542[20]; + +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]; + } + } + } +} + +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) == 0) + { + healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1); + + gSprites[healthboxLeftSpriteId].oam.shape = 0; + gSprites[healthboxRightSpriteId].oam.shape = 0; + 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) == 0) + { + 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 = 2; + sprite->oam.priority = 1; + CpuCopy32(GetHealthboxElementGfxPtr(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 = ST_OAM_SQUARE; + gSprites[healthboxRightSpriteId].oam.shape = ST_OAM_SQUARE; + gSprites[healthboxRightSpriteId].oam.tileNum += 0x40; + gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; + gSprites[healthboxRightSpriteId].hBar_HealthBoxSpriteId = healthboxLeftSpriteId; + gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; + return healthboxLeftSpriteId; +} + +const u8 *GetHealthboxElementGfxPtr(u8 elementId) +{ + return gHealthboxElementsGfxTable[elementId]; +} + +// Syncs the position of healthbar accordingly with the healthbox. +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; +} + +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; +} + +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); +} + +void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) +{ + u32 windowId, spriteTileNum; + u8 *windowTileData; + u8 text[16]; + u32 xPos, var1; + void *objVram; + + memcpy(text, gUnknown_826051C, 16); + + 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); +} |