.text
.align 2
.thumb
.thumb_func
.global lifeorbrecoil
[B]SheerForceCheck:
ldr r1, .UserBank
ldr r2, .BattleStruct
ldrb r1, [r1, #0x0]
mov r0, #0x58
mul r0, r1
add r0, r0, r2
mov r2, #0x20
add r2, r0, r2
ldrb r2, [r2]
cmp r2, [B]#0x7E[/B] /*Sheer Force*/
bne EffectCheck
ldr r0, .CurrMove
ldrh r3, [r0, #0x0]
mov r0, #0x0
ldr r1, .FEHalfWord
ldr r2, .SheerForceTable
Loop:
lsl r4, r0, #0x01
add r4, r4, r2
ldrh r4, [r4, #0x0]
cmp r3, r4
beq Exit
cmp r4, r1
beq EffectCheck
add r0, #0x1
b Loop
[/B]
EffectCheck:
mov r1, r8
cmp r1, #0x3E
beq ShellBell
cmp r1, [U]#0xKK[/U]
bne Exit
CheckOutcome:
ldr r0, .Outcome
ldrb r0, [r0, #0x0]
mov r5, #0x29
and r5, r0
cmp r5, #0x0
bne Exit
[B]CheckUturnVoltSwitch:
ldr r0, .CurrMove
ldrh r0, [r0]
ldrh r1, .VoltSwitchID
cmp r0, r1
beq Exit
ldrh r1, .UTurnID
cmp r0, r1
beq Exit [/B]
CheckIfMoveDamagedSomeTarget:
ldr r1, .DamageStruct
ldr r4, .TargetBank
ldrb r2, [r4, #0x0]
lsl r0, r2, #0x02
add r0, r0, r2
lsl r0, r0, #0x02
add r6, r1, #0x4
add r0, r0, r6
ldr r1, [r0, #0x0]
cmp r1, #0x0
beq Exit
ldr r0, .FFHalfWord
cmp r1, r0
beq Exit
CheckIfUserIsNotTheTarget:
ldr r0, .UserBank
ldrb r3, [r0, #0x0]
cmp r3, r2
beq Exit
CheckMagicGuard:
ldr r2, .BattleStruct
ldrb r1, [r0, #0x0]
mov r0, #0x58
mul r0, r1
add r0, r0, r2
[B] mov r2, #0x20
add r2, r0, r2
ldrb r2, [r2]
cmp r2, [U]#0x63[/U] /*Magic Guard*/
beq Exit
HPCheck:[/B]
ldrh r1, [r0, #0x28]
cmp r1, #0x0
beq Exit
SetLifeOrbRecoilBit:
ldr r1, .LORBit
mov r0, #0x1
strb r0, [r1]
Exit:
ldr r1, .Return2
bx r1
ShellBell:
ldr r1, .Return1
bx r1
.align 2
.UserBank: .word 0x02023D6B
.TargetBank: .word 0x02023D6C
.BattleStruct: .word 0x02023BE4
.DamageStruct: .word 0x02023ECC
[B].CurrMove: .word 0x02023D4A[/B]
[B].SheerForceTable: .word 0x08XXXXXX[/B]
.Outcome: .word 0x02023DCC
[B].FEHalfWord: .word 0x0000FEFE[/B]
.FFHalfWord: .word 0x0000FFFF
.Return1: .word 0x0801CF11
.Return2: .word 0x0801CFA7
.LORBit: .word 0x0203C038
[B].UTurnID: .word 0x000001YY
.VoltSwitchID: .word 0x000001ZZ[/B]
/*At 1CE58: 00 48 00 47 XX+1 XX XX 08*/