battle_message 2

This commit is contained in:
PikalaxALT 2019-11-23 18:12:33 -05:00
parent 13e1ed54b2
commit e3bc9c44cd
6 changed files with 435 additions and 971 deletions

View File

@ -1,869 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ExpandBattleTextBuffPlaceholders
ExpandBattleTextBuffPlaceholders: @ 80D8418
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0xC
adds r7, r0, 0
adds r6, r1, 0
movs r5, 0x1
movs r0, 0
mov r8, r0
movs r0, 0xFF
strb r0, [r6]
ldrb r0, [r7, 0x1]
cmp r0, 0xFF
bne _080D8436
b _080D86BA
_080D8436:
adds r0, r7, r5
ldrb r1, [r0]
adds r4, r0, 0
cmp r1, 0xA
bls _080D8442
b _080D86B0
_080D8442:
lsls r0, r1, 2
ldr r1, _080D844C @ =_080D8450
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080D844C: .4byte _080D8450
.align 2, 0
_080D8450:
.4byte _080D847C
.4byte _080D8498
.4byte _080D84EC
.4byte _080D8504
.4byte _080D8514
.4byte _080D858C
.4byte _080D85A0
.4byte _080D85B2
.4byte _080D85F8
.4byte _080D860C
.4byte _080D8628
_080D847C:
adds r0, r5, r7
ldrb r1, [r0, 0x1]
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r1, r0
ldr r0, _080D8494 @ =gBattleStringsTable
subs r1, 0xC
lsls r1, 2
adds r1, r0
ldr r1, [r1]
b _080D868E
.align 2, 0
_080D8494: .4byte gBattleStringsTable
_080D8498:
ldrb r0, [r4, 0x1]
cmp r0, 0x2
beq _080D84B4
cmp r0, 0x2
bgt _080D84A8
cmp r0, 0x1
beq _080D84AE
b _080D84D6
_080D84A8:
cmp r0, 0x4
beq _080D84BC
b _080D84D6
_080D84AE:
ldrb r4, [r4, 0x3]
mov r8, r4
b _080D84D6
_080D84B4:
ldrb r1, [r4, 0x3]
ldrb r0, [r4, 0x4]
lsls r0, 8
b _080D84D2
_080D84BC:
ldrb r0, [r4, 0x3]
mov r8, r0
ldrb r0, [r4, 0x4]
lsls r0, 8
mov r1, r8
orrs r1, r0
ldrb r0, [r4, 0x5]
lsls r0, 16
orrs r1, r0
ldrb r0, [r4, 0x6]
lsls r0, 24
_080D84D2:
orrs r1, r0
mov r8, r1
_080D84D6:
adds r4, r5, r7
ldrb r3, [r4, 0x2]
adds r0, r6, 0
mov r1, r8
movs r2, 0
bl ConvertIntToDecimalStringN
adds r0, r5, 0x3
ldrb r4, [r4, 0x1]
adds r5, r0, r4
b _080D86B0
_080D84EC:
adds r0, r5, r7
ldrb r1, [r0, 0x1]
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r1, r0
movs r0, 0xD
muls r1, r0
ldr r0, _080D8500 @ =gMoveNames
adds r1, r0
b _080D868E
.align 2, 0
_080D8500: .4byte gMoveNames
_080D8504:
adds r0, r5, r7
ldrb r0, [r0, 0x1]
lsls r1, r0, 3
subs r1, r0
ldr r0, _080D8510 @ =gTypeNames
b _080D8616
.align 2, 0
_080D8510: .4byte gTypeNames
_080D8514:
ldrb r0, [r4, 0x1]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
bne _080D8538
ldrb r1, [r4, 0x2]
movs r0, 0x64
muls r0, r1
ldr r1, _080D8534 @ =gPlayerParty
adds r0, r1
movs r1, 0x2
mov r2, sp
bl GetMonData
b _080D8574
.align 2, 0
_080D8534: .4byte gPlayerParty
_080D8538:
ldr r0, _080D8550 @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x8
ands r0, r1
cmp r0, 0
beq _080D8558
ldr r1, _080D8554 @ =sText_FoePkmnPrefix
adds r0, r6, 0
bl StringAppend
b _080D8560
.align 2, 0
_080D8550: .4byte gBattleTypeFlags
_080D8554: .4byte sText_FoePkmnPrefix
_080D8558:
ldr r1, _080D8584 @ =sText_WildPkmnPrefix
adds r0, r6, 0
bl StringAppend
_080D8560:
adds r0, r5, r7
ldrb r1, [r0, 0x2]
movs r0, 0x64
muls r0, r1
ldr r1, _080D8588 @ =gEnemyParty
adds r0, r1
movs r1, 0x2
mov r2, sp
bl GetMonData
_080D8574:
mov r0, sp
bl StringGetEnd10
adds r0, r6, 0
mov r1, sp
bl StringAppend
b _080D86AE
.align 2, 0
_080D8584: .4byte sText_WildPkmnPrefix
_080D8588: .4byte gEnemyParty
_080D858C:
ldr r1, _080D859C @ =gUnknown_83FD5D0
adds r0, r5, r7
ldrb r0, [r0, 0x1]
lsls r0, 2
adds r0, r1
ldr r1, [r0]
b _080D8618
.align 2, 0
_080D859C: .4byte gUnknown_83FD5D0
_080D85A0:
adds r0, r5, r7
ldrb r1, [r0, 0x1]
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r1, r0
adds r0, r6, 0
bl GetSpeciesName
b _080D86AE
_080D85B2:
adds r4, r5, r7
ldrb r0, [r4, 0x1]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
bne _080D85D8
ldrb r1, [r4, 0x2]
movs r0, 0x64
muls r0, r1
ldr r1, _080D85D4 @ =gPlayerParty
adds r0, r1
movs r1, 0x2
adds r2, r6, 0
bl GetMonData
b _080D85EA
.align 2, 0
_080D85D4: .4byte gPlayerParty
_080D85D8:
ldrb r1, [r4, 0x2]
movs r0, 0x64
muls r0, r1
ldr r1, _080D85F4 @ =gEnemyParty
adds r0, r1
movs r1, 0x2
adds r2, r6, 0
bl GetMonData
_080D85EA:
adds r0, r6, 0
bl StringGetEnd10
b _080D86AE
.align 2, 0
_080D85F4: .4byte gEnemyParty
_080D85F8:
ldr r1, _080D8608 @ =gUnknown_83FD63C
adds r0, r5, r7
ldrb r0, [r0, 0x1]
lsls r0, 2
adds r0, r1
ldr r1, [r0]
b _080D8618
.align 2, 0
_080D8608: .4byte gUnknown_83FD63C
_080D860C:
adds r0, r5, r7
ldrb r1, [r0, 0x1]
movs r0, 0xD
muls r1, r0
ldr r0, _080D8624 @ =gAbilityNames
_080D8616:
adds r1, r0
_080D8618:
adds r0, r6, 0
bl StringAppend
adds r5, 0x2
b _080D86B0
.align 2, 0
_080D8624: .4byte gAbilityNames
_080D8628:
adds r0, r5, r7
ldrb r2, [r0, 0x1]
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r2, r0
ldr r0, _080D8674 @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x2
ands r0, r1
cmp r0, 0
beq _080D86A6
cmp r2, 0xAF
bne _080D869C
ldr r2, _080D8678 @ =gLinkPlayers
ldr r0, _080D867C @ =gBattleStruct
ldr r0, [r0]
adds r0, 0xB5
ldrb r1, [r0]
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
adds r0, r2
ldr r1, _080D8680 @ =gPotentialItemEffectBattler
ldrb r2, [r1]
ldrh r0, [r0, 0x18]
cmp r0, r2
bne _080D868C
lsls r1, r2, 3
subs r1, r2
lsls r1, 2
ldr r0, _080D8684 @ =gEnigmaBerries
adds r1, r0
adds r0, r6, 0
bl StringCopy
ldr r1, _080D8688 @ =sText_BerrySuffix
b _080D868E
.align 2, 0
_080D8674: .4byte gBattleTypeFlags
_080D8678: .4byte gLinkPlayers
_080D867C: .4byte gBattleStruct
_080D8680: .4byte gPotentialItemEffectBattler
_080D8684: .4byte gEnigmaBerries
_080D8688: .4byte sText_BerrySuffix
_080D868C:
ldr r1, _080D8698 @ =sText_EnigmaBerry
_080D868E:
adds r0, r6, 0
bl StringAppend
b _080D86AE
.align 2, 0
_080D8698: .4byte sText_EnigmaBerry
_080D869C:
adds r0, r2, 0
adds r1, r6, 0
bl CopyItemName
b _080D86AE
_080D86A6:
adds r0, r2, 0
adds r1, r6, 0
bl CopyItemName
_080D86AE:
adds r5, 0x3
_080D86B0:
adds r0, r7, r5
ldrb r0, [r0]
cmp r0, 0xFF
beq _080D86BA
b _080D8436
_080D86BA:
add sp, 0xC
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end ExpandBattleTextBuffPlaceholders
thumb_func_start ChooseMoveUsedParticle
ChooseMoveUsedParticle: @ 80D86C8
push {r4,r5,lr}
adds r4, r0, 0
movs r2, 0
ldr r5, _080D86FC @ =gBattleMsgDataPtr
ldr r3, _080D8700 @ =gUnknown_83FEA70
_080D86D2:
cmp r2, 0x4
beq _080D86E8
ldrh r1, [r3]
cmp r1, 0
bne _080D86DE
adds r2, 0x1
_080D86DE:
ldr r0, [r5]
adds r3, 0x2
ldrh r0, [r0]
cmp r1, r0
bne _080D86D2
_080D86E8:
cmp r2, 0
blt _080D8714
cmp r2, 0x2
bgt _080D8708
ldr r1, _080D8704 @ =gUnknown_83FE88B
adds r0, r4, 0
bl StringCopy
b _080D8714
.align 2, 0
_080D86FC: .4byte gBattleMsgDataPtr
_080D8700: .4byte gUnknown_83FEA70
_080D8704: .4byte gUnknown_83FE88B
_080D8708:
cmp r2, 0x4
bgt _080D8714
ldr r1, _080D871C @ =gUnknown_83FE88F
adds r0, r4, 0
bl StringCopy
_080D8714:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080D871C: .4byte gUnknown_83FE88F
thumb_func_end ChooseMoveUsedParticle
thumb_func_start ChooseTypeOfMoveUsedString
ChooseTypeOfMoveUsedString: @ 80D8720
push {r4,r5,lr}
adds r3, r0, 0
movs r4, 0
b _080D872A
_080D8728:
adds r3, 0x1
_080D872A:
ldrb r0, [r3]
cmp r0, 0xFF
bne _080D8728
ldr r1, _080D8760 @ =gUnknown_83FEA70
ldr r5, _080D8764 @ =gBattleMsgDataPtr
movs r0, 0
lsls r0, 1
adds r2, r0, r1
_080D873A:
cmp r4, 0x4
beq _080D8754
ldrh r1, [r2]
cmp r1, 0
bne _080D8746
adds r4, 0x1
_080D8746:
ldr r0, [r5]
adds r2, 0x2
ldrh r0, [r0]
cmp r1, r0
bne _080D873A
cmp r4, 0x4
bhi _080D87B0
_080D8754:
lsls r0, r4, 2
ldr r1, _080D8768 @ =_080D876C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080D8760: .4byte gUnknown_83FEA70
_080D8764: .4byte gBattleMsgDataPtr
_080D8768: .4byte _080D876C
.align 2, 0
_080D876C:
.4byte _080D8780
.4byte _080D8788
.4byte _080D8790
.4byte _080D8798
.4byte _080D87A8
_080D8780:
ldr r1, _080D8784 @ =sText_ExclamationMark
b _080D879A
.align 2, 0
_080D8784: .4byte sText_ExclamationMark
_080D8788:
ldr r1, _080D878C @ =sText_ExclamationMark2
b _080D879A
.align 2, 0
_080D878C: .4byte sText_ExclamationMark2
_080D8790:
ldr r1, _080D8794 @ =sText_ExclamationMark3
b _080D879A
.align 2, 0
_080D8794: .4byte sText_ExclamationMark3
_080D8798:
ldr r1, _080D87A4 @ =sText_ExclamationMark4
_080D879A:
adds r0, r3, 0
bl StringCopy
b _080D87B0
.align 2, 0
_080D87A4: .4byte sText_ExclamationMark4
_080D87A8:
ldr r1, _080D87B8 @ =sText_ExclamationMark5
adds r0, r3, 0
bl StringCopy
_080D87B0:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080D87B8: .4byte sText_ExclamationMark5
thumb_func_end ChooseTypeOfMoveUsedString
thumb_func_start BattlePutTextOnWindow
BattlePutTextOnWindow: @ 80D87BC
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x10
adds r4, r0, 0
lsls r1, 24
lsrs r7, r1, 24
movs r0, 0xC0
mov r8, r0
mov r1, r8
ands r1, r7
mov r8, r1
movs r0, 0x3F
ands r7, r0
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _080D87F2
ldr r0, _080D8814 @ =gUnknown_83FEB64
lsls r1, r7, 1
adds r1, r7
lsls r1, 2
adds r1, r0
ldrb r1, [r1]
adds r0, r7, 0
bl FillWindowPixelBuffer
_080D87F2:
movs r0, 0x40
mov r1, r8
ands r0, r1
cmp r0, 0
beq _080D881C
bl ContextNpcGetTextColor
lsls r0, 24
lsrs r0, 24
mov r2, sp
ldr r1, _080D8818 @ =gUnknown_83FEC90
adds r0, r1
ldrb r0, [r0]
strb r0, [r2, 0x5]
lsls r6, r7, 1
b _080D882E
.align 2, 0
_080D8814: .4byte gUnknown_83FEB64
_080D8818: .4byte gUnknown_83FEC90
_080D881C:
mov r3, sp
ldr r1, _080D884C @ =gUnknown_83FEB64
lsls r2, r7, 1
adds r0, r2, r7
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x1]
strb r0, [r3, 0x5]
adds r6, r2, 0
_080D882E:
cmp r7, 0xF
blt _080D8878
cmp r7, 0x14
bgt _080D8850
ldr r0, _080D884C @ =gUnknown_83FEB64
adds r1, r6, r7
lsls r1, 2
adds r1, r0
ldrb r0, [r1, 0x1]
ldrb r2, [r1, 0x4]
adds r1, r4, 0
bl GetStringWidth
movs r1, 0x30
b _080D8868
.align 2, 0
_080D884C: .4byte gUnknown_83FEB64
_080D8850:
cmp r7, 0x17
bgt _080D8878
ldr r0, _080D8874 @ =gUnknown_83FEB64
adds r1, r6, r7
lsls r1, 2
adds r1, r0
ldrb r0, [r1, 0x1]
ldrb r2, [r1, 0x4]
adds r1, r4, 0
bl GetStringWidth
movs r1, 0x40
_080D8868:
subs r1, r0
lsrs r0, r1, 31
adds r1, r0
asrs r1, 1
b _080D8882
.align 2, 0
_080D8874: .4byte gUnknown_83FEB64
_080D8878:
ldr r1, _080D88F8 @ =gUnknown_83FEB64
adds r0, r6, r7
lsls r0, 2
adds r0, r1
ldrb r1, [r0, 0x2]
_080D8882:
cmp r1, 0
bge _080D8888
movs r1, 0
_080D8888:
str r4, [sp]
mov r0, sp
strb r7, [r0, 0x4]
strb r1, [r0, 0x6]
mov r1, sp
ldr r0, _080D88F8 @ =gUnknown_83FEB64
mov r12, r0
adds r3, r6, r7
lsls r3, 2
add r3, r12
ldrb r0, [r3, 0x3]
strb r0, [r1, 0x7]
mov r0, sp
ldrb r0, [r0, 0x6]
strb r0, [r1, 0x8]
mov r0, sp
ldrb r0, [r0, 0x7]
strb r0, [r1, 0x9]
ldrb r0, [r3, 0x4]
strb r0, [r1, 0xA]
ldrb r0, [r3, 0x5]
strb r0, [r1, 0xB]
mov r4, sp
ldrb r2, [r4, 0xC]
movs r1, 0x10
negs r1, r1
adds r0, r1, 0
ands r0, r2
strb r0, [r4, 0xC]
mov r2, sp
ldrb r0, [r3, 0x7]
lsls r0, 4
movs r5, 0xF
strb r0, [r2, 0xC]
ldrb r2, [r3, 0x8]
adds r0, r5, 0
ands r0, r2
ldrb r2, [r4, 0xD]
ands r1, r2
orrs r1, r0
strb r1, [r4, 0xD]
mov r2, sp
ldrb r0, [r3, 0x9]
lsls r0, 4
ands r1, r5
orrs r1, r0
strb r1, [r2, 0xD]
mov r3, r12
cmp r7, 0x18
bne _080D8900
ldr r0, _080D88FC @ =gTextFlags
ldrb r2, [r0]
movs r1, 0x3
negs r1, r1
ands r1, r2
b _080D8908
.align 2, 0
_080D88F8: .4byte gUnknown_83FEB64
_080D88FC: .4byte gTextFlags
_080D8900:
ldr r0, _080D8930 @ =gTextFlags
ldrb r1, [r0]
movs r2, 0x2
orrs r1, r2
_080D8908:
strb r1, [r0]
adds r4, r0, 0
ldr r1, _080D8934 @ =gBattleTypeFlags
ldr r2, [r1]
movs r0, 0x2
ands r0, r2
adds r5, r1, 0
cmp r0, 0
bne _080D8928
movs r0, 0x80
lsls r0, 9
ands r2, r0
cmp r2, 0
beq _080D8938
cmp r7, 0x18
beq _080D8938
_080D8928:
ldrb r0, [r4]
movs r1, 0x4
orrs r0, r1
b _080D8940
.align 2, 0
_080D8930: .4byte gTextFlags
_080D8934: .4byte gBattleTypeFlags
_080D8938:
ldrb r1, [r4]
movs r0, 0x5
negs r0, r0
ands r0, r1
_080D8940:
strb r0, [r4]
cmp r7, 0
beq _080D894A
cmp r7, 0x18
bne _080D8970
_080D894A:
ldr r0, [r5]
movs r1, 0x2
ands r0, r1
cmp r0, 0
beq _080D8958
movs r3, 0x1
b _080D8960
_080D8958:
bl GetTextSpeedSetting
lsls r0, 24
lsrs r3, r0, 24
_080D8960:
ldr r0, _080D896C @ =gTextFlags
ldrb r1, [r0]
movs r2, 0x1
orrs r1, r2
strb r1, [r0]
b _080D8982
.align 2, 0
_080D896C: .4byte gTextFlags
_080D8970:
adds r0, r6, r7
lsls r0, 2
adds r0, r3
ldrb r3, [r0, 0x6]
ldrb r1, [r4]
movs r0, 0x2
negs r0, r0
ands r0, r1
strb r0, [r4]
_080D8982:
mov r0, sp
adds r1, r3, 0
movs r2, 0
bl AddTextPrinter
movs r0, 0x80
mov r1, r8
ands r1, r0
cmp r1, 0
bne _080D89A4
adds r0, r7, 0
bl PutWindowTilemap
adds r0, r7, 0
movs r1, 0x3
bl CopyWindowToVram
_080D89A4:
add sp, 0x10
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end BattlePutTextOnWindow
thumb_func_start sub_80D89B0
sub_80D89B0: @ 80D89B0
push {lr}
lsls r0, 16
lsrs r1, r0, 16
cmp r1, 0xC
beq _080D89CC
ldr r0, _080D89D0 @ =0x00000177
cmp r1, r0
beq _080D89CC
adds r0, 0x8
cmp r1, r0
beq _080D89CC
subs r0, 0x7
cmp r1, r0
bne _080D89D4
_080D89CC:
movs r0, 0x1
b _080D89D6
.align 2, 0
_080D89D0: .4byte 0x00000177
_080D89D4:
movs r0, 0
_080D89D6:
pop {r1}
bx r1
thumb_func_end sub_80D89B0
thumb_func_start SetPpNumbersPaletteInMoveSelection
SetPpNumbersPaletteInMoveSelection: @ 80D89DC
push {r4,r5,lr}
ldr r0, _080D8A38 @ =gActiveBattler
ldrb r2, [r0]
lsls r1, r2, 9
ldr r0, _080D8A3C @ =gBattleBufferA + 4
adds r1, r0
ldr r4, _080D8A40 @ =gUnknown_8D2FBB4
ldr r0, _080D8A44 @ =gMoveSelectionCursor
adds r2, r0
ldrb r2, [r2]
adds r0, r1, 0
adds r0, 0x8
adds r0, r2
ldrb r0, [r0]
adds r1, 0xC
adds r1, r2
ldrb r1, [r1]
bl GetCurrentPpToMaxPpState
lsls r0, 24
ldr r5, _080D8A48 @ =gPlttBufferUnfaded
lsrs r0, 22
adds r0, r4
ldrh r1, [r0]
adds r2, r5, 0
adds r2, 0xB8
strh r1, [r2]
ldrh r0, [r0, 0x2]
adds r5, 0xB6
strh r0, [r5]
ldr r4, _080D8A4C @ =gPlttBufferFaded + 0xB8
adds r0, r2, 0
adds r1, r4, 0
movs r2, 0x1
bl CpuSet
subs r4, 0x2
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x1
bl CpuSet
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080D8A38: .4byte gActiveBattler
_080D8A3C: .4byte gBattleBufferA + 4
_080D8A40: .4byte gUnknown_8D2FBB4
_080D8A44: .4byte gMoveSelectionCursor
_080D8A48: .4byte gPlttBufferUnfaded
_080D8A4C: .4byte gPlttBufferFaded + 0xB8
thumb_func_end SetPpNumbersPaletteInMoveSelection
thumb_func_start GetCurrentPpToMaxPpState
GetCurrentPpToMaxPpState: @ 80D8A50
push {lr}
lsls r0, 24
lsrs r2, r0, 24
adds r3, r2, 0
lsls r1, 24
lsrs r0, r1, 24
cmp r0, r2
beq _080D8A98
cmp r0, 0x2
bhi _080D8A6A
cmp r2, 0x1
bhi _080D8A98
b _080D8A72
_080D8A6A:
cmp r0, 0x7
bhi _080D8A7C
cmp r2, 0x2
bhi _080D8A98
_080D8A72:
movs r0, 0x2
subs r0, r2
lsls r0, 24
lsrs r0, 24
b _080D8A9A
_080D8A7C:
cmp r2, 0
bne _080D8A84
movs r0, 0x2
b _080D8A9A
_080D8A84:
lsrs r0, r1, 26
cmp r2, r0
bhi _080D8A8E
movs r0, 0x1
b _080D8A9A
_080D8A8E:
lsrs r0, r1, 25
cmp r3, r0
bhi _080D8A98
movs r0, 0
b _080D8A9A
_080D8A98:
movs r0, 0x3
_080D8A9A:
pop {r1}
bx r1
thumb_func_end GetCurrentPpToMaxPpState
.align 2, 0 @ Don't pad with nop.

View File

@ -4239,4 +4239,7 @@ extern const u16 gUnknown_8E97DDC[];
extern const u32 gUnknown_8E97DFC[];
extern const u32 gUnknown_8E97EC4[];
// battle_message
extern const u16 gUnknown_8D2FBB4[];
#endif //GUARD_GRAPHICS_H

View File

@ -193,7 +193,7 @@ extern const u8 BattleText_GetPumped[];
extern const u8 BattleText_MistShroud[];
extern const u8 gText_BadEgg[];
extern const u8 gText_PkmnsXPreventsSwitching[];
extern const u8 *const gUnknown_83FD5D0[];
extern const u8 *const gStatNamesTable[];
// diploma
extern const u8 gUnknown_841B60E[];

View File

@ -196,7 +196,6 @@ SECTIONS {
src/battle_transition.o(.text);
src/battle_controller_link_partner.o(.text);
src/battle_message.o(.text);
asm/battle_message.o(.text);
src/math_util.o(.text);
src/roulette_util.o(.text);
src/cable_car_util.o(.text);

View File

@ -1,6 +1,7 @@
#include "global.h"
#include "battle_string_ids.h"
#include "battle.h"
#include "palette.h"
#include "battle_anim.h"
#include "string_util.h"
#include "text.h"
@ -14,6 +15,10 @@
#include "battle_tower.h"
#include "trainer_tower.h"
#include "battle_setup.h"
#include "field_specials.h"
#include "new_menu_helpers.h"
#include "battle_controllers.h"
#include "graphics.h"
#include "constants/moves.h"
#include "constants/items.h"
#include "constants/trainer_classes.h"
@ -32,12 +37,12 @@ struct BattleWindowText
u8 shadowColor;
};
EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {};
EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL;
static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {};
static EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL;
void ChooseMoveUsedParticle(u8 *textPtr);
void ChooseTypeOfMoveUsedString(u8 *textPtr);
void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
static void ChooseMoveUsedParticle(u8 *textPtr);
static void ChooseTypeOfMoveUsedString(u8 *textPtr);
static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
const u8 gUnknown_83FB218[] = _(""); // @ 83FB218
const u8 gUnknown_83FB219[] = _("{B_TRAINER1_LOSE_TEXT}"); // @ 83FB219
@ -314,18 +319,18 @@ const u8 gUnknown_83FCC33[] = _("And…\p"); // @ 83FCC33
const u8 gUnknown_83FCC39[] = _("HM moves can't be\nforgotten now.\p"); // @ 83FCC39
const u8 gUnknown_83FCC5B[] = _("It's not very effective…"); // @ 83FCC5B
const u8 gUnknown_83FCC74[] = _("It's super effective!"); // @ 83FCC74
const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_NIGERU}Got away safely!\p"); // @ 83FCC8A
static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_NIGERU}Got away safely!\p"); // @ 83FCC8A
const u8 gUnknown_83FCCA0[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); // @ 83FCCA0
const u8 gUnknown_83FCCBB[] = _("{PLAY_SE SE_NIGERU}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); // @ 83FCCBB
const u8 gUnknown_83FCCD2[] = _("{PLAY_SE SE_NIGERU}Wild {B_BUFF1} fled!"); // @ 83FCCD2
const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!"); // @ 83FCCE4
const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); // @ 83FCCF8
const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!"); // @ 83FCD0F
const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); // @ 83FCD27
const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); // @ 83FCD41
const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); // @ 83FCD66
static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!"); // @ 83FCCE4
static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); // @ 83FCCF8
static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!"); // @ 83FCD0F
static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); // @ 83FCD27
static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); // @ 83FCD41
static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); // @ 83FCD66
const u8 gUnknown_83FCD92[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} fled!"); // @ 83FCD92
const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); // @ 83FCD9F
static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_NIGERU}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); // @ 83FCD9F
const u8 gUnknown_83FCDB3[] = _("No! There's no running\nfrom a TRAINER battle!\p"); // @ 83FCDB3
const u8 gUnknown_83FCDE2[] = _("Can't escape!\p"); // @ 83FCDE2
const u8 gUnknown_83FCDF1[] = _(""); // @ 83FCDF1
@ -367,71 +372,71 @@ const u8 gUnknown_83FD15A[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); // @
const u8 gUnknown_83FD16A[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); // @ 83FD16A
const u8 gUnknown_83FD186[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?"); // @ 83FD186
const u8 gUnknown_83FD1B8[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); // @ 83FD1B8
const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); // @ 83FD1C7
static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); // @ 83FD1C7
const u8 gUnknown_83FD1DF[] = _("{B_PLAYER_NAME} threw a ROCK\nat the {B_OPPONENT_MON1_NAME}!"); // @ 83FD1DF
const u8 gUnknown_83FD1FA[] = _("{B_PLAYER_NAME} threw some BAIT\nat the {B_OPPONENT_MON1_NAME}!"); // @ 83FD1FA
const u8 gUnknown_83FD218[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); // @ 83FD218
const u8 gUnknown_83FD232[] = _("{B_OPPONENT_MON1_NAME} is angry!"); // @ 83FD232
const u8 gUnknown_83FD23F[] = _("{B_OPPONENT_MON1_NAME} is eating!"); // @ 83FD23F
const u8 gUnknown_83FD24D[] = _("{PLAY_SE SE_PINPON}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p"); // @ 83FD24D
const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); // @ 83FD284
const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); // @ 83FD297
const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); // @ 83FD2AA
const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); // @ 83FD2BF
static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); // @ 83FD284
static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); // @ 83FD297
static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); // @ 83FD2AA
static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); // @ 83FD2BF
const u8 gUnknown_83FD2D9[] = _("The GHOST appeared!\pDarn!\nThe GHOST can't be ID'd!\p"); // @ 83FD2D9
const u8 gUnknown_83FD30D[] = _("The GHOST appeared!\p"); // @ 83FD30D
const u8 gUnknown_83FD322[] = _("SILPH SCOPE unveiled the GHOST's\nidentity!"); // @ 83FD322
const u8 gUnknown_83FD34D[] = _("The GHOST was MAROWAK!\p\n"); // @ 83FD34D
const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); // @ 83FD366
const u8 sText_LinkTrainerWantsToBattle[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!"); // @ 83FD383
const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!"); // @ 83FD397
const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!{PAUSE 60}"); // @ 83FD3B1
const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!{PAUSE 60}"); // @ 83FD3C7
const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); // @ 83FD3E4
const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME}!"); // @ 83FD3F7
const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); // @ 83FD407
const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!"); // @ 83FD41E
const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_BUFF1}!"); // @ 83FD43E
const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!"); // @ 83FD44E
const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); // @ 83FD45E
const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); // @ 83FD466
const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); // @ 83FD475
const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); // @ 83FD47D
const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); // @ 83FD488
const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe's weak!\nGet 'em, {B_BUFF1}!"); // @ 83FD497
const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); // @ 83FD4B5
const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); // @ 83FD4CD
const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); // @ 83FD4EB
const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); // @ 83FD4FA
static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); // @ 83FD366
static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!"); // @ 83FD383
static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!"); // @ 83FD397
static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!{PAUSE 60}"); // @ 83FD3B1
static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!{PAUSE 60}"); // @ 83FD3C7
static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); // @ 83FD3E4
static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME}!"); // @ 83FD3F7
static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); // @ 83FD407
static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!"); // @ 83FD41E
static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_BUFF1}!"); // @ 83FD43E
static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!"); // @ 83FD44E
static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); // @ 83FD45E
static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); // @ 83FD466
static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); // @ 83FD475
static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); // @ 83FD47D
static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); // @ 83FD488
static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe's weak!\nGet 'em, {B_BUFF1}!"); // @ 83FD497
static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); // @ 83FD4B5
static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); // @ 83FD4CD
static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); // @ 83FD4EB
static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); // @ 83FD4FA
const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!"); // @ 83FD50D
const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); // @ 83FD522
const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); // @ 83FD535
const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!"); // @ 83FD545
const u8 sText_WildPkmnPrefix[] = _("Wild "); // @ 83FD555
const u8 sText_FoePkmnPrefix[] = _("Foe "); // @ 83FD55B
const u8 sText_FoePkmnPrefix2[] = _("Foe"); // @ 83FD560
const u8 sText_AllyPkmnPrefix[] = _("Ally"); // @ 83FD564
const u8 sText_FoePkmnPrefix3[] = _("Foe"); // @ 83FD569
const u8 sText_AllyPkmnPrefix2[] = _("Ally"); // @ 83FD56D
const u8 sText_FoePkmnPrefix4[] = _("Foe"); // @ 83FD572
const u8 sText_AllyPkmnPrefix3[] = _("Ally"); // @ 83FD576
const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}"); // @ 83FD57B
const u8 sText_ExclamationMark[] = _("!"); // @ 83FD586
const u8 sText_ExclamationMark2[] = _("!"); // @ 83FD588
const u8 sText_ExclamationMark3[] = _("!"); // @ 83FD58A
const u8 sText_ExclamationMark4[] = _("!"); // @ 83FD58C
const u8 sText_ExclamationMark5[] = _("!"); // @ 83FD58E
static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); // @ 83FD522
static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); // @ 83FD535
static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!"); // @ 83FD545
static const u8 sText_WildPkmnPrefix[] = _("Wild "); // @ 83FD555
static const u8 sText_FoePkmnPrefix[] = _("Foe "); // @ 83FD55B
static const u8 sText_FoePkmnPrefix2[] = _("Foe"); // @ 83FD560
static const u8 sText_AllyPkmnPrefix[] = _("Ally"); // @ 83FD564
static const u8 sText_FoePkmnPrefix3[] = _("Foe"); // @ 83FD569
static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); // @ 83FD56D
static const u8 sText_FoePkmnPrefix4[] = _("Foe"); // @ 83FD572
static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); // @ 83FD576
static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}"); // @ 83FD57B
static const u8 sText_ExclamationMark[] = _("!"); // @ 83FD586
static const u8 sText_ExclamationMark2[] = _("!"); // @ 83FD588
static const u8 sText_ExclamationMark3[] = _("!"); // @ 83FD58A
static const u8 sText_ExclamationMark4[] = _("!"); // @ 83FD58C
static const u8 sText_ExclamationMark5[] = _("!"); // @ 83FD58E
const u8 sText_HP2[] = _("HP"); // @ 83FD590
const u8 sText_Attack2[] = _("ATTACK"); // @ 83FD593
const u8 sText_Defense2[] = _("DEFENSE"); // @ 83FD59A
const u8 sText_Speed[] = _("SPEED"); // @ 83FD5A2
const u8 sText_SpAtk2[] = _("SP. ATK"); // @ 83FD5A8
const u8 sText_SpDef2[] = _("SP. DEF"); // @ 83FD5B0
const u8 sText_Accuracy[] = _("accuracy"); // @ 83FD5B8
const u8 sText_Evasiveness[] = _("evasiveness"); // @ 83FD5C1
static const u8 sText_HP2[] = _("HP"); // @ 83FD590
static const u8 sText_Attack2[] = _("ATTACK"); // @ 83FD593
static const u8 sText_Defense2[] = _("DEFENSE"); // @ 83FD59A
static const u8 sText_Speed[] = _("SPEED"); // @ 83FD5A2
static const u8 sText_SpAtk2[] = _("SP. ATK"); // @ 83FD5A8
static const u8 sText_SpDef2[] = _("SP. DEF"); // @ 83FD5B0
static const u8 sText_Accuracy[] = _("accuracy"); // @ 83FD5B8
static const u8 sText_Evasiveness[] = _("evasiveness"); // @ 83FD5C1
const u8 *const gUnknown_83FD5D0[] = {
const u8 *const gStatNamesTable[] = {
sText_HP2,
sText_Attack2,
sText_Defense2,
@ -442,13 +447,13 @@ const u8 *const gUnknown_83FD5D0[] = {
sText_Evasiveness
};
const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); //
const u8 sText_PokeblockWasTooDry[] = _("was too dry!"); // @ 83FD5FF
const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!"); // @ 83FD60C
const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!"); // @ 83FD61B
const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); // @ 83FD62B
static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); //
static const u8 sText_PokeblockWasTooDry[] = _("was too dry!"); // @ 83FD5FF
static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!"); // @ 83FD60C
static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!"); // @ 83FD61B
static const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); // @ 83FD62B
const u8 *const gUnknown_83FD63C[] = {
const u8 *const gPokeblockWasTooXStringTable[] = {
sText_PokeblockWasTooSpicy,
sText_PokeblockWasTooDry,
sText_PokeblockWasTooSweet,
@ -456,31 +461,31 @@ const u8 *const gUnknown_83FD63C[] = {
sText_PokeblockWasTooSour
};
const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); // @ 83FD650
const u8 sText_OldManUsedItem[] = _("The old man used\n{B_LAST_ITEM}!"); // @ 83FD65C
const u8 sText_PokeDudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!"); // @ 83FD671
const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); // @ 83FD688
const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); // @ 83FD697
const u8 sText_DontBeAThief[] = _("Don't be a thief!"); // @ 83FD6B5
const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!"); // @ 83FD6C7
const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!"); // @ 83FD700
const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); // @ 83FD718
const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); // @ 83FD738
const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); // @ 83FD757
const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); // @ 83FD76D
static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); // @ 83FD650
static const u8 sText_OldManUsedItem[] = _("The old man used\n{B_LAST_ITEM}!"); // @ 83FD65C
static const u8 sText_PokeDudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!"); // @ 83FD671
static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); // @ 83FD688
static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); // @ 83FD697
static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); // @ 83FD6B5
static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!"); // @ 83FD6C7
static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!"); // @ 83FD700
static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); // @ 83FD718
static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); // @ 83FD738
static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); // @ 83FD757
static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); // @ 83FD76D
const u8 gUnknown_83FD78A[] = _("よけられた!\nこいつは つかまりそうにないぞ!"); // @ 83FD78A
const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}\p"); // @ 83FD7A2
const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}{PAUSE 127}"); // @ 83FD7C0
const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); // @ 83FD7E0
const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); // @ 83FD804
const u8 sText_Someones[] = _("someone's"); // @ 83FD81A
const u8 sText_Bills[] = _("BILL's"); // @ 83FD824
static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}\p"); // @ 83FD7A2
static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_GET_YASEI}{PAUSE 127}"); // @ 83FD7C0
static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); // @ 83FD7E0
static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); // @ 83FD804
static const u8 sText_Someones[] = _("someone's"); // @ 83FD81A
static const u8 sText_Bills[] = _("BILL's"); // @ 83FD824
const u8 gUnknown_83FD82B[] = _("{B_OPPONENT_MON1_NAME}'s data was\nadded to the POKéDEX.\p"); // @ 83FD82B
const u8 gUnknown_83FD850[] = _("It is raining."); // @ 83FD850
const u8 gUnknown_83FD85F[] = _("A sandstorm is raging."); // @ 83FD85F
const u8 gUnknown_83FD876[] = _("The BOX is full!\nYou can't catch any more!\p"); // @ 83FD876
const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); // @ 83FD8A2
const u8 sText_BerrySuffix[] = _(" BERRY"); // @ 83FD8AF
static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); // @ 83FD8A2
static const u8 sText_BerrySuffix[] = _(" BERRY"); // @ 83FD8AF
const u8 gUnknown_83FD8B6[] = _("ナゾ"); // @ 83FD8B6
const u8 gUnknown_83FD8B9[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured paralysis!"); // @ 83FD8B9
const u8 gUnknown_83FD8D2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured poison!"); // @ 83FD8D2
@ -1269,8 +1274,8 @@ const u8 gUnknown_83FE870[] = _("ミツル"); // @ 83FE870
const u8 gUnknown_83FE874[] = _("{HIGHLIGHT 0}Win"); // @ 83FE874
const u8 gUnknown_83FE87B[] = _("{HIGHLIGHT 0}Loss"); // @ 83FE87B
const u8 gUnknown_83FE883[] = _("{HIGHLIGHT 0}Draw"); // @ 83FE883
const u8 gUnknown_83FE88B[] = _(" is"); // @ 83FE88B
const u8 gUnknown_83FE88F[] = _("'s"); // @ 83FE88F
static const u8 sText_SpaceIs[] = _(" is"); // @ 83FE88B
static const u8 sText_ApostropheS[] = _("'s"); // @ 83FE88F
const u8 gUnknown_83FE892[] = _("a NORMAL move"); // @ 83FE892
const u8 gUnknown_83FE8A0[] = _("a FIGHTING move"); // @ 83FE8A0
const u8 gUnknown_83FE8B0[] = _("a FLYING move"); // @ 83FE8B0
@ -1309,10 +1314,10 @@ const u8 *const gUnknown_83FE9C4[] = {
};
const u8 gUnknown_83FE9D4[] = _("{PLAY_SE SE_NIGERU}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); //
const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); // @ 83FE9E4
const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); // @ 83FE9FF
static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); // @ 83FE9E4
static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); // @ 83FE9FF
const u8 *const sATypeMove_Table[] = {
static const u8 *const sATypeMove_Table[] = {
gUnknown_83FE892,
gUnknown_83FE8A0,
gUnknown_83FE8B0,
@ -1333,7 +1338,7 @@ const u8 *const sATypeMove_Table[] = {
gUnknown_83FE976
};
const u16 gUnknown_83FEA70[] = {
static const u16 sGrammarMoveUsedTable[] = {
MOVE_SWORDS_DANCE,
MOVE_STRENGTH,
MOVE_GROWTH,
@ -1719,7 +1724,7 @@ u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src)
BattleStringExpandPlaceholders(src, gDisplayedStringBattle);
}
const u8* TryGetStatusString(u8 *src)
static const u8* TryGetStatusString(u8 *src)
{
u32 i;
u8 status[] = _("$$$$$$$");
@ -2153,7 +2158,201 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
return dstID;
}
const struct BattleWindowText gUnknown_83FEB64[] = {
static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
u32 srcID = 1;
u32 value = 0;
u8 text[12];
u16 hword;
*dst = EOS;
while (src[srcID] != B_BUFF_EOS)
{
switch (src[srcID])
{
case B_BUFF_STRING: // battle string
hword = T1_READ_16(&src[srcID + 1]);
StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_ID_ADDER]);
srcID += 3;
break;
case B_BUFF_NUMBER: // int to string
switch (src[srcID + 1])
{
case 1:
value = src[srcID + 3];
break;
case 2:
value = T1_READ_16(&src[srcID + 3]);
break;
case 4:
value = T1_READ_32(&src[srcID + 3]);
break;
}
ConvertIntToDecimalStringN(dst, value, STR_CONV_MODE_LEFT_ALIGN, src[srcID + 2]);
srcID += src[srcID + 1] + 3;
break;
case B_BUFF_MOVE: // move name
StringAppend(dst, gMoveNames[T1_READ_16(&src[srcID + 1])]);
srcID += 3;
break;
case B_BUFF_TYPE: // type name
StringAppend(dst, gTypeNames[src[srcID + 1]]);
srcID += 2;
break;
case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix
if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
{
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
StringAppend(dst, sText_FoePkmnPrefix);
else
StringAppend(dst, sText_WildPkmnPrefix);
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
StringGetEnd10(text);
StringAppend(dst, text);
srcID += 3;
break;
case B_BUFF_STAT: // stats
StringAppend(dst, gStatNamesTable[src[srcID + 1]]);
srcID += 2;
break;
case B_BUFF_SPECIES: // species name
GetSpeciesName(dst, T1_READ_16(&src[srcID + 1]));
srcID += 3;
break;
case B_BUFF_MON_NICK: // poke nick without prefix
if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
else
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
StringGetEnd10(dst);
srcID += 3;
break;
case B_BUFF_NEGATIVE_FLAVOR: // flavor table
StringAppend(dst, gPokeblockWasTooXStringTable[src[srcID + 1]]);
srcID += 2;
break;
case B_BUFF_ABILITY: // ability names
StringAppend(dst, gAbilityNames[src[srcID + 1]]);
srcID += 2;
break;
case B_BUFF_ITEM: // item name
hword = T1_READ_16(&src[srcID + 1]);
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (hword == ITEM_ENIGMA_BERRY)
{
if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler)
{
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
StringAppend(dst, sText_BerrySuffix);
}
else
{
StringAppend(dst, sText_EnigmaBerry);
}
}
else
{
CopyItemName(hword, dst);
}
}
else
{
CopyItemName(hword, dst);
}
srcID += 3;
break;
}
}
}
// Loads one of two text strings into the provided buffer. This is functionally
// unused, since the value loaded into the buffer is not read; it loaded one of
// two particles (either "は" or "の") which works in tandem with ChooseTypeOfMoveUsedString
// below to effect changes in the meaning of the line.
static void ChooseMoveUsedParticle(u8* textBuff)
{
s32 counter = 0;
u32 i = 0;
while (counter != MAX_MON_MOVES)
{
if (sGrammarMoveUsedTable[i] == 0)
counter++;
if (sGrammarMoveUsedTable[i++] == gBattleMsgDataPtr->currentMove)
break;
}
if (counter >= 0)
{
if (counter <= 2)
StringCopy(textBuff, sText_SpaceIs); // is
else if (counter <= MAX_MON_MOVES)
StringCopy(textBuff, sText_ApostropheS); // 's
}
}
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
// into the table of moves at sGrammarMoveUsedTable and varied the line accordingly.
//
// sText_ExclamationMark was a plain "!", used for any attack not on the list.
// It resulted in the translation "<NAME>'s <ATTACK>!".
//
// sText_ExclamationMark2 was "を つかった!". This resulted in the translation
// "<NAME> used <ATTACK>!", which was used for all attacks in English.
//
// sText_ExclamationMark3 was "した!". This was used for those moves whose
// names were verbs, such as Recover, and resulted in translations like "<NAME>
// recovered itself!".
//
// sText_ExclamationMark4 was "を した!" This resulted in a translation of
// "<NAME> did an <ATTACK>!".
//
// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
static void ChooseTypeOfMoveUsedString(u8* dst)
{
s32 counter = 0;
s32 i = 0;
while (*dst != EOS)
dst++;
while (counter != MAX_MON_MOVES)
{
if (sGrammarMoveUsedTable[i] == MOVE_NONE)
counter++;
if (sGrammarMoveUsedTable[i++] == gBattleMsgDataPtr->currentMove)
break;
}
switch (counter)
{
case 0:
StringCopy(dst, sText_ExclamationMark);
break;
case 1:
StringCopy(dst, sText_ExclamationMark2);
break;
case 2:
StringCopy(dst, sText_ExclamationMark3);
break;
case 3:
StringCopy(dst, sText_ExclamationMark4);
break;
case 4:
StringCopy(dst, sText_ExclamationMark5);
break;
}
}
static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = {
{PIXEL_FILL(0xf), 2, 0x02, 2, 0, 2, 1, 0x1, 0xf, 0x6},
{PIXEL_FILL(0xf), 2, 0x02, 2, 0, 2, 0, 0x1, 0xf, 0x6},
{PIXEL_FILL(0xe), 1, 0x00, 2, 0, 2, 0, 0xd, 0xe, 0xf},
@ -2182,3 +2381,135 @@ const struct BattleWindowText gUnknown_83FEB64[] = {
};
const u8 gUnknown_83FEC90[] = {0x04, 0x05, 0x02, 0x02};
void BattlePutTextOnWindow(const u8 *text, u8 windowId) {
bool32 copyToVram;
struct TextPrinterTemplate printerTemplate;
u8 speed;
int x;
u8 context;
u8 textFlags = windowId & 0xC0;
windowId &= 0x3F;
if (!(textFlags & 0x80))
FillWindowPixelBuffer(windowId, sTextOnWindowsInfo_Normal[windowId].fillValue);
if (textFlags & 0x40) {
context = ContextNpcGetTextColor();
printerTemplate.fontId = gUnknown_83FEC90[context];
}
else {
printerTemplate.fontId = sTextOnWindowsInfo_Normal[windowId].fontId;
}
switch (windowId)
{
case 15 ... 20:
x = (48 - GetStringWidth(sTextOnWindowsInfo_Normal[windowId].fontId, text,
sTextOnWindowsInfo_Normal[windowId].letterSpacing)) / 2;
break;
case 21 ... 23:
x = (64 - GetStringWidth(sTextOnWindowsInfo_Normal[windowId].fontId, text,
sTextOnWindowsInfo_Normal[windowId].letterSpacing)) / 2;
break;
default:
x = sTextOnWindowsInfo_Normal[windowId].x;
break;
}
if (x < 0)
x = 0;
printerTemplate.currentChar = text;
printerTemplate.windowId = windowId;
printerTemplate.x = x;
printerTemplate.y = sTextOnWindowsInfo_Normal[windowId].y;
printerTemplate.currentX = printerTemplate.x;
printerTemplate.currentY = printerTemplate.y;
printerTemplate.letterSpacing = sTextOnWindowsInfo_Normal[windowId].letterSpacing;
printerTemplate.lineSpacing = sTextOnWindowsInfo_Normal[windowId].lineSpacing;
printerTemplate.unk = 0;
printerTemplate.fgColor = sTextOnWindowsInfo_Normal[windowId].fgColor;
printerTemplate.bgColor = sTextOnWindowsInfo_Normal[windowId].bgColor;
printerTemplate.shadowColor = sTextOnWindowsInfo_Normal[windowId].shadowColor;
if (windowId == 24)
gTextFlags.useAlternateDownArrow = FALSE;
else
gTextFlags.useAlternateDownArrow = TRUE;
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) || ((gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) && windowId != 24))
gTextFlags.autoScroll = TRUE;
else
gTextFlags.autoScroll = FALSE;
if (windowId == 0 || windowId == 24)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
speed = 1;
else
speed = GetTextSpeedSetting();
gTextFlags.canABSpeedUpPrint = TRUE;
}
else
{
speed = sTextOnWindowsInfo_Normal[windowId].speed;
gTextFlags.canABSpeedUpPrint = FALSE;
}
AddTextPrinter(&printerTemplate, speed, NULL);
if (!(textFlags & 0x80))
{
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
}
}
bool8 sub_80D89B0(u16 stringId)
{
if (stringId == STRINGID_TRAINER1LOSETEXT || stringId == STRINGID_TRAINER2CLASS || stringId == STRINGID_TRAINER1WINTEXT || stringId == STRINGID_TRAINER2NAME)
return TRUE;
return FALSE;
}
void SetPpNumbersPaletteInMoveSelection(void)
{
struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
const u16 *palPtr = gUnknown_8D2FBB4;
u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]],
chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]);
gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0];
gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1];
CpuCopy16(&gPlttBufferUnfaded[92], &gPlttBufferFaded[92], sizeof(u16));
CpuCopy16(&gPlttBufferUnfaded[91], &gPlttBufferFaded[91], sizeof(u16));
}
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp)
{
if (maxPp == currentPp)
{
return 3;
}
else if (maxPp <= 2)
{
if (currentPp > 1)
return 3;
else
return 2 - currentPp;
}
else if (maxPp <= 7)
{
if (currentPp > 2)
return 3;
else
return 2 - currentPp;
}
else
{
if (currentPp == 0)
return 2;
if (currentPp <= maxPp / 4)
return 1;
if (currentPp > maxPp / 2)
return 3;
}
return 0;
}

View File

@ -4796,7 +4796,7 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
static void sub_8042D50(int stat)
{
gBattlerTarget = gBattlerInMenuId;
StringCopy(gBattleTextBuff1, gUnknown_83FD5D0[gUnknown_825DFF0[stat]]);
StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_825DFF0[stat]]);
StringCopy(gBattleTextBuff2, BattleText_Rose);
BattleStringExpandPlaceholdersToDisplayedString(BattleText_UnknownString3);
}