summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_interface.s978
-rw-r--r--include/battle_interface.h4
-rw-r--r--src/battle_gfx_sfx_util.c4
-rw-r--r--src/battle_interface.c334
4 files changed, 340 insertions, 980 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 5d3aa7b20..e4c45c51c 100644
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -5,976 +5,6 @@
.text
- thumb_func_start Task_HidePartyStatusSummary
-Task_HidePartyStatusSummary: @ 80491B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r2, _080492C0 @ =gTasks
- lsls r3, r0, 2
- adds r1, r3, r0
- lsls r1, 3
- adds r0, r1, r2
- ldrb r7, [r0, 0x1C]
- ldrb r4, [r0, 0xA]
- mov r10, r4
- ldrb r0, [r0, 0x8]
- str r0, [sp, 0x8]
- movs r5, 0
- str r3, [sp, 0xC]
- adds r2, 0xE
- adds r2, r1, r2
-_080491DE:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _080491DE
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0x10
- bl SetGpuReg
- ldr r1, _080492C0 @ =gTasks
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r1
- movs r1, 0x10
- strh r1, [r0, 0x26]
- movs r5, 0
- mov r1, r10
- lsls r1, 4
- str r1, [sp, 0x10]
- ldr r3, _080492C4 @ =gSprites
- movs r6, 0xD
- negs r6, r6
- mov r12, r3
- movs r4, 0x4
-_08049220:
- mov r2, sp
- adds r0, r2, r5
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0x1]
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r4
- strb r0, [r1, 0x1]
- adds r5, 0x1
- cmp r5, 0x5
- ble _08049220
- ldr r2, [sp, 0x10]
- add r2, r10
- lsls r2, 2
- add r2, r12
- ldrb r1, [r2, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x1]
- cmp r7, 0
- bne _0804925A
- b _08049360
-_0804925A:
- movs r5, 0
- mov r6, r12
- mov r9, r5
- adds r3, r6, 0
- adds r3, 0x1C
- mov r4, sp
- movs r7, 0
-_08049268:
- ldr r0, [sp, 0x8]
- str r3, [sp, 0x14]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, [sp, 0x14]
- cmp r2, 0
- beq _080492CC
- movs r0, 0x5
- subs r0, r5
- mov r1, sp
- adds r2, r1, r0
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r7, [r0, 0x30]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x34]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x36]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _080492C8 @ =sub_8049630
- str r1, [r0]
- ldr r2, _080492C4 @ =gSprites
- mov r12, r2
- b _08049302
- .align 2, 0
-_080492C0: .4byte gTasks
-_080492C4: .4byte gSprites
-_080492C8: .4byte sub_8049630
-_080492CC:
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r7, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r2, [r0, 0x34]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r2, [r0, 0x36]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _08049348 @ =sub_8049630
- str r1, [r0]
- ldr r0, _0804934C @ =gSprites
- mov r12, r0
-_08049302:
- adds r4, 0x1
- adds r7, 0x7
- adds r5, 0x1
- cmp r5, 0x5
- ble _08049268
- ldr r3, [sp, 0x10]
- add r3, r10
- lsls r3, 2
- mov r1, r12
- adds r0, r3, r1
- movs r2, 0x2E
- ldrsh r1, [r0, r2]
- lsrs r2, r1, 31
- adds r1, r2
- asrs r1, 1
- movs r2, 0
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- mov r1, r12
- adds r1, 0x1C
- adds r3, r1
- ldr r1, _08049350 @ =sub_8049568
- str r1, [r3]
- ldr r1, _08049354 @ =gUnknown_8260404
- bl SetSubspriteTables
- ldr r1, _08049358 @ =gTasks
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, _0804935C @ =sub_8049388
- str r1, [r0]
- b _0804936E
- .align 2, 0
-_08049348: .4byte sub_8049630
-_0804934C: .4byte gSprites
-_08049350: .4byte sub_8049568
-_08049354: .4byte gUnknown_8260404
-_08049358: .4byte gTasks
-_0804935C: .4byte sub_8049388
-_08049360:
- ldr r0, _08049380 @ =gTasks
- ldr r1, [sp, 0xC]
- add r1, r8
- lsls r1, 3
- adds r1, r0
- ldr r0, _08049384 @ =sub_804948C
- str r0, [r1]
-_0804936E:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08049380: .4byte gTasks
-_08049384: .4byte sub_804948C
- thumb_func_end Task_HidePartyStatusSummary
-
- thumb_func_start sub_8049388
-sub_8049388: @ 8049388
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080493DC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x1E]
- adds r1, r0, 0x1
- strh r1, [r4, 0x1E]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080493C8
- ldrh r0, [r4, 0x26]
- subs r1, r0, 0x1
- strh r1, [r4, 0x26]
- lsls r0, r1, 16
- cmp r0, 0
- blt _080493D4
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
-_080493C8:
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080493D4
- ldr r0, _080493E0 @ =sub_80493E4
- str r0, [r4]
-_080493D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080493DC: .4byte gTasks
-_080493E0: .4byte sub_80493E4
- thumb_func_end sub_8049388
-
- thumb_func_start sub_80493E4
-sub_80493E4: @ 80493E4
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r7, _0804945C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r6, r0, 3
- adds r1, r6, r7
- ldrh r0, [r1, 0x26]
- subs r0, 0x1
- strh r0, [r1, 0x26]
- lsls r0, 16
- asrs r2, r0, 16
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- bne _08049464
- ldrb r3, [r1, 0xA]
- movs r5, 0
- adds r0, r7, 0
- adds r0, 0xE
- adds r2, r6, r0
-_08049412:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08049412
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r4, _08049460 @ =gSprites
- adds r0, r4
- bl DestroySpriteAndFreeResources
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySpriteAndFreeResources
- movs r5, 0x1
-_08049442:
- mov r1, sp
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- adds r5, 0x1
- cmp r5, 0x5
- ble _08049442
- b _08049482
- .align 2, 0
-_0804945C: .4byte gTasks
-_08049460: .4byte gSprites
-_08049464:
- movs r0, 0x3
- negs r0, r0
- cmp r2, r0
- bne _08049482
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- adds r0, r4, 0
- bl DestroyTask
-_08049482:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80493E4
-
- thumb_func_start sub_804948C
-sub_804948C: @ 804948C
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r7, _080494C4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r6, r0, 3
- adds r3, r6, r7
- ldrh r0, [r3, 0x26]
- subs r1, r0, 0x1
- strh r1, [r3, 0x26]
- lsls r0, r1, 16
- asrs r2, r0, 16
- cmp r2, 0
- blt _080494C8
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- b _08049546
- .align 2, 0
-_080494C4: .4byte gTasks
-_080494C8:
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- bne _08049528
- ldrb r3, [r3, 0xA]
- movs r5, 0
- adds r0, r7, 0
- adds r0, 0xE
- adds r2, r6, r0
-_080494DA:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _080494DA
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r4, _08049524 @ =gSprites
- adds r0, r4
- bl DestroySpriteAndFreeResources
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySpriteAndFreeResources
- movs r5, 0x1
-_0804950A:
- mov r1, sp
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- adds r5, 0x1
- cmp r5, 0x5
- ble _0804950A
- b _08049546
- .align 2, 0
-_08049524: .4byte gSprites
-_08049528:
- movs r0, 0x3
- negs r0, r0
- cmp r2, r0
- bne _08049546
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- adds r0, r4, 0
- bl DestroyTask
-_08049546:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_804948C
-
- thumb_func_start SpriteCB_StatusSummaryBar
-SpriteCB_StatusSummaryBar: @ 8049550
- push {lr}
- adds r1, r0, 0
- ldrh r2, [r1, 0x24]
- movs r3, 0x24
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08049564
- ldrh r0, [r1, 0x2E]
- adds r0, r2, r0
- strh r0, [r1, 0x24]
-_08049564:
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_StatusSummaryBar
-
- thumb_func_start sub_8049568
-sub_8049568: @ 8049568
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- adds r1, r0, 0
- adds r1, 0x20
- strh r1, [r2, 0x30]
- movs r3, 0x2E
- ldrsh r0, [r2, r3]
- cmp r0, 0
- ble _08049586
- lsls r0, r1, 16
- asrs r0, 20
- ldrh r1, [r2, 0x24]
- adds r0, r1
- b _0804958E
-_08049586:
- lsls r1, 16
- asrs r1, 20
- ldrh r0, [r2, 0x24]
- subs r0, r1
-_0804958E:
- strh r0, [r2, 0x24]
- ldrh r1, [r2, 0x30]
- movs r0, 0xF
- ands r0, r1
- strh r0, [r2, 0x30]
- pop {r0}
- bx r0
- thumb_func_end sub_8049568
-
- thumb_func_start SpriteCB_StatusSummaryBallsOnBattleStart
-SpriteCB_StatusSummaryBallsOnBattleStart: @ 804959C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _080495B0
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- b _08049626
-_080495B0:
- ldrh r0, [r4, 0x32]
- lsls r0, 24
- lsrs r3, r0, 24
- ldrh r2, [r4, 0x34]
- adds r0, r2, 0
- adds r0, 0x38
- lsls r1, r0, 16
- lsrs r2, r1, 16
- ldr r0, _080495E0 @ =0x0000fff0
- ands r2, r0
- strh r2, [r4, 0x34]
- cmp r3, 0
- beq _080495E4
- lsrs r0, r1, 20
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- ble _080495F4
- movs r0, 0
- strh r0, [r4, 0x24]
- b _080495F4
- .align 2, 0
-_080495E0: .4byte 0x0000fff0
-_080495E4:
- lsrs r1, 20
- ldrh r0, [r4, 0x24]
- subs r0, r1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- bge _080495F4
- strh r3, [r4, 0x24]
-_080495F4:
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08049626
- movs r1, 0x3F
- cmp r3, 0
- beq _08049604
- movs r1, 0xC0
-_08049604:
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08049618
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x6D
- bl PlaySE2WithPanning
- b _08049622
-_08049618:
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x6C
- bl PlaySE1WithPanning
-_08049622:
- ldr r0, _0804962C @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_08049626:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804962C: .4byte SpriteCallbackDummy
- thumb_func_end SpriteCB_StatusSummaryBallsOnBattleStart
-
- thumb_func_start sub_8049630
-sub_8049630: @ 8049630
- push {r4,lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0x30]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r0, 0
- ble _08049644
- subs r0, r1, 0x1
- strh r0, [r3, 0x30]
- b _08049694
-_08049644:
- ldrh r0, [r3, 0x32]
- lsls r0, 24
- ldrh r2, [r3, 0x34]
- adds r1, r2, 0
- adds r1, 0x38
- lsls r4, r1, 16
- lsrs r2, r4, 16
- ldr r1, _08049664 @ =0x0000fff0
- ands r2, r1
- strh r2, [r3, 0x34]
- cmp r0, 0
- beq _08049668
- lsrs r0, r4, 20
- ldrh r1, [r3, 0x24]
- adds r0, r1
- b _0804966E
- .align 2, 0
-_08049664: .4byte 0x0000fff0
-_08049668:
- lsrs r1, r4, 20
- ldrh r0, [r3, 0x24]
- subs r0, r1
-_0804966E:
- strh r0, [r3, 0x24]
- movs r2, 0x24
- ldrsh r0, [r3, r2]
- movs r2, 0x20
- ldrsh r1, [r3, r2]
- adds r0, r1
- adds r0, 0x8
- movs r1, 0x80
- lsls r1, 1
- cmp r0, r1
- bls _08049694
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0804969C @ =SpriteCallbackDummy
- str r0, [r3, 0x1C]
-_08049694:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804969C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8049630
-
- thumb_func_start SpriteCB_StatusSummaryBallsOnSwitchout
-SpriteCB_StatusSummaryBallsOnSwitchout: @ 80496A0
- ldrh r2, [r0, 0x2E]
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _080496BC @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r2, [r1, 0x24]
- strh r2, [r0, 0x24]
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- bx lr
- .align 2, 0
-_080496BC: .4byte gSprites
- thumb_func_end SpriteCB_StatusSummaryBallsOnSwitchout
-
- thumb_func_start sub_80496C0
-sub_80496C0: @ 80496C0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r7, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _08049760 @ =gDisplayedStringBattle
- ldr r1, _08049764 @ =gUnknown_8260556
- bl StringCopy
- adds r5, r0, 0
- adds r0, r7, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- adds r0, r5, 0
- mov r1, sp
- bl StringCopy
- adds r5, r0, 0
- movs r0, 0xFC
- strb r0, [r5]
- adds r5, 0x1
- movs r0, 0x1
- strb r0, [r5]
- adds r5, 0x1
- adds r0, r7, 0
- bl GetMonGender
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r0, 0
- cmp r0, 0x1D
- beq _08049720
- cmp r0, 0x20
- bne _08049734
-_08049720:
- movs r0, 0xB
- muls r1, r0
- ldr r0, _08049768 @ =gSpeciesNames
- adds r1, r0
- mov r0, sp
- bl StringCompare
- cmp r0, 0
- bne _08049734
- movs r6, 0x64
-_08049734:
- ldr r1, _0804976C @ =gSprites
- mov r0, r8
- lsls r4, r0, 4
- adds r0, r4, r0
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0x3A]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r7, 0
- bl CheckBattleTypeGhost
- lsls r0, 24
- cmp r0, 0
- beq _08049754
- movs r6, 0x64
-_08049754:
- cmp r6, 0
- beq _08049770
- cmp r6, 0xFE
- beq _0804977A
- movs r0, 0xB
- b _08049782
- .align 2, 0
-_08049760: .4byte gDisplayedStringBattle
-_08049764: .4byte gUnknown_8260556
-_08049768: .4byte gSpeciesNames
-_0804976C: .4byte gSprites
-_08049770:
- movs r0, 0xB
- strb r0, [r5]
- adds r5, 0x1
- movs r0, 0xB5
- b _08049782
-_0804977A:
- movs r0, 0xA
- strb r0, [r5]
- adds r5, 0x1
- movs r0, 0xB6
-_08049782:
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- ldr r0, _080497E4 @ =gDisplayedStringBattle
- add r3, sp, 0xC
- movs r1, 0
- movs r2, 0x3
- bl AddTextPrinterAndCreateWindowOnHealthbox
- adds r6, r0, 0
- ldr r0, _080497E8 @ =gSprites
- mov r2, r8
- adds r1, r4, r2
- 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 _080497F8
- ldr r1, _080497EC @ =0x06010040
- adds r0, r4, r1
- adds r1, r6, 0
- movs r2, 0x6
- bl TextIntoHealthboxObject
- bl IsDoubleBattle
- lsls r0, 24
- ldr r2, _080497F0 @ =0x06010400
- adds r5, r4, r2
- cmp r0, 0
- bne _080497D4
- ldr r0, _080497F4 @ =0x06010800
- adds r5, r4, r0
-_080497D4:
- adds r1, r6, 0
- adds r1, 0xC0
- adds r0, r5, 0
- movs r2, 0x1
- bl TextIntoHealthboxObject
- b _08049804
- .align 2, 0
-_080497E4: .4byte gDisplayedStringBattle
-_080497E8: .4byte gSprites
-_080497EC: .4byte 0x06010040
-_080497F0: .4byte 0x06010400
-_080497F4: .4byte 0x06010800
-_080497F8:
- ldr r1, _08049818 @ =0x06010020
- adds r0, r4, r1
- adds r1, r6, 0
- movs r2, 0x7
- bl TextIntoHealthboxObject
-_08049804:
- ldr r0, [sp, 0xC]
- bl RemoveWindowOnHealthbox
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08049818: .4byte 0x06010020
- thumb_func_end sub_80496C0
-
- thumb_func_start sub_804981C
-sub_804981C: @ 804981C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- ldr r0, _080498DC @ =gBattleTypeFlags
- ldr r1, [r0]
- ldr r0, _080498E0 @ =0x00010210
- ands r0, r1
- cmp r0, 0
- bne _0804991C
- movs r0, 0x8
- ands r1, r0
- cmp r1, 0
- bne _0804991C
- ldr r0, _080498E4 @ =gSprites
- mov r9, r0
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- add r0, r9
- mov r8, r0
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0804991C
- ldr r1, _080498E8 @ =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r5, r0, r1
- ldrh r0, [r5]
- movs r7, 0x64
- muls r0, r7
- ldr r6, _080498EC @ =gEnemyParty
- adds r0, r6
- adds r1, r4, 0
- bl CheckBattleTypeGhost
- lsls r0, 24
- cmp r0, 0
- bne _0804991C
- ldrh r0, [r5]
- muls r0, r7
- adds r0, r6
- 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 _0804991C
- mov r1, r8
- ldrh r0, [r1, 0x38]
- lsls r0, 24
- lsrs r4, r0, 24
- mov r2, r10
- cmp r2, 0
- beq _080498F8
- movs r0, 0x46
- bl GetHealthboxElementGfxPtr
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- add r1, r9
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 1
- adds r1, r2
- ldr r2, _080498F0 @ =0x06010000
- adds r1, r2
- ldr r2, _080498F4 @ =0x04000008
- bl CpuSet
- b _0804991C
- .align 2, 0
-_080498DC: .4byte gBattleTypeFlags
-_080498E0: .4byte 0x00010210
-_080498E4: .4byte gSprites
-_080498E8: .4byte gBattlerPartyIndexes
-_080498EC: .4byte gEnemyParty
-_080498F0: .4byte 0x06010000
-_080498F4: .4byte 0x04000008
-_080498F8:
- mov r0, r10
- str r0, [sp]
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 1
- adds r1, r2
- ldr r0, _0804992C @ =0x06010000
- adds r1, r0
- ldr r2, _08049930 @ =0x05000008
- mov r0, sp
- bl CpuSet
-_0804991C:
- 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
-_0804992C: .4byte 0x06010000
-_08049930: .4byte 0x05000008
- thumb_func_end sub_804981C
-
thumb_func_start UpdateStatusIconInHealthbox
UpdateStatusIconInHealthbox: @ 8049934
push {r4-r7,lr}
@@ -1173,7 +203,7 @@ _08049A7E:
_08049AD4:
mov r0, r9
movs r1, 0x1
- bl sub_804981C
+ bl TryAddPokeballIconToHealthbox
b _08049BB6
.align 2, 0
_08049AE0: .4byte gSprites
@@ -1270,7 +300,7 @@ _08049B62:
_08049BAE:
mov r0, r9
movs r1, 0
- bl sub_804981C
+ bl TryAddPokeballIconToHealthbox
_08049BB6:
pop {r3-r5}
mov r8, r3
@@ -1676,7 +706,7 @@ _08049F06:
_08049F0E:
adds r0, r6, 0
mov r1, r8
- bl sub_80496C0
+ bl UpdateNickInHealthbox
_08049F16:
cmp r7, 0x9
beq _08049F1E
@@ -1753,7 +783,7 @@ _08049FA8:
_08049FB0:
adds r0, r6, 0
mov r1, r8
- bl sub_80496C0
+ bl UpdateNickInHealthbox
_08049FB8:
cmp r7, 0x9
beq _08049FC0
diff --git a/include/battle_interface.h b/include/battle_interface.h
index 162faa8cb..01f3c4b29 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -79,8 +79,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
-void sub_80496C0(u8 spriteId, struct Pokemon *mon);
-void sub_804981C(u8 spriteId, u8);
+void UpdateNickInHealthbox(u8 spriteId, struct Pokemon *mon);
+void TryAddPokeballIconToHealthbox(u8 spriteId, u8);
s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
#endif // GUARD_BATTLE_INTERFACE_H
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index d7bccb298..60cff27be 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -687,8 +687,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform)
gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
SetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_NICKNAME, gSpeciesNames[targetSpecies]);
- sub_80496C0(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
- sub_804981C(gHealthboxSpriteIds[battlerAtk], 1);
+ UpdateNickInHealthbox(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
+ TryAddPokeballIconToHealthbox(gHealthboxSpriteIds[battlerAtk], 1);
}
else if (notTransform)
{
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 77ac1db80..489378a13 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1,8 +1,11 @@
#include "global.h"
#include "battle_anim.h"
#include "battle_interface.h"
+#include "battle_message.h"
#include "decompress.h"
+#include "gpu_regs.h"
#include "graphics.h"
+#include "pokedex.h"
#include "pokemon_summary_screen.h"
#include "sound.h"
#include "string_util.h"
@@ -15,6 +18,11 @@ 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 sub_8049388(u8 taskId);
+void sub_80493E4(u8 taskId);
+void sub_8049568(struct Sprite * sprite);
+void sub_8049630(struct Sprite * sprite);
+void sub_804948C(u8 taskId);
void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite * sprite);
void UpdateStatusIconInHealthbox(u8 spriteId);
void SpriteCB_StatusSummaryBar(struct Sprite * sprite);
@@ -183,8 +191,9 @@ const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] =
{NELEMS(gUnknown_82603D4), gUnknown_82603D4}
};
-const struct SubspriteTable gUnknown_8260404 =
-{NELEMS(gUnknown_82603E4), gUnknown_82603E4};
+const struct SubspriteTable gUnknown_8260404[] = {
+ {NELEMS(gUnknown_82603E4), gUnknown_82603E4}
+};
const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp");
@@ -1673,8 +1682,329 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
}
#endif //NONMATCHING
+void Task_HidePartyStatusSummary(u8 taskId)
+{
+ u8 ballIconSpriteIds[PARTY_SIZE];
+ bool8 isBattleStart;
+ u8 summaryBarSpriteId;
+ u8 battlerId;
+ s32 i;
+
+ isBattleStart = gTasks[taskId].tIsBattleStart;
+ summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
+ battlerId = gTasks[taskId].tBattler;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+
+ gTasks[taskId].tData15 = 16;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND;
+
+ gSprites[summaryBarSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+
+ if (isBattleStart)
+ {
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ {
+ gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i;
+ gSprites[ballIconSpriteIds[5 - i]].data[3] = 0;
+ gSprites[ballIconSpriteIds[5 - i]].data[4] = 0;
+ gSprites[ballIconSpriteIds[5 - i]].callback = sub_8049630;
+ }
+ else
+ {
+ gSprites[ballIconSpriteIds[i]].data[1] = 7 * i;
+ gSprites[ballIconSpriteIds[i]].data[3] = 0;
+ gSprites[ballIconSpriteIds[i]].data[4] = 0;
+ gSprites[ballIconSpriteIds[i]].callback = sub_8049630;
+ }
+ }
+ gSprites[summaryBarSpriteId].data[0] /= 2;
+ gSprites[summaryBarSpriteId].data[1] = 0;
+ gSprites[summaryBarSpriteId].callback = sub_8049568;
+ SetSubspriteTables(&gSprites[summaryBarSpriteId], gUnknown_8260404);
+ gTasks[taskId].func = sub_8049388;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_804948C;
+ }
+}
+
+void sub_8049388(u8 taskId)
+{
+ if ((gTasks[taskId].data[11]++ % 2) == 0)
+ {
+ if (--gTasks[taskId].tData15 < 0)
+ return;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15]));
+ }
+ if (gTasks[taskId].tData15 == 0)
+ gTasks[taskId].func = sub_80493E4;
+}
+
+void sub_80493E4(u8 taskId)
+{
+ u8 ballIconSpriteIds[PARTY_SIZE];
+ s32 i;
+
+ u8 battlerId = gTasks[taskId].tBattler;
+ if (--gTasks[taskId].tData15 == -1)
+ {
+ u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
+
+ DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]);
+ DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]);
+
+ for (i = 1; i < PARTY_SIZE; i++)
+ DestroySprite(&gSprites[ballIconSpriteIds[i]]);
+ }
+ else if (gTasks[taskId].tData15 == -3)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_804948C(u8 taskId)
+{
+ u8 ballIconSpriteIds[PARTY_SIZE];
+ s32 i;
+ u8 battlerId = gTasks[taskId].tBattler;
+
+ if (--gTasks[taskId].tData15 >= 0)
+ {
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[15], 16 - gTasks[taskId].data[15]));
+ }
+ else if (gTasks[taskId].tData15 == -1)
+ {
+ u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
+
+ DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]);
+ DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]);
+
+ for (i = 1; i < PARTY_SIZE; i++)
+ DestroySprite(&gSprites[ballIconSpriteIds[i]]);
+ }
+ else if (gTasks[taskId].tData15 == -3)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyTask(taskId);
+ }
+}
+
+#undef tBattler
+#undef tSummaryBarSpriteId
+#undef tBallIconSpriteId
+#undef tIsBattleStart
+#undef tData15
+
+void SpriteCB_StatusSummaryBar(struct Sprite *sprite)
+{
+ if (sprite->pos2.x != 0)
+ sprite->pos2.x += sprite->data[0];
+}
+
+void sub_8049568(struct Sprite *sprite)
+{
+ sprite->data[1] += 32;
+ if (sprite->data[0] > 0)
+ sprite->pos2.x += sprite->data[1] >> 4;
+ else
+ sprite->pos2.x -= sprite->data[1] >> 4;
+ sprite->data[1] &= 0xF;
+}
+
+void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite)
+{
+ u8 var1;
+ u16 var2;
+ s8 pan;
+
+ if (sprite->data[1] > 0)
+ {
+ sprite->data[1]--;
+ return;
+ }
+
+ var1 = sprite->data[2];
+ var2 = sprite->data[3];
+ var2 += 56;
+ sprite->data[3] = var2 & 0xFFF0;
+
+ if (var1 != 0)
+ {
+ sprite->pos2.x += var2 >> 4;
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x = 0;
+ }
+ else
+ {
+ sprite->pos2.x -= var2 >> 4;
+ if (sprite->pos2.x < 0)
+ sprite->pos2.x = 0;
+ }
+
+ if (sprite->pos2.x == 0)
+ {
+ pan = SOUND_PAN_TARGET;
+ if (var1 != 0)
+ pan = SOUND_PAN_ATTACKER;
+
+ if (sprite->data[7] != 0)
+ PlaySE2WithPanning(SE_TB_KARA, pan);
+ else
+ PlaySE1WithPanning(SE_TB_KON, pan);
+
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_8049630(struct Sprite *sprite)
+{
+ u8 var1;
+ u16 var2;
+
+ if (sprite->data[1] > 0)
+ {
+ sprite->data[1]--;
+ return;
+ }
+ var1 = sprite->data[2];
+ var2 = sprite->data[3];
+ var2 += 56;
+ sprite->data[3] = var2 & 0xFFF0;
+ if (var1 != 0)
+ sprite->pos2.x += var2 >> 4;
+ else
+ sprite->pos2.x -= var2 >> 4;
+ if (sprite->pos2.x + sprite->pos1.x > 248
+ || sprite->pos2.x + sprite->pos1.x < -8)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite)
+{
+ u8 barSpriteId = sprite->data[0];
+
+ sprite->pos2.x = gSprites[barSpriteId].pos2.x;
+ sprite->pos2.y = gSprites[barSpriteId].pos2.y;
+}
+
const u8 gUnknown_8260556[] = _("{HIGHLIGHT 02}");
+void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 *ptr;
+ u32 windowId, spriteTileNum;
+ u8 *windowTileData;
+ u16 species;
+ u8 gender;
+
+ ptr = StringCopy(gDisplayedStringBattle, gUnknown_8260556);
+ GetMonData(mon, MON_DATA_NICKNAME, nickname);
+ StringGetEnd10(nickname);
+ ptr = StringCopy(ptr, nickname);
+ *ptr++ = EXT_CTRL_CODE_BEGIN;
+ *ptr++ = EXT_CTRL_CODE_COLOR;
+
+ gender = GetMonGender(mon);
+ species = GetMonData(mon, MON_DATA_SPECIES);
+
+ if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && StringCompare(nickname, gSpeciesNames[species]) == 0)
+ gender = 100;
+
+ if (CheckBattleTypeGhost(mon, gSprites[healthboxSpriteId].hMain_Battler))
+ gender = 100;
+
+ // AddTextPrinterAndCreateWindowOnHealthbox's arguments are the same in all 3 cases.
+ // It's possible they may have been different in early development phases.
+ switch (gender)
+ {
+ default:
+ *ptr++ = TEXT_DYNAMIC_COLOR_2;
+ *ptr++ = EOS;
+ windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId);
+ break;
+ case MON_MALE:
+ *ptr++ = TEXT_DYNAMIC_COLOR_2;
+ *ptr++ = CHAR_MALE;
+ *ptr++ = EOS;
+ windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId);
+ break;
+ case MON_FEMALE:
+ *ptr++ = TEXT_DYNAMIC_COLOR_1;
+ *ptr++ = CHAR_FEMALE;
+ *ptr++ = EOS;
+ windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, &windowId);
+ break;
+ }
+
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
+
+ if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
+ {
+ TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6);
+ ptr = (void*)(OBJ_VRAM0);
+ if (!IsDoubleBattle())
+ ptr += spriteTileNum + 0x800;
+ else
+ ptr += spriteTileNum + 0x400;
+ TextIntoHealthboxObject(ptr, windowTileData + 0xC0, 1);
+ }
+ else
+ {
+ TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7);
+ }
+
+ RemoveWindowOnHealthbox(windowId);
+}
+void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
+{
+ u8 battlerId, healthBarSpriteId;
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_OLD_MAN_TUTORIAL | BATTLE_TYPE_POKEDUDE))
+ return;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ return;
+
+ battlerId = gSprites[healthboxSpriteId].hMain_Battler;
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return;
+ if (CheckBattleTypeGhost(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId))
+ return;
+ if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
+ return;
+
+ healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
+
+ if (noStatus)
+ CpuCopy32(GetHealthboxElementGfxPtr(70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
+ else
+ CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
+}
+
const u16 gUnknown_826055A[] = {
RGB(24, 12, 24),
RGB(23, 23, 3),