Ouch, I thought I had a bit more time... oh well... I just hadn't gotten a chance to post it, but anyways, if you want to learn a bit about the vertex commands then this might be a good intro...
CPU
`%ProjectTitle%
`======================
`©%Author%
`======================
`Main Source File
sync on
sync rate 0
autocam off
#constant helpObj = 1000
#constant helpMesh = 10
`#constant dfactor = 100.0
#constant sqrWidth = 5
#constant sqrHeight = 5
#constant sqrWidFact = -10
#constant sqrHeiFact = -15
#constant numSpace = 5
#constant minFade = 30.0
#constant numNumbers = 8
position camera -100,100,400
point camera 0,0,0
color backdrop 0
type Vertex
xpos as float
ypos as float
xto as float
yto as float
endtype
type NumberType
curNumber as integer
maxSpd as float
minSpd as float
thresh as float
dfactor as float
fade as float
endtype
global timeStart as integer
calibrateTimer()
global dim NumVertex(numNumbers,sqrWidth*sqrHeight*6) as Vertex
global dim Numbers(numNumbers) as NumberType
for n = 1 to numNumbers
makeNumber(n, n, 0, (n-(numNumbers/2)) * (sqrWidFact*-1*sqrWidth+numSpace)-sqrWidFact/2, 0, 0)
if (n-1) mod 3 = 2
setNumber(n, 99)
else
setNumber(n, (n-1) mod 10)
endif
ghost object on n
set object wireframe n, 1
next n
if numNumbers > 8
restore numberData
else
restore numberDataSeconds
endif
for n = 1 to numNumbers
read Numbers(n).curNumber
read Numbers(n).maxSpd
read Numbers(n).minSpd
read Numbers(n).thresh
read Numbers(n).dfactor
Numbers(n).fade = 100
next n
`--------------------------------------------------
`############# enter main loop ###################
`--------------------------------------------------
do
updateNumberTime()
for n = 1 to numNumbers
updateNumber(n, n, 0)
setNumber(n, Numbers(n).curNumber)
next n
text 10,10,"updating numbers... (FPS: " + str$(screen fps()) + ")"
text 10,25,"Current Time: " + getTimeStr()
set cursor 10,40
sync
loop
function updateNumberTime()
local tmp as string
tmp = getTimeStr()
for n = 1 to numNumbers
if (n-1) mod 3 = 2
setNumber(n, 99)
else
lastNum = Numbers(n).curNumber
Numbers(n).curNumber = val(mid$(tmp, numNumbers-n+1))
endif
`do a lil fadin
if lastNum <> Numbers(n).curNumber
Numbers(n).fade = 100.0
else
`if Numbers(n).fade > minFade then dec Numbers(n).fade, ((numNumbers-n)-int((n-1)/3))/600.0
if int((n-1)/3) = 0
if Numbers(n).fade > minFade then dec Numbers(n).fade, 0.02
else
if int((n-1)/3) = 1
if Numbers(n).fade > minFade then dec Numbers(n).fade, 0.002
else
if Numbers(n).fade > minFade then dec Numbers(n).fade, 0.0002
endif
endif
endif
if Numbers(n).fade < minFade then Numbers(n).fade = minFade
fade object n, Numbers(n).fade
next n
endfunction
function getTimeStr()
local rtrn as string
rtrn = get time$() + ":" + getMilliSecondsStr()
endfunction rtrn
function getMilliSecondsStr()
local rtrn as string
rtrn = str$(getMilliTime()/10 mod 100)
if len(rtrn) < 2 then rtrn = "0" + rtrn
if len(rtrn) < 2 then rtrn = "0" + rtrn
endfunction rtrn
function getMilliTime()
local rtrn as integer
rtrn = (timer() - timeStart)
endfunction rtrn
function calibrateTimer()
local time as integer
local lastTime as integer
repeat
lastTime = time
time = val(right$(get time$(), 1))
until lastTime <> time
timeStart = timer()
endfunction
function updateNumber(objNum, index, zpos)
local dist as float
local x as float
local y as float
lock vertexdata for limb objNum,0,1
for n = 0 to sqrWidth*sqrHeight * 6
if abs(NumVertex(index,n).xpos - NumVertex(index,n).xto) > Numbers(index).thresh or abs(NumVertex(index,n).ypos - NumVertex(index,n).yto) > Numbers(index).thresh
dist = sqrt((NumVertex(index,n).xpos - NumVertex(index,n).xto)^2 + (NumVertex(index,n).ypos - NumVertex(index,n).yto)^2)
if dist < Numbers(index).minSpd then dist = Numbers(index).minSpd
if dist > Numbers(index).maxSpd then dist = Numbers(index).maxSpd
x = -1*(NumVertex(index,n).xpos - NumVertex(index,n).xto)/dist/Numbers(index).dfactor
y = -1*(NumVertex(index,n).ypos - NumVertex(index,n).yto)/dist/Numbers(index).dfactor
NumVertex(index,n).xpos = NumVertex(index,n).xpos + x
NumVertex(index,n).ypos = NumVertex(index,n).ypos + y
endif
if abs(NumVertex(index,n).xpos - NumVertex(index,n).xto) <= Numbers(index).thresh then NumVertex(index,n).xpos = NumVertex(index,n).xto
if abs(NumVertex(index,n).ypos - NumVertex(index,n).yto) <= Numbers(index).thresh then NumVertex(index,n).ypos = NumVertex(index,n).yto
set vertexdata position n, NumVertex(index,n).xpos, NumVertex(index,n).ypos, zpos
next n
unlock vertexdata
endfunction
function makeNumber(objNum, index, image, posx, posy, posz)
make object plain helpObj,abs(sqrWidFact),abs(sqrHeiFact)
rotate limb helpObj,0,0,0,0
make mesh from object helpMesh,helpObj
delete object helpObj
make object helpObj, helpMesh, image
limbNum = 1
for x = 0 to sqrWidth-1
for y = 0 to sqrHeight-1
if y = 0 and x = 0 : else
add limb helpObj,limbNum,helpMesh
offset limb helpObj,limbNum,x*sqrWidFact,y*sqrHeiFact,0
inc limbNum
sync
`wait 10
endif
next y
next x
delete mesh helpMesh
make mesh from object helpMesh, helpObj
make object objNum, helpMesh, image
delete object helpObj
set object wireframe objNum, 1
set object cull objNum, 0
position object objNum, posx, posy, posz
`loop through the vertexes
lock vertexdata for limb objNum,0,1
for n = 0 to sqrWidth*sqrHeight * 6
x#=get vertexdata position x(n)
y#=get vertexdata position y(n)
NumVertex(index,n).xpos = x#+sqrWidFact/2
NumVertex(index,n).ypos = y#+sqrHeiFact/2
NumVertex(index,n).xto = x#
NumVertex(index,n).yto = y#
set vertexdata diffuse n, rgb(rnd(255),rnd(255),rnd(255))
set vertexdata position n, NumVertex(index,n).xpos, NumVertex(index,n).ypos, 0
next n
`unlock the vertex data now that we are done reading it
unlock vertexdata
organize(index)
endfunction
function setNumber(index, number)
local tmp as integer
local poly as integer
select number
case 0
restore number0
endcase
case 1
restore number1
endcase
case 2
restore number2
endcase
case 3
restore number3
endcase
case 4
restore number4
endcase
case 5
restore number5
endcase
case 6
restore number6
endcase
case 7
restore number7
endcase
case 8
restore number8
endcase
case 9
restore number9
endcase
case 99
restore numberSYM
endcase
endselect
poly = 0
for y = 0 to sqrHeight - 1
for x = 0 to sqrWidth - 1
read tmp
select tmp
case 7
shapeVRT(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 6
shapeVLF(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 5
shapeTRI4(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 4
shapeTRI3(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 3
shapeTRI2(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 2
shapeTRI1(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 1
shapeSQR(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
case 0
shapeNON(index, poly, x*sqrWidFact, y*sqrHeiFact)
endcase
endselect
inc poly, 6
next x
next y
endfunction
`organize the plains....
function organize(index)
local poly as integer
poly = 0
for y = 0 to sqrHeight-1
for x = 0 to sqrWidth-1
`triangle 1
NumVertex(index,poly+0).xpos = 0 +x*sqrWidFact
NumVertex(index,poly+0).ypos = 0 +y*sqrHeiFact
NumVertex(index,poly+1).xpos = sqrWidFact+x*sqrWidFact
NumVertex(index,poly+1).ypos = 0 +y*sqrHeiFact
NumVertex(index,poly+2).xpos = 0 +x*sqrWidFact
NumVertex(index,poly+2).ypos = sqrHeiFact+y*sqrHeiFact
`triangle 2
NumVertex(index,poly+3).xpos = sqrWidFact+x*sqrWidFact
NumVertex(index,poly+3).ypos = 0 +y*sqrHeiFact
NumVertex(index,poly+4).xpos = sqrWidFact+x*sqrWidFact
NumVertex(index,poly+4).ypos = sqrHeiFact+y*sqrHeiFact
NumVertex(index,poly+5).xpos = 0 +x*sqrWidFact
NumVertex(index,poly+5).ypos = sqrHeiFact+y*sqrHeiFact
inc poly, 6
next x
next y
endfunction
`a block of substance
function shapeSQR(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = sqrWidFact+xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = 0 +xOff
NumVertex(index,poly+2).yto = sqrHeiFact+yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact+xOff
NumVertex(index,poly+3).yto = 0 +yOff
NumVertex(index,poly+4).xto = sqrWidFact+xOff
NumVertex(index,poly+4).yto = sqrHeiFact+yOff
NumVertex(index,poly+5).xto = 0 +xOff
NumVertex(index,poly+5).yto = sqrHeiFact+yOff
endfunction
`no substance here!
function shapeNON(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = 0 +xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = 0 +xOff
NumVertex(index,poly+2).yto = 0 +yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact+xOff
NumVertex(index,poly+3).yto = sqrHeiFact+yOff
NumVertex(index,poly+4).xto = sqrWidFact+xOff
NumVertex(index,poly+4).yto = sqrHeiFact+yOff
NumVertex(index,poly+5).xto = sqrWidFact+xOff
NumVertex(index,poly+5).yto = sqrHeiFact+yOff
endfunction
`top left in
function shapeTRI1(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = sqrWidFact/2.0+xOff
NumVertex(index,poly+0).yto = sqrHeiFact/2.0+yOff
NumVertex(index,poly+1).xto = sqrWidFact +xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = 0 +xOff
NumVertex(index,poly+2).yto = sqrHeiFact +yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact +xOff
NumVertex(index,poly+3).yto = 0 +yOff
NumVertex(index,poly+4).xto = sqrWidFact +xOff
NumVertex(index,poly+4).yto = sqrHeiFact +yOff
NumVertex(index,poly+5).xto = 0 +xOff
NumVertex(index,poly+5).yto = sqrHeiFact +yOff
endfunction
`top right in
function shapeTRI2(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = sqrWidFact/2.0+xOff
NumVertex(index,poly+1).yto = sqrHeiFact/2.0+yOff
NumVertex(index,poly+2).xto = 0 +xOff
NumVertex(index,poly+2).yto = sqrHeiFact +yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact/2.0+xOff
NumVertex(index,poly+3).yto = sqrHeiFact/2.0+yOff
NumVertex(index,poly+4).xto = sqrWidFact +xOff
NumVertex(index,poly+4).yto = sqrHeiFact +yOff
NumVertex(index,poly+5).xto = 0 +xOff
NumVertex(index,poly+5).yto = sqrHeiFact +yOff
endfunction
`bottom right in
function shapeTRI3(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = sqrWidFact +xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = 0 +xOff
NumVertex(index,poly+2).yto = sqrHeiFact +yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact +xOff
NumVertex(index,poly+3).yto = 0 +yOff
NumVertex(index,poly+4).xto = sqrWidFact/2.0+xOff
NumVertex(index,poly+4).yto = sqrHeiFact/2.0+yOff
NumVertex(index,poly+5).xto = 0 +xOff
NumVertex(index,poly+5).yto = sqrHeiFact +yOff
endfunction
`bottom left in
function shapeTRI4(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = sqrWidFact +xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = sqrWidFact/2.0+xOff
NumVertex(index,poly+2).yto = sqrHeiFact/2.0+yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact +xOff
NumVertex(index,poly+3).yto = 0 +yOff
NumVertex(index,poly+4).xto = sqrWidFact +xOff
NumVertex(index,poly+4).yto = sqrHeiFact +yOff
NumVertex(index,poly+5).xto = sqrWidFact/2.0+xOff
NumVertex(index,poly+5).yto = sqrHeiFact/2.0+yOff
endfunction
function shapeVLF(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = sqrWidFact +xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = sqrWidFact +xOff
NumVertex(index,poly+2).yto = sqrHeiFact/2.0+yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact +xOff
NumVertex(index,poly+3).yto = sqrHeiFact/2.0+yOff
NumVertex(index,poly+4).xto = sqrWidFact +xOff
NumVertex(index,poly+4).yto = sqrHeiFact +yOff
NumVertex(index,poly+5).xto = 0 +xOff
NumVertex(index,poly+5).yto = sqrHeiFact +yOff
endfunction
function shapeVRT(index, poly, xOff, yOff)
`triangle 1
NumVertex(index,poly+0).xto = 0 +xOff
NumVertex(index,poly+0).yto = 0 +yOff
NumVertex(index,poly+1).xto = sqrWidFact +xOff
NumVertex(index,poly+1).yto = 0 +yOff
NumVertex(index,poly+2).xto = 0 +xOff
NumVertex(index,poly+2).yto = sqrHeiFact/2.0+yOff
`triangle 2
NumVertex(index,poly+3).xto = sqrWidFact +xOff
NumVertex(index,poly+3).yto = sqrHeiFact +yOff
NumVertex(index,poly+4).xto = 0 +xOff
NumVertex(index,poly+4).yto = sqrHeiFact +yOff
NumVertex(index,poly+5).xto = 0 +xOff
NumVertex(index,poly+5).yto = sqrHeiFact/2.0+yOff
endfunction
number1:
data 0,2,1,0,0
data 0,1,1,0,0,
data 0,0,1,0,0
data 0,0,1,0,0
data 0,1,1,1,0
number2:
data 2,1,1,1,3
data 1,0,0,6,1
data 0,2,1,1,4
data 2,1,7,0,0
data 1,1,1,1,1
number3:
data 1,1,1,1,3
data 0,0,0,6,1
data 0,1,1,1,7
data 0,0,0,6,1
data 1,1,1,1,4
number4:
data 1,0,0,0,1
data 1,0,0,0,1
data 5,1,1,1,1
data 0,0,0,0,1
data 0,0,0,0,1
number5:
data 2,1,1,1,1
data 1,7,0,0,0
data 5,1,1,1,3
data 0,0,0,6,1
data 1,1,1,1,4
number6:
data 2,1,1,1,0
data 1,7,0,0,0
data 1,1,1,1,3
data 1,7,0,6,1
data 5,1,1,1,4
number7:
data 1,1,1,1,1
data 0,0,0,2,4
data 0,0,2,1,0
data 0,2,1,4,0
data 0,1,4,0,0
number8:
data 2,1,1,1,3
data 1,7,0,6,1
data 6,1,1,1,7
data 1,7,0,6,1
data 5,1,1,1,4
number9:
data 2,1,1,1,3
data 1,7,0,6,1
data 5,1,1,1,1
data 0,0,0,6,1
data 0,1,1,1,4
number0:
data 2,1,1,1,3
data 1,0,2,4,1
data 1,0,1,0,1
data 1,2,4,0,1
data 5,1,1,1,4
numberSYM:
data 0,0,0,0,0
data 0,0,1,0,0
data 0,0,0,0,0
data 0,0,1,0,0
data 0,0,0,0,0
`for digit 1 to 11
numberData:
`num, max, min, thresh, dfactor
data 0,10.0, 5.0, 10.0, 1.0 `data for first digit (hundreths of a second)
data 0,10.0, 5.0, 10.0 , 10.0 `data for second digit (tenths of a second)
data 99,10.0, 1.0, 1.0 , 10.0 `data for first colon
numberDataSeconds:
data 0,10.0, 1.0, 1.0 , 10.0 `data for seconds
data 0,10.0, 1.0, 1.0 , 10.0 `data for ten Seconds
data 99,10.0, 1.0, 1.0 , 10.0`data for second colon
data 0,10.0, 1.0, 1.0 , 10.0`data for minutes
data 0,10.0, 1.0, 1.0 , 10.0`data for ten minutes
data 99,10.0, 1.0, 1.0 , 10.0`data for third colon
data 0,10.0, 1.0, 1.0 , 10.0`data for one hour
data 0,10.0, 1.0, 1.0 , 10.0`data for ten hours
[center]K-OS Battlefields
IS
///---///---///---UNDER CONSTRUCTION---\\\---\\\---\\\[center]