Quote: "what is wrong with my function"
Nothing. That's not what I said. Read the post again...
I've just spotted another error after looking at your code. Perhaps this will clarify: Define all functions at the
bottom of your code. You must also terminate your main program before in runs into a function as declarations must be done at the top of the code (Or it was like that in the stone age where I hail from). Luckily DBPro does function declarations automatically (I presume). So terminating your main program prevents a double declaration of the same function.
I've marked out your errors here (there may/may not be other errors, I'm just focusing on what I saw:
Rem Project: huge dungeon
Rem Created: Friday, February 10, 2012
Rem ***** Main Source File *****
set display mode 800,600,16
sync on
sync rate 0
hide mouse
backcolor=rgb(0,0,0)
backdrop on
color backdrop backcolor
cls
mapsize=512
dim map$(mapsize,mapsize)
maxcubes=16
cubesize=200
collisionstep=int(cubesize/10)
fog on
fog color backcolor
fog distance (int(maxcubes)*cubesize)
set camera range 1,(maxcubes*cubesize)
rem =============================================This is Where You Must Terminate Your Code=============
`<-------------------------------------------------------------------- There should be END
rem ====================================================================================================
function loadmap(filename$,size)
open to read 1,filename$
for y=1 to size
for x=1 to size
read byte 1,tmp
map$(x,y)=chr$(tmp)
next x
next y
close file 1
endfunction
remstart
======================================^ Oh my ==================================== Let's take a looksie....
That function above must move to the BOTTOM of your code too!!! If you need it, you must call it like so
// ete, etc,
loadmap("mymap.map", 9001)
// etc, etc
END
Define Functions at the bottom of code, always in DBPro
===========================================================================================================
remend
loadmap("dungeon.map", mapsize)
load image "wall2.jpg",1
load image "ground.jpg",2
load image "wall.jpg",3
` Wall
for i=1 to maxcubes*maxcubes
make object cube 100+i,cubesize
texture object 100+i,1
next i
` Floor
for i=1 to maxcubes*maxcubes
make object plain 10000+i,cubesize,cubesize
rotate object 10000+i,90,0,0
texture object 10000+i,2
next i
` Ceiling
for i=1 to maxcubes*maxcubes
make object plain 20000+i,cubesize,cubesize
rotate object 20000+i,270,0,0
texture object 20000+i,3
next i
set ambient light 30
make light 1
make light 2
set point light 1,0,0,0
set spot light 2,45,90
color light 2,RGB(252,216,141)
color light 1,RGB(236,182,100)
color light 0,RGB(0,0,0)
for z=1 to mapsize
for x=1 to mapsize
if map$(x,z)="O"
cx=x*cubesize
cz=z*cubesize
endif
next x
next z
position camera cx,0,cz
oldpositionx#=camera position x()
oldpositionz#=camera position z()
if mouseclick()=1 then move camera maxcubes
if mouseclick()=2 then move camera maxcubes*(-1)
ry#=wrapvalue(ry#+mousemovex())
rotate camera 0,ry#,0
cx#=int(camera position x()/cubesize)-int(maxcubes/2)
cz#=int(camera position z()/cubesize)-int(maxcubes/2)
tx#=camera position x()
tz#=camera position z()
zzz=0
for zz=1 to maxcubes
for xx=1 to maxcubes
zzz=zzz+1
curposx=int(cx#)+xx
curposz=int(cz#)+zz
if curposx<=1 then curposx=1
if curposx>=mapsize then curposx=mapsize
if curposz<=1 then curposz=1
if curposz>=mapsize then curposz=mapsize
` Wand
if map$(int(curposx),int(curposz))="#" or map$(int(curposx),int(curposz))="S"
show object 100+zzz
position object 100+zzz,curposx*cubesize,0.0,curposz*cubesize
else
hide object 100+zzz
endif
` Boden
if map$(int(curposx),int(curposz))=":" or map$(int(curposx),int(curposz))="D" or map$(int(curposx),int(curposz))="S" or map$(int(curposx),int(curposz))="T"
show object 10000+zzz
position object 10000+zzz,curposx*cubesize,(cubesize/2)*(-1),curposz*cubesize
else
hide object 10000+zzz
endif
` Decke
if map$(int(curposx),int(curposz))=":" or map$(int(curposx),int(curposz))="D" or map$(int(curposx),int(curposz))="S" or map$(int(curposx),int(curposz))="T"
show object 20000+zzz
position object 20000+zzz,curposx*cubesize,(cubesize/2),curposz*cubesize
else
hide object 20000+zzz
endif
next xx#
next yy#
oldpositionx#=camera position x()
oldpositionz#=camera position z()
position object 100+zzz,curposx*cubesize,0.0,curposz*cubesize
` wall
if map$(int(curposx),int(curposz))="#" or map$(int(curposx),int(curposz))="S"
show object 100+zzz
position object 100+zzz,curposx*cubesize,0.0,curposz*cubesize
` Collision detection
if map$(int(curposx),int(curposz))="#"
if tx#>=((curposx*cubesize)-(cubesize/2))-collisionstep and tx#<=((curposx*cubesize)+(cubesize/2))+collisionstep and tz#>=((curposz*cubesize)-(cubesize/2))-collisionstep and tz#<=((curposz*cubesize)+(cubesize/2))+collisionstep
position camera oldpositionx#,camera position y(),oldpositionz#
oldpositionx#=camera position x()
oldpositionz#=camera position z()
endif
endif
else
hide object 100+zzz
endif
position light 1,camera position x(),camera position y(),camera position z()
position light 2,camera position x(),camera position y(),camera position z()
color light 1,RGB(200+int(rnd(50)-25),120,60)
rotate light 2,camera angle x(),camera angle y(),camera angle z()
Here is your code, corrected:
Rem Project: huge dungeon
Rem Created: Friday, February 10, 2012
Rem ***** Main Source File *****
set display mode 800,600,16
sync on
sync rate 0
hide mouse
backcolor=rgb(0,0,0)
backdrop on
color backdrop backcolor
cls
mapsize=512
dim map$(mapsize,mapsize)
maxcubes=16
cubesize=200
collisionstep=int(cubesize/10)
fog on
fog color backcolor
fog distance (int(maxcubes)*cubesize)
set camera range 1,(maxcubes*cubesize)
loadmap("dungeon.map", mapsize)
load image "wall2.jpg",1
load image "ground.jpg",2
load image "wall.jpg",3
` Wall
for i=1 to maxcubes*maxcubes
make object cube 100+i,cubesize
texture object 100+i,1
next i
` Floor
for i=1 to maxcubes*maxcubes
make object plain 10000+i,cubesize,cubesize
rotate object 10000+i,90,0,0
texture object 10000+i,2
next i
` Ceiling
for i=1 to maxcubes*maxcubes
make object plain 20000+i,cubesize,cubesize
rotate object 20000+i,270,0,0
texture object 20000+i,3
next i
set ambient light 30
make light 1
make light 2
set point light 1,0,0,0
set spot light 2,45,90
color light 2,RGB(252,216,141)
color light 1,RGB(236,182,100)
color light 0,RGB(0,0,0)
for z=1 to mapsize
for x=1 to mapsize
if map$(x,z)="O"
cx=x*cubesize
cz=z*cubesize
endif
next x
next z
position camera cx,0,cz
oldpositionx#=camera position x()
oldpositionz#=camera position z()
if mouseclick()=1 then move camera maxcubes
if mouseclick()=2 then move camera maxcubes*(-1)
ry#=wrapvalue(ry#+mousemovex())
rotate camera 0,ry#,0
cx#=int(camera position x()/cubesize)-int(maxcubes/2)
cz#=int(camera position z()/cubesize)-int(maxcubes/2)
tx#=camera position x()
tz#=camera position z()
zzz=0
for zz=1 to maxcubes
for xx=1 to maxcubes
zzz=zzz+1
curposx=int(cx#)+xx
curposz=int(cz#)+zz
if curposx<=1 then curposx=1
if curposx>=mapsize then curposx=mapsize
if curposz<=1 then curposz=1
if curposz>=mapsize then curposz=mapsize
` Wand
if map$(int(curposx),int(curposz))="#" or map$(int(curposx),int(curposz))="S"
show object 100+zzz
position object 100+zzz,curposx*cubesize,0.0,curposz*cubesize
else
hide object 100+zzz
endif
` Boden
if map$(int(curposx),int(curposz))=":" or map$(int(curposx),int(curposz))="D" or map$(int(curposx),int(curposz))="S" or map$(int(curposx),int(curposz))="T"
show object 10000+zzz
position object 10000+zzz,curposx*cubesize,(cubesize/2)*(-1),curposz*cubesize
else
hide object 10000+zzz
endif
` Decke
if map$(int(curposx),int(curposz))=":" or map$(int(curposx),int(curposz))="D" or map$(int(curposx),int(curposz))="S" or map$(int(curposx),int(curposz))="T"
show object 20000+zzz
position object 20000+zzz,curposx*cubesize,(cubesize/2),curposz*cubesize
else
hide object 20000+zzz
endif
next xx#
next yy#
oldpositionx#=camera position x()
oldpositionz#=camera position z()
position object 100+zzz,curposx*cubesize,0.0,curposz*cubesize
` wall
if map$(int(curposx),int(curposz))="#" or map$(int(curposx),int(curposz))="S"
show object 100+zzz
position object 100+zzz,curposx*cubesize,0.0,curposz*cubesize
` Collision detection
if map$(int(curposx),int(curposz))="#"
if tx#>=((curposx*cubesize)-(cubesize/2))-collisionstep and tx#<=((curposx*cubesize)+(cubesize/2))+collisionstep and tz#>=((curposz*cubesize)-(cubesize/2))-collisionstep and tz#<=((curposz*cubesize)+(cubesize/2))+collisionstep
position camera oldpositionx#,camera position y(),oldpositionz#
oldpositionx#=camera position x()
oldpositionz#=camera position z()
endif
endif
else
hide object 100+zzz
endif
position light 1,camera position x(),camera position y(),camera position z()
position light 2,camera position x(),camera position y(),camera position z()
color light 1,RGB(200+int(rnd(50)-25),120,60)
rotate light 2,camera angle x(),camera angle y(),camera angle z()
END `< ------------------------------------------------- The all-important termination instruction!
`=========================== DEFINE FUNCTIONS BELOW THE END OF YOUR CODE =============================
function loadmap(filename$,size)
open to read 1,filename$
for y=1 to size
for x=1 to size
read byte 1,tmp
map$(x,y)=chr$(tmp)
next x
next y
close file 1
endfunction
Seems silly but it keeps things neater and more efficient this way and I think it's easier to translate into ASM too.