.text
.align 2
.thumb
.thumb_func
.global parentallock
ParentalMultiStopper:
ldr r1, .ParentalByte
mov r8, r1
ldrb r0, [r1]
cmp r0, #0x0
bne Exit
ParentalAbilityCheck:
ldr r2, .BattleStruct
mov r9, r2
ldr r4, .UserBank
mov r6, #0x58
ldrb r1, [r4]
mul r1, r6
add r1, r1, r2
add r1, #0x20
ldrb r0, [r1]
cmp r0, [B][U]#0xBA[/U][/B]
bne Exit
MoveBanListCheck:
ldr r7, .CurrMove
ldrh r1, [r7]
lsl r0, r1, #0x01
add r1, r1, r0
lsl r1, r1, #0x02
ldr r2, .MoveData
add r2, r2, r1
mov r10, r2
CheckForStatusMove:
ldrb r2, [r2, #0xA]
cmp r2, #0x2
beq Exit
ldr r2, .TableLoc
ldr r3, =0xFEFE
Loop:
ldrh r5, [r2]
cmp r5, r3
beq DoubleBattleCheck
cmp r5, r7
beq Exit
add r2, #0x2
b Loop
DoubleBattleCheck:
mov r5, r9
ldr r0, .BattleTypeFlags
ldr r0, [r0, #0x0]
mov r1, #0x1
and r0, r1
cmp r0, #0x0
beq SingleTargetHPCheck
mov r1, r10
ldrb r0, [r1, #0x6]
mov r2, #0x0
cmp r0, #0x8
beq NoOfFoeCheck
cmp r0, #0x20
bne SingleTargetHPCheck
UserPartnerHP:
ldrb r3, [r4]
mov r1, #0x2
eor r3, r1
mul r3, r6
add r3, r5
ldrh r0, [r3, #0x28]
cmp r0, #0x0
beq NoOfFoeCheck
add r2, #0x1
NoOfFoeCheck:
ldrb r3, [r4]
mov r1, #0x1
eor r3, r1
and r3, r1
mul r3, r6
add r3, r5
ldrh r0, [r3, #0x28]
cmp r0, #0x0
beq CheckNextIter
add r2, #0x1
CheckNextIter:
lsl r6, r6, #0x1
add r3, r6
ldrh r0, [r3, #0x28]
cmp r0, #0x0
beq CheckNoOfAliveTargets
add r2, #0x1
CheckNoOfAliveTargets:
cmp r2, #0x1
beq Success
cmp r2, #0x2
blt Exit
SetParentalBan:
mov r1, r8
mov r0, #0x3
strb r0, [r1]
b Exit
SingleTargetHPCheck:
ldrb r3, [r4, #0x1]
mul r3, r6
add r3, r5
ldrh r0, [r3, #0x28]
cmp r0, #0x0
beq Exit
Success:
mov r1, r8
mov r0, #0x2
strb r0, [r1]
Exit:
mov r0, #0x0
mov r9, r0
ldr r1, =0x2023FC8
ldr r2, =0x2023FE8
mov r10, r1
mov r8, r2
ldr r0, =0x8019302+1
bx r0
.align 2
.ParentalByte: .word 0x0203C03C
.BattleStruct: .word 0x02023BE4
.UserBank: .word 0x02023D6B
.CurrMove: .word 0x02023D4A
[B].MoveData: .word 0x08250C04[/B]
[B].TableLoc: .word 0x08DDDDDD[/B]
.BattleTypeFlags: .word 0x02022B4C
/*At x192E0: 00 48 00 47 XX+1 XX XX 08*/