Challenge: 
Winner?: 
No
Code Snippet: 
set camera fov 150
set camera range 0.5, 50
set text font "Courier New"
set text size 32
randomize timer()
sync on
sync rate 60
hide mouse


#constant O_MASS 0.1

make memblock 1, 16
write memblock dword 1, 0, 1
write memblock dword 1, 4, 1
write memblock dword 1, 8, 32
write memblock dword 1, 12, 0x2F000000
make image from memblock 1, 1
delete memblock 1
sprite 1, 0, 0, 1
size sprite 1, screen width(), screen height()
set sprite 1, 1, 1
hide sprite 1


text 0,0, "+": text 0,0, "O"
get image 2, 0, 0, 31, 31, 1
cls









set text to bold
print "0"
print "1"
print "2"
print "3"
print "4"
print "5"
print "6"
print "7"
print "8"
print "9"
for i = 0 to 9
   get image i+10, 0, i*31, 31, (i+1)*31, 1
next i
cls


Type Coord3D
   x as float
   y as float
   z as float
EndType
Type Num
   p as Coord3D
   s as Coord3D
   fired as boolean
   val as byte
EndType
#constant FIRE_QUEUE_SIZE 20

dim n(FIRE_QUEUE_SIZE) as Num
Dim FiringQueue()

for i = 1 to FIRE_QUEUE_SIZE
   make object plain i, 4, 4
   scroll object texture i, -0.25, 0.0
   set object texture i, 0, 1
   setupNum(i)
next i







make object triangle 100, 0.5,0,0,   0,0,-10,   -0.5,0,0
position object 100, 0, 15, 40
color object 100, 0xCC0000FF : set object transparency 100, 3
hide object 100



position camera 0, 20, 40
point camera 0, 15, 0


lastFired = timer()
#constant FIRE_DELAY 250

temp = timer()

backdrop off

frameTime# = 1.0
startTime = timer()
do
   frameTime# = (frameTime# * 0.8) + ((timer() - startTime) * 0.2)
   startTime = timer()

   if timer() - lastFired > FIRE_DELAY AND array count(FiringQueue()) > 0
      array index to queue FiringQueue()
      n(FiringQueue()).fired = 1
      exclude object off FiringQueue()
      remove from queue FiringQueue()
      lastFired = timer()
   endif


   for i = 1 to FIRE_QUEUE_SIZE
      if n(i).fired
         inc n(i).s.y, frameTime# * -0.098 * O_MASS
         inc n(i).p.x, n(i).s.x * frameTime# * 0.001
         inc n(i).p.y, n(i).s.y * frameTime# * 0.001
         inc n(i).p.z, n(i).s.z * frameTime# * 0.001

         if n(i).p.z > camera position z()
            setupNum(i)
         else
            position object i, n(i).p.x, n(i).p.y, n(i).p.z
            if n(i).p.z < 15
               a# = 100.0 * n(i).p.z / 15.0
               if a# > 100.0 then a# = 100.0
               set alpha mapping on i, a#
            else
               set alpha mapping on i, 100.0
            endif
         endif
      endif
   next i


   paste image 2, mousex()-7, mousey()-15, 1
   obj = pick object(mousex(), mousey(), 1, FIRE_QUEUE_SIZE)

   if object visible(100)
      hide object 100
   else
      if obj > 0
         if mouseclick() = 1
            if timer() - temp > FIRE_DELAY
               temp = timer()
               show object 100
               lock vertexdata for limb 100, 0, 1
               set vertexdata position 1, get pick vector x(), get pick vector y()+5, get pick vector z()
               unlock vertexdata

               setupNum(obj)
            endif
         endif
      endif
   endif

   paste sprite 1, 0, 0
   sync
loop
end


function setupNum(i)
   n(i).val = rnd(9) + 10
   texture object i, n(i).val

   n(i).p.x = 0.0
   n(i).p.y = 0.0
   n(i).p.z = 0.0

   n(i).s.x = (rndFloat() * 8.0) - 4.0
   n(i).s.y = 20.0 * (1.0 + (rndFloat() * 0.25))
   n(i).s.z = 10.0 * (1.0 + (rndFloat() * 0.25))

   position object i, n(i).p.x, n(i).p.y, n(i).p.z
   point object i, n(i).p.x, n(i).p.y, n(i).p.z + 1

   add to queue FiringQueue() : FiringQueue() = i
   n(i).fired = 0
   exclude object on i

   if rnd(1)
      set object emissive i, 0xFF0000
   else
      set object emissive i, 0x00FF00
   endif
endfunction





function rndFloat()
  f as float
  f = rnd(1048575.0) / 1048575.0
endfunction f