Mabey something like this?
`make a texture for the UFO
BoxWidth=4
BoxHeight=3
BoxY=14
cls rgb(92,92,92)
for BoxX=1 to 26 step 5
box BoxX,BoxY,BoxX+BoxWidth,BoxY+BoxHeight,rgb(255,255,255)
next BoxX
get image 1,0,0,30,30
sync on : sync rate 60
`make a dummy cube which will become our UFO
Make object cube 9,1
`make a sphere object, which is the UFO
Make object sphere 10,10
scale object 10,100,50,100
`Make a mesh from the object, then delete the object
make mesh from object 1,10
delete object 10
`Add the sphere's mesh to the Dummy cube object as a limb
add limb 9,1,1
`then delete the sphere's mesh
delete mesh 1
`apply the texture to the UFO limb
texture limb 9,1,1
`A type to hold the movement data
type MovementType
X as float
Y as float
XS as float
YS as float
YA as float
ZA as float
endtype
global player as MovementType
position camera 0,0,-200.0
Do
`get player input
MoveVert=upkey()-downkey()
MoveHoriz=rightkey()-leftkey()
`Work out velocity
player.XS=curvevalue(MoveHoriz,player.XS,10)
player.YS=curvevalue(MoveVert,player.YS,10)
`figure out the destination angle for Z rotaion
DestZAng#=(0-MoveHoriz)*45
if MoveVert
DestZAng#=(DestZAng#*0.5)*MoveVert
endif
`calculate the current Z angle
player.ZA=curveangle(DestZAng#,player.ZA,20)
`rotate the main object (dummy cube) to tip the ufo
rotate object 9,0,0,player.ZA
`calculate the UFO's new Y(Spin) angle
player.YA=wrapvalue(player.YA+2)
`then rotate the UFO limb for Y rotation
rotate limb 9,1,0,player.YA,0
`Add velocity
inc player.X,player.XS
inc player.Y,player.YS
position object 9,player.X,player.Y,0
sync
Loop