I'm a little disapointed that i didn't get any response. Maybe i'm just being to impatient. Anyway, after spending ages looking at other peices of code on this forum i've eventually fixed my own problem. Learned a few new commands on the way also. So if anyone's interested here is the fix. Answers to any of my other questions though would still be appreciated.
[u]REPLACE
rem ***********************************************
if zangle#>totalangle# then zangle#=zangle#-3
if zangle#<totalangle# then zangle#=zangle#+3
rem ***********************************************
zangle#=wrapvalue(zangle#)
xmispos#=xmispos#+misspeed#*sin(zangle#)
zmispos#=zmispos#+misspeed#*cos(zangle#)
yrotate object 2,zangle#
position object 2,xmispos#,0,zmispos#
WITH
zangle#=curveangle(object angle y(2),totalangle#,2)
yrotate object 2,zangle#
xmispos#=newxvalue(xmispos#,zangle#,misspeed#)
zmispos#=newzvalue(zmispos#,zangle#,misspeed#)
position object 2,xmispos#,0,zmispos#
endif