Entry Of Which Is Mine
Use the mouse to guide the lost present through the ice crystals to the place it is going. Hitting part of the level will deduct a point from your health, and losing all health points returns you to the last checkpoint (yellow zig-zag lines). If you pass the level without losing your lives, you win. The game runs okay on my system, but I imagine with the specs some of you have it should run perfectly smooth.
There are four "sections" in the level, and it might be ideal to have a little foreknowledge of each so you don't run head first into death on your first run. Or not. The first part is the piss-easy dawdle along some fairly linear passages. The second, rather short part involves a little precision under pressure. The third part is a high speed avoidance section, where you follow the instructions that appear at the bottom of the screen. The last part echoes the first, but is faster and boasts a less-linear, more fun design, if I do say so myself. These last two parts require you completely avoid the obstacles or lose a life regardless of the health you have remaining. A flawless play lasts about 5 minutes.
Code follows. Please note, all data statements were manually written. Feedback if you will.
// // // // // // // // // //
// 'Tis Christmas time, joy to all! //
// But unto you: buggery befall! //
// I've gone and knocked you off the sleigh, //
// A thousand miles down the way, //
// And now you'll haul your ass through sky, //
// Lest you disappoint and children die! //
// Use the mouse to guide giftly body, //
// Through perils treacherous, and not oddly: //
// Lose your lives and destiny undone! //
// Merry blethering Christmas, everyone. //
// // // // // // // // // //
// MONOCODER/ THOMAS KNOWLES //
// 2007 MINIMAL MEDIA CHRISTMAS CODING CHALLENGE //
// PRESENT FLYING GUIDING, uh, DRAGGING... game. Yeah.//
// Started: 18th Dec 2007; Finished: 6th Jan 2008. //
// // // // // // // // // //
sync on
sync rate 0
set display mode 800, 600, 32
`hide mouse // hide it if you want.
rem display globals
global sw as integer : sw = screen width()
global sh as integer : sh = screen height()
rem setup input data
global mx as integer = 0 : mx = mousex()
global my as integer = 0 : my = mousey()
global mc as boolean = 0
global mh as boolean = 0
rem setup object indexes
global pl_obj as integer = 1
global pltrail_obj as integer = 2
global bgrnd_obj as integer = 6
global fgrnd_obj as integer = 8
global mouse_obj as integer = 10
global level_barrobj as integer = 12
global level_rootobj as integer = 14
global level_noroot as integer = 10
global level_obj as integer = level_rootobj + level_noroot
rem setup level globals
global level_grav as float = 0.001
rem camera globals
global camx as float = 0
global camdefaultspeed as float = 0.18
global camspeed as float = camdefaultspeed
global camevent as boolean = 0
global cameventtime as float = 0
global checkpoint as integer = -1
rem message globals
global messagestring as string = ""
global messageevent as boolean = 0
global messageeventtime as float = 0
rem "flash" sprite globals
global flashevent as boolean = 0
global flashcolor as integer = rgb( 255, 255, 255 )
global flashstrength as float = 0
global flashlength as float = 0
global flashtimeleft as float = 0
REM IMAGES
rem foreground snow
cls 0
ink rgb( 255, 255, 255 ), 0
for n = 1 to 180
r = 2 + rnd( 4 )
x = rnd( sw )
y = rnd( sh )
filledcircle( x, y, r )
rem ensure seamless texture by completing snow drawn on edges
if x - r < 0 or y - r < 0 or x + r > sw or y + r > sh
ox = x
oy = y
if x - r < 0 or x + r > sw
if x - r < 0
x = sw + x
else
if x + r > sw then x = x - sw
endif
filledcircle( x, y, r )
endif
x = ox
y = oy
if y - r < 0 or y + r > sh
if y - r < 0
y = sh + y
else
if y + r > sh then y = y - sh
endif
filledcircle( x, y, r )
endif
x = ox
y = oy
if ( x - r < 0 or x + r > sw ) and ( y - r < 0 or y + r > sh )
if x - r < 0
x = sw + x
else
if x + r > sw then x = x - sw
endif
if y - r < 0
y = sh + y
else
if y + r > sh then y = y - sh
endif
filledcircle( x, y, r )
endif
endif
next n
get image 1, 0, 0, sw, sh, 0
rem mouse
cls 0
ink rgb( 255, 255, 255 ), 0 : filledcircle( 256, 256, 256 )
ink 0, 0 : filledcircle( 256, 256, 192 )
get image 2, 0, 0, 512, 512, 0
rem obstacle textures
for n = 0 to level_noroot
cls rgb( rnd( 24 ), 96 + rnd( 128 ), 192 + rnd( 63 ) )
ink rgb( rnd( 24 ), 96 + rnd( 128 ), 192 + rnd( 63 ) ), 0
lock pixels
for o = 1 to 100
dot rnd( 31 ), rnd( 31 )
next o
unlock pixels
get image n + 3, 0, 0, 31, 31
next n
rem checkpoint texture
cls 0
ink rgb( 255, 255, 0 ), 0
for y = 1 to 128
x = 32 + ( cos( ( 360.0 / 24.0 ) * y ) * 16 )
line x - 16, y, x + 16, y
next y
get image level_noroot + 4, 0, 0, 64, 128
rem top/bottom barriers
cls 0
ink rgb( 0, 96, 0 ), 0
for x = 0 to 512 step 2
y = 32 + ( sin( ( 360.0 / 12.0 ) * x ) * 16 )
line x, y - 16, x, y + 16
line x + 1, 0, x + 1, 64
next y
get image level_noroot + 5, 0, 0, 512, 64
rem flash image
cls rgb( 255, 255, 255 )
get image level_noroot + 6, 0, 0, 1, 1
`sync : sync
`wait 1000
REM ENVIRONMENT/CAMERA
backdrop on
color backdrop rgb( 8, 0, 24 )
autocam off
set camera fov 77.4
set camera range 0.01, 140
set text font "arial"
set text to bold
set text size 30
REM FLASH SPRITE
sprite 1, 0, 0, level_noroot + 6
size sprite 1, sw, sh
set sprite alpha 1, 0
hide sprite 1
rem LEVEL
type level_type
startx as integer
starty as integer
x as float
y as float
xv as float
yv as float
ax as float
ay as float
az as float
spindelay as float
spinangle as float
instantkill as boolean
cameventtriggered as boolean
cameventspeed as float
cameventtime as float
messagestring as string
messageeventtriggered as boolean
messageeventtime as float
exclude as boolean
class as integer
endtype
dim level( -1 ) as level_type
rem make temporary roots
for n = level_rootobj to level_rootobj + level_noroot
make_object_level( n, n - level_rootobj + 3 )
next n
level_create()
rem "delete" temporary roots
for n = level_rootobj to level_rootobj + level_noroot
hide object n
exclude object on n
next n
`make_object_level( 15 )
`make_object_level( 16 )
`position object 14, -7 * 4, -5 * 4, 30
`position object 15, 0 * 4, 0 * 4, 30
`position object 16, 7 * 4, 5 * 4, 30
REM LEVEL BARRIERS
for n = 0 to 1
obj = level_barrobj + n
make object plain obj, 68, 2.8
texture object obj, level_noroot + 5
set object transparency obj, 0
set object light obj, 0
if n = 0
position object obj, 0, -23, 30.4
xrotate object obj, 15
else
position object obj, 0, 23, 30.4
xrotate object obj, 345
endif
next n
REM PLAYER
global pl_x as float = 0
global pl_y as float = 0
global pl_z as float = 30.0
global pl_xv as float = 0
global pl_yv as float = 0
global pl_life as integer = 3
global pl_hitdelay as float = 0
global pl_chances as integer = 5
load object "gift01.x", pl_obj
scale object pl_obj, 2, 2, 2
position object pl_obj, pl_x, pl_y, pl_z
make object collision box pl_obj, -2, -2, -2, 2, 2, 2, 0
`show object bounds pl_obj, 1
REM FOREGROUND SNOW
for n = 0 to 0`1
make object plain fgrnd_obj + n, 6.4, 4.8 `0.8, 0.6
position object fgrnd_obj + n, 0, 0, 0.720 + ( n / 50.0 ) `0.360 + ( n / 100.0 )
xrotate object fgrnd_obj + n, 358
set object transparency fgrnd_obj + n, 1
texture object fgrnd_obj + n, 1
scale object texture fgrnd_obj + n, ( n + 1 ) * 4.0, ( n + 1 ) * 4.0
set object light fgrnd_obj + n, 0
set object ambient fgrnd_obj + n, 0
ghost object on fgrnd_obj + n
`exclude object on fgrnd_obj + n
next n
REM MOUSE
global m_hold as boolean = 0
global m_holdx as float = 0
global m_holdy as float = 0
global m_radius as float = 0
global m_x as float = 0
global m_y as float = 0
for n = 0 to 0`3
make object plain mouse_obj + n, 1, 1
set object transparency mouse_obj + n, 1
texture object mouse_obj + n, 2
set object light mouse_obj + n, 0
set object ambient mouse_obj + n, 0
ghost object on mouse_obj + n
next n
rem prepare timing
init_time()
do
rem update input/time
update_time()
mx = mousex()
my = mousey()
mh = mc
mc = ( mouseclick() > 0 )
rem control mouse
if mc = 1
if mh = 0
m_hold = 1
m_holdx = mx
m_holdy = my
endif
m_x = mx `m_holdx
m_y = my `m_holdy
`m_radius = sqrt( ( ( mx - m_holdx ) ^ 2.0 ) + ( ( my - m_holdy ) ^ 2.0 ) ) / 2.0
`if m_radius < ( 200.0 / 18.0 ) then m_radius = ( 200.0 / 18.0 )
`if m_radius > ( 1200.0 / 18.0 ) then m_radius = ( 1200.0 / 18.0 )
m_radius = cap( m_radius + ( 5.0 * gdtime ), 1, 400.0 / 18.0, 1, 1200.0 / 18.0 )
else
if mh = 1
m_hold = 0
m_radius = 0
endif
m_x = mx
m_y = my
endif
rem update mouse object
if m_hold = 0
scale object mouse_obj, 200, 200, 100
else
scale object mouse_obj, m_radius * 18.0, m_radius * 18.0, 100
endif
position object mouse_obj, m_xpos(), m_ypos(), 30
REM CONTROL PLAYER
rem pull towards mouse if held
remstart
if m_hold = 1
dist = 10 - ( sqrt( ( ( pl_x - m_xpos() ) ^ 2.0 ) + ( ( pl_y - m_ypos() ) ^ 2.0 ) ) / 2 )
if dist > 0
ang = 270 - atanfull( pl_x - m_xpos(), pl_y - m_ypos() )
pl_xv = pl_xv + ( cos( ang ) * ( m_radius * ( 0.001 * gdtime ) ) )
pl_yv = pl_yv + ( sin( ang ) * ( m_radius * ( 0.001 * gdtime ) ) )
endif
endif
remend
if m_hold = 1
ang# = wrapvalue( 270 - atanfull( pl_x - m_xpos(), pl_y - m_ypos() ) )
dist# = sqrt( ( ( m_xpos() - pl_x ) ^ 2 ) + ( ( m_ypos() - pl_y ) ^ 2 ) )
if dist# =< 300.0
pull# = ( 0.04 / 300.0 ) * dist# * ( ( m_radius ^ 1.6 ) / 30.0 )
else
pull# = 0.0
endif
if pull# > 0
pl_xv = cap( pl_xv + ( cos( ang# ) * ( pull# * gdtime ) ), 1, -0.9, 1, 0.9 )
pl_yv = cap( pl_yv + ( sin( ang# ) * ( pull# * gdtime ) ), 1, -0.9, 1, 0.9 )
if dist# => 1.0 and dist# < ( m_radius / 5.0 )
`pl_xv = pl_xv / ( divtomul( 1.0002 ) * gdtime )
`pl_yv = pl_yv / ( divtomul( 1.0002 ) * gdtime )
`pl_xv = pl_xv / ( 1.02 * gdtime )
`pl_yv = pl_yv / ( 1.02 * gdtime )
pl_xv = pl_xv - ( pl_xv * ( 0.04 * gdtime ) )
pl_yv = pl_yv - ( pl_yv * ( 0.04 * gdtime ) )
endif
endif
endif
rem apply gravity
dec pl_yv, level_grav * gdtime
rem update position
inc pl_x, pl_xv
inc pl_y, pl_yv
pl_x = cap( pl_x, 1, -32, 1, 32 )
pl_y = cap( pl_y, 1, -20, 1, 20 )
`if spacekey() = 1 then pl_x = 0 : pl_y = 0 : pl_xv = 0 : pl_yv = 0
REM CONTROL LEVEL
for n = 0 to array count( level( 0 ) )
level( n ).x = level( n ).x - ( camspeed * gdtime )
if level( n ).x => 35
level( n ).spindelay = 0 : level( n ).spinangle = 0
level( n ).exclude = 1
if level( n ).class = 7 and level( n ).x < 50 then level( n ).exclude = 0
else
if level( n ).x => -40 then level( n ).exclude = 0 else level( n ).exclude = 1
endif
if level( n ).exclude = 0
if level( n ).class < 4
level( n ).spindelay = level( n ).spindelay - gdtime
if level( n ).spindelay =< 0
level( n ).spindelay = 60 - level( n ).spindelay
level( n ).spinangle = 8
endif
if level( n ).spinangle > 0
level( n ).ay = level( n ).ay + level( n ).spinangle
level( n ).spinangle = level( n ).spinangle - ( 0.3 * gdtime )
if level( n ).spinangle < 0 then level( n ).spinangle = 0
endif
endif
if level( n ).class = 4
if pl_x => level( n ).x
if checkpoint = -1
checkpoint = n
else
if level( checkpoint ).x < level( n ).x
checkpoint = n
if level( n ).startx > 24 then flash( 1200, 48, 255, 255, 0 ) //flash only if beyond the first section
endif
endif
endif
endif
if level( n ).class = 5
if level( n ).cameventtriggered = 0 and level( n ).x =< -28
level( n ).cameventtriggered = 1
camevent = 1
cameventtime = level( n ).cameventtime
camspeed = level( n ).cameventspeed
endif
endif
if level( n ).class = 6
if level( n ).messageeventtriggered = 0 and level( n ).x =< -28
level( n ).messageeventtriggered = 1
messagestring = level( n ).messagestring
messageevent = 1
messageeventtime = level( n ).messageeventtime
endif
endif
if level( n ).class = 7
if level( n ).x < 0 then level( n ).x = 0
dist# = sqrt( ( ( level( n ).x - pl_x ) ^ 2 ) + ( ( level( n ).y - pl_y ) ^ 2 ) )
if dist# =< 8 then game_end()
endif
endif
next n
rem check for player hit
hit = -1
for n = 0 to array count( level( 0 ) )
if level( n ).exclude = 0
if level( n ).class = 1
if object collision( pl_obj, level_obj + n ) <> 0
pl_xv = - get object collision x() / 1.2
pl_yv = - get object collision y() / 1.2
pl_x = pl_x + ( pl_xv * 1.2 ) - ( camspeed * ( pl_x < level( n ).x ) * 2.0 )
pl_y = pl_y + ( pl_yv * 1.2 )
hit = n
endif
endif
endif
next n
if hit > -1` and controlkey() = 0
if pl_hitdelay = 0 or pl_x < -31 or level( hit ).instantkill = 1
dec pl_life
if pl_life = 0 or pl_x < -31 or level( hit ).instantkill = 1
flash( 1000, 223, 255, 255, 255 )
pl_die()
else
flash( 500, 96, 128, 24, 0 )
pl_hitdelay = 1000
endif
endif
endif
if pl_hitdelay > 0
dec pl_hitdelay, dtime
if pl_hitdelay < 0 then pl_hitdelay = 0
endif
rem update player object
position object pl_obj, pl_x, pl_y, pl_z
rem update level objects
for n = 0 to array count( level( 0 ) )
obj = level_obj + n
if level( n ).class <> 5
if level( n ).exclude = 1 then exclude object on obj else exclude object off obj
if level( n ).class = 1
position object obj, level( n ).x, level( n ).y, object position z( obj )
rotate object obj, level( n ).ax, level( n ).ay, level( n ).az
endif
if level( n ).class = 4
position object obj, level( n ).x, 0, object position z( obj )
scroll object texture obj, - 0.04 * gdtime, 0
endif
if level( n ).class = 7
position object obj, level( n ).x, level( n ).y, object position z( obj )
endif
endif
next n
rem update foreground snow and level barriers
for n = 0 to 1
if n = 0 then scroll object texture fgrnd_obj + n, ( camspeed * 0.018 ) * gdtime, -0.007 * gdtime
scroll object texture level_barrobj + n, ( camspeed * 0.036 ) * gdtime, 0
next n
rem control camera
camx = camx + ( camspeed * gdtime )
if camevent = 1
dec cameventtime, dtime
if cameventtime =< 0
camspeed = camdefaultspeed
camevent = 0
endif
endif
rem control messages
if messageevent = 1
dec messageeventtime, dtime
if messageeventtime =< 0
messageevent = 0
endif
endif
rem control flash sprite
if flashevent = 1
flashtimeleft = flashtimeleft - dtime
if flashtimeleft > 0
set sprite alpha 1, ( flashstrength / flashlength ) * flashtimeleft
else
flashevent = 0
endif
paste sprite 1, 0, 0
endif
lock pixels
rem health
temp = cos( time / 4.0 ) * 127
a = 128 - temp
b = 128 + temp
ink rgb( a, a, a ), 0 : box 0, 583, 130, 600
ink rgb( b, b, b ), 0 : box 1, 584, 129, 599
if pl_life <> 0
ink rgb( 255, 0, 0 ), 0 : box 2, 585, 44, 598
if pl_life <> 1
ink rgb( 255, 128, 0 ), 0 : box 45, 585, 86, 598
if pl_life = 3 then ink rgb( 0, 255, 0 ), 0 : box 87, 585, 128, 598
endif
endif
rem life
ink rgb( 223, 255, 255 ), 0
for n = 1 to pl_chances
filledcircle( 10 + ( ( n - 1 ) * 18 ), 572, 8 )
next n
unlock pixels
rem stats
set cursor 0, 0
ink rgb( 255, 255, 255 ), 0
print screen fps()
if camevent = 1
if cameventtime < 1000 then ink rgb( 255, 128, 0 ), 0
center text 400, 538, str$( 1 + int( cameventtime / 1000 ) )` + ":" + right$( str$( int( cameventtime ) ), len( str$( int( cameventtime ) ) ) - 3 )
endif
if messageevent = 1 then ink rgb( 223, 255, 255 ), 0 : center text 400, 568, messagestring
sync
loop
function m_xpos()
local null as float
null = ( m_x - ( sw / 2 ) ) / 12.5
endfunction null
function m_ypos()
local null as float
null = 0 - ( m_y - ( sh / 2 ) ) / 12.5
endfunction null
function pl_die()
rem reset neccessary variables
dec pl_chances, 1
if pl_chances = 0 then game_over()
pl_x = 0
pl_y = 0
pl_xv = 0
pl_yv = 0
camspeed = 0
camevent = 1
cameventtime = 1000
pl_life = 3
rem reset level
x = level( checkpoint ).startx
for n = 0 to array count( level( 0 ) )
level( n ).x = level( n ).startx - x
level( n ).y = level( n ).starty
if level( n ).class = 5
if level( n ).startx => x - 28 then level( n ).cameventtriggered = 0
endif
if level( n ).class = 6
if level( n ).startx => x then level( n ).messageeventtriggered = 0
endif
next n
endfunction
function game_end()
flash( 225, 160, 255, 96, 255 )
ink 0, 0
temp = 4000
repeat
update_time()
temp = temp - dtime
paste sprite 1, 0, 0
center text sw / 2, ( sh / 2 ) - 15, "WIN!"
sync
until temp =< 0
end
endfunction
function game_over()
flash( 225, 223, 0, 0, 0 )
ink rgb( 255, 255, 255 ), 0
temp = 4000
repeat
update_time()
temp = temp - dtime
paste sprite 1, 0, 0
center text sw / 2, ( sh / 2 ) - 15, "GAME OVER!"
sync
until temp =< 0
end
endfunction
function flash( time as float, strength as integer, r as integer, g as integer, b as integer )
flashevent = 1
flashcolor = rgb( r, g, b )
flashstrength = cap( strength, 1, 0, 1, 255 )
flashlength = time
flashtimeleft = time
set sprite diffuse 1, r, g, b
set sprite alpha 1, strength
endfunction
function divtomul( divisor as float )
local null as float
null = 1.0 / divisor
endfunction null
function cap( value as float, lf as boolean, l as float, uf as float, u as float )
if lf = 1
if value < l then value = l
endif
if uf = 1
if value > u then value = u
endif
endfunction value
function FilledCircle( CX as integer, CY as integer, R as integer )
local x as integer
local y as integer
local i as integer
local s as integer
` Precalculate the square of the radius - this is the hypotenuse
i=R*R
` Calculate the size of the central square
s=R*0.70710678 : ` this number is sin(45)
` Draw it
box CX-s, CY-s, CX+s+1, CY+s+1
s=s+1
` Loop through the bit we have not yet drawn
for y=s to R
x=sqrt( i-(y*y) )
` Draw top and bottom
box CX-x, CY-y, CX+x+1, CY-y+1
box CX-x, CY+y, CX+x+1, CY+y+1
` Draw left and right
box CX-y, CY-x, CX-y+1, CY+x+1
box CX+y, CY-x, CX+y+1, CY+x+1
next y
endfunction
function init_time()
global starttime as float = 0 rem initialise timer (just before loop)
global startpausetime as float = 0 rem the time for this pause
global paused as boolean = 0 rem pause flag
global pausetime as float = 0 rem current pause duration
global totalpausetime as float = 0 rem the total time for all pauses
global time as float = 0 rem current time
global dtime as float = 0 rem actual change in time
global gdtime as float = 0 rem game applicable dtime
global otime as float = 0 rem time on previous loop
starttime = timer()
endfunction
function update_time()
if paused = 0
time = ( timer() - starttime - pausetime - totalpausetime )
dtime = time - otime
gdtime = dtime / 15.0
otime = time
else
pausetime = timer() - startpausetime
endif
endfunction
function pause_time( flag as boolean )
if flag = 0 and paused = 1
paused = 0
else
if paused = 0
paused = 1
totalpausetime = totalpausetime + pausetime
startpausetime = timer()
endif
endif
endfunction
function level_create()
rem move data pointer to level layout list
restore level_layout
rem variables
local obj as integer
local index as integer
local readx as integer
local ready as integer
local readspeed as integer
local readrowno as integer
local readcolno as integer
local readinstantkill as boolean
local readspawntype as boolean
local readspawnareax1 as integer
local readspawnareax2 as integer
local readspawnmaxdist as integer
local readspawnmindist as integer
local readrespawnable as integer
local readcameventspeed as float
local readcameventtime as float
local readmessagestring as string
obj = level_obj - 1
do
rem read object type
read temp
rem create object
if temp <> 0
rem general setup
read readx : readx = readx * 4.0
if temp < 4
read ready : ready = ready * 4.0
read readrowno
read readcolno
if temp = 1 then read readinstantkill
else
ready = 0
readrowno = 1
readcolno = 1
if temp = 7 then read ready
endif
for x = 1 to readrowno
dec ready, 4 * readcolno
for y = 1 to readcolno
index = level_new_index()
inc obj
level( index ).startx = readx
level( index ).starty = ready
level( index ).x = readx
level( index ).y = ready
level( index ).class = temp
rem stationary obstacle
if temp = 1
rootobj = level_rootobj + rnd( level_noroot - 1 )
instance object obj, rootobj
position object obj, level( index ).x, level( index ).y, 30.0
level( index ).instantkill = readinstantkill
`texture object obj, rootobj - level_rootobj + 3
`make object collision box obj, -2.4, -2.4, -2.4, 2.4, 2.4, 2.4, 0
`show object bounds obj, 1
endif
rem falling obstacle
if temp = 2
endif
rem flying obstacle
if temp = 3
endif
rem checkpoint
if temp = 4
make object plain obj, 8.08, 52
position object obj, level( index ).x, 0, 30
`ghost object on obj
texture object obj, level_noroot + 4
scale object texture obj, 2, 1
set object transparency obj, 1
set object light obj, 0
endif
rem scroll start/stopper
if temp = 5
read readcameventspeed
read readcameventtime
level( index ).cameventspeed = readcameventspeed
level( index ).cameventtime = readcameventtime
endif
rem message
if temp = 6
read readmessagestring
read readmessageeventtime
level( index ).messagestring = readmessagestring
level( index ).messageeventtime = readmessageeventtime
endif
rem end
if temp = 7
make object sphere obj, 16, 64, 64
color object obj, rgb( 255, 0, 255 )
position object obj, level( index ).x, level( index ).y, 30
ghost object on obj
endif
inc ready, 4
next y
inc readx, 4
next x
else
rem end of level
exit
endif
loop
endfunction
function level_new_index()
array insert at bottom level( 0 )
index = array count( level( 0 ) )
endfunction index
function make_object_level( obj as integer, texture as integer )
make object sphere obj, 4, 24, 24 `36, 36
null = make vector3( v )
cosang# = 0
lock vertexdata for limb obj, 0
for n = 1 to get vertexdata vertex count()
x# = get vertexdata position x( n )
y# = get vertexdata position y( n )
z# = get vertexdata position z( n )
set vector3 v, x#, y#, z#
scale vector3 v, v, 0.5 + ( cos( cosang# ) * ( rnd( 100 ) / 100.0 ) ) : cosang# = cosang# + 30
set vertexdata position n, x vector3( v ), y vector3( v ), z vector3( v )
next n
unlock vertexdata
null = delete vector3( v )
texture object obj, texture
set object light obj, 0
make object collision box obj, -2.5, -2.5, -2.5, 2.5, 2.5, 2.5, 0
`show object bounds obj, 1
`position object obj, 0, 0, 30.0
endfunction
level_layout:
// first number is object type. spawntype: 0-area(x1,x2), 1-distance(dist).
// screen size: x: -7 to 7 (15col); y: 6 to -4 (11row)
// screen changer: slows once when leave screen to the left, then start again when timer counts down.
// 0 - no more objects in level.
// 1 - stationary obstacle ( x, y, rowno, colno, instantkill ) - black/blue OR grey/lighter blue
// 2 - falling obstacle ( x, y, rowno, colno, speed, spawntype, spawndelay, spawnareax1, spawnareax2, respawnable )
// ( x, y, rowno, colno, speed, spawntype, spawndelay, spawnmaxdist, spawnmindist, respawnable )
// 3 - flying obstacle ( x, y, rowno, colno, speed, life, spawntype, spawndelay, spawnareax1, spawnareax2, respawnable )
// ( x, y, rowno, colno, speed, life, spawntype, spawndelay, spawnmaxdist, spawnmindist, respawnable )
// 4 - checkpoint ( x ) - yellow
// 5 - scroll stop/starter ( x, speed, time ) - green
// 6 - message ( x, message, time ) - turquoise
// 7 - end ( x, y ) - green
// stationary obstacles
rem part1
data 1, 14, 6, 1, 3, 0
data 1, 14, -2, 1, 3, 0
data 1, 15, -2, 7, 1, 0
data 1, 15, 4, 7, 1, 0
data 1, 22, 6, 1, 3, 0
data 1, 22, -2, 1, 3, 0
data 1, 23, -4, 12, 1, 0
data 1, 23, 6, 7, 1, 0
data 1, 30, 6, 1, 3, 0
data 1, 31, 4, 1, 1, 0
data 1, 32, 4, 1, 3, 0
data 1, 33, 2, 2, 1, 0
data 1, 34, 1, 2, 1, 0
data 1, 36, 6, 2, 6, 0
data 1, 34, -3, 2, 1, 0
data 1, 36, -3, 2, 2, 0
rem part2
data 1, 43, 6, 2, 4, 0
data 1, 43, -1, 2, 4, 0
data 1, 45, 3, 4, 1, 0
data 1, 54, 3, 9, 1, 0
data 1, 68, 3, 7, 1, 0
data 1, 48, 2, 3, 1, 0
data 1, 52, 2, 3, 1, 0
data 1, 62, 2, 3, 1, 0
data 1, 66, 2, 3, 1, 0
data 1, 50, 1, 3, 1, 0
data 1, 64, 1, 1, 1, 0
data 1, 66, 1, 1, 1, 0
data 1, 78, 1, 3, 1, 0
data 1, 57, 0, 3, 1, 0
data 1, 64, 0, 3, 1, 0
data 1, 76, 0, 3, 1, 0
data 1, 45, -1, 2, 1, 0
data 1, 56, -1, 2, 1, 0
data 1, 59, -1, 2, 1, 0
data 1, 70, -1, 7, 1, 0
data 1, 46, -2, 3, 1, 0
data 1, 54, -2, 3, 1, 0
data 1, 60, -2, 2, 1, 0
data 1, 68, -2, 3, 1, 0
data 1, 48, -3, 7, 1, 0
data 1, 61, -3, 8, 1, 0
data 1, 74, 4, 3, 1, 0
data 1, 76, 5, 5, 1, 0
data 1, 81, 6, 2, 2, 0
data 1, 81, 1, 2, 6, 0
rem part3
data 1, 88, 6, 2, 6, 0
data 1, 88, -3, 2, 2, 0
data 1, 90, 1, 2, 1, 0
data 1, 90, -3, 2, 1, 0
data 1, 92, 6, 2, 6, 0
data 1, 92, -3, 2, 2, 0
rem part4
data 1, 99, 6, 2, 3, 0
data 1, 99, 0, 2, 5, 0
data 1, 101, 4, 4, 1, 0
data 1, 111, 4, 3, 1, 0
data 1, 104, 3, 2, 1, 0
data 1, 110, 3, 2, 1, 0
data 1, 105, 2, 2, 1, 0
data 1, 109, 2, 2, 1, 0
data 1, 106, 1, 4, 1, 0
data 1, 101, 0, 2, 1, 0
data 1, 113, 0, 1, 1, 0
data 1, 102, -1, 2, 1, 0
data 1, 112, -1, 2, 1, 0
data 1, 103, -2, 2, 1, 0
data 1, 111, -2, 2, 1, 0
data 1, 104, -3, 8, 1, 0
data 1, 114, 6, 2, 3, 0
data 1, 114, 0, 2, 5, 0
rem part5
data 1, 121, 6, 2, 2, 0
data 1, 121, 1, 2, 6, 0
data 1, 123, 6, 6, 1, 0
data 1, 129, 6, 1, 2, 0
data 1, 123, 1, 2, 1, 0
data 1, 124, 2, 3, 1, 0
data 1, 126, 3, 1, 1, 0
data 1, 123, -3, 1, 1, 0
data 1, 123, -4, 9, 1, 0
data 1, 127, -1, 3, 1, 0
data 1, 129, 0, 1, 1, 0
data 1, 130, 6, 2, 8, 0
rem part6
data 1, 137, 6, 2, 3, 0
data 1, 137, -1, 2, 4, 0
data 1, 141, 6, 2, 7, 0
data 1, 145, 2, 2, 7, 0
data 1, 149, 6, 2, 8, 0
data 1, 153, 3, 2, 8, 0
data 1, 157, 6, 2, 9, 0
data 1, 161, 6, 4, 1, 0
data 1, 162, 5, 3, 1, 0
data 1, 163, 4, 2, 1, 0
data 1, 164, 3, 1, 1, 0
data 1, 164, -1, 1, 1, 0
data 1, 163, -2, 2, 1, 0
data 1, 162, -3, 3, 1, 0
data 1, 161, -4, 4, 1, 0
rem part7
data 1, 165, 6, 2, 4, 0
data 1, 165, -1, 2, 4, 0
data 1, 167, -1, 2, 1, 0
data 1, 169, -1, 1, 4, 0
data 1, 167, 3, 3, 1, 0
data 1, 169, 4, 2, 1, 0
data 1, 170, 5, 2, 1, 0
data 1, 171, 6, 2, 1, 0
data 1, 175, 6, 2, 4, 0
data 1, 180, 6, 2, 4, 0
data 1, 185, 6, 2, 4, 0
data 1, 175, -3, 2, 2, 0
data 1, 180, -3, 2, 2, 0
data 1, 185, -3, 2, 2, 0
data 1, 175, 2, 1, 1, 0
data 1, 185, 2, 1, 1, 0
data 1, 180, -2, 1, 1, 0
data 1, 173, 0, 1, 1, 0
data 1, 178, 0, 1, 1, 0
data 1, 183, 0, 1, 1, 0
data 1, 188, 0, 1, 1, 0
data 1, 177, -1, 2, 1, 0
data 1, 182, 1, 2, 1, 0
data 1, 187, -1, 2, 1, 0
data 1, 191, 6, 1, 2, 0
data 1, 191, -3, 1, 2, 0
data 1, 191, 4, 3, 1, 0
data 1, 191, -2, 3, 1, 0
data 1, 193, 3, 3, 1, 0
data 1, 193, -1, 3, 1, 0
data 1, 195, 4, 2, 1, 0
data 1, 195, -2, 2, 1, 0
data 1, 196, 5, 3, 1, 0
data 1, 196, -3, 3, 1, 0
data 1, 198, 4, 2, 1, 0
data 1, 198, -2, 2, 1, 0
data 1, 199, 3, 3, 1, 0
data 1, 199, -1, 3, 1, 0
data 1, 201, 4, 3, 1, 0
data 1, 201, -2, 3, 1, 0
data 1, 203, 5, 4, 1, 0
data 1, 203, -3, 4, 1, 0
data 1, 203, 6, 12, 1, 0
data 1, 203, -4, 12, 1, 0
data 1, 204, 1, 3, 1, 0
data 1, 207, 2, 2, 3, 0
data 1, 209, 3, 3, 5, 0
data 1, 212, 1, 1, 1, 0
data 1, 215, 6, 2, 4, 0
data 1, 215, -1, 2, 4, 0
rem part8
data 1, 222, 6, 2, 4, 0
data 1, 222, -1, 2, 4, 0
data 1, 224, 3, 3, 1, 0
data 1, 224, -1, 7, 1, 0
data 1, 227, 5, 1, 3, 0
data 1, 227, 6, 14, 1, 0
data 1, 231, 3, 2, 1, 0
data 1, 231, 2, 1, 6, 0
data 1, 231, -4, 10, 1, 0
data 1, 235, -1, 2, 1, 0
data 1, 236, 5, 1, 6, 0
data 1, 240, 5, 1, 2, 0
data 1, 240, -1, 1, 3, 0
data 1, 240, 3, 6, 1, 0
data 1, 240, 0, 6, 1, 0
data 1, 245, 5, 1, 2, 0
data 1, 245, -1, 1, 3, 0
data 1, 245, 6, 12, 1, 0
data 1, 245, -4, 42, 1, 0
data 1, 249, 4, 8, 1, 0
data 1, 249, 2, 8, 1, 0
data 1, 249, 0, 8, 1, 0
data 1, 249, -2, 10, 1, 0
data 1, 249, 3, 1, 1, 0
data 1, 249, -1, 1, 1, 0
data 1, 256, 5, 1, 1, 0
data 1, 256, 1, 1, 1, 0
data 1, 258, 5, 1, 7, 0
data 1, 258, 6, 29, 1, 0
data 1, 259, 3, 1, 1, 0
data 1, 259, -1, 1, 1, 0
data 1, 262, 3, 1, 1, 0
data 1, 262, -1, 1, 1, 0
data 1, 264, 4, 1, 1, 0
data 1, 264, 1, 1, 3, 0
data 1, 264, -3, 1, 1, 0
data 1, 266, 3, 1, 1, 0
data 1, 266, -1, 1, 1, 0
data 1, 269, 3, 3, 1, 0
data 1, 269, -1, 1, 1, 0
data 1, 270, 2, 1, 6, 0
data 1, 276, 4, 6, 2, 0
data 1, 281, 2, 1, 6, 0
data 1, 285, 5, 1, 2, 0
data 1, 285, -2, 1, 2, 0
data 1, 285, 3, 11, 1, 0
data 1, 285, -1, 11, 1, 0
data 1, 296, 6, 2, 4, 0
data 1, 296, -1, 2, 4, 0
data 1, 288, 6, 1, 2, 0
data 1, 288, -3, 1, 2, 0
data 1, 290, 6, 2, 2, 0
data 1, 290, -3, 2, 2, 0
data 1, 293, 6, 2, 2, 0
data 1, 293, -3, 2, 2, 0
data 1, 295, 5, 1, 1, 0
data 1, 295, -3, 1, 1, 0
rem part9
data 1, 303, 6, 2, 4, 0
data 1, 303, 0, 2, 5, 0
data 1, 305, 5, 40, 1, 0
data 1, 305, -3, 49, 1, 0
data 1, 305, 4, 18, 1, 0
data 1, 305, 3, 14, 1, 0
data 1, 311, 2, 4, 1, 0
data 1, 305, 0, 2, 1, 0
data 1, 305, -1, 6, 1, 0
data 1, 305, -2, 15, 1, 0
data 1, 315, -1, 5, 1, 0
data 1, 319, 0, 1, 1, 0
data 1, 322, 1, 5, 1, 0
data 1, 322, 0, 9, 1, 0
data 1, 323, -1, 12, 1, 0
data 1, 327, 4, 19, 1, 0
data 1, 331, 3, 16, 1, 0
data 1, 335, 2, 4, 1, 0
data 1, 339, -1, 6, 1, 0
data 1, 338, -2, 8, 1, 0
data 1, 346, 2, 2, 1, 0
data 1, 347, 1, 2, 1, 0
data 1, 348, 0, 3, 1, 0
data 1, 350, 1, 2, 1, 0
data 1, 351, 2, 2, 1, 0
data 1, 352, 3, 2, 1, 0
data 1, 353, 4, 2, 1, 0
data 1, 354, 5, 8, 1, 0
data 1, 361, 4, 2, 1, 0
data 1, 362, 3, 2, 1, 0
data 1, 363, 2, 4, 1, 0
data 1, 353, -2, 2, 1, 0
data 1, 354, -1, 2, 1, 0
data 1, 355, 0, 2, 1, 0
data 1, 356, 1, 4, 1, 0
data 1, 357, 2, 2, 1, 0
data 1, 359, 0, 2, 1, 0
data 1, 360, -1, 2, 1, 0
data 1, 361, -2, 2, 1, 0
data 1, 362, -3, 4, 1, 0
data 1, 365, -2, 2, 1, 0
data 1, 366, 1, 3, 1, 0
data 1, 366, -1, 3, 1, 0
data 1, 368, 2, 2, 1, 0
data 1, 368, -2, 2, 1, 0
data 1, 369, 3, 1, 1, 0
data 1, 369, -3, 1, 1, 0
data 1, 370, 6, 2, 4, 0
data 1, 370, -3, 2, 2, 0
data 1, 371, 0, 2, 1, 0
rem part10
data 1, 377, 6, 2, 7, 0
data 1, 377, -3, 8, 2, 0
data 1, 379, 6, 6, 1, 0
data 1, 382, 5, 1, 2, 0
data 1, 380, 4, 1, 2, 0
data 1, 380, 2, 4, 1, 0
data 1, 379, 0, 4, 1, 0
data 1, 384, 4, 1, 7, 0
data 1, 389, 6, 2, 7, 0
data 1, 389, -3, 16, 2, 0
data 1, 391, 0, 3, 1, 0
data 1, 391, 6, 12, 1, 0
data 1, 396, 5, 2, 2, 0
data 1, 403, 6, 2, 7, 0
data 1, 400, 0, 3, 1, 0
data 1, 393, 4, 1, 3, 0
data 1, 400, 4, 1, 3, 0
data 1, 394, 2, 6, 1, 0
data 1, 396, 1, 2, 4, 0
data 1, 408, 6, 16, 2, 0
data 1, 408, 2, 2, 7, 0
data 1, 410, 2, 3, 1, 0
data 1, 410, -4, 12, 1, 0
data 1, 412, 0, 8, 1, 0
data 1, 412, -1, 1, 2, 0
data 1, 419, -1, 1, 2, 0
data 1, 419, 2, 5, 1, 0
data 1, 422, 1, 2, 6, 0
data 1, 415, 4, 2, 4, 0
data 1, 415, -2, 2, 2, 0
rem part11
data 1, 480, 0, 11, 5, 1
data 1, 540, 6, 11, 5, 1
data 1, 600, 0, 11, 5, 1
data 1, 660, 6, 11, 5, 1
data 1, 720, 0, 11, 5, 1
data 1, 780, 3, 11, 6, 1
data 1, 840, 6, 11, 3, 1
data 1, 840, -2, 11, 3, 1
data 1, 900, 0, 11, 5, 1
data 1, 960, 6, 11, 5, 1
data 1, 1020, 3, 11, 5, 1
rem part12
data 1, 1063, 6, 3, 1, 1
data 1, 1064, 5, 2, 1, 1
data 1, 1065, 4, 1, 1, 1
data 1, 1063, -4, 3, 1, 1
data 1, 1064, -3, 2, 1, 1
data 1, 1065, -2, 1, 1, 1
data 1, 1068, 1, 1, 1, 1
data 1, 1071, 4, 3, 1, 1
data 1, 1071, -2, 3, 1, 1
data 1, 1073, 5, 1, 1, 1
data 1, 1072, -2, 1, 3, 1
data 1, 1073, -1, 1, 2, 1
data 1, 1076, 1, 1, 1, 1
data 1, 1079, 5, 2, 1, 1
data 1, 1079, -1, 1, 2, 1
data 1, 1080, -2, 2, 1, 1
data 1, 1080, 4, 2, 1, 1
data 1, 1081, 3, 1, 2, 1
data 1, 1081, -3, 1, 2, 1
data 1, 1082, -4, 1, 1, 1
data 1, 1084, 0, 1, 1, 1
data 1, 1086, 3, 4, 1, 1
data 1, 1087, 4, 3, 1, 1
data 1, 1088, 5, 2, 1, 1
data 1, 1089, 6, 1, 1, 1
data 1, 1086, -3, 3, 1, 1
data 1, 1087, -4, 1, 1, 1
data 1, 1088, -1, 1, 3, 1
data 1, 1089, 0, 1, 2, 1
data 1, 1090, -1, 1, 1, 1
data 1, 1092, 3, 1, 1, 1
data 1, 1093, -1, 1, 1, 1
data 1, 1093, 0, 3, 1, 1
data 1, 1095, 2, 1, 2, 1
data 1, 1096, 2, 1, 1, 1
data 1, 1095, 6, 1, 2, 1
data 1, 1095, -4, 2, 1, 1
data 1, 1099, -1, 1, 1, 1
data 1, 1099, 5, 1, 1, 1
data 1, 1100, 5, 2, 3, 1
data 1, 1101, 2, 2, 1, 1
data 1, 1102, 3, 2, 1, 1
data 1, 1103, 4, 4, 1, 1
data 1, 1105, 6, 1, 2, 1
data 1, 1101, -4, 2, 1, 1
data 1, 1102, -3, 2, 1, 1
data 1, 1103, -2, 3, 1, 1
data 1, 1105, -3, 2, 2, 1
data 1, 1107, 1, 1, 1, 1
data 1, 1109, -3, 1, 2, 1
data 1, 1110, -3, 2, 1, 1
data 1, 1110, -1, 1, 2, 1
data 1, 1111, 0, 1, 2, 1
data 1, 1110, 5, 2, 2, 1
data 1, 1111, 3, 1, 1, 1
data 1, 1112, 6, 1, 2, 1
data 1, 1113, 5, 2, 1, 1
data 1, 1114, 0, 1, 1, 1
data 1, 1115, -3, 1, 2, 1
data 1, 1116, -3, 2, 1, 1
data 1, 1117, -4, 3, 1, 1
data 1, 1119, -3, 3, 1, 1
data 1, 1121, -2, 2, 1, 1
data 1, 1116, 5, 1, 1, 1
data 1, 1116, 3, 2, 1, 1
data 1, 1117, 2, 1, 1, 1
data 1, 1117, 1, 2, 1, 1
data 1, 1118, 0, 1, 1, 1
data 1, 1118, 6, 1, 1, 1
data 1, 1118, 5, 2, 1, 1
data 1, 1121, 3, 1, 1, 1
data 1, 1123, 6, 2, 1, 1
data 1, 1124, 0, 1, 4, 1
data 1, 1125, -3, 1, 2, 1
data 1, 1125, 3, 1, 2, 1
data 1, 1126, 2, 1, 2, 1
data 1, 1127, -1, 2, 1, 1
data 1, 1128, -2, 1, 1, 1
data 1, 1128, 6, 2, 1, 1
data 1, 1129, 5, 2, 1, 1
data 1, 1130, 4, 3, 1, 1
data 1, 1132, 3, 1, 1, 1
data 1, 1130, 2, 3, 1, 1
data 1, 1131, 1, 1, 1, 1
data 1, 1131, -4, 2, 1, 1
data 1, 1132, -3, 1, 1, 1
data 1, 1134, 6, 2, 1, 1
data 1, 1135, 5, 2, 1, 1
data 1, 1134, -3, 4, 1, 1
data 1, 1135, -4, 1, 1, 1
data 1, 1137, -2, 1, 1, 1
data 1, 1135, -1, 4, 1, 1
data 1, 1135, 1, 1, 2, 1
data 1, 1136, 2, 1, 2, 1
data 1, 1139, 6, 2, 1, 1
data 1, 1140, 5, 3, 1, 1
data 1, 1142, 4, 2, 1, 1
data 1, 1143, 3, 1, 2, 1
data 1, 1142, 1, 2, 1, 1
data 1, 1140, 2, 2, 1, 1
data 1, 1141, 0, 1, 1, 1
data 1, 1141, -1, 9, 1, 1
data 1, 1148, 2, 1, 1, 1
data 1, 1147, 2, 1, 3, 1
data 1, 1149, 2, 1, 3, 1
data 1, 1140, -4, 14, 1, 1
data 1, 1153, -3, 4, 1, 1
data 1, 1156, -2, 2, 1, 1
data 1, 1152, 5, 2, 1, 1
data 1, 1153, 4, 1, 1, 1
data 1, 1158, 5, 1, 1, 1
data 1, 1159, -2, 1, 1, 1
data 1, 1160, 3, 1, 1, 1
data 1, 1162, 4, 2, 1, 1
data 1, 1162, -4, 1, 1, 1
data 1, 1162, -3, 2, 1, 1
data 1, 1163, -2, 3, 1, 1
data 1, 1163, 3, 2, 1, 1
data 1, 1165, -3, 3, 1, 1
data 1, 1169, -3, 2, 1, 1
data 1, 1164, 5, 3, 1, 1
data 1, 1165, 6, 1, 1, 1
data 1, 1168, 5, 3, 1, 1
data 1, 1170, 4, 1, 1, 1
data 1, 1172, 4, 2, 1, 1
data 1, 1173, 3, 1, 1, 1
data 1, 1165, 2, 3, 2, 1
data 1, 1168, 2, 1, 1, 1
data 1, 1168, 1, 7, 2, 1
data 1, 1174, 2, 1, 1, 1
data 1, 1175, 2, 3, 2, 1
data 1, 1178, 3, 3, 2, 1
data 1, 1172, -3, 1, 1, 1
data 1, 1172, -4, 3, 1, 1
data 1, 1176, -4, 1, 1, 1
data 1, 1177, -3, 1, 2, 1
data 1, 1177, -2, 2, 1, 1
data 1, 1178, 6, 1, 1, 1
data 1, 1181, 6, 1, 7, 1
data 1, 1182, 5, 1, 5, 1
data 1, 1183, 4, 1, 3, 1
data 1, 1184, 3, 1, 1, 1
data 1, 1184, -4, 2, 1, 1
data 1, 1185, -3, 5, 1, 1
data 1, 1185, 6, 1, 1, 1
data 1, 1185, 5, 2, 1, 1
data 1, 1186, 4, 2, 1, 1
data 1, 1187, 3, 5, 1, 1
data 1, 1188, 6, 4, 1, 1
data 1, 1189, 5, 1, 1, 1
data 1, 1189, -2, 4, 1, 1
data 1, 1192, -1, 3, 1, 1
data 1, 1191, 4, 3, 1, 1
data 1, 1193, 5, 3, 1, 1
data 1, 1194, 0, 3, 1, 1
data 1, 1195, 6, 5, 1, 1
data 1, 1196, 1, 2, 1, 1
data 1, 1197, 2, 3, 1, 1
data 1, 1198, 3, 2, 1, 1
data 1, 1191, -4, 9, 1, 1
data 1, 1194, -3, 6, 1, 1
data 1, 1196, -2, 4, 1, 1
data 1, 1198, -1, 2, 1, 1
data 1, 1199, 0, 1, 1, 1
`data 1,
`data 1,
// checkpoints
rem part1
data 4, -6
data 4, -4
data 4, -2
data 4, 0
data 4, 2
data 4, 4
data 4, 6
rem part2
data 4, 40
rem part4
data 4, 96
rem part6
data 4, 134
rem part7
data 4, 165
rem part8
data 4, 219
rem part9
data 4, 300
rem part10
data 4, 374
rem part11
data 4, 426
rem part12
data 4, 1060
// scroll stop/starters
rem part1
`data 5, 10, 3.8, 18000
rem part10
data 5, 374, 0, 15000
data 5, 386, 0.02, 18000
data 5, 405, 0.02, 14000
rem part11
data 5, 427, 1.9, 19600
rem part12
data 5, 1059, 0.33, 24000
// messages
rem part 10
data 6, 370, "WAIT...", 2000
rem part 11
data 6, 424, "SPEED UP!!", 2000
data 6, 440, "UP!", 1200
data 6, 500, "DOWN!", 1200
data 6, 560, "UP!", 1200
data 6, 620, "DOWN!", 1200
data 6, 680, "GUESS!", 1200
data 6, 740, "EITHER!", 1200
data 6, 800, "NEITHER!", 1200
data 6, 860, "UP!", 1200
data 6, 920, "DOWN!", 1200
data 6, 970, "?", 1200
rem part12
data 6, 1058, "LAST RUN- TOUCH NOTHING!", 2000
// end
data 7, 1210, 2
data 0
instances of "root", "message" changed to "rootobj", "messagestring" to avoid plugin conflicts.
Have fun times.
EBA;
FUI; Mario Land Ripoff.
Every time you post a joke in the form of code, mace yourself.