I think the challenges may be following a natural path. At the start there were a lot of simple things to do, then people get experienced so the challenges get a bit more involved. These then take more time which puts experienced people off, who at this point may have their own projects on the go, and the new comers are put off because the challenge is too complicated for them.
Anyhow, this is my go at Latch's challenge. It's a cut scene of a figure running (no media required) and jumping an obstacle.
`Cut Scene Demo
`By 29 Games
`14 December 2010
`This demo is basic scene of a figure running
`The figure jumps and slides at cetain times
`Obstacles are placed to coincide with the jump
`and slide to make it look as if the figure is
`dodging the obstacles.
`There are no controls, just run the program.
gosub SET_UP
gosub STARTING_VARIABLES
gosub MAKE_OBJECTS
gosub CAMERA_VARIABLES
_main_loop:
start_time = timer()
repeat
time = timer() - start_time
`figure runs and camera spirals inward
if time <= 2500
`move runner foward
zply# = zply# + zvel#
position object 1, xply#, yply#, zply#
loop object 1, 1, 43
`camera spirals toward runner
c_ang_x# = curvevalue(ang_x_2#, c_ang_x#, 50.0) :`determine angle of camera about x axis
c_ang_y# = curvevalue(ang_y_2#, c_ang_y#, 100.0) :`determine angle of camera about y axis
c_dis# = curvevalue(dis_2#, c_dis#, 50.0) :`determine distance of camera from runner
position camera xply#, yply#, zply# :`position camera on runner
yrotate camera wrapvalue(c_ang_y#) :`angle camera about y axis
xrotate camera wrapvalue(c_ang_x#) :`angle camera about x axis
move camera c_dis# :`move camera out from runner
point camera xply#, yply#, zply# :`point camera at runner
endif
`figure runs and camera spirals out
if time > 2500 and time <= 4000
`move runner forward
zply# = zply# + zvel#
position object 1, xply#, yply#, zply#
loop object 1, 1, 43
`camera spirals out from player
c_ang_x# = curvevalue(ang_x_3#, c_ang_x#, 50.0)
c_ang_y# = curvevalue(ang_y_3#, c_ang_y#, 100.0)
c_dis# = curvevalue(dis_3#, c_dis#, 50.0)
position camera xply#, yply#, zply#
yrotate camera wrapvalue(c_ang_y#)
xrotate camera wrapvalue(c_ang_x#)
move camera c_dis#
point camera xply#, yply#, zply#
endif
`figures runs and jumps and camera spirals outward
if time > 4000 and time <= 8000
`move runner forward
zply# = zply# + zvel#
`at this point in time figure jumps
if time >= 5985 and time < 6015
yvel# = 2.0 :`apply upward velocity
play object 1, 71,71 :`play jump pose
endif
yvel# = yvel# - 0.1 :`apply gravity to upward velocity
yply# = yply# + yvel# :`calculate velocity in y direction
if yply# <= hgt*0.6 :`player touches ground again
yply# = hgt*0.6
yvel# = 0
endif
`play touch down animation if player is falling downward
if yvel# < 0 then play object 1, 71,100
position object 1, xply#, yply#, zply#
if yply# <= hgt*0.6 then loop object 1, 1, 43 :`play running animation if runner is on the ground
`show and move obstacle 2
show object 3
move object 3, xvel_3#
`camera spirals outward
c_ang_y# = curvevalue(ang_y_4#, c_ang_y#, 100.0)
c_dis# = curvevalue(dis_4#, c_dis#, 50.0)
position camera xply#, yply#, zply#
yrotate camera wrapvalue(c_ang_y#)
xrotate camera wrapvalue(c_ang_x#)
move camera c_dis#
point camera xply#, yply#, zply#
endif
if time > 8000
`move runner
zply# = zply# + zvel#
`runner slides under 2nd obstacle at a certain time
if time < 9000
loop object 1, 1, 43
else
`runner slides under 2nd obstacle at time > 9000 milli seconds
xrotate object 1, wrapvalue(-45)
yrotate object 1, wrapvalue(270)
zrotate object 1, wrapvalue(0)
yply# = hgt*0.2
play object 1, 61,61 :`sliding pose
endif
position object 1, xply#, yply#, zply#
`move obstacle 2
move object 3, xvel_3#
`spiral camera around runner
c_ang_x# = curvevalue(ang_x_5#, c_ang_x#, 10.0)
c_ang_y# = curvevalue(ang_y_5#, c_ang_y#, 100.0)
c_dis# = curvevalue(dis_5#, c_dis#, 50.0)
position camera xply#, yply#, zply#
yrotate camera wrapvalue(c_ang_y#)
xrotate camera wrapvalue(c_ang_x#)
move camera c_dis#
point camera xply#, yply#, zply#
endif
sync
until time > 12000
end
SET_UP:
`set display mode 1024,768,16
sync on
sync rate 65
hide mouse
set camera range 1,3000
randomize timer()
return
STARTING_VARIABLES:
`values for runner
hgt = 50 :`height
zvel# = 4.0 :`z velocity
xply# = 0 :`x position
yply# = hgt*0.6 :`y position
zply# = 0 :`z position
`values for second obstacle
xvel_3# = 5 :`x velocity
return
MAKE_OBJECTS:
make matrix 1, 1000,4000,10,30
position matrix 1,-500,0,0
`make runner and animate runner
MAKE_OBJECT_FIGURE(1,hgt)
color object 1,rgb(200,50,50)
set object ambient 1, rgb(30,20,40)
xrotate object 1,20
ANIMATE_FIGURE(1)
set object speed 1, 30
position object 1, xply#,yply#,zply#
`make first obstacle
make object box 2, 1000,20,70
color object 2, rgb(0,100,0)
position object 2, 0,10,1540
`make second obstacle
make object box 3, 80,150,500
make object box 4, 80,120,100 : make mesh from object 1,4 : add limb 3,1,1 : offset limb 3,1, 0,-15,340 : delete object 4 : delete mesh 1
color object 3, rgb(100,100,100) : set object ambient 3, rgb(100,100,200)
make object box 4, 60,20,220 : make mesh from object 1,4 : add limb 3,2,1 : offset limb 3,2, 0,-85,280 : delete object 4 : delete mesh 1
color limb 3,2, rgb(60,60,60)
for i = 3 to 7
make object cylinder 4, 40 : scale object 4, 100,200,100 : make mesh from object 1,4 : add limb 3,i,1 : color limb 3,i, rgb(20,20,20)
delete object 4 : delete mesh 1
next i
offset limb 3,3, 0,-95,-220 : rotate limb 3,3, 0,0,90
offset limb 3,4, 0,-95,-170 : rotate limb 3,4, 0,0,90
offset limb 3,5, 0,-95,200 : rotate limb 3,5, 0,0,90
offset limb 3,6, 0,-95,250 : rotate limb 3,6, 0,0,90
offset limb 3,7, 0,-95,365 : rotate limb 3,7, 0,0,90
yrotate object 3, 270
position object 3, 1700,115,2350
hide object 3
return
CAMERA_VARIABLES:
`camera values
ang_x_1# = 30.0 : ang_y_1# = 180.0+360.0 : ang_z_1# = 45.0 : dis_1# = -3000.0
ang_x_2# = 1.0 : ang_y_2# = 60.0 : ang_z_2# = ang_z_1# : dis_2# = -100.0
ang_x_3# = ang_x_2# : ang_y_3# = ang_y_2# : ang_z_3# = ang_z_2# : dis_3# = dis_2#
ang_x_4# = ang_x_3# : ang_y_4# = 300.0 : ang_z_4# = ang_z_3# : dis_4# = -300.0
ang_x_5# = 1.0 : ang_y_5# = 500.0 : ang_z_5# = ang_z_4# : dis_5# = -150.0
`starting camera values
c_ang_x# = ang_x_1# : c_ang_y# = ang_y_1# : c_ang_z# = ang_z_1# : c_dis# = dis_1#
return
function ANIMATE_FIGURE(n):
`running animation
POSE_FIGURE(n,1) : set object keyframe n,1 :`full run right foot forward
POSE_FIGURE(n,2) : set object keyframe n,8 :`half run right foot forward
POSE_FIGURE(n,3) : set object keyframe n,15 :`half run right foot down
POSE_FIGURE(n,4) : set object keyframe n,22 :`full run left foot forward
POSE_FIGURE(n,5) : set object keyframe n,29 :`half run left foot forward
POSE_FIGURE(n,6) : set object keyframe n,36 :`half run left foot down
POSE_FIGURE(n,1) : set object keyframe n,43 :`full run right foot forward
`slide
POSE_FIGURE(n,7) : set object keyframe n,61 :`slide
`hurdle
POSE_FIGURE(n,11) : set object keyframe n,71 :`hurdle
POSE_FIGURE(n,1) : set object keyframe n,100 :`full run right foot forward
endfunction
function POSE_FIGURE(num,p)
if p = 0 then restore _pose_data_00 :`standing
`poses for running
if p = 1 then restore _pose_data_01 :`full run right foot forward
if p = 2 then restore _pose_data_02 :`half run right foot forward
if p = 3 then restore _pose_data_03 :`half run right foot down
if p = 4 then restore _pose_data_04 :`full run left foot forward
if p = 5 then restore _pose_data_05 :`half run left foot forward
if p = 6 then restore _pose_data_06 :`half run left foot down
`poses for slide and controlled fall
if p = 7 then restore _pose_data_07 :`slide
if p = 8 then restore _pose_data_08 :`controlled fall
if p = 9 then restore _pose_data_09 :`controlled land
if p = 10 then restore _pose_data_10 :`crouch
if p = 11 then restore _pose_data_11 :`hurdle
`rotate limbs
for i = 1 to 11
read ax,ay,az
rotate limb num,i, wrapvalue(ax),wrapvalue(ay),wrapvalue(az)
next i
`standing
_pose_data_00:
data 0, 0, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, 0, 0 :` 3 head
data 0, 0, 0 :` 4 up_arm left
data 0, 0, 0 :` 5 up_arm right
data 0, 0, 0 :` 6 lo_arm left
data 0, 0, 0 :` 7 lo_arm right
data 0, 0, 0 :` 8 up_leg left
data 0, 0, 0 :` 9 up_leg right
data 0, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
`full run right foot forward
_pose_data_01:
data 0, 30, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, -30, 0 :` 3 head
data -45, 0, 0 :` 4 up_arm left
data 90, 0, 0 :` 5 up_arm right
data -90, 0, 0 :` 6 lo_arm left
data -90, 0, 0 :` 7 lo_arm right
data 30, 0, 0 :` 8 up_leg left
data -60, 0, 0 :` 9 up_leg right
data 90, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
`half run right foot forward
_pose_data_02:
data 0, 10, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, -10, 0 :` 3 head
data -3, 0, 0 :` 4 up_arm left
data 37, 0, 0 :` 5 up_arm right
data -90, 0, 0 :` 6 lo_arm left
data -90, 0, 0 :` 7 lo_arm right
data 0, 0, 0 :` 8 up_leg left
data -30, 0, 0 :` 9 up_leg right
data 90, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
`half run right foot down
_pose_data_03:
data 0, -10, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, 10, 0 :` 3 head
data 37, 0, 0 :` 4 up_arm left
data -3, 0, 0 :` 5 up_arm right
data -90, 0, 0 :` 6 lo_arm left
data -90, 0, 0 :` 7 lo_arm right
data -30, 0, 0 :` 8 up_leg left
data 0, 0, 0 :` 9 up_leg right
data 90, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
`full run left foot forward
_pose_data_04:
data 0, -30, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, 30, 0 :` 3 head
data 90, 0, 0 :` 4 up_arm left
data -45, 0, 0 :` 5 up_arm right
data -90, 0, 0 :` 6 lo_arm left
data -90, 0, 0 :` 7 lo_arm right
data -60, 0, 0 :` 8 up_leg left
data 30, 0, 0 :` 9 up_leg right
data 0, 0, 0 :` 10 lo_leg left
data 90, 0, 0 :` 11 lo_leg right
`half run left foot forward
_pose_data_05:
data 0, -10, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, 10, 0 :` 3 head
data 37, 0, 0 :` 4 up_arm left
data -3, 0, 0 :` 5 up_arm right
data -90, 0, 0 :` 6 lo_arm left
data -90, 0, 0 :` 7 lo_arm right
data -30, 0, 0 :` 8 up_leg left
data 0, 0, 0 :` 9 up_leg right
data 0, 0, 0 :` 10 lo_leg left
data 90, 0, 0 :` 11 lo_leg right
`half run left foot down
_pose_data_06:
data 0, 10, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data 0, -10, 0 :` 3 head
data -3, 0, 0 :` 4 up_arm left
data 37, 0, 0 :` 5 up_arm right
data -90, 0, 0 :` 6 lo_arm left
data -90, 0, 0 :` 7 lo_arm right
data 0, 0, 0 :` 8 up_leg left
data -30, 0, 0 :` 9 up_leg right
data 0, 0, 0 :` 10 lo_leg left
data 90, 0, 0 :` 11 lo_leg right
_pose_data_07:
data 30, 60, 0 :` 1 mid_body
data 10, 0, 0 :` 2 up_body
data 10, 10, 0 :` 3 head
data 90, 0, -30 :` 4 up_arm left
data -90, -60, 0 :` 5 up_arm right
data 0, 0, 0 :` 6 lo_arm left
data -45, 0, 0 :` 7 lo_arm right
data -100, -30, 0 :` 8 up_leg left
data 0, 0, 30 :` 9 up_leg right
data 100, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
_pose_data_08:
data 10, 0, 0 :` 1 mid_body
data 10, 0, 0 :` 2 up_body
data 10, 0, 0 :` 3 head
data 0, -30, -100 :` 4 up_arm left
data 0, 30, 100 :` 5 up_arm right
data 0, 0, 0 :` 6 lo_arm left
data 0, 0, 0 :` 7 lo_arm right
` data -100, 0, 0 :` 8 up_leg left
data 0, 0, 0 :` 8 up_leg left
data 0, 0, 0 :` 9 up_leg right
` data 100, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
_pose_data_09:
data 30, 0, 0 :` 1 mid_body
data 30, 0, 0 :` 2 up_body
data 30, 0, 0 :` 3 head
data 0, -30, -100 :` 4 up_arm left
data 0, 30, 100 :` 5 up_arm right
data 0, 0, 0 :` 6 lo_arm left
data 0, 0, 0 :` 7 lo_arm right
data -100, 0, 0 :` 8 up_leg left
data -20, 0, 0 :` 9 up_leg right
data 110, 0, 0 :` 10 lo_leg left
data 110, 0, 0 :` 11 lo_leg right
_pose_data_10:
data 30, 0, 0 :` 1 mid_body
data 0, 0, 0 :` 2 up_body
data -30, 0, 0 :` 3 head
data -30, 0, 0 :` 4 up_arm left
data -30, 0, 0 :` 5 up_arm right
data 0, 0, 0 :` 6 lo_arm left
data 0, 0, 0 :` 7 lo_arm right
data -100, 0, 0 :` 8 up_leg left
data -20, 0, 0 :` 9 up_leg right
data 110, 0, 0 :` 10 lo_leg left
data 110, 0, 0 :` 11 lo_leg right
_pose_data_11:
data 15, 0, 0 :` 1 mid_body
data 15, 0, 0 :` 2 up_body
data -30, 0, 0 :` 3 head
data 0, -30, -100 :` 4 up_arm left
data 0, 30, 100 :` 5 up_arm right
data 0, 0, 0 :` 6 lo_arm left
data 0, 0, 0 :` 7 lo_arm right
data -10, 0, 0 :` 8 up_leg left
data -100, 0, 0 :` 9 up_leg right
data 100, 0, 0 :` 10 lo_leg left
data 0, 0, 0 :` 11 lo_leg right
endfunction
function MAKE_OBJECT_FIGURE(num,size)
`the bottom of the figure's feet are 0.6*size from the object position of the figure
dim p#(8,24)
`write figure vertex data to array
restore _figure_part_data
for i = 1 to 8
for j = 1 to 24
read p#(i,j)
p#(i,j) = p#(i,j)*size
next j
next i
`create meshes for body parts
for i = 1 to 8
MAKE_MESH_8_POINTS(i, p#(i,1),p#(i,2),p#(i,3), p#(i,4),p#(i,5),p#(i,6), p#(i,7),p#(i,8),p#(i,9), p#(i,10),p#(i,11),p#(i,12), p#(i,13),p#(i,14),p#(i,15), p#(i,16),p#(i,17),p#(i,18), p#(i,19),p#(i,20),p#(i,21), p#(i,22),p#(i,23),p#(i,24))
next i
`create object and add limbs limb numbers
make object num,1,0 :` 0 lo_body1
add limb num,1,2 :` 1 mid_body
add limb num,2,3 :` 2 up_body
add limb num,3,4 :` 3 head
add limb num,4,5 :` 4 up_arm left
add limb num,5,5 :` 5 up_arm right
add limb num,6,6 :` 6 lo_arm left
add limb num,7,6 :` 7 lo_arm right
add limb num,8,7 :` 8 up_leg left
add limb num,9,7 :` 9 up_leg right
add limb num,10,8 :` 10 lo_leg left
add limb num,11,8 :` 11 lo_leg right
`delete meshes
for i = 1 to 8
delete mesh i
next i
`position limbs and link limbs
offset limb num,1, 0*size,0.148*size,0*size :` 1 mid_body
link limb num,2,1: offset limb num,2, 0*size,0.106*size,0*size :` 2 up_body
link limb num,3,2: offset limb num,3, 0*size,0.052*size,0*size :` 3 head
link limb num,4,2: offset limb num,4, -0.18*size,0.0*size,0*size :` 4 up_arm left
link limb num,5,2: offset limb num,5, 0.18*size,0.0*size,0*size :` 5 up_arm right
link limb num,6,4: offset limb num,6, 0*size,-0.148*size,-0.03*size :` 6 lo_arm left
link limb num,7,5: offset limb num,7, 0*size,-0.148*size,-0.03*size :` 7 lo_arm right
offset limb num,8, -0.075*size,-0.04*size,0*size :` 8 up_leg left
offset limb num,9, 0.075*size,-0.04*size,0*size :` 9 up_leg right
link limb num,10,8: offset limb num,10, 0*size,-0.21*size,0.03*size :` 10 lo_leg left
link limb num,11,9: offset limb num,11, 0*size,-0.21*size,0.03*size :` 11 lo_leg right
`delete array from memory
undim p#(8,24)
`data
_figure_part_data:
`vertex data lower body:
data 0.03,-0.08,0.03, -0.03,-0.08,0.03, 0.03,0.08,0.03, -0.03,0.08,0.03
data 0.03,-0.04,-0.06, -0.03,-0.04,-0.06, 0.03,0.08,-0.03, -0.03,0.08,-0.03
`vertex data mid body:
data 0.03,-0.033,0.03, -0.03,-0.033,0.03, 0.1,0.033,0.045, -0.1,0.033,0.045
data 0.03,-0.033,-0.03, -0.03,-0.033,-0.03, 0.1,0.033,-0.045, -0.1,0.033,-0.045
`vertex data upper body:
data 0.135,-0.037,0.045, -0.135,-0.037,0.045, 0.135,0.037,0.045, -0.135,0.037,0.045
data 0.135,-0.037,-0.053, -0.135,-0.037,-0.053, 0.135,0.037,-0.1, -0.135,0.037,-0.1
`vertex data head:
data 0.03,0.0,0.03, -0.03,0.0,0.03, 0.03,0.094,0.03, -0.03,0.094,0.03
data 0.03,0.015,-0.03, -0.03,0.015,-0.03, 0.03,0.094,-0.06, -0.03,0.094,-0.06
`vertex data upper arm:
data 0.03,-0.083,0.03, -0.03,-0.083,0.03, 0.03,0.027,0.03, -0.03,0.027,0.03
data 0.03,-0.143,-0.03, -0.03,-0.143,-0.03, 0.03,0.027,-0.03, -0.03,0.027,-0.03
`vertex data lower arm:
data 0.03,-0.175,0.06, -0.03,-0.175,0.06, 0.03,-0.065,0.06, -0.03,-0.065,0.06
data 0.03,-0.175,0.00, -0.03,-0.175,0.00, 0.03,-0.005,0.00, -0.03,-0.005,0.00
`vertex data upper leg:
data 0.03,-0.205,0.03, -0.03,-0.205,0.03, 0.03,0.04,0.03, -0.03,0.04,0.03
data 0.03,-0.145,-0.03, -0.03,-0.145,-0.03, 0.03,0.04,-0.03, -0.03,0.04,-0.03
`vertex data lower leg:
data 0.060,-0.35,-0.00, -0.060,-0.35,-0.00, 0.060,-0.005,-0.00, -0.060,-0.005,-0.00
data 0.060,-0.35,-0.14, -0.060,-0.35,-0.14, 0.060,-0.065,-0.07, -0.060,-0.065,-0.07
endfunction
function MAKE_MESH_8_POINTS(num, ax#,ay#,az#, bx#,by#,bz#, cx#,cy#,cz#, dx#,dy#,dz#, ex#,ey#,ez#, fx#,fy#,fz#, gx#,gy#,gz#, hx#,hy#,hz#)
`a = front right bottom, b = front left bottom, c = front right top, d = front left top
`e = back right bottom, f = back left bottom, g = back right top, h = back left top
`there are six sides to a box
num_sides = 6
`memblock number
mem = 1
`header values
num_verts = num_sides * 4
pos_verts = 32
num_norms = num_verts
pos_norms = num_verts*12 + pos_verts
num_faces = num_sides*2
pos_faces = pos_norms + num_norms*12
size_faces = num_faces*7
pos_uv = pos_faces + size_faces*4
`calculate size of memblock
size_mem = 32 + (num_verts + num_norms)*12 + size_faces*4 + num_sides*32
`create the memblock
make memblock mem, size_mem
`write header values to memblock
write memblock dword mem, 0, num_verts
write memblock dword mem, 4, pos_verts
write memblock dword mem, 8, num_norms
write memblock dword mem, 12, pos_norms
write memblock dword mem, 16, num_faces
write memblock dword mem, 20, pos_faces
write memblock dword mem, 24, size_faces
write memblock dword mem, 28, pos_uv
`write vertext data to memblock
`front face
write memblock float mem, 32, ax# : write memblock float mem, 36, ay# : write memblock float mem, 40, az# : `0 vertex
write memblock float mem, 44, bx# : write memblock float mem, 48, by# : write memblock float mem, 52, bz# : `1 vertex
write memblock float mem, 56, cx# : write memblock float mem, 60, cy# : write memblock float mem, 64, cz# : `2 vertex
write memblock float mem, 68, dx# : write memblock float mem, 72, dy# : write memblock float mem, 76, dz# : `3 vertex
`back face
write memblock float mem, 80, fx# : write memblock float mem, 84, fy# : write memblock float mem, 88, fz# : `4 vertex
write memblock float mem, 92, ex# : write memblock float mem, 96, ey# : write memblock float mem, 100, ez# : `5 vertex
write memblock float mem, 104, hx# : write memblock float mem, 108, hy# : write memblock float mem, 112, hz# : `6 vertex
write memblock float mem, 116, gx# : write memblock float mem, 120, gy# : write memblock float mem, 124, gz# : `7 vertex
`left face
write memblock float mem, 128, bx# : write memblock float mem, 132, by# : write memblock float mem, 136, bz# : `8 vertex
write memblock float mem, 140, fx# : write memblock float mem, 144, fy# : write memblock float mem, 148, fz# : `9 vertex
write memblock float mem, 152, dx# : write memblock float mem, 156, dy# : write memblock float mem, 160, dz# : `10 vertex
write memblock float mem, 164, hx# : write memblock float mem, 168, hy# : write memblock float mem, 172, hz# : `11 vertex
`right face
write memblock float mem, 176, ex# : write memblock float mem, 180, ey# : write memblock float mem, 184, ez# : `12 vertex
write memblock float mem, 188, ax# : write memblock float mem, 192, ay# : write memblock float mem, 196, az# : `13 vertex
write memblock float mem, 200, gx# : write memblock float mem, 204, gy# : write memblock float mem, 208, gz# : `14 vertex
write memblock float mem, 212, cx# : write memblock float mem, 216, cy# : write memblock float mem, 220, cz# : `15 vertex
`top face
write memblock float mem, 224, hx# : write memblock float mem, 228, hy# : write memblock float mem, 232, hz# : `16 vertex
write memblock float mem, 236, gx# : write memblock float mem, 240, gy# : write memblock float mem, 244, gz# : `17 vertex
write memblock float mem, 248, dx# : write memblock float mem, 252, dy# : write memblock float mem, 256, dz# : `18 vertex
write memblock float mem, 260, cx# : write memblock float mem, 264, cy# : write memblock float mem, 268, cz# : `19 vertex
`bottom face
write memblock float mem, 272, bx# : write memblock float mem, 276, by# : write memblock float mem, 280, bz# : `20 vertex
write memblock float mem, 284, ax# : write memblock float mem, 288, ay# : write memblock float mem, 292, az# : `21 vertex
write memblock float mem, 296, fx# : write memblock float mem, 300, fy# : write memblock float mem, 304, fz# : `22 vertex
write memblock float mem, 308, ex# : write memblock float mem, 312, ey# : write memblock float mem, 316, ez# : `23 vertex
`write normal data to memblock
restore _normdata
for pos = pos_norms to pos_norms+(num_norms*12)-12 step 12
read x,y,z
write memblock float mem, pos, x
write memblock float mem, pos+4, y
write memblock float mem, pos+8, z
next pos
`write face data to memblock
restore _facedata
for pos = pos_faces to pos_faces+(num_faces*28)-28 step 28
read nvf, va,na, vb, nb, vc,nc
write memblock dword mem, pos, nvf
write memblock dword mem, pos+4, va
write memblock dword mem, pos+8, na
write memblock dword mem, pos+12, vb
write memblock dword mem, pos+16, nb
write memblock dword mem, pos+20, vc
write memblock dword mem, pos+24, nc
next pos
`write UV data to memblock
restore _uvdata
for pos = pos_uv to pos_uv+(num_sides*32)-32 step 32
read ua#,va#, ub#,vb#, uc#,vc#, ud#,vd#
write memblock float mem, pos, ua#
write memblock float mem, pos+4, va#
write memblock float mem, pos+8, ub#
write memblock float mem, pos+12, vb#
write memblock float mem, pos+16, uc#
write memblock float mem, pos+20, vc#
write memblock float mem, pos+24, ud#
write memblock float mem, pos+28, vd#
next pos
`create mesh then create object, delete mesh and memblock
make mesh from memblock num, mem
delete memblock 1
_normdata:
data 0,0,1, 0,0,1, 0,0,1, 0,0,1 :`front
data 0,0,-1, 0,0,-1, 0,0,-1, 0,0,-1 :`back
data -1,0,0, -1,0,0, -1,0,0, -1,0,0 :`left
data 1,0,0, 1,0,0, 1,0,0, 1,0,0 :`right
data 0,1,0, 0,1,0, 0,1,0, 0,1,0 :`top
data 0,-1,0, 0,-1,0, 0,-1,0, 0,-1,0 :`bottom
_facedata:
data 3, 0,0, 3,3, 1,1 :`front face 0
data 3, 3,3, 0,0, 2,2 :`front face 1
data 3, 4,4, 7,7, 5,5 :`back face 2
data 3, 7,7, 4,4, 6,6 :`back face 3
data 3, 8,8, 11,11, 9,9 :`left face 4
data 3, 11,11, 8,8, 10,10 :`left face 5
data 3, 12,12, 15,15, 13,13 :`right face 6
data 3, 15,15, 12,12, 14,14 :`right face 7
data 3, 16,16, 19,19, 17,17 :`top face 8
data 3, 19,19, 16,16, 18,18 :`top face 9
data 3, 20,20, 23,23, 21,21 :`bottom face 10
data 3, 23,23, 20,20, 22,22 :`bottom face 11
_uvdata:
data 0.03,0.47, 0.30,0.47, 0.03,0.03, 0.30,0.03 :`front
data 0.03,0.97, 0.30,0.97, 0.03,0.53, 0.30,0.53 :`back
data 0.36,0.47, 0.63,0.47, 0.36,0.03, 0.63,0.03 :`left
data 0.36,0.97, 0.63,0.97, 0.36,0.53, 0.63,0.53 :`right
data 0.69,0.47, 0.97,0.47, 0.69,0.03, 0.97,0.03 :`top
data 0.69,0.97, 0.97,0.97, 0.69,0.53, 0.97,0.53 :`bottom
endfunction
I've never done "camera work" before so for me this was something new.