I GOT one!
WASD = Move
Space = Jump
AGH = Name of game.
TIP: Don't shoot until your cross-hairs turn red.
TOo be added:
Sounds
Increasing degrees of difficulties
REM Project: AGH
REM Created: 5/3/2007 2:54:16 PM
REM
REM ***** Main Source File *****
REM
SET DISPLAY MODE 1024, 768, 32
INK RGB(50, 50, 0), 0
BOX 1, 1, 65, 65
GET IMAGE 1, 1, 1, 65, 65, 1
CLS 0
INK RGB(255, 255, 0), 0
FOR i = 0 to 6
LINE 1, 15+i, 9, 1+i
LINE 9, 1+i, 17, 15+i
INK RGB(255-(30*i), 255-(30*i), 0), 0
NEXT i
GET IMAGE 2, 1, 1, 17, 20, 1
CLS 0
INK RGB(255, 255, 255), 0
FOR i = 1 to 5
ELLIPSE 5, 5, i, i
INK RGB(255-(30*i), 255-(30*i), 255-(30*i)), 0
NEXT i
GET IMAGE 3, 1, 1, 11, 11, 1
CLS 0
INK RGB(255, 0, 0), 0
FOR i = 1 to 5
ELLIPSE 5, 5, i, i
INK RGB(255-(30*i), 0, 0), 0
NEXT i
GET IMAGE 4, 1, 1, 11, 11, 1
CLS 0
INK RGB(255, 255, 255), 0
LINE 8,1,8,17
LINE 9,1,9,17
LINE 1,8,17,8
LINE 1,9,17,9
GET IMAGE 5, 1, 1, 17, 17, 1
CLS 0
INK RGB(255, 0, 0), 0
LINE 8,1,8,17
LINE 9,1,9,17
LINE 1,8,17,8
LINE 1,9,17,9
GET IMAGE 6, 1, 1, 17, 17, 6
CLS 0
INK RGB(255, 255, 255), 0
SYNC ON : HIDE MOUSE : AUTOCAM OFF : SYNC RATE 60
REPEAT
CENTER TEXT SCREEN WIDTH()/2, 150, "Holy BANANANAS. You are Ron Gollinplecker and you have been appointed"
CENTER TEXT SCREEN WIDTH()/2, 165, "this team's Sphere Exterminator. Your Extermispheretron 6816 vaporiz-"
CENTER TEXT SCREEN WIDTH()/2, 180, "zles spheres into next Christmas. It has a varying range based on the"
CENTER TEXT SCREEN WIDTH()/2, 195, "intensity of the targeted sphere's longing and desire for an end to -"
CENTER TEXT SCREEN WIDTH()/2, 210, "its misphery. Shoot quickly, dear Gollinplecker, for the window is a-"
CENTER TEXT SCREEN WIDTH()/2, 225, "ll too short, and you wouldn't want to be gobbled and.. spheregested."
CENTER TEXT SCREEN WIDTH()/2, 275, "PRESS ENTER TO CONTINUE. MOOSE."
CENTER TEXT SCREEN WIDTH()/2, 325, "Oh yeah, and if you misfire, you lose your weapon for some seconds..."
SYNC
UNTIL RETURNKEY() = 1
GLOBAL dTimer
GLOBAL loopTime
GLOBAL lastTime
GLOBAL grav#
GLOBAL mouseSens#
GLOBAL jumpVel#
GLOBAL jump
GLOBAL jumpFwd
GLOBAL jumpBack
GLOBAL jumpLeft
GLOBAL jumpRight
GLOBAL moving
GLOBAL hp
TYPE killBall
dist AS FLOAT
startDist AS FLOAT
up AS INTEGER
spr AS INTEGER
redSpr AS INTEGER
obj AS INTEGER
speed AS FLOAT
killMin AS FLOAT
killMax AS FLOAT
KILL as INTEGER
ENDTYPE
DIM killBalls(20) AS killball
FOR i = 1 TO 20
killBalls(i).up = 0
killBalls(i).spr = 0
killBalls(i).redSpr = 0
killBalls(i).obj = 0
killBalls(i).KILL = 0
NEXT i
UpdateDelta()
COLOR BACKDROP RGB(150, 150, 255)
MAKE OBJECT SPHERE 1000, 1
HIDE OBJECT 1000
MAKE OBJECT BOX 999, 500, 1, 500
COLOR OBJECT 999, RGB(50, 50, 0)
MAKE OBJECT BOX 998, 500, 1, 500
POSITION OBJECT 998, 0, 300, 0
GHOST OBJECT ON 998
`MAKE-A DA GUN
MAKE OBJECT CYLINDER 1001, 5
MAKE OBJECT BOX 1002, 1, 0.1, 2
MAKE MESH FROM OBJECT 1, 1002
ADD LIMB 1001, 1, 1
OFFSET LIMB 1001, 1, 0, 2, -3
SCALE OBJECT 1001, 20, 100, 20
COLOR OBJECT 1001, 0
COLOR LIMB 1001, 1, RGB(50, 50, 50)
XROTATE OBJECT 1001, 90
LOCK OBJECT ON 1001
POSITION OBJECT 1001, 1, -2, 2
DELETE OBJECT 1002
SET AMBIENT LIGHT 20
FOR i = 1 TO 20
MAKE OBJECT BOX i, 5, 500, 5
COLOR OBJECT i, RGB(255, 0, 0)
GHOST OBJECT ON i
NEXT i
FOR i = 1 TO 5
POSITION OBJECT i, -250, 50, -250+(i-1)*100
NEXT i
FOR i = 6 TO 10
POSITION OBJECT i, 250, 50, 250-(i-6)*100
NEXT i
FOR i = 11 TO 15
POSITION OBJECT i, -250+(i-11)*100, 50, 250
NEXT i
FOR i = 16 TO 20
POSITION OBJECT i, 250-(i-16)*100, 50, -250
NEXT i
POSITION CAMERA 0, 15, 0
grav# = 0.1
mouseSens# = 0.2
killInterval = 3000
gunInterval = 5000
gunTimer = 0
hp = 5
score = 0
SPRITE 1, SCREEN WIDTH()-100, SCREEN HEIGHT()-100, 1
SPRITE 2, SCREEN WIDTH()-100, SCREEN HEIGHT()-100, 2
SPRITE 3, -30, -30, 3
SPRITE 4, -40, -40, 4
SPRITE 5, SCREEN WIDTH()/2-8, SCREEN HEIGHT()/2-8, 5
SPRITE 6, SCREEN WIDTH()/2-8, SCREEN HEIGHT()/2-8, 6
HIDE SPRITE 6
killTime = TIMER()
REPEAT
UpdateDelta()
MouseMove()
PlayerMove()
TEXT 5, 5, "LIFE FORCE:"
BOX 100, 5, 200, 20, RGB(110, 0, 0), RGB(110, 0, 0), RGB(110, 0, 0), RGB(110, 0, 0)
BOX 100, 5, 100+(hp*20), 20, RGB(255, 0, 0), RGB(255, 0, 0), RGB(255, 0, 0), RGB(255, 0, 0)
TEXT 5, 20, "SCORE: "+STR$(score)
IF (TIMER() - killTime) > killInterval
MakeKillBall(1.0, 200.0, 30.0)
killTime = TIMER()
ENDIF
IF gunTimer = 1
IF (TIMER() - gunTime) > gunInterval
SHOW OBJECT 1001
SHOW SPRITE 5
gunTimer = 0
ENDIF
ELSE
pick = PICK OBJECT(SCREEN WIDTH()/2, SCREEN HEIGHT()/2, 21, 40)
kb = 0
HIDE SPRITE 6
SHOW SPRITE 5
onTarget = 0
IF pick <> 0
kb = GetKillBallByObj(pick)
IF killBalls(kb).KILL = 1
HIDE SPRITE 5
SHOW SPRITE 6
onTarget = 1
ENDIF
ENDIF
IF MOUSECLICK() = 1 AND clicked = 0
IF onTarget = 1
DestroyKillBall(kb)
INC score
ELSE
HIDE OBJECT 1001
HIDE SPRITE 5
HIDE SPRITE 6
gunTimer = 1
gunTime = TIMER()
ENDIF
ENDIF
clicked = MOUSECLICK()
ENDIF
IF moving = 1
POSITION OBJECT 1001, 2, -2, 2+SIN(TIMER())*0.2
ELSE
POSITION OBJECT 1001, 2, -2, 2
ENDIF
`TEXT 5, 5, "FPS: "+STR$(SCREEN FPS())
SYNC
UNTIL hp <= 0
COLOR BACKDROP 0
REPEAT
CENTER TEXT SCREEN WIDTH()/2, 150, "BOOOOO!"
CENTER TEXT SCREEN WIDTH()/2, 250, "SCORE: "+STR$(score)
CENTER TEXT SCREEN WIDTH()/2, 350, "PRESS ENTER"
SYNC
UNTIL RETURNKEY()=1
END
FUNCTION MakeKillBall(spd#, startD#, kdist#)
nextBall = NextKillBall()
IF nextBall <> -1
killBalls(nextBall).up = 1
killBalls(nextBall).dist = 1.0
killBalls(nextBall).spr = NextSprite()
CLONE SPRITE 3, killBalls(nextBall).spr
killBalls(nextBall).redSpr = NextSprite()
CLONE SPRITE 4, killBalls(nextBall).redSpr
killBalls(nextBall).obj = NextObj()
MAKE OBJECT SPHERE killBalls(nextBall).obj, 10
SET OBJECT SPECULAR killBalls(nextBall).obj, RGB(200, 200, 200)
killBalls(nextBall).speed = spd#
kmax# = RND(30.0)+30.0
killBalls(nextBall).killMin = kmax# - kdist#
killBalls(nextBall).killMax = kmax#
killBalls(nextBall).startDist = startD#
ROTATE OBJECT killBalls(nextBall).obj, WRAPVALUE(RND(80)+270), WRAPVALUE(RND(360)), 0.0
MOVE OBJECT killBalls(nextBall).obj, startD#
ENDIF
ENDFUNCTION
FUNCTION DestroyKillBall(b)
IF killBalls(b).up = 1
killBalls(b).up = 0
DELETE SPRITE killBalls(b).spr
DELETE SPRITE killBalls(b).redSpr
DELETE OBJECT killBalls(b).obj
killBalls(b).spr = 0
killBalls(b).redSpr = 0
killBalls(b).obj = 0
killBalls(b).KILL = 0
ENDIF
ENDFUNCTION
FUNCTION MouseMove()
XROTATE CAMERA CAMERA ANGLE X()+MOUSEMOVEY()*mouseSens#
YROTATE CAMERA WRAPVALUE(CAMERA ANGLE Y()+MOUSEMOVEX()*mouseSens#)
IF CAMERA ANGLE X() > 25.0 THEN XROTATE CAMERA 25.0
IF CAMERA ANGLE X() < -90.0 THEN XROTATE CAMERA -90.0
ENDFUNCTION
FUNCTION PlayerMove()
plSpeed# = 2.0
xAng# = CAMERA ANGLE X()
yAng# = CAMERA ANGLE Y()
zAng# = 0.0
tplPosX# = CAMERA POSITION X()
tplPosY# = CAMERA POSITION Y()
tplPosZ# = CAMERA POSITION Z()
IF jump = 0
ROTATE CAMERA 0, YAng#, 0
IF KEYSTATE(17) = 1 THEN MOVE CAMERA Delta(plSpeed#)
IF KEYSTATE(31) = 1 THEN MOVE CAMERA Delta((plSpeed#/2)*-1)
IF KEYSTATE(30) = 1
YROTATE CAMERA yAng#-90
tSpd# = plSpeed#
IF KEYSTATE(17) = 1 THEN tSpd# = tSpd#/2
MOVE CAMERA Delta(tSpd#)
YROTATE CAMERA yAng#+90
ENDIF
IF KEYSTATE(32) = 1
YROTATE CAMERA yAng#-90
tSpd# = plSpeed#
IF KEYSTATE(17) = 1 THEN tSpd# = tSpd#/2
MOVE CAMERA Delta(tSpd#*-1)
YROTATE CAMERA yAng#+90
ENDIF
ROTATE CAMERA xAng#, yAng#, zAng#
ELSE
IF jumpFwd = 1 THEN MOVE OBJECT 1000, Delta(plSpeed#)
IF jumpBack = 1 THEN MOVE OBJECT 1000, Delta((plSpeed#/2)*-1)
IF jumpLeft = 1
YROTATE OBJECT 1000, OBJECT ANGLE Y(1000)-90
tSpd# = plSpeed#
IF jumpFwd = 1 THEN tSpd# = plSpeed#/2
MOVE OBJECT 1000, Delta(tSpd#)
YROTATE OBJECT 1000, OBJECT ANGLE Y(1000)+90
ENDIF
IF jumpRight = 1
YROTATE OBJECT 1000, OBJECT ANGLE Y(1000)-90
tSpd# = plSpeed#
IF jumpFwd = 1 THEN tSpd# = plSpeed#/2
MOVE OBJECT 1000, Delta(tSpd#*-1)
YROTATE OBJECT 1000, OBJECT ANGLE Y(1000)+90
ENDIF
POSITION CAMERA OBJECT POSITION X(1000), CAMERA POSITION Y(), OBJECT POSITION Z(1000)
ENDIF
plPosX# = CAMERA POSITION X()
plPosY# = CAMERA POSITION Y()
plPosZ# = CAMERA POSITION Z()
moving = 0
IF (tplPosX#+tplPosY#+tplPosZ#) <> (plPosX#+plPosY#+plPosZ#) THEN moving = 1
IF KEYSTATE(57) = 1 AND jump = 0
jump = 1
jumpVel# = 2.5
jumpFwd = KEYSTATE(17)
jumpBack = KEYSTATE(31)
jumpLeft = KEYSTATE(30)
jumpRight = KEYSTATE(32)
ROTATE OBJECT 1000, xAng#, yAng#, zAng#
ENDIF
DEC jumpVel#, Delta(grav#)
INC plPosY#, Delta(jumpVel#)
IF plPosY# < 15 THEN plPosY# = 15 : jump = 0 : jumpFwd = 0 : jumpBack = 0 : jumpLeft = 0 : jumpRight = 0
IF plPosX# < -250 THEN plPosX# = -250
IF plPosX# > 250 THEN plPosX# = 250
IF plPosZ# < -250 THEN plPosZ# = -250
IF plPosZ# > 250 THEN plPosZ# = 250
POSITION CAMERA plPosX#, plPosY#, plPosZ#
POSITION OBJECT 1000, plPosX#, plPosY#, plPosZ#
FOR i = 1 to 20
IF killBalls(i).up = 1
POINT OBJECT killBalls(i).obj, plPosX#, plPosY#, plPosZ#
killBalls(i).dist = ObjectXYZDistance(1000, killBalls(i).obj)
tKBSpd# = (killBalls(i).startDist - killBalls(i).dist)*0.011
`TEXT 5, 25, "SPD: "+STR$(tKBSpd#)+" "+STR$(killBalls(i).speed)
IF tKBSpd# < killBalls(i).speed THEN tKBSpd# = killBalls(i).speed
`TEXT 5, 45, "SPD: "+STR$(tKBSpd#)+" "+STR$(killBalls(i).speed)
MOVE OBJECT killBalls(i).obj, Delta(tKBSpd#)
IF killBalls(i).dist <= killBalls(i).killMax AND killBalls(i).dist >= killBalls(i).killMin
IF killBalls(i).KILL = 0
HIDE SPRITE killBalls(i).spr
SHOW SPRITE killBalls(i).redSpr
COLOR OBJECT killBalls(i).obj, RGB(255, 0, 0)
ENDIF
CENTER TEXT OBJECT SCREEN X(killBalls(i).obj), OBJECT SCREEN Y(killBalls(i).obj), "KILL ME!!"
gooSpr = 4
killBalls(i).KILL = 1
tSpr = killBalls(i).redSpr
ELSE
IF killBalls(i).KILL = 1
SHOW SPRITE killBalls(i).spr
HIDE SPRITE killBalls(i).redSpr
COLOR OBJECT killBalls(i).obj, RGB(255, 255, 255)
ENDIF
gooSpr = 3
killBalls(i).KILL = 0
tSpr = killBalls(i).spr
ENDIF
SPRITE tSpr, SPRITE X(2), SPRITE Y(2), gooSpr
ROTATE SPRITE tSpr, WRAPVALUE(yAng# - OBJECT ANGLE Y(killBalls(i).obj))*-1
MOVE SPRITE tSpr, INT(ObjectXZDistance(1000, killBalls(i).obj)/7.8125)*-1
OFFSET SPRITE tSpr, 5, 5
IF killBalls(i).dist <= 1.0 THEN DestroyKillBall(i) : DEC hp
ENDIF
NEXT i
`TEXT 5, 65, STR$(WRAPVALUE(xAng#))
mapOffsetX = 32+INT(plPosX#/8)
mapOffsetY = 32-INT(plPosZ#/8)
OFFSET SPRITE 2, 8, 10
OFFSET SPRITE 1, mapOffsetX, mapOffsetY
ROTATE SPRITE 1, yAng#*-1
ENDFUNCTION
FUNCTION UpdateDelta()
dTimer = TIMER()
loopTime = dTimer-lastTime
lastTime= dTimer
ENDFUNCTION
FUNCTION Delta(val#)
res# = val#*0.060*loopTime
ENDFUNCTION res#
FUNCTION ObjectXZDistance(obj1, obj2)
dx# = OBJECT POSITION X(obj2)-OBJECT POSITION X(obj1)
dz# = OBJECT POSITION Z(obj2)-OBJECT POSITION Z(obj1)
res# = SQRT(dx#*dx# + dz#*dz#)
ENDFUNCTION res#
FUNCTION ObjectXYZDistance(obj1, obj2)
dx# = OBJECT POSITION X(obj2)-OBJECT POSITION X(obj1)
dy# = OBJECT POSITION Y(obj2)-OBJECT POSITION Y(obj1)
dz# = OBJECT POSITION Z(obj2)-OBJECT POSITION Z(obj1)
res# = SQRT(dx#*dx# + dy#*dy# + dz#*dz#)
ENDFUNCTION res#
FUNCTION NextSprite()
FOR i = 1 TO 65535
IF SPRITE EXIST(i) = 0 THEN res = i : EXIT
NEXT i
ENDFUNCTION res
FUNCTION NextObj()
FOR i = 1 TO 65535
IF OBJECT EXIST(i) = 0 THEN res = i : EXIT
NEXT i
ENDFUNCTION res
FUNCTION NextKillBall()
res = -1
FOR i = 1 TO 20
IF killBalls(i).up = 0 THEN res = i : EXIT
NEXT i
ENDFUNCTION res
FUNCTION GetKillBallByObj(obj)
res = 0
FOR i = 1 TO 20
IF killBalls(i).obj = obj THEN res = i : EXIT
NEXT i
ENDFUNCTION res
Good luck!