I'm struggling with how to describe this, it's a sort of creation demo; and no vertexdata commands!
`-----------------------------
`PROJECT: Morph
`CREATED: 24/11/2007 20:36:12
`AUTHOR : Bongadoo
`-----------------------------
`-------
`GLOBALS
`-------
`Camera
global cam_trail# = 25.0
global cam_dist# = 50.0
`Stages
global stage = 1
global sub_stage = 1
`----------
`INITIALISE
`----------
if check display mode(1024,768,32) = 1
set display mode 1024,768,32
else
exit prompt "Cannot support 1024x768 32-bit","Error"
end
endif
`if get maximum antialias level() >= 4
` set antialias level 4
`endif
`-----
`SETUP
`-----
sync on
sync rate 60
color backdrop rgb(0,0,0)
`Keep same value so images remain constant
randomize 1
autocam off
position camera 15.0,15.0,15.0
point camera 7.5,0.0,0.0
position camera 25.0,50.0,50.0
`-----------
`LOAD STAGES
`-----------
load_stage1()
load_stage2()
load_stage3()
load_stage4()
load_stage5()
`----
`MAIN
`----
do
select stage
case 1 : run_stage1() : endcase
case 2 : run_stage2() : endcase
case 3 : run_stage3() : endcase
case 4 : run_stage4() : endcase
case 5 : run_stage5() : endcase
case 6 : run_stage6() : endcase
endselect
`Debug
tx=10
ty=10
ty_step=15
TEXT tx,ty,"MORPH" : inc ty,ty_step*2
sync
loop
`---------
`FUNCTIONS
`---------
`Gets a free object number
function free_obj()
do
inc x
if object exist(x) = 0 then exit
loop
endfunction x
`Creates a new plain
function new_plain(x,y)
n = free_obj()
make object plain n,x,y
endfunction n
`Creates a new cube
function new_cube(size)
n = free_obj()
make object cube n,size
endfunction n
`Creates a new box
function new_box(x,y,z)
n = free_obj()
make object box n,x,y,z
endfunction n
`Creates a new sphere
function new_sphere(size,rows,cols)
n = free_obj()
make object sphere n,size,rows,cols
endfunction n
`Loads stage1
function load_stage1()
`Globals
dim s1_plain_g(6)
dim s1_plain(12)
dim s1_count(1)
`Create first plains
` This creates two plains and glues their edges to a cube
` This means the cube can be rotated to give the effect
` of the plains 'flipping' along
for i = 1 to 6
s1_plain_g(i) = new_cube(1)
s1_plain(i) = new_plain(5,5)
s1_plain(i+6) = new_plain(5,5)
position object s1_plain(i),2.5,0.06,0
position object s1_plain(i+6),2.5,0,0
xrotate object s1_plain(i),-90
xrotate object s1_plain(i+6),-90
zrotate object s1_plain(i+6),180
fix object pivot s1_plain(i)
fix object pivot s1_plain(i+6)
glue object to limb s1_plain(i),s1_plain_g(i),0
glue object to limb s1_plain(i+6),s1_plain_g(i),0
hide object s1_plain_g(i)
hide object s1_plain(i)
hide object s1_plain(i+6)
next i
s1_count(1) = 0
endfunction
`Flips first plains across the floor
function run_stage1()
`Fade in
if s1_count(1) <= 100
fade object s1_plain(1),s1_count(1)
fade object s1_plain(1+6),s1_count(1)
inc s1_count(1)
endif
`Flip
if object angle z(s1_plain_g(1)) < 180
show object s1_plain(1)
show object s1_plain(1+6)
zrotate object s1_plain_g(1),object angle z(s1_plain_g(1)) + 2
endif
`Reposition
` Flip around and continue, unless at the last part of the box layout
if object angle z(s1_plain_g(1)) >= 180
if object position x(s1_plain_g(1)) <> ( 8 * -5 )
zrotate object s1_plain_g(1),0
position object s1_plain_g(1),object position x(s1_plain_g(1)) - 5,0,0
else
stage = 2
endif
endif
`Box layout part 1
if object position x(s1_plain_g(1)) = ( 6 * -5 )
position object s1_plain_g(2),6*-5,0,0
show object s1_plain(2)
show object s1_plain(2+6)
endif
`Box layout part 2
if object position x(s1_plain_g(1)) = ( 7 * -5 )
position object s1_plain_g(3),7*-5,0,0
show object s1_plain(3)
show object s1_plain(3+6)
endif
`Box layout part 3
if object position x(s1_plain_g(1)) = ( 8 * -5 ) and object position z(s1_plain_g(4)) = 0
position object s1_plain_g(4),(8*-5)+2.5,0,2.5
yrotate object s1_plain_g(4),90
fix object pivot s1_plain_g(4)
position object s1_plain_g(5),(8*-5)+2.5,0,-2.5
yrotate object s1_plain_g(5),-90
fix object pivot s1_plain_g(5)
position object s1_plain_g(6),(8*-5),0,0
show object s1_plain(4)
show object s1_plain(5)
show object s1_plain(6)
show object s1_plain(4+6)
show object s1_plain(5+6)
show object s1_plain(6+6)
endif
`Unfold final parts
if object angle x(s1_plain_g(4)) < 180 and object position x(s1_plain_g(4)) < 0
xrotate object s1_plain_g(4),object angle x(s1_plain_g(4)) + 2
xrotate object s1_plain_g(5),object angle x(s1_plain_g(5)) - 2
endif
position camera camera position x() - (5.0/90.0),cam_dist#,cam_dist#
endfunction
`Loads stage2
function load_stage2()
endfunction
`Fold back up into cube
function run_stage2()
`First fold
if object angle z(s1_plain_g(2)) < 90
zrotate object s1_plain_g(2),object angle z(s1_plain_g(2)) + 2
endif
`Reglue
if sub_stage = 1 and object angle z(s1_plain_g(2)) = 90
sx = object position x(s1_plain_g(3))
position object s1_plain_g(2),5,0,0
position object s1_plain_g(3),0,0,0
glue object to limb s1_plain_g(2),s1_plain_g(3),0
position object s1_plain_g(3),sx,0,0
inc sub_stage
endif
`Second fold
if sub_stage = 2 and object angle z(s1_plain_g(3)) < 90
zrotate object s1_plain_g(3),object angle z(s1_plain_g(3)) + 2
xrotate object s1_plain_g(4),object angle x(s1_plain_g(4)) - 2
xrotate object s1_plain_g(5),object angle x(s1_plain_g(5)) + 2
endif
`Reglue
if sub_stage = 2 and object angle z(s1_plain_g(3)) = 90
sx = object position x(s1_plain_g(6))
position object s1_plain_g(3),5,0,0
position object s1_plain_g(4),2.5,0,2.5
position object s1_plain_g(5),2.5,0,-2.5
position object s1_plain_g(6),0,0,0
glue object to limb s1_plain_g(3),s1_plain_g(6),0
glue object to limb s1_plain_g(4),s1_plain_g(6),0
glue object to limb s1_plain_g(5),s1_plain_g(6),0
position object s1_plain_g(6),sx,0,0
inc sub_stage
endif
`Final fold
if sub_stage = 3 and object angle z(s1_plain_g(6)) < 90
zrotate object s1_plain_g(6),object angle z(s1_plain_g(6)) + 2
endif
`Next stage
if object angle z(s1_plain_g(6)) = 90
sub_stage = 1
inc stage
endif
position camera camera position x() - (5.0/90.0),cam_dist#,cam_dist#
endfunction
`Loads stage3
function load_stage3()
`Globals
dim s3_cube(29)
dim s3_cube_g(29)
`Create cubes for body
for i = 1 to 29
s3_cube(i) = new_cube(5)
s3_cube_g(i) = new_cube(1)
position object s3_cube(i),2.5,2.5,0
glue object to limb s3_cube(i),s3_cube_g(i),0
hide object s3_cube(i)
hide object s3_cube_g(i)
next i
endfunction
`Cube to man
function run_stage3()
`Hide plains and show first cube
if sub_stage = 1
position object s3_cube_g(1),object position x(s1_plain_g(1)) - 5,0,0
show object s3_cube(1)
for i = 1 to 12
hide object s1_plain(i)
next i
inc sub_stage
endif
`Flip cube
if sub_stage >= 2 and sub_stage <= 12 and object angle z(s3_cube_g(1)) < 90
zrotate object s3_cube_g(1),object angle z(s3_cube_g(1)) + 2
endif
`Reposition
if sub_stage >= 2 and sub_stage <= 12 and object angle z(s3_cube_g(1)) = 90
zrotate object s3_cube_g(1),0
position object s3_cube_g(1),object position x(s3_cube_g(1))-5,0,0
inc sub_stage
endif
`First 7 cubes (spine)
for i = 6 to 12
if sub_stage = i and object angle z(s3_cube_g(1)) = 0
position object s3_cube_g(i-4),object position x(s3_cube_g(1)),0,0
show object s3_cube(i-4)
endif
next i
`Shoulders (pre)
if sub_stage = 8 and object angle z(s3_cube_g(1)) = 0
position object s3_cube_g(9),object position x(s3_cube_g(1))+2.5,0,-2.5
position object s3_cube_g(10),object position x(s3_cube_g(1))+2.5,0,2.5
yrotate object s3_cube_g(9),-90
yrotate object s3_cube_g(10),90
fix object pivot s3_cube_g(9)
fix object pivot s3_cube_g(10)
show object s3_cube(9)
show object s3_cube(10)
endif
`Flip cube (shoulders)
if sub_stage >= 8 and sub_stage <= 9 and object angle x(s3_cube_g(10)) < 90
xrotate object s3_cube_g(9),object angle x(s3_cube_g(9)) - 2
xrotate object s3_cube_g(10),object angle x(s3_cube_g(10)) + 2
endif
`Reposition (shoulders)
if sub_stage >= 8 and sub_stage <= 9 and object angle x(s3_cube_g(10)) = 90
xrotate object s3_cube_g(9),0
xrotate object s3_cube_g(10),0
position object s3_cube_g(9),object position x(s3_cube_g(9)),0,object position z(s3_cube_g(9))-5
position object s3_cube_g(10),object position x(s3_cube_g(10)),0,object position z(s3_cube_g(10))+5
endif
`Shoulders (new cubes)
for i = 8 to 9
if sub_stage = i+1 and object angle z(s3_cube_g(1)) = 0
yrotate object s3_cube_g(i+3),-90
yrotate object s3_cube_g(i+5),90
position object s3_cube_g(i+3),object position x(s3_cube_g(9)),0,object position z(s3_cube_g(9))
position object s3_cube_g(i+5),object position x(s3_cube_g(10)),0,object position z(s3_cube_g(10))
show object s3_cube(i+3)
show object s3_cube(i+5)
endif
next i
`Arms (pre)
if sub_stage = 10 and object angle z(s3_cube_g(1)) = 0
position object s3_cube_g(9),object position x(s3_cube_g(9))-2.5,0,object position z(s3_cube_g(9))+2.5
position object s3_cube_g(10),object position x(s3_cube_g(10))-2.5,0,object position z(s3_cube_g(10))-2.5
yrotate object s3_cube_g(9),90
yrotate object s3_cube_g(10),-90
fix object pivot s3_cube_g(9)
fix object pivot s3_cube_g(10)
endif
`Flip cube (arms)
if sub_stage >= 10 and sub_stage <= 12 and object angle z(s3_cube_g(10)) < 90
zrotate object s3_cube_g(9),object angle z(s3_cube_g(9)) + 2
zrotate object s3_cube_g(10),object angle z(s3_cube_g(10)) + 2
endif
`Reposition (arms)
if sub_stage >= 10 and sub_stage <= 12 and object angle z(s3_cube_g(10)) = 90
zrotate object s3_cube_g(9),0
zrotate object s3_cube_g(10),0
position object s3_cube_g(9),object position x(s3_cube_g(9))-5,0,object position z(s3_cube_g(9))
position object s3_cube_g(10),object position x(s3_cube_g(10))-5,0,object position z(s3_cube_g(10))
endif
`Arms (new cubes)
for i = 10 to 11
if sub_stage = i and object angle z(s3_cube_g(10)) = 0
position object s3_cube_g(i+5),object position x(s3_cube_g(9)),0,object position z(s3_cube_g(9))
position object s3_cube_g(i+7),object position x(s3_cube_g(10)),0,object position z(s3_cube_g(10))
show object s3_cube(i+5)
show object s3_cube(i+7)
endif
next i
`Hips (pre)
if sub_stage = 13
position object s3_cube_g(19),object position x(s3_cube_g(1))+2.5,0,-2.5
position object s3_cube_g(20),object position x(s3_cube_g(1))+2.5,0,2.5
yrotate object s3_cube_g(19),-90
yrotate object s3_cube_g(20),90
fix object pivot s3_cube_g(19)
fix object pivot s3_cube_g(20)
show object s3_cube(19)
show object s3_cube(20)
inc sub_stage
endif
`Flip cube (hips)
if sub_stage = 14 and object angle x(s3_cube_g(20)) < 90
xrotate object s3_cube_g(19),object angle x(s3_cube_g(19)) - 2
xrotate object s3_cube_g(20),object angle x(s3_cube_g(20)) + 2
endif
`Reposition (hips)
if sub_stage = 14 and object angle x(s3_cube_g(20)) = 90
xrotate object s3_cube_g(19),0
xrotate object s3_cube_g(20),0
position object s3_cube_g(19),object position x(s3_cube_g(19)),0,object position z(s3_cube_g(19))-5
position object s3_cube_g(20),object position x(s3_cube_g(20)),0,object position z(s3_cube_g(20))+5
inc sub_stage
endif
`Legs (pre)
if sub_stage = 15
position object s3_cube_g(21),object position x(s3_cube_g(19))-2.5,0,object position z(s3_cube_g(19))+2.5
position object s3_cube_g(22),object position x(s3_cube_g(20))-2.5,0,object position z(s3_cube_g(20))-2.5
show object s3_cube(21)
show object s3_cube(22)
inc sub_stage
endif
`Flip cube (legs)
if sub_stage >= 16 and sub_stage <= 19 and object angle z(s3_cube_g(22)) < 90
zrotate object s3_cube_g(21),object angle z(s3_cube_g(21)) + 2
zrotate object s3_cube_g(22),object angle z(s3_cube_g(22)) + 2
endif
`Reposition (legs)
if sub_stage >= 16 and sub_stage <= 19 and object angle z(s3_cube_g(22)) = 90
zrotate object s3_cube_g(21),0
zrotate object s3_cube_g(22),0
position object s3_cube_g(21),object position x(s3_cube_g(21))-5,0,object position z(s3_cube_g(21))
position object s3_cube_g(22),object position x(s3_cube_g(22))-5,0,object position z(s3_cube_g(22))
inc sub_stage
endif
`Legs (new cubes)
for i = 16 to 19
if sub_stage = i and object angle z(s3_cube_g(22)) = 0
position object s3_cube_g(i+7),object position x(s3_cube_g(21)),0,object position z(s3_cube_g(21))
position object s3_cube_g(i+10),object position x(s3_cube_g(22)),0,object position z(s3_cube_g(22))
show object s3_cube(i+7)
show object s3_cube(i+10)
endif
next i
if sub_stage < 10
position camera camera position x() - (5.0/45.0),cam_dist#,cam_dist#
endif
`Final
if sub_stage = 20
sub_stage = 1
inc stage
endif
endfunction
`Load stage4
function load_stage4()
`Globals
` Vis boxes
dim s4_spine(1)
dim s4_shoulder_l(1)
dim s4_shoulder_r(1)
dim s4_arm_top_l(1)
dim s4_arm_top_r(1)
dim s4_arm_bot_l(1)
dim s4_arm_bot_r(1)
dim s4_leg_top_l(1)
dim s4_leg_top_r(1)
dim s4_leg_bot_l(1)
dim s4_leg_bot_r(1)
` Joints
dim s4_shoulder_l_j(1)
dim s4_shoulder_r_j(1)
dim s4_arm_top_l_j(1)
dim s4_arm_top_r_j(1)
dim s4_arm_bot_l_j(1)
dim s4_arm_bot_r_j(1)
dim s4_leg_top_l_j(1)
dim s4_leg_top_r_j(1)
dim s4_leg_bot_l_j(1)
dim s4_leg_bot_r_j(1)
dim s4_rotator(1)
` Fake cloud
dim s4_cloud(1)
dim s4_cloud_count(1)
`Make left arm
s4_arm_top_l(1) = new_box(10,5,5)
s4_arm_bot_l(1) = new_box(10,5,5)
s4_arm_bot_l_j(1) = new_cube(1)
position object s4_arm_bot_l_j(1),-5,0,0
glue object to limb s4_arm_bot_l_j(1),s4_arm_top_l(1),0
position object s4_arm_top_l(1),5,0,0
position object s4_arm_bot_l(1),-5,0,0
glue object to limb s4_arm_bot_l(1),s4_arm_bot_l_j(1),0
`Make left shoulder, connect to arm
s4_shoulder_l(1) = new_cube(5)
s4_arm_top_l_j(1) = new_cube(1)
position object s4_arm_top_l_j(1),0,0,-2.5
glue object to limb s4_arm_top_l_j(1),s4_shoulder_l(1),0
position object s4_shoulder_l(1),0,0,2.5
position object s4_arm_top_l(1),-2.5,0,-2.5
glue object to limb s4_arm_top_l(1),s4_arm_top_l_j(1),0
`Make right arm and shoulder
s4_arm_top_r(1) = new_box(10,5,5)
s4_arm_bot_r(1) = new_box(10,5,5)
s4_arm_bot_r_j(1) = new_cube(1)
position object s4_arm_bot_r_j(1),-5,0,0
glue object to limb s4_arm_bot_r_j(1),s4_arm_top_r(1),0
position object s4_arm_top_r(1),5,0,0
position object s4_arm_bot_r(1),-5,0,0
glue object to limb s4_arm_bot_r(1),s4_arm_bot_r_j(1),0
`Make right shoulder, connect to arm
s4_shoulder_r(1) = new_cube(5)
s4_arm_top_r_j(1) = new_cube(1)
position object s4_arm_top_r_j(1),0,0,2.5
glue object to limb s4_arm_top_r_j(1),s4_shoulder_r(1),0
position object s4_shoulder_r(1),0,0,-2.5
position object s4_arm_top_r(1),-2.5,0,2.5
glue object to limb s4_arm_top_r(1),s4_arm_top_r_j(1),0
`Make spine
s4_spine(1) = new_box(40,5,5)
s4_shoulder_l_j(1) = new_cube(1)
s4_shoulder_r_j(1) = new_cube(1)
s4_leg_top_l_j(1) = new_cube(1)
s4_leg_top_r_j(1) = new_cube(1)
position object s4_shoulder_l_j(1),7.5,0,-2.5
position object s4_shoulder_r_j(1),7.5,0,2.5
position object s4_leg_top_l_j(1),-17.5,0,-2.5
position object s4_leg_top_r_j(1),-17.5,0,2.5
glue object to limb s4_shoulder_l_j(1),s4_spine(1),0
glue object to limb s4_shoulder_r_j(1),s4_spine(1),0
glue object to limb s4_leg_top_l_j(1),s4_spine(1),0
glue object to limb s4_leg_top_r_j(1),s4_spine(1),0
`Make left leg
s4_leg_top_l(1) = new_box(12,5,5)
s4_leg_bot_l(1) = new_box(13,5,5)
s4_leg_bot_l_j(1) = new_cube(1)
position object s4_leg_bot_l_j(1),-6,0,0
glue object to limb s4_leg_bot_l_j(1),s4_leg_top_l(1),0
position object s4_leg_top_l(1),6,0,0
position object s4_leg_bot_l(1),-6.5,0,0
glue object to limb s4_leg_bot_l(1),s4_leg_bot_l_j(1),0
`Make right leg
s4_leg_top_r(1) = new_box(12,5,5)
s4_leg_bot_r(1) = new_box(13,5,5)
s4_leg_bot_r_j(1) = new_cube(1)
position object s4_leg_bot_r_j(1),-6,0,0
glue object to limb s4_leg_bot_r_j(1),s4_leg_top_r(1),0
position object s4_leg_top_r(1),6,0,0
position object s4_leg_bot_r(1),-6.5,0,0
glue object to limb s4_leg_bot_r(1),s4_leg_bot_r_j(1),0
`Glue arms to spine
position object s4_spine(1),-7.5,0,2.5
position object s4_shoulder_l(1),0,0,-2.5
glue object to limb s4_shoulder_l(1),s4_shoulder_l_j(1),0
position object s4_spine(1),-7.5,0,-2.5
position object s4_shoulder_r(1),0,0,2.5
glue object to limb s4_shoulder_r(1),s4_shoulder_r_j(1),0
`Glue legs to spine
position object s4_spine(1),17.5,0,2.5
position object s4_leg_top_l(1),-3.5,0,-2.5
glue object to limb s4_leg_top_l(1),s4_leg_top_l_j(1),0
position object s4_spine(1),17.5,0,-2.5
position object s4_leg_top_r(1),-3.5,0,2.5
glue object to limb s4_leg_top_r(1),s4_leg_top_r_j(1),0
`Make rotator
s4_rotator(1) = new_cube(1)
position object s4_spine(1),30,2.5,0
glue object to limb s4_spine(1),s4_rotator(1),0
`Cloud
s4_cloud(1) = new_plain(10,10)
color object s4_cloud(1),rgb(0,0,0)
fade object s4_cloud(1),25
hide object s4_cloud(1)
`Hide limbs
hide object s4_spine(1)
hide object s4_shoulder_l(1)
hide object s4_shoulder_r(1)
hide object s4_arm_top_l(1)
hide object s4_arm_top_r(1)
hide object s4_arm_bot_l(1)
hide object s4_arm_bot_r(1)
hide object s4_leg_top_l(1)
hide object s4_leg_top_r(1)
hide object s4_leg_bot_l(1)
hide object s4_leg_bot_r(1)
`Hide joints
hide object s4_shoulder_l_j(1)
hide object s4_shoulder_r_j(1)
hide object s4_arm_top_l_j(1)
hide object s4_arm_top_r_j(1)
hide object s4_arm_bot_l_j(1)
hide object s4_arm_bot_r_j(1)
hide object s4_leg_top_l_j(1)
hide object s4_leg_top_r_j(1)
hide object s4_leg_bot_l_j(1)
hide object s4_leg_bot_r_j(1)
hide object s4_rotator(1)
endfunction
`Walking man
function run_stage4()
`Hide old objects, display new body
if sub_stage = 1
for i = 1 to 29
position object s4_rotator(1),object position x(s3_cube_g(2))-45,0,0
hide object s3_cube(i)
next i
show object s4_spine(1)
show object s4_shoulder_l(1)
show object s4_shoulder_r(1)
show object s4_arm_top_l(1)
show object s4_arm_top_r(1)
show object s4_arm_bot_l(1)
show object s4_arm_bot_r(1)
show object s4_leg_top_l(1)
show object s4_leg_top_r(1)
show object s4_leg_bot_l(1)
show object s4_leg_bot_r(1)
inc sub_stage
endif
`Stand up
if sub_stage = 2 and object angle z(s4_rotator(1)) < 90
zrotate object s4_rotator(1),object angle z(s4_rotator(1)) + 1
position camera camera position x() - (5.0/45.0),camera position y() + 0.25,camera position z() + 0.25
endif
`Increase sub_stage
if sub_stage = 2 and object angle z(s4_rotator(1)) = 90
inc sub_stage
endif
`Walk 1
if sub_stage = 3 and object angle z(s4_leg_top_r_j(1)) > -20
zrotate object s4_leg_top_r_j(1),object angle z(s4_leg_top_r_j(1)) - 0.5
zrotate object s4_leg_top_l_j(1),object angle z(s4_leg_top_l_j(1)) + 0.5
zrotate object s4_leg_bot_l_j(1),object angle z(s4_leg_bot_l_j(1)) + 0.7
zrotate object s4_arm_top_l_j(1),object angle z(s4_arm_top_l_j(1)) - 0.5
zrotate object s4_arm_bot_l_j(1),object angle z(s4_arm_bot_l_j(1)) - 0.7
zrotate object s4_arm_top_r_j(1),object angle z(s4_arm_top_r_j(1)) + 0.5
endif
`Walk next stage
if sub_stage = 3 and object angle z(s4_leg_top_r_j(1)) <= -20
inc sub_stage
endif
`Walk 2
if sub_stage = 4 and object angle z(s4_leg_top_l_j(1)) > -20
zrotate object s4_leg_top_r_j(1),object angle z(s4_leg_top_r_j(1)) + 0.5
zrotate object s4_leg_bot_r_j(1),object angle z(s4_leg_bot_r_j(1)) + 0.35
zrotate object s4_leg_top_l_j(1),object angle z(s4_leg_top_l_j(1)) - 0.5
zrotate object s4_leg_bot_l_j(1),object angle z(s4_leg_bot_l_j(1)) - 0.35
zrotate object s4_arm_top_l_j(1),object angle z(s4_arm_top_l_j(1)) + 0.5
zrotate object s4_arm_bot_l_j(1),object angle z(s4_arm_bot_l_j(1)) + 0.35
zrotate object s4_arm_top_r_j(1),object angle z(s4_arm_top_r_j(1)) - 0.5
zrotate object s4_arm_bot_r_j(1),object angle z(s4_arm_bot_r_j(1)) - 0.35
xrotate object s4_rotator(1),object angle x(s4_rotator(1)) + 0.1
endif
`Walk next stage
if sub_stage = 4 and object angle z(s4_leg_top_l_j(1)) <= -20
inc sub_stage
endif
`Walk 3 (walk 2 and 3 make loop)
if sub_stage = 5 and object angle z(s4_leg_top_r_j(1)) > -20
zrotate object s4_leg_top_l_j(1),object angle z(s4_leg_top_l_j(1)) + 0.5
zrotate object s4_leg_bot_l_j(1),object angle z(s4_leg_bot_l_j(1)) + 0.35
zrotate object s4_leg_top_r_j(1),object angle z(s4_leg_top_r_j(1)) - 0.5
zrotate object s4_leg_bot_r_j(1),object angle z(s4_leg_bot_r_j(1)) - 0.35
zrotate object s4_arm_top_l_j(1),object angle z(s4_arm_top_l_j(1)) - 0.5
zrotate object s4_arm_bot_l_j(1),object angle z(s4_arm_bot_l_j(1)) - 0.35
zrotate object s4_arm_top_r_j(1),object angle z(s4_arm_top_r_j(1)) + 0.5
zrotate object s4_arm_bot_r_j(1),object angle z(s4_arm_bot_r_j(1)) + 0.35
xrotate object s4_rotator(1),object angle x(s4_rotator(1)) - 0.1
endif
`Loop back to walk 2
if sub_stage = 5 and object angle z(s4_leg_top_r_j(1)) <= -20
sub_stage = 4
endif
`Camera
if sub_stage >= 3 and camera position y() < 600
position camera camera position x() - (5.0/45.0),camera position y() + 0.5,camera position z() + 0.5
endif
`Cloud 1
if sub_stage >= 3 and camera position y() >= 600 and s4_cloud_count(1) = 0
position object s4_cloud(1),camera position x()-1,camera position y()-1,camera position z()-1
point object s4_cloud(1),camera position x(),camera position y(),camera position z()
set object transparency s4_cloud(1),1
set alpha mapping on s4_cloud(1),100
show object s4_cloud(1)
s4_cloud_count(1) = 1
endif
`Cloud 2 - fade in (more bad code)
if s4_cloud_count(1) >= 1 and s4_cloud_count(1) <= 100
position camera camera position x() - (5.0/45.0),camera position y() + 0.25,camera position z() + 0.25
position object s4_cloud(1),camera position x()-1,camera position y()-1,camera position z()-1
point object s4_cloud(1),camera position x(),camera position y(),camera position z()
set alpha mapping on s4_cloud(1),s4_cloud_count(1)
inc s4_cloud_count(1)
endif
if s4_cloud_count(1) = 101
s4_cloud_count(1) = 0
hide object s4_spine(1)
hide object s4_shoulder_l(1)
hide object s4_shoulder_r(1)
hide object s4_arm_top_l(1)
hide object s4_arm_top_r(1)
hide object s4_arm_bot_l(1)
hide object s4_arm_bot_r(1)
hide object s4_leg_top_l(1)
hide object s4_leg_top_r(1)
hide object s4_leg_bot_l(1)
hide object s4_leg_bot_r(1)
sub_stage = 1
inc stage
endif
endfunction
`Load stage5
function load_stage5()
`Globals
dim s5_planet(1)
dim s5_cloud(1)
dim s5_stars(1)
`Planet
s5_planet(1) = new_sphere(98,20,20)
s5_cloud(1) = new_sphere(100,20,20)
color object s5_planet(1),rgb(0,0,0)
fade object s5_planet(1),10
`Stars
s5_stars(1) = new_plain(500,500)
create bitmap 1,500,500
ink rgb(255,255,255),0
for i=1 to 200
dot rnd(500),rnd(500)
next i
get image 2,0,0,500,500,1
delete bitmap 1
set current bitmap 0
ink rgb(255,255,255),0
`set object texture s5_stars(1),0,1
texture object s5_stars(1),2
hide object s5_stars(1)
`Texture
size = 300
create bitmap 1,size,size
ink rgb(141,141,141),0
make_cloud(0,0)
make_cloud(50,20)
make_cloud(130,10)
make_cloud(220,40)
make_cloud(10,60)
make_cloud(40,150)
make_cloud(160,140)
make_cloud(220,220)
make_cloud(200,210)
make_cloud(10,0)
make_cloud(20,20)
make_cloud(250,100)
make_cloud(250,200)
make_cloud(150,220)
make_cloud(100,100)
blur bitmap 1,3
get image 1,0,0,300,300
delete bitmap 1
set current bitmap 0
ink rgb(255,255,255),0
texture object s5_cloud(1),1
set object transparency s5_cloud(1),1
`Hide
hide object s5_planet(1)
hide object s5_cloud(1)
endfunction
`Cloud function
function make_cloud(x,y)
box 20+x,10+y,30+x,50+y
box 10+x,20+y,40+x,30+y
box 30+x,30+y,50+x,40+y
endfunction
`Zoom to planet
function run_stage5()
if sub_stage = 1
hide object s4_cloud(1)
`Show planet and clouds
show object s5_planet(1)
show object s5_cloud(1)
yrotate object s5_cloud(1),15
xrotate object s5_cloud(1),5
position camera 37,0,37
point camera 0,0,0
`Show start
show object s5_stars(1)
inc sub_stage
endif
if sub_stage = 2
`Keep stars distance
position object s5_stars(1),camera position x()-200,0,camera position z()-200
point object s5_stars(1),camera position x(),camera position y(),camera position z()
`Rotate clouds
xrotate object s5_cloud(1),object angle x(s5_cloud(1))+0.001
yrotate object s5_cloud(1),object angle y(s5_cloud(1))+0.1
position camera camera position x()+0.1,0,camera position z()+0.05
endif
if sub_stage = 2 and camera position x() > 190 and s4_cloud_count(1) = 0
s4_cloud_count(1) = 100
endif
if s4_cloud_count(1) <= 100 and s4_cloud_count(1) > 1
fade object s5_cloud(1),s4_cloud_count(1)
fade object s5_planet(1),s4_cloud_count(1)/10
fade object s5_stars(1),s4_cloud_count(1)
dec s4_cloud_count(1)
endif
if s4_cloud_count(1) = 1
sub_stage = 1
inc stage
endif
endfunction
function run_stage6()
flush video memory
delete objects 1,1000
delete image 1
delete image 2
position camera 15.0,15.0,15.0
point camera 7.5,0.0,0.0
position camera 25.0,50.0,50.0
s1_count(1) = 0
s4_cloud_count(1) = 0
load_stage1()
load_stage2()
load_stage3()
load_stage4()
load_stage5()
stage = 1
endfunction
Can you tell I've had a boring weekend

The program loops, so you can turn into a screensaver if you want. A lot of the code is written pretty poorly, I originally intended it to be small, but got a bit carried away. I just wanted to get it finished quickly this afternoon so there's some dodgy loops and things in.
Edit: Added Morph.scr to this post, if you dump in windows/system32 you will see it in the screensaver options as Morph. Modified version so it will check for widescreen and end on mouse move.
"I haven't failed. I've just found ten thousand ways that don't work." - Thomas Edison