.thumb
.thumb_func
.global protectionmoves
[COLOR="red"].equ Myloc, 0xE00000[/COLOR] @Location of non hooking resource area (main routines plus Battle Scripts and Strings). Requires 0x598 bytes of free space.
[COLOR="red"].equ YourWordLocation, 0x203E320[/COLOR] @RAM Area used for Battle String Loader Hack.
[COLOR="red"].equ MoveDataLoc, 0x831C898
.equ PriorityBLLoc, 0x8888888[/COLOR] @Compile the first side BC rewrite in the ASM resource thread.
[COLOR="Red"].equ MagicGuardIndex, 0x63
.equ DefiantIndex, 0x81
.equ CompetitiveIndex, 0xAD
.equ SetWordCommand, 0xFB
.equ CallasmCommand, 0xF9[/COLOR]
@ScriptStringReferences
.equ PMTLoc, RomAreaOffset+ProtectionMoveTable
.equ POTLoc, RomAreaOffset+ProtectionOddTable
.equ NPMLoc, RomAreaOffset+NewMessageScript
.equ MatStringLoc, RomAreaOffset+MatMessage
.equ GuardStringUserLoc, RomAreaOffset+GuardMessageUser
.equ GuardStringFoeLoc, RomAreaOffset+GuardMessageFoe
.equ NMSLoc, RomAreaOffset+NewMessageScript
@@ Character table.
.equ Space, 0x0
.equ JumpLine, 0xFE
.equ BuffCharac, 0xFD
.equ Apos, 0xB4
.equ Dot, 0xAD
.equ Exclam, 0xAB
.equ Termin, 0xFF
.equ Dash, 0xAE
.equ A_, 0xBB
.equ B_, 0xBC
.equ C_, 0xBD
.equ D_, 0xBE
.equ E_, 0xBF
.equ F_, 0xC0
.equ G_, 0xC1
.equ H_, 0xC2
.equ I_, 0xC3
.equ J_, 0xC4
.equ K_, 0xC5
.equ L_, 0xC6
.equ M_, 0xC7
.equ N_, 0xC8
.equ O_, 0xC9
.equ P_, 0xCA
.equ Q_, 0xCB
.equ R_, 0xCC
.equ S_, 0xCD
.equ T_, 0xCE
.equ U_, 0xCF
.equ V_, 0xD0
.equ W_, 0xD1
.equ X_, 0xD2
.equ Y_, 0xD3
.equ Z_, 0xD4
.equ a_, 0xD5
.equ b_, 0xD6
.equ c_, 0xD7
.equ d_, 0xD8
.equ e_, 0xD9
.equ f_, 0xDA
.equ g_, 0xDB
.equ h_, 0xDC
.equ i_, 0xDD
.equ j_, 0xDE
.equ k_, 0xDF
.equ l_, 0xE0
.equ m_, 0xE1
.equ n_, 0xE2
.equ o_, 0xE3
.equ p_, 0xE4
.equ q_, 0xE5
.equ r_, 0xE6
.equ s_, 0xE7
.equ t_, 0xE8
.equ u_, 0xE9
.equ v_, 0xEA
.equ w_, 0xEB
.equ x_, 0xEC
.equ y_, 0xED
.equ z_, 0xEE
.equ RomAreaOffset, 0x8000000
.align 2
.org 0x464B4
ldr r0, .Hook1
bx r0
.align 2
.Hook1: .word Main2+RomAreaOffset+1
.align 2
.org 0x48410
ldr r0, .Hook2
bx r0
.align 2
.Hook2: .word ProtectMessageCheck+RomAreaOffset+1
.align 2
.org 0x4DF8C
ldr r0, .Hook3
bx r0
.align 2
.Hook3: .word RomAreaOffset+Main+1
.align 2
.org Myloc
Main:
push {r4-r7, lr}
LoadAttackerBank:
ldr r1, .Attacker
ldrb r5, [r1]
LoadConsecutiveSuccessfulProtectUsage:
ldr r2, .DisableStruct
lsl r0, r5, #0x3
sub r0, r0, r5
lsl r0, r0, #2
add r3, r0, r2 @Disable Data
CheckIfLastMover:
ldr r0, .CurrentTurnOrderIteration
ldrb r1, [r0]
ldr r0, .NoOfBattlers
ldrb r0, [r0]
sub r0, #1
cmp r1, r0
beq Fail
CheckCurrentMove:
ldr r1, .CurrMove
ldrh r1, [r1]
LoadProtectTypeTable:
ldr r7, .ProtectionMoveTableLoc
mov r6, r7
LoadFFFFHalfword:
mov r2, #0xFF
lsl r4, r2, #0x8
add r4, r4, r2
Loop:
ldrh r2, [r7]
cmp r2, r4
beq Fail
cmp r2, r1
beq CheckForNoFailure
add r7, r7, #0x4
b Loop
CheckForNoFailure:
ldrb r2, [r7, #0x2]
lsl r0, r2, #0x18
cmp r0, #0x0
bge MatCheck
CheckMoveUsedPreviousTurn:
ldr r2, .PreviousTurnMoveData
lsl r0, r5, #1
add r0, r0, r2
ldrh r0, [r0]
Loop2:
ldrh r1, [r6]
cmp r1, r4
beq ZeroFailureOdds
cmp r1, r0
beq CheckIfPrevMoveDecreasesOdds
add r6, r6, #0x4
b Loop2
CheckIfPrevMoveDecreasesOdds:
ldrb r2, [r6, #0x2]
lsl r2, r2, #0x19
cmp r2, #0x0
blt CheckFailureOdds
ZeroFailureOdds:
mov r1, #0x0
strb r1, [r3, #0x8]
b Success
CheckFailureOdds:
ldrb r1, [r3, #0x8]
cmp r1, #0x0
beq MatCheck
cmp r1, #0x10
bge Fail
ldr r2, .ProtectionOddTableLoc
lsl r4, r1, #1
add r4, r4, r2
ldr r0, .RNG
bl Linker
ldrh r1, [r4]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
cmp r1, r0
bcc Fail
MatCheck:
ldrb r0, [r7, #0x3]
lsr r0, r0, #0x4
cmp r0, #0x4
bne Success
FirstTurnCheck:
ldrb r0, [r3, #0x16]
cmp r0, #0x1
bne Fail
Success:
ldrb r4, [r7, #0x2]
lsl r1, r4, #0x19
lsl r2, r4, #0x1C
lsr r2, r2, #0x1C
CheckIfMoveDecreasesOddsForSuccessiveUse:
cmp r1, #0x0
beq LoadProtectStructByte
ldrb r0, [r3, #0x8]
add r0, r0, #1
strb r0, [r3, #0x8]
LoadProtectStructByte:
ldr r3, .ProtectStruct
add r3, r2, r3
LoadOrringBit:
ldrb r1, [r7, #0x3]
lsl r1, r1, #0x1C
lsr r1, r1, #0x1A
ldr r0, .PowersOfTwo
add r1, r1, r0
ldr r6, [r1]
SetBitsForUser:
lsl r1, r5, #4
add r1, r1, r3
ldrb r0, [r1]
orr r0, r6
strb r0, [r1]
lsl r0, r4, #0x1A
cmp r0, #0x0
blt TeamProtectionMove
SingleProtectionMove:
ldrb r0, [r7, #0x3]
lsr r0, r0, #0x4
b SetMessage
Fail:
mov r1, #0x0
strb r1, [r3, #0x8]
ldr r1, .Outcome
ldrb r0, [r1]
mov r2, #0x1
orr r0, r2
strb r0, [r1]
mov r0, #0x2
SetMessage:
ldr r1, .MultiStringChooser
strb r0, [r1, #0x5]
ldr r1, .ScriptPointer
ldr r0, [r1]
add r0, r0, #0x1
b Exit
TeamProtectionMove:
CheckForDoubleBattles:
ldr r4, .NoOfBattlers
ldrb r4, [r4]
cmp r4, #0x2
beq SetTeamMessage
SetBitsForPartner:
mov r4, #2
eor r4, r5
lsl r1, r4, #4
add r1, r1, r3
ldrb r0, [r1]
orr r0, r6
strb r0, [r1]
SetTeamMessage:
ldrb r0, [r7, #0x3]
lsr r0, r0, #0x4
cmp r0, #0x4
bne GuardMessage
MatBlockMessage:
ldr r2, .MatString
b BranchToCustomMessageBS
GuardMessage:
mov r0, r5
ldr r2, .GuardStringUser
mov r1, #0x1
and r0, r1
cmp r0, #0x0
beq BranchToCustomMessageBS
FoeMessage:
ldr r2, .GuardStringFoe
BranchToCustomMessageBS:
ldr r1, .StringLoaderOffset
str r2, [r1]
ldr r1, .ScriptPointer
ldr r0, .OtherMessageBS
Exit:
str r0, [r1]
pop {r4-r7}
pop {r0}
bx r0
Linker:
bx r0
.align 2
.Attacker: .word 0x202420B
.DisableStruct: .word 0x20242BC
.CurrentTurnOrderIteration: .word 0x2024082
.NoOfBattlers: .word 0x202406C
.CurrMove: .word 0x20241EA
.ProtectionMoveTableLoc: .word PMTLoc
.PreviousTurnMoveData: .word 0x2024260
.ProtectionOddTableLoc: .word POTLoc
.ProtectStruct: .word 0x202433C
.PowersOfTwo: .word 0x832A328
.StringLoaderOffset: .word YourWordLocation
.GuardStringUser: .word GuardStringUserLoc
.GuardStringFoe: .word GuardStringFoeLoc
.MatString: .word MatStringLoc
.Outcome: .word 0x202427C
.MultiStringChooser: .word 0x2024332
.ScriptPointer: .word 0x2024214
.RNG: .word 0x806F5CC+1
.OtherMessageBS: .word NMSLoc
@@@@@@@@@@@@@@@Protection Conditions:
.align 2
Main2:
push {r3-r7}
LoadProtectStructs:
ldr r1, .ProtectStruct2
ldr r7, .Attacker2
ldrb r0, [r7, #0x1]
lsl r0, r0, #0x4
add r5, r0, r1
LoadMoveData:
ldr r2, .MoveData2
ldr r0, .CurrMove2
ldrh r1, [r0]
lsl r0, r1, #0x1
add r0, r0, r1
lsl r0, r0, #0x2
add r6, r0, r2
CheckProtectableMove:
ldrb r1, [r6, #8]
mov r0, #0x2
and r0, r1
cmp r0, #0x0
beq NoProtection
CheckProtect:
ldrb r0, [r5]
lsl r0, r0, #0x1F
cmp r0, #0x0
bne Protection
CheckKingShield:
ldrb r4, [r6, #0xA]
ldrb r2, [r5, #0x3]
lsl r0, r2, #0x1F
cmp r0, #0x0
beq CheckSpikyShield
cmp r4, #0x2
bne Protection
b NoProtection
CheckSpikyShield:
lsl r0, r2, #0x1E
cmp r0, #0x0
blt Protection
CheckWideGuard:
lsl r0, r2, #0x1D
cmp r0, #0x0
bge CheckQuickGuard
cmp r4, #0x2
beq NoProtection
ldrb r1, [r6, #0x6]
cmp r1, #0x8
beq Protection
cmp r1, #0x20
beq Protection
b NoProtection
CheckQuickGuard:
lsl r0, r2, #0x1C
cmp r0, #0x0
bge CheckCraftyShield
sub r7, #0x1
ldrb r0, [r7]
ldr r1, .LoadMovePriorityBL
bl Linker2
cmp r0, #0x0
bgt Protection
b NoProtection
CheckCraftyShield:
lsl r0, r2, #0x1B
cmp r0, #0x0
bge CheckMatBlock
cmp r4, #0x2
beq Protection
b NoProtection
CheckMatBlock:
lsl r0, r2, #0x1A
cmp r0, #0x0
bge NoProtection
cmp r4, #0x2
bne Protection
NoProtection:
ldr r1, .ReturnProtectBL1
pop {r3-r7}
bx r1
Protection:
ldr r1, .ReturnProtectBL2
pop {r3-r7}
bx r1
.align 2
.ProtectStruct2: .word 0x202433C
.Attacker2: .word 0x202420B
.MoveData2: .word MoveDataLoc
.CurrMove2: .word 0x20241EA
.LoadMovePriorityBL: .word PriorityBLLoc+1
.ReturnProtectBL1: .word 0x80464F9
.ReturnProtectBL2: .word 0x80464DF
@@@@@@@@@@@@@@@After Protection Effects
ProtectMessageCheck:
ldrb r0, [r7, #0x6]
cmp r0, #0x1
bne MissMessage
CheckProtectEffect:
push {r1}
ldr r0, .Attacker3
ldrb r0, [r0, #0x1]
lsl r0, r0, #0x4
ldr r1, .ProtectStruct3
add r1, r1, r0
ldrb r2, [r1, #0x0]
lsl r0, r2, #0x1F
cmp r0, #0x0
bne ProtectEffect
CheckKingShieldEffect:
ldrb r2, [r1, #0x3]
lsl r0, r2, #0x1F
cmp r0, #0x0
blt CheckContactMove
CheckSpikyShieldEffect:
lsl r0, r2, #0x1E
cmp r0, #0x0
blt CheckContactMove2
CheckWideGuardEffect:
lsl r0, r2, #0x1D
cmp r0, #0x0
bge CheckQuickGuardEffect
ldr r6, .WGPMessage
b LoadCustomMessage
CheckQuickGuardEffect:
lsl r0, r2, #0x1C
cmp r0, #0x0
bge CheckCraftyShieldEffect
ldr r6, .QGPMessage
b LoadCustomMessage
CheckCraftyShieldEffect:
lsl r0, r2, #0x1B
cmp r0, #0x0
bge CheckMatBlockEffect
ldr r6, .CSPMessage
b LoadCustomMessage
CheckMatBlockEffect:
lsl r0, r2, #0x1A
cmp r0, #0x0
bge ProtectEffect
ldr r6, .MBPMessage
LoadCustomMessage:
pop {r1}
ldr r0, .StringLoaderOffset3
str r6, [r0]
mov r3, #0xC2
lsl r3, r3, #0x1
b Exit3
CheckContactMove2:
ldr r3, .CurrMove3
ldr r2, .MoveData3
ldrh r3, [r3]
lsl r0, r3, #1
add r0, r0, r3
lsl r0, r0, #2
add r0, r0, r2
ldrb r0, [r0, #0x8]
lsl r0, r0, #0x1F
cmp r0, #0x0
beq ProtectEffect
CheckMagicGuard:
ldr r0, .BattleStruct
mov r5, #0x58
ldr r1, .Attacker3
ldrb r1, [r1]
mul r1, r5
add r1, r1, r0
ldrb r1, [r0]
ldr r2, .MGI
cmp r1, r2
beq ProtectEffect
SetDamage:
ldrh r1, [r0, #0xC]
ldr r2, .Damage
lsr r1, r1, #0x3
cmp r1, #0x0
bne NonZeroDamage
mov r1, #0x1
NonZeroDamage:
str r1, [r2]
ldr r6, .SpikyShieldBS
b CallScript
CheckContactMove:
ldr r6, .KingShieldBS
ldr r3, .CurrMove3
ldr r2, .MoveData3
ldrh r3, [r3]
lsl r0, r3, #1
add r0, r0, r3
lsl r0, r0, #2
add r0, r0, r2
ldrb r0, [r0, #0x8]
lsl r0, r0, #0x1F
cmp r0, #0x0
beq ProtectEffect
ClearBitForStatDrop:
ldrb r0, [r1, #0x3]
mov r2, #0x1
bic r0, r2
strb r0, [r1, #0x3]
CallScript:
ldr r4, .ScriptPointer3
ldr r0, [r4]
add r0, r0, #0x1
str r0, [r4]
ldr r0, .ScriptPusher
bl Linker3
str r6, [r4]
pop {r1}
pop {r4-r7}
pop {r0}
bx r0
ProtectEffect:
mov r0, #0x1
pop {r1}
MissMessage:
lsl r0, r0, #0x1
add r0, r0, r1
ldrh r3, [r0]
Exit3:
strb r4, [r7, #0x7]
ldr r1, .Return3
bx r1
Linker3:
bx r0
.align 2
.MoveData3: .word MoveDataLoc
.KingShieldBS: .word RomAreaOffset+KSBattleScript
.SpikyShieldBS: .word RomAreaOffset+SSBattleScript
.WGPMessage: .word RomAreaOffset+WGProtMess
.QGPMessage: .word RomAreaOffset+QGProtMess
.CSPMessage: .word RomAreaOffset+CSProtMess
.MBPMessage: .word RomAreaOffset+MBProtMess
.StringLoaderOffset3: .word YourWordLocation
.ScriptPointer3: .word 0x2024214
.ProtectStruct3: .word 0x202433C
.Attacker3: .word 0x202420B
.CurrMove3: .word 0x20241EA
.BattleStruct: .word 0x20240A4
.Damage: .word 0x20241F0
.Return3: .word 0x804856A+1
.ScriptPusher: .word 0x803FAFC+1
.MGI: .word MagicGuardIndex
@@@@@@@@@@@@@@@Restore King Shield Bit
.align 2
Main4:
ldr r0, .Attacker4
ldrb r0, [r0, #0x1]
lsl r0, r0, #0x4
ldr r1, .ProtectStruct4
add r1, r1, r0
ldrb r2, [r1, #0x3]
mov r3, #0x1
orr r2, r3
strb r2, [r1, #0x3]
bx lr
.align 2
.ProtectStruct4: .word 0x202433C
.Attacker4: .word 0x202420B
@@@@@@@@@@@@@@@Protection Odds Table
.align 2
ProtectionOddTable:
.byte 0xFF, 0xFF
.byte 0xFF, 0x7F
.byte 0xFF, 0x3F
.byte 0xFF, 0x1F
.byte 0xFF, 0xF
.byte 0xFF, 0x7
.byte 0xFF, 0x3
.byte 0xFF, 0x1
.byte 0xFF, 0x0
.byte 0x7F, 0x0
.byte 0x3F, 0x0
.byte 0x1F, 0x0
.byte 0xF, 0x0
.byte 0x7, 0x0
.byte 0x3, 0x0
.byte 0x1, 0x0
.byte 0x0, 0x0
@@@@@@@@@ Protection Move Table
@ Table entry format (8 bytes):
@ Move ID (2 bytes)
@ Protect Structure Byte No & Flags (1st MSB: Chance Check, 2nd MSB: Protect Chance Inhibitor, 3rd MSB: Protect Team)
@ Protect Structure Bit No (4 MSBs String No., 4 LSBs Bit No.)
.align 2
ProtectionMoveTable:
Protect:
[COLOR="red"].byte 0xB6, 0x0[/COLOR] @Move ID in reverse hex
.byte 0xC0
.byte 0x00
Detect:
[COLOR="red"].byte 0xC5, 0x0[/COLOR]
.byte 0xC0
.byte 0x00
Endure:
[COLOR="red"].byte 0xCB, 0x0[/COLOR]
.byte 0xC0
.byte 0x11
KingShield:
[COLOR="red"].byte 0x4C, 0x2[/COLOR]
.byte 0xC3
.byte 0x00
SpikyShield:
[COLOR="red"].byte 0x54, 0x2[/COLOR]
.byte 0xC3
.byte 0x01
WideGuard:
[COLOR="red"].byte 0xD5, 0x1[/COLOR]
.byte 0x63
.byte 0x32
QuickGuard:
[COLOR="red"].byte 0xF5, 0x1[/COLOR]
.byte 0x63
.byte 0x33
CraftyShield:
[COLOR="red"].byte 0x42, 0x2[/COLOR]
.byte 0x23
.byte 0x34
MatBlock:
[COLOR="red"].byte 0x31, 0x2[/COLOR]
.byte 0x23
.byte 0x45
TerminateTable:
.byte 0xFF, 0xFF
@@@@@@@@@@@@@@@@ New Message Script
NewMessageScript:
.byte 0x9
.byte 0xA
.byte 0x10, 0x84, 0x1
.byte 0x12, 0x40, 0x0
.byte 0x28
.word 0x82D8A4E
@@@@@@@@@@@@@@@@ King Shield Script
KSBattleScript:
.byte 0x10, 0x18, 0x0
.byte 0x12, 0x40, 0x0
.byte 0x2E
.word 0x202448E
.byte 0xA1
.byte 0x89, 0x41
.word RomAreaOffset+EndKSS
.byte 0x29, 0x0
.word 0x2024337
.byte 0x2
.word RomAreaOffset+EndKSS
.byte 0x47
.byte 0x45, 0x1, 0x1
.word 0x2024484
.byte 0x13
.word 0x85CC89C @StatDropMessageTable
.byte 0x12, 0x40, 0x0
.byte 0x1E
.byte 0x1, DefiantIndex
.word RomAreaOffset+KSDefiantBoost
.byte 0x1E
.byte 0x1, CompetitiveIndex
.word RomAreaOffset+KSCompBoost
.byte 0x28
.word RomAreaOffset+EndKSS
KSDefiantBoost:
.byte 0x2E
.word 0x202448E
.byte 0x21
.byte 0x28
.word BoostStats+RomAreaOffset
KSCompBoost:
.byte 0x2E
.word 0x202448E
.byte 0x24
BoostStats:
.byte 0x89, 0x41
.word RomAreaOffset+EndKSS
.byte 0x29, 0x0
.word 0x2024337
.byte 0x2
.word RomAreaOffset+EndKSS
.byte 0x47
.byte 0x45, 0x1, 0x1
.word 0x2024484
.byte SetWordCommand
.word YourWordLocation
.word BoostString+RomAreaOffset
.byte 0x10, 0x84, 0x1
.byte 0x12, 0x40, 0x0
EndKSS:
.byte CallasmCommand
.word Main4+RomAreaOffset+1
.byte 0x3C
@@@@@@@@@@@@@@@@@@@@@@@@@@@Spiky Shield
SSBattleScript:
.byte 0x10, 0x18, 0x0
.byte 0x12, 0x40, 0x0
.byte 0x36
.word 0x202427C
.byte 0x1
.byte 0x35
.word 0x2024280
.word 0x100100
.byte 0xB, 0x1
.byte 0xC, 0x1
.byte SetWordCommand
.word YourWordLocation
.word HurtString+RomAreaOffset
.byte 0x10, 0x84, 0x1
.byte 0x12, 0x40, 0x0
.byte 0x19, 0x1, 0x0
.word 0x0
.byte 0x33
.word 0x202427C
.byte 0x1
.byte 0x28
.word 0x82D8A4E
@@@@@@@@@@@@@@@@@Battle Strings Used
GuardMessageUser:
.byte 0xFD, 0x14, Space, p_, r_, o_, t_, e_, c_, t_, e_, d_, Space, y_, o_, u_, r_, Space, t_, e_, a_, m_, Exclam, Termin
GuardMessageFoe:
.byte 0xFD, 0x14, Space, p_, r_, o_, t_, e_, c_, t_, e_, d_, Space, t_, h_, e_, Space, o_, p_, p_, o_, n_, e_, n_, t_
.byte Apos, s_, Space, t_, e_, a_, m_, Exclam, Termin
MatMessage:
.byte 0xFD, 0xF, Space, i_, n_, t_, e_, n_, d_, s_, Space, t_, o_, Space, f_, l_, i_, p_, Space
.byte u_, p_, Space, a_, Space, m_, a_, t_, JumpLine, a_, n_, d_, Space, b_, l_, o_, c_, k_, Space
.byte i_, n_, c_, o_, m_, i_, n_, g_, Space, a_, t_, t_, a_, c_, k_, s_, Exclam, Termin
WGProtMess:
.byte W_, i_, d_, e_, Space, G_, u_, a_, r_, d_, Space, p_, r_, o_, t_, e_, c_, t_, e_, d_, Space, 0xFD, 0x10, Exclam, Termin
QGProtMess:
.byte Q_, u_, i_, c_, k_, Space, G_, u_, a_, r_, d_, Space, p_, r_, o_, t_, e_, c_, t_, e_, d_, Space, 0xFD, 0x10, Exclam, Termin
CSProtMess:
.byte C_, r_, a_, f_, t_, y_, Space, S_, h_, e_, i_, l_, d_, Space, p_, r_, o_, t_, e_, c_, t_, e_, d_, Space, 0xFD, 0x10, Exclam, Termin
MBProtMess:
.byte 0xFD, 0x14, Space, i_, s_, Space, b_, l_, o_, c_, k_, e_, d_, Space, b_, y_, Space, t_, h_, e_, JumpLine, k_, i_, c_, k_
.byte e_, d_, Dash, u_, p_, Space, m_, a_, t_, 0xAB, 0xFF
BoostString:
.byte 0xFD, 0xF, 0xB4, 0xE7, 0xFD, 0x18, 0x0, 0xE7, 0xDC, 0xD5, 0xE6, 0xE4, 0xE0, 0xED, 0xFE, 0xE6, 0xD5, 0xDD, 0xE7, 0xD9
.byte 0xD8, 0x0, 0xDD, 0xE8, 0xE7, 0x0, 0xFD, 0x0, 0xAB, 0xFF
HurtString:
.byte 0xFD, 0xF, Space, i_, s_, Space, h_, u_, r_, t_, Space, b_, y_, JumpLine, 0xFD, 0x10, Apos, s_, Space
.byte S_, p_, i_, k_, y_, Space, S_, h_, e_, i_, l_, d_, 0xAB, 0xFF