Age 25
Seen August 31st, 2019
Posted August 31st, 2019
455 posts
6.5 Years
Only problem in 2 lines.
1. mul r2,r0 should be mul r0,r2 (this can spoil the results)
2. ldrh r0, [r1] is redundant not needed.

Also for anyone wanting this for FR:
.BattleData:.word 0x02023BE4
.UserBank:.word 0x02023D6B
.MemAddress:.word 0x02023fe8
Natural Gift for FireRed:
I actually got this and Judgement without the help of your second routine.
It is also displaying the correct outcome and the proper effectiveness sound is playing.
(I used Tackle and Move Effect ID 1 for this).

The problem lies with the placement of the 1st routine.
The battle script should be:
#org @main
callasm 0x8(offset of ASM ROUTINE 1+1)
accuracycheck 0x81D695E 0x0
cmd5c 0x0
graphicalhpupdate 0x0
datahpupdate 0x0
waitmessage 0x40
waitmessage 0x40
jumpifbyte 0x4 0x02023DCC 0x8 0x81D694E
removeitem 0x1
goto 0x81D6947
Move type changing routines should be placed before the attack canceler because it contains checks for abilities like Flash Fire, Water Absorb etc. The original battle script wouldn't account for this.
Also this might be the reason why the outcome might not be properly handled.
Judgment should a script like that of Weatherball i.e callasm then goto the regular attack routine.

Also the fail address pointer in the 1st routine should be (0x081D7DF2 - 0x5). Even though with the original value it is working. It might not be the case with other scripts.
While branching to custom scripts with callasm command, 0x5 must be subtracted from their offset, because callasm always adds 0x5 to the script pointer regardless of the branch.