The only error I see is that you put the wrong thing to GOTO in one line in part A.
Code:
A COMPAREV xd,-0.5
GOTOLESS MORE
SUBV xd,0.1
GOTO WAIT
should be
Code:
A COMPAREV xd,-0.5
GOTOLESS MORE
SUBV xd,0.1
GOTO MORE
At least, I assume that was the idea.
The reason the script is failing so badly, though, is not your fault. The game just isn't handling the decimals very well. Remove them, like so:
Code:
WAIT WAITFRAME
COMPARER lx,x
GOTOLESS A
COMPAREV xd,5
GOTOMORE MORE
ADDV xd,1
MORE COMPARER ly,y
GOTOLESS B
COMPAREV yd,5
GOTOMORE WAIT
ADDV yd,1
GOTO WAIT
A COMPAREV xd,-5
GOTOLESS MORE
SUBV xd,1
GOTO MORE
B COMPAREV yd,-5
GOTOLESS WAIT
SUBV yd,1
GOTO WAIT
... And it'll work just fine, albeit much too fast.
Perhaps you could get around it by using data registers instead of xd and yd and dividing by ten when you update the position.