[edit] figured out! see eleventh post...
okay i'm working on this game for the acoders compo and i've run into a problem...when i go from my main menu to my game(by using the "newgame" button i set up) it exits without playing my game!(okay what i have so far of my game...)
i checked to see if there are any subs without "returns" but there aren't!
so i'm wondering if anybody knows of any reasons a program might exit "un-called-for"
here's my code if it helps any...
Rem Project: FuFu's Great Adventure
Rem Created: 5/24/2004 2:58:04 PM
Rem ***** Main Source File *****
hide mouse
sync on
sync rate 60
`sync
`get image 2000,0,0,640,480
StartCollisionPro(000000000,000000000,000000000)
`collision type 1 is the player
`collision type 2 is the world
`collision type 3 is the moving world(i.e. elevators)
`collision type 4 is the follow-camera
`player
SetCollisionsPro(1,2,2,2,2)
SetCollisionsPro(1,3,2,2,4)
`moving world
SetCollisionsPro(3,2,2,2,2)
SetCollisionsPro(3,1,2,2,4)
`follow camera
setcollisionspro(4,3,2,1,1)
SetCollisionsPro(4,2,2,1,1)
`-----------------------
gosub intro
`-----------------------
remstart
load image "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsFuFu's Great AdventureMediacheese.bmp",3
`load object "C:gameSpaceLightCat gameFullcheese.x",100
make object cylinder 100,10
texture object 100,3
position object 100,100,5,100
scale object 100,100,50,100
remend
load image "C:Program FilesDark Basic SoftwareDark Basic ProfessionalMediaTexturesmetal_shutter.BMP",2
load image "C:Program FilesDark Basic SoftwareDark Basic ProfessionalMediaTexturesCement_render.BMP",1
type elevatortype
speed as float
startx as float
starty as float
startz as float
direction as integer
axis as string
range as float
id as integer
status as integer
endtype
dim elevator(500) as elevatortype
for i=1 to 500
elevator(i).direction=1
next i
global boxhit
global speed=2 as float
global numofcrates
global Player=1
global elevatorstep=1
global elevatordirection
global animationmode=0
global hold
global numofelevators
rem global array to hold the "hold status" of each key pressed
global dim KeyHold(256)
rem global array to hold the "hold status" of each key pressed
global dim LastKeyHold(256)
rem turns on the backdrop
backdrop on
global cam_obj=3
rem creates our camera and inits the properties
Set Camera Range 2, 15000
color backdrop camera, rgb(0,0,255)
make object sphere cam_obj, 2
hide object cam_obj
position object cam_obj,0,15,0
rotate object cam_obj,0,-90,0
rem Sets the camera object to "TYPE_FOLLOW_CAM" as the camera start
rem in the camera mode that follows the player
CollisionTypePRO( cam_obj,4)
rem Sets the sizes of the ellip of the camera object to 2.
rem Basically, a sphere with a radius of 2
SetObjRadiusPRO( cam_obj, 2, 2, 2 )
`Player
load object "C:Program FilesDark Basic SoftwareDark Basic ProfessionalProjectsFuFu's Great AdventureMediakitty-test.x",player
yangle=object angle y(player)
yrotate object player,wrapvalue(yangle+180)
fix object pivot player
position object player,0,10,0
collisiontypePro(player,1)
setobjradiuspro(player,6,6,6)
setobjgravitypro(player,3)
`floor
make object box 2,1000,1,1000
collisiontypepro(2,2)
texture object 2,1
position object 2,0,-1,0
dim crate(100)
`pushable boxes
make_push_box(-200,10,-100,2)
make_push_box(-200,10,100,2)
make_elevator(20,10,20,0,-5,0,1,100,"y",2)
collisiontypepro(1501,3)
do
` Update input data
Update_Key_Hold()
update_player()
Update_Follow_Camera()
check_boxes()
update_elevators()
RunCollisionPRO()
sync
loop
function make_elevator(width,height,length,x,y,z,speed,range,direction as string,textureid)
inc numofelevators
make object box (1500+numofelevators),width,height,length
position object (1500+numofelevators),x,y,z
texture object (1500+numofelevators),textureid
collisiontypepro(1500+numofelevators,3)
elevator(numofelevators).id=1500+numofelevators
elevator(numofelevators).startx=x
elevator(numofelevators).starty=y
elevator(numofelevators).startz=z
elevator(numofelevators).axis=direction
elevator(numofelevators).range=range
endfunction
function update_elevators()
for i=1 to numofelevators
if elevator(i).axis="y"
if elevator(i).direction=0
dec elevator(i).status,elevator(i).speed
if elevator(i).status<elevator(i).range then elevator(i).direction=1
endif
if elevator(i).direction=1
inc elevator(i).status,elevator(i).speed
if elevator(i).status>elevator(i).range
elevator(i).direction=0
dec elevator(i).status,elevator(i).speed
endif
endif
position object elevator(i).id,elevator(i).startx,(elevator(i).starty+elevator(i).status),elevator(i).startz
endif
if elevator(i).axis="x"
if elevator(i).direction=0
dec elevator(i).status,elevator(i).speed
if elevator(i).status<elevator(i).range then elevator(i).direction=1
endif
if elevator(i).direction=1
inc elevator(i).status,elevator(i).speed
if elevator(i).status>elevator(i).range
elevator(i).direction=0
dec elevator(i).status,elevator(i).speed
endif
endif
position object elevator(i).id,(elevator(i).startx+elevator(i).status),elevator(i).starty,elevator(i).startz
endif
if elevator(i).axis="z"
if elevator(i).direction=0
dec elevator(i).status,elevator(i).speed
if elevator(i).status<elevator(i).range then elevator(i).direction=1
endif
if elevator(i).direction=1
inc elevator(i).status,elevator(i).speed
if elevator(i).status>elevator(i).range
elevator(i).direction=0
dec elevator(i).status,elevator(i).speed
endif
endif
position object elevator(i).id,elevator(i).startx,elevator(i).starty,(elevator(i).startz+elevator(i).status)
endif
next i
endfunction
function make_push_box(posx,posy,posz,textureid)
inc numofcrates
make object box numofcrates+1000,20,20,20
texture object numofcrates+1000,textureid
position object numofcrates+1000,posx,posy+500,posz
collisiontypepro(numofcrates+1000,3)
setobjgravitypro(numofcrates+1000,3)
crate(numofcrates)=numofcrates+1000
endfunction
function check_boxes()
boxhit=0
numofcollisions=countcollisionspro(player)
for i=1 to numofcollisions
if collisionhitobj(player,i)>1000 and collisionhitobj(player,i)<1500
boxhit=collisionhitobj(player,i)
endif
next i
if boxhit>0
posx=object position x(player)
posy=object position y(player)
posz=object position z(player)
if posx>(object position x(boxhit)+10)
posx=object position x(boxhit)
posy=object position y(boxhit)
posz=object position z(boxhit)
position object boxhit,(posx-1),posy,posz
for i=1 to numofcrates
if crate(i)<>boxhit
if abs(object position x(crate(i))-object position x(boxhit))<20
if abs(object position z(crate(i))-object position z(boxhit))<20
posx=object position x(crate(i))
posy=object position y(crate(i))
posz=object position z(crate(i))
position object crate(i),(posx-1),posy,posz
endif
endif
endif
next i
endif
if posx<(object position x(boxhit)-10)
posx=object position x(boxhit)
posy=object position y(boxhit)
posz=object position z(boxhit)
position object boxhit,(posx+1),posy,posz
for i=1 to numofcrates
if crate(i)<>boxhit
if abs(object position x(crate(i))-object position x(boxhit))<20
if abs(object position z(crate(i))-object position z(boxhit))<20
posx=object position x(crate(i))
posy=object position y(crate(i))
posz=object position z(crate(i))
position object crate(i),(posx+1),posy,posz
endif
endif
endif
next i
endif
if posz>(object position z(boxhit)+10)
posx=object position x(boxhit)
posy=object position y(boxhit)
posz=object position z(boxhit)
position object boxhit,posx,posy,(posz-1)
for i=1 to numofcrates
if crate(i)<>boxhit
if abs(object position x(crate(i))-object position x(boxhit))<20
if abs(object position z(crate(i))-object position z(boxhit))<20
posx=object position x(crate(i))
posy=object position y(crate(i))
posz=object position z(crate(i))
position object crate(i),posx,posy,(posz-1)
endif
endif
endif
next i
endif
if posz<(object position Z(boxhit)-10)
posx=object position x(boxhit)
posy=object position y(boxhit)
posz=object position z(boxhit)
position object boxhit,posx,posy,(posz+1)
for i=1 to numofcrates
if crate(i)<>boxhit
if abs(object position x(crate(i))-object position x(boxhit))<20
if abs(object position z(crate(i))-object position z(boxhit))<20
posx=object position x(crate(i))
posy=object position y(crate(i))
posz=object position z(crate(i))
position object crate(i),posx,posy,(posz+1)
endif
endif
endif
next i
endif
endif
endfunction
rem Checks keys down to notify us if a key is being held
function Update_Key_Hold()
for t=0 to 256
LastKeyHold(t) = KeyHold(t)
next t
for t=0 to 256
KeyHold(t) = Keystate(t)
next t
endfunction
rem Follow-Character Camera handling function
function Update_Follow_Camera()
rem Get the positions of the main player object
xpos# = object position x(player)
ypos# = object position y(player)
zpos# = object position z(player)
rem position 'cam_obj' at the player object coords (a little up on the Y axis)
position object cam_obj, xpos#, ypos# + 30, zpos#
ResetObjPRO(cam_obj)
rem Get the wrapped Y angle of the player
yrot# = wrapvalue(object angle y(player))
rem Set the camera to follow the player object coords
set camera to follow camera, xpos#, ypos# + 25, zpos#, yrot#, 39, 6, 6.0, 0
rem Point the camera at the player object coords
point camera camera, xpos#, ypos# + 25, zpos#
rem Get the position/rotation of the camera
camx# = camera position x(camera) : camy# = camera position y(camera) : camz# = camera position z(camera)
camrx# = camera angle x(camera) : camry# = camera angle y(camera) : camrz# = camera angle z(camera)
rem place 'cam-obj' at the camera position/rotation
position object cam_obj, camx#, camy#, camz#
rotate object cam_obj, camrx#, camry#, camrz#
endfunction
rem Character Handling Function
function Update_Player()
rem *** Handling the player
rem if left key is hit
if KeyHold(203)
yrotate object player,wrapvalue(object angle y(player)-3.6)
endif
rem if right key is hit
if KeyHold(205)
yrotate object player,wrapvalue(object angle y(player)+3.6)
endif
if animationmode=0 and hold=0
rem if upkey is pressed
if KeyHold(200)
animationmode=1
endif
endif
if animationmode>0
if animationmode<20 then inc animationmode
if animationmode=2 then play object player,1,19
move object player,2
endif
if hold>0 then inc hold
if hold=11 then hold=0
if animationmode=20
animationmode=0
hold=1
endif
`if scancode()>1 and scancode()<12 then speed=(scancode()-1)/2
endfunction
intro:
load image "MediaIndieCompoPicBW.bmp",1000
load image "mediaindiecompopiccolored.bmp",1001
load image "mediamagellanbanner.bmp",1002
load image "mediaThunderDeathWarrior.bmp",1003
load image "mediamenubackround.bmp",1004
load image "medianewgame.jpg",1040
load image "medialoadgame.jpg",1041
load image "mediaexit.jpg",1042
load image "medianewgameselected.jpg",1043
load image "medialoadgameselected.jpg",1044
load image "mediaexitselected.jpg",1045
set image colorkey 151,246,255
`sections for later use
paste image 1001,0,0
dim spritenum(13,2)
for i=0 to 12
get image (1005+i),(20*i),0,(20*i)+20,70
next i
paste image 1000,0,0
for i=0 to 12
get image (1018+i),(20*i),0,(20*i)+20,70
next i
sprite 1,-1000,-1000,1000
sprite 2,-1000,-1000,1001
sprite 3,-1000,-1000,1002
sprite 4,-1000,-1000,1003
sprite 5,-1000,-1000,1004
sprite 1040,-1000,-1000,1040
sprite 1041,-1000,-1000,1041
sprite 1042,-1000,-1000,1042
sprite 1043,-1000,-1000,1043
sprite 1044,-1000,-1000,1044
sprite 1045,-1000,-1000,1045
for i=1 to 13
sprite (6+i),-1000,-1000,(1004+i)
spritenum(i,2)=6+i
next i
for i=1 to 13
sprite (20+i),-1000,-1000,(1017+i)
spritenum(i,1)=20+i
next i
trans1=255
dim trans(13)
for i=1 to 13
trans(i)=1
next i
stage=1
move1=640
move=-100
do
if mouseclick()>0
for i=1 to 13
for m=1 to 2
paste sprite spritenum(i,m),-1000,-1000
next m
next i
for i=1 to 5
paste sprite i,-1000,-1000
next i
cls
stage=7
endif
cls
if stage=1
for i=1 to 13
paste sprite spritenum(i,1),(screen width()/2)-120+((20*i)-20),(screen height()/2)-32
next i
sync
stage=2
endif
if stage=2
if trans(1)<254 then inc trans(1),2
for i=2 to 13
if trans(i-1)>50 and trans(i)<254 then inc trans(i),2
next i
for i=0 to 12
set sprite alpha spritenum(i+1,1),trans(i+1)
paste sprite spritenum(i+1,1),(screen width()/2)-120+(20*i),(screen height()/2)-32
next i
if trans(13)=>255
stage=3
for i=1 to 13
trans(i)=1
next i
endif
endif
if stage=3
for i=0 to 12
paste sprite spritenum(i+1,1),(screen width()/2)-120+(20*i),(screen height()/2)-32
next i
if trans(1)<254 then inc trans(1),2
for i=2 to 13
if trans(i-1)>50 and trans(i)<254 then inc trans(i),2
next i
for i=0 to 12
set sprite priority spritenum(i+1,2),1
set sprite alpha spritenum(i+1,2),trans(i+1)
paste sprite spritenum(i+1,2),(screen width()/2)-120+(20*i),(screen height()/2)-32
next i
if trans(13)=>255
stage=4
for i=1 to 13
trans(i)=244
next i
endif
endif
if stage=4
if trans(1)>1 then dec trans(1),2
for i=2 to 13
if trans(i-1)<200 and trans(i)>1 then dec trans(i),2
next i
for i=0 to 12
for m=1 to 2
`set sprite priority spritenum(i+1,2),1
set sprite alpha spritenum(i+1,m),trans(i+1)
paste sprite spritenum(i+1,m),(screen width()/2)-120+(20*i),(screen height()/2)-32
next m
next i
if trans(13)<=0
stage=5
endif
endif
if stage=5
if trans<255 then inc trans
set sprite alpha 3,trans
paste sprite 3,(screen width()/2)-sprite width(3)/2,(screen height()/2)-sprite height(3)/2
if trans=255 then stage=6
endif
if stage=6
if trans1>0 then dec trans1
set sprite alpha 3,trans1
paste sprite 3,(screen width()/2)-sprite width(3)/2,(screen height()/2)-sprite height(3)/2
if trans1=0 then stage=7
endif
if stage=7
if trans2<255 then inc trans2
set sprite alpha 4,trans2
paste sprite 4,0,0
if trans2=255 then stage=8
endif
if stage=8
if trans3<255 then inc trans3
set sprite alpha 5,trans3
paste sprite 5,0,0
set sprite priority 4,1
paste sprite 4,0,0
if trans3=255 then stage=9
endif
if stage=9
paste sprite 5,0,0
paste sprite 4,0,0
if trans4<255 then inc trans4
set sprite alpha 1040,trans4
set sprite alpha 1041,trans4
set sprite alpha 1042,trans4
paste sprite 1040,270,200
paste sprite 1041,270,260
paste sprite 1042,270,380
if trans4=255 then stage=10
endif
if stage=10
show mouse
paste sprite 5,0,0
paste sprite 4,0,0
if mousex()<270 or mousex()>370 or mousey()<200 or mousey()>240
set sprite priority 1043,1
set sprite priority 1040,2
paste sprite 1040,270,200
else
set sprite priority 1040,1
set sprite priority 1043,2
paste sprite 1043,270,200
if mouseclick()=1
gosub clear_sprites
exit
endif
endif
if mousex()<270 or mousex()>370 or mousey()<260 or mousey()>300
set sprite priority 1044,1
set sprite priority 1041,2
paste sprite 1041,270,260
else
set sprite priority 1041,1
set sprite priority 1044,2
paste sprite 1044,270,260
if mouseclick()=1 then gosub loadgame
endif
if mousex()<270 or mousex()>370 or mousey()<380 or mousey()>420
set sprite priority 1045,1
set sprite priority 1042,2
paste sprite 1042,270,380
else
set sprite priority 1042,1
set sprite priority 1045,2
paste sprite 1045,270,380
if mouseclick()=1 then end
endif
endif
sync
loop
return
clear_sprites:
for i=1 to 13
for m=1 to 2
paste sprite spritenum(i,m),-1000,-1000
next m
next i
for i=1 to 5
paste sprite i,-1000,-1000
next i
for i=0 to 5
paste sprite 1040+i,-1000,-1000
next i
return
loadgame:
return
newgame:
gosub clear_sprites
goto game
return

Formerly known as "DarkWing Duck"