I'm having problems with it. Always returns that object number illegal at line 120 when I try to lockon to the closest enemy sphere. Could someone please help? Thanks. Code is in the code box.
PS: You Can use any old 128x128 image for lockon.bmp
Edit: Rich, please, please put source code editing in your posts in the future.
Rem Project: Zone of the Enders Engine
Rem Created: 10/11/2003 8:34:56 AM
Rem ***** Main Source File *****
Rem Set Display Mode
set display mode 800,600,16
Rem Load Media
load image "lockon.bmp",10
Rem Create Objects
Rem Make Player Sphere
Make Object Sphere 1,10
position object 1,0,0,0
Rem Make Enemy Sphere
Make Object Sphere 2,10
position object 2,0,0,0
Rem Make Different Enemy Sphere
Make Object Sphere 3,10
position object 3,100,0,0
Rem Set Variables
yrotate=1
lockon=0
dim distances(1,10)
Rem Main Loop
sync on
sync rate 60
do
Rem Gosub Necessary Labels
gosub playerinput
gosub positionobject
gosub positioncamera
gosub displaydata
Rem Goto Variable Based Labels
if lockon=1 then gosub lockon
sync
loop
RemStart
Rem**************************************************************
Rem Subroutines
Rem**************************************************************
RemEnd
Rem Player Input Subroutine
playerinput:
Rem Turn Off Variables
turning=0
Rem Movement Control
if upkey()=1 then move object 1,1
if downkey()=1 then move object 1,-1
if lockon=0
if rightkey()=1
inc yrotate
turning=1
endif
if yrotate>360 then yrotate=1
if leftkey()=1
dec yrotate
turning=1
endif
endif
if lockon=1
if rightkey()=1 then move object right 1,1
if leftkey()=1 then move object left 1,1
endif
if yrotate<1 then yrotate=360
if inkey$()="8" then move object up 1,1
if inkey$()="2" then move object down 1,1
Rem Lockon Controls
If spacekey()=1
quack=1
for x=2 to 10
inc quack
if object exist(quack)=1
distances(1,quack)=getdist(object position x(1),object position y(1),object position z(1),object position x(quack), object position y(quack),object position z(quack))
endif
next x
quack=1
for x=2 to 10
inc quack
if object exist(quack)=1
newdistance=distances(1,quack)
if newdistance<objectdistance
objectdistance=newdistance
objectlock=quack
endif
endif
next x
lockon=1
endif
if controlkey()=1
lockon=0
rotate object 1,1,object angle y(1),1
endif
return
Rem Position Object Subroutine
positionobject:
position object 1,object position x(1),object position y(1),object position z(1)
yrotate object 1,yrotate
return
Rem Position Camera Routine
positioncamera:
position camera object position x(1),object position y(1),object position z(1)
if lockon=0 then set camera to object orientation 1
if lockon=1 then point camera object position x(objectlock),object position y(objectlock),object position z(objectlock)
move camera -20
return
Rem Print Data On Screen
displaydata:
text 1,1,"FPS: "+str$(screen fps())
text 1,13,"Polygons on Screen: "+str$(statistic(1))
text 1,25,"X: "+str$(object position x(1))
text 1,37,"Y: "+str$(object position y(1))
text 1,49,"Z: "+str$(object position z(1))
text 1,61,"XR: "+str$(object angle x(1))
text 1,73,"YR: "+str$(yrotate)
text 1,85,"ZR: "+str$(object angle z(1))
return
Rem Lock On Variable Based Subroutine
lockon:
paste image 10,object screen x(objectlock)-64,object screen y(objectlock)-64,1
line object screen x(1),object screen y(1),object screen x(objectlock),object screen y(objectlock)
point object 1,object position x(objectlock),object position y(objectlock),object position z(objectlock)
return
RemStart
Rem*************************************************************
Rem Functions
Rem*************************************************************
RemEnd
Rem Distance Function
function getdist(obj1x#,obj2x#,obj1y#,obj2y#,obj1z#,obj2z#)
distance# = SQRT((obj1x#-obj2x#)^2+(obj1y#-obj2y#)^2+(obj1z#-obj2z#)^2)
endfunction distance#