Damn.
StevieG, if what you say is true then that would be the obvious answer; thanks for that.
In the meantime (like in the a.m.) I've implemented this, using sswifts mod 360 etc:
If KeyDown(KEY_LEFT_SHIFT)
If rotflag = 0
rotflag = 1
startmx = MouseX()
startrot# = Model(choice)\w# ; get starting yaw
Else
xdir = MouseX() - startmx
rotangle# = startrot# + xdir
; \/ Implement new rotation, including previous pitch(\p#) and roll(\o#)
RotateEntity Model(choice)\hent, Model(choice)\p#, rotangle#, Model(choice)\o#
; \/ Now recalc for range of -180 to +180, and store.
val = rotangle# Mod 360
If val => -180 And val <=180
; it's ok
ElseIf val > 180
diff = val - 180
val = -180 + diff
ElseIf val < -180
diff = val + 180
val = 180 + diff
EndIf
Model(choice)\w# = val ; save the new yaw
EndIf
Else
rotflag = 0
EndIf
I wonder if something like my little algo is what Mark does internally if you ask for a yaw of, say, 5000.
Still, your answer is more elegant Stevie.
Thanks to you all.
As usual, the Blitz community helped me get there one way or the other.