REM **************************************************
REM Game: Age of darkness
REM Author: Dennis Fredriksson
REM Date: 13 Sep 2008
REM **************************************************
REM ==================================================
REM Setup the game
REM ==================================================
REM === Setup window ===
sync on : sync rate 60
hide mouse
autocam off
backdrop on : color backdrop 0
disable escapekey
set dir get dir$()
img_loading = 1 : load image "imagesloading.png",img_loading
spr_loading = 1 : sprite spr_loading,170,0,img_loading
REM === Setup the variables ===
var_fog = 0 : var_ufog = fun_optionread("fog.txt",1)
var_filtering = 0
var_alphablending = 0 : var_ualphablending = 0
var_texmode1 = fun_optionread("texmode1.txt",2)
var_texmode2 = fun_optionread("texmode2.txt",1)
var_ambientlight = 1
var_playername$ = "Dennis"
var_playertype$ = "Barbarian"
var_playerhealthmax = 100
var_playerhealth = 100
var_playerenergymax = 50
var_playerenergy = 50
var_playerstr = 10
var_playerint = 10
var_playeragi = 10
var_playersta = 10
var_playerlevel = 1
var_playercap = 150
var_playerspeed = 2.5
var_playerturnspeed = 5
var_playerjump = 0
var_playerjumpspd = 0
var_playercanattack = 10
var_playerx = 0
var_playery = 0
var_playerz = 0
var_playeroldx = 0
var_playeroldy = 0
var_playeroldz = 0
var_playerangy = 0
var_playerangley = 0
var_menu = 0
var_game = 0
var_loadedlevel = 0
var_options = 0
var_pause = 0
var_level$ = "Test"
var_press = 10
textureg$ = ""
texturew$ = ""
dim ary_ememies(50,6)
dim ary_model(100,11)
dim ary_enemy(100,10)
dim ary_enemyname$(100)
dim ary_loadedter(400,3)
dim ary_loadedobj(400,4)
Rem === Load images ===
img_banner = 2 : load image "imagesbanner.png",img_banner
REM === Load textures ===
load image "texturesgrass1.png",100
load image "texturesbark1.png",101
load image "texturessky1.png",102
load image "texturesleaf1.png",103
load image "textureswater1.png",104
load image "textureswood1.png",105
load image "texturesstonewall1.png",106
load image "texturesbrickwall1.png",107
load image "textureswood2.png",108
load image "texturesmetal1.png",109
load image "texturespalm1.png",110
load image "texturesleaf2.png",111
REM === Load models ===
fun_setmodel("househousebase1.x",50,106,90,90,90,1,2500,1)
fun_setmodel("househouseroof1.x",51,105,90,90,90,1,2500,1)
fun_setmodel("househousedoor1.x",52,105,90,0,0,1,2500,0)
fun_setmodel("housechimney1.x",53,107,90,0,0,1,2500,0)
fun_setmodel("housechimney1.x",53,107,90,0,0,1,2500,0)
fun_setmodel("treetreebase1.x",54,101,90,0,0,1,2500,0)
fun_setmodel("treetree1.x",55,103,90,0,0,1,2500,0)
fun_setmodel("propcrowcage1.x",56,109,90,0,0,1,2500,0)
fun_setmodel("propcrowcagestand1.x",57,108,90,0,0,1,2500,0)
fun_setmodel("propbox1.x",58,105,90,0,0,1,2500,0)
fun_setmodel("propbox2.x",59,105,90,0,0,1,2500,0)
fun_setmodel("propbox3.x",60,105,90,0,0,1,2500,0)
fun_setmodel("dockdock1.x",61,105,90,0,0,1,2500,0)
fun_setmodel("propbarrel1.x",62,105,90,0,0,1,2500,0)
fun_setmodel("treepalmbase1.x",63,110,90,0,0,1,2500,0)
fun_setmodel("treepalm1.x",64,111,90,0,0,1,2500,0)
fun_modelpack(1,50,51,52,53,0,0,0,0,0,0)
fun_modelpack(2,54,55,0,0,0,0,0,0,0,0)
fun_modelpack(3,56,57,0,0,0,0,0,0,0,0)
fun_modelpack(4,61,0,0,0,0,0,0,0,0,0)
fun_modelpack(5,62,0,0,0,0,0,0,0,0,0)
fun_modelpack(6,63,64,0,0,0,0,0,0,0,0)
fun_modelpack(7,58,0,0,0,0,0,0,0,0,0)
fun_modelpack(8,59,0,0,0,0,0,0,0,0,0)
fun_modelpack(9,60,0,0,0,0,0,0,0,0,0)
REM === Check hardware ===
var_fog = fog available()
var_filtering = filtering available()
var_alphablending = alphablending available()
REM === Display menu ===
var_menu = 1 : delete sprite spr_loading
REM ==================================================
REM Loop start
REM ==================================================
do
REM ==================================================
REM Menu
REM ==================================================
if var_menu = 1
var_press = var_press-1
if var_press < 0 then var_press = 0
REM === Check for menu input ===
if var_press = 0
if returnkey()=1 then var_menu = 0 : var_game = 1 : var_press = 10
if escapekey()=1 then fun_endgame(200,200,20,200)
if inkey$()="o" and object exist(1)=0
make object sphere 1,5 : texture object 1,106
make matrix 1,50,50,5,5 : set matrix texture 1,var_texmode1,var_texmode2
prepare matrix texture 1,100,1,1 : randomize matrix 1,5
position matrix 1,0,-10,0 : update matrix 1
var_menu = 0 : var_options = 1 : var_press = 10
endif
endif
REM === Display the menu ===
spr_banner = 2 : sprite spr_banner,140,0,img_banner
text 96,128,"Press ENTER to play the game"
text 96,128+16,"Press T to play the tutorial"
text 96,128+32,"Press O to open the options"
text 96,128+128,"Press ESC to quit"
text 16,480-32,"Fog: "+str$(var_fog)+" ; Filtering: "+str$(var_filtering)+" ; Alpha bledning: "+str$(var_alphablending)
endif
REM ==================================================
REM Options
REM ==================================================
if var_options = 1
var_press = var_press-1
if var_press < 0 then var_press = 0
position object 1,7,0,22 : point camera 0,0,10
REM === Check for options input ===
if var_press = 0
if escapekey()=1
fun_optionwrite("fog.txt",var_ufog)
fun_optionwrite("texmode1.txt",var_texmode1)
fun_optionwrite("texmode2.txt",var_texmode2)
delete object 1 : delete matrix 1
var_options = 0 : var_menu = 1 : var_press = 10
endif
if inkey$()="f" then var_ufog = fun_option(var_ufog,1,1,0) : var_press = 10
if inkey$()="t"
var_texmode1 = fun_option(var_texmode1,1,2,0) : var_press = 10
set matrix texture 1,var_texmode1,var_texmode2 : update matrix 1
endif
if inkey$()="m"
var_texmode2 = fun_option(var_texmode2,1,1,0) : var_press = 10
set matrix texture 1,var_texmode1,var_texmode2 : update matrix 1
endif
if inkey$()="a" then var_ambientlight = fun_option(var_ambientlight,1,2,0) : var_press = 10
endif
REM === Update the settings ===
if var_ufog = 0 then backdrop off
if var_ufog = 1 then backdrop on
if var_ambientlight = 0 then set ambient light 0
if var_ambientlight = 1 then set ambient light 50
if var_ambientlight = 2 then set ambient light 100
REM === Display the menu ===
text 16,128,"(F) Use fog = "+str$(var_ufog)
text 16,128+16,"(T) Use terrain texture mode = "+str$(var_texmode1)
text 16,128+32,"(M) Use terrain mipmap = "+str$(var_texmode2)
text 16,128+48,"(A) Use ambient light = "+str$(var_ambientlight)
text 16,480-32,"Press ESCAPE to go back"
endif
REM ==================================================
REM Pause
REM ==================================================
if var_pause = 1
REM === Check for player input ===
if spacekey()=1 then var_game = 1 : var_pause = 0
REM === Draw the pause text ===
center text 320,240,"Game paused"
center text 320,256,"Press SPACE to resume playing"
endif
REM ==================================================
REM Game
REM ==================================================
if var_game = 1
REM === Load level ===
if var_loadedlevel = 0
hide sprite 2 : cls 0 : sprite 1,200,0,1
REM === The world ===
fun_setupenemy()
if var_level$ = "Test" then lvl_load("levelsTestterrain.dat","levelsTestobjects.dat",1,var_texmode1,var_texmode2)
REM === Player ===
make object cube 1,10 : position object 1,1200,0,1200
make object sphere 2,5500 : texture object 2,102 : set object 2,1,0,0,1
hide sprite 1 : var_loadedlevel = 1
endif
REM === Run game level ===
if var_loadedlevel = 1
REM === Decrease varaibles ===
dec var_playercanattack,1
if var_playercanattack < 0 then var_playercanattack = 0
REM === Get the old plyer position ===
var_playeroldx = object position x(1)
var_playeroldz = object position z(1)
if var_playerjump = 0
var_playeroldy = get ground height(1,var_playerx,var_playerz)
endif
if var_playerjump = 1
var_playeroldy = var_playeroldy+var_playerjumpspd
var_playerjumpspd = var_playerjumpspd-1
if get ground height(1,var_playeroldx,var_playeroldz) > var_playeroldy
var_playerjump = 0 : var_playerjumpspd = 0
endif
endif
REM === Check for player input ===
if escapekey()=1 then show sprite 2 : var_game = 0 : var_menu = 1
if upkey()=1 then move object 1,var_playerspeed*2
if downkey()=1 then move object 1,var_playerspeed-(var_playerspeed*2)
if leftkey()=1 then var_playerangy = var_playerangy-var_playerturnspeed
if rightkey()=1 then var_playerangy = var_playerangy+var_playerturnspeed
if spacekey()=1 and var_playerjump = 0 then var_playerjump = 1 : var_playerjumpspd = 10
if inkey$()="p" then var_pause = 1 : var_game = 0
REM === Get player position ===
var_playerangley = wrapvalue(var_playerangy)
yrotate object 1,var_playerangley
var_playerx = object position x(1)
var_playerz = object position z(1)
if var_playerjump = 0
var_playery = get ground height(1,var_playerx,var_playerz)
endif
if var_playerjump = 1
var_playery = var_playery+var_playerjumpspd
var_playerjumpspd = var_playerjumpspd-1
if get ground height(1,var_playerx,var_playerz) > var_playery
var_playerjump = 0 : var_playerjumpspd = 0
endif
endif
REM === Check fo collisions with objects ===
_oldx = var_playeroldx : _oldy = var_playeroldy : _oldz = var_playeroldz
_x = var_playerx : _y = var_playery : _z = var_playerz
if get static collision hit(_oldx-5,_oldy-5,_oldz-5,_oldx+5,_oldy+5,_oldz+5,_x-5,_y-5,_z-5,_x+5,_y+5,_z+5)>0
dec var_playerx,get static collision x()
dec var_playery,get static collision y()
dec var_playerz,get static collision z()
endif
REM === Attack enemy ===
if controlkey()=1 and var_playercanattack = 0
for i=0 to 50
if object exist(140+i)
var_enemyx = object position x(140+i)
var_enemyy = object position y(140+i)
var_enemyz = object position z(140+i)
dist = fun_getdist(var_playerx,var_playery,var_playerz,var_enemyx,var_enemyy,var_enemyz)
if dist < 16
ary_ememies(i,2) = ary_ememies(i,2)-1
var_playercanattack = 10
endif
endif
next i
endif
REM === Handel enemies ===
for i=0 to 50
if object exist(140+i)
ary_ememies(i,5) = ary_ememies(i,5)-1
if ary_ememies(i,5) < 0 then ary_ememies(i,5) = 0
if ary_ememies(i,2) <= 0
delete object 140+i
ary_ememies(i,1) = 0 : ary_ememies(i,2) = 0 : ary_ememies(i,3) = 0 : ary_ememies(i,4) = 0
endif
if ary_ememies(i,2) > 0 and ary_ememies(i,6) = 1
if ary_ememies(i,3) = 1
var_enemyx = object position x(140+i)
var_enemyy = object position y(140+i)
var_enemyz = object position z(140+i)
dist = fun_getdist(var_playerx,var_playery,var_playerz,var_enemyx,var_enemyy,var_enemyz)
if dist <= 128
ary_ememies(i,3) = 2
endif
endif
if ary_ememies(i,3) = 2
var_enemyx = object position x(140+i)
var_enemyz = object position z(140+i)
var_enemyy = get ground height(1,var_enemyx,var_enemyz)
point object 140+i,var_playerx,var_enemyy,var_playerz
move object 140+i,1 : rotate object 140+i,0,0,0
var_enemyx = object position x(140+i)
var_enemyy = object position y(140+i)
var_enemyz = object position z(140+i)
dist = fun_getdist(var_playerx,var_playery,var_playerz,var_enemyx,var_enemyy,var_enemyz)
if dist <= 15
ary_ememies(i,3) = 3
endif
endif
if ary_ememies(i,3) = 3
var_enemyx = object position x(140+i)
var_enemyy = object position y(140+i)
var_enemyz = object position z(140+i)
dist = fun_getdist(var_playerx,var_playery,var_playerz,var_enemyx,var_enemyy,var_enemyz)
if dist > 16
ary_ememies(i,3) = 2
endif
if dist <= 16 and ary_ememies(i,5) = 0
var_playerhealth = var_playerhealth-1
ary_ememies(i,5) = ary_enemy(ary_ememies(i,1),4)
endif
endif
endif
if ary_ememies(i,2) > 0 and ary_ememies(i,6) = 2
if ary_ememies(i,2) < ary_enemy(ary_ememies(i,1),2)
ary_ememies(i,6) = 1
endif
endif
endif
next i
REM === Display enemy info ===
for i=0 to 50
if object exist(140+i)
if object in screen(140+i)
var_enemyx = object position x(140+i)
var_enemyy = object position y(140+i)
var_enemyz = object position z(140+i)
dist = fun_getdist(var_playerx,var_playery,var_playerz,var_enemyx,var_enemyy,var_enemyz)
if dist <= 256
_enx = object screen x(140+i)
_eny = object screen y(140+i)
center text _enx,_eny,ary_enemyname$(ary_enemy(i,1))
center text _enx,_eny+16,"Health: "+str$(ary_ememies(i,2))
endif
endif
endif
next i
REM === Draw the player
position object 1,var_playerx,var_playery,var_playerz
position object 2,var_playerx,var_playery,var_playerz
set camera to follow var_playerx,var_playery,var_playerz,object angle y(1),64,var_playery+32,5.0,0
REM === Draw the HUD ===
text 16,16,"Health: "+str$(var_playerhealth)+"/"+str$(var_playerhealthmax)
if shiftkey()=1
center text 320,240,"FPS: "+str$(screen fps())
center text 320,240+16,"PlayerX: "+str$(var_playerx)
center text 320,240+32,"PlayerY: "+str$(var_playery)
center text 320,240+48,"PlayerZ: "+str$(var_playerz)
endif
endif
endif
REM ==================================================
REM Loop end
REM ==================================================
sync
loop
REM ==================================================
REM Functions
REM ==================================================
REM === Function ends game + clears memory ===
function fun_endgame(images,sprites,matrix,models)
undim ary_ememies(50)
undim ary_model(100)
undim ary_enemyname$(100)
undim ary_enemy(100)
undim ary_loadedobj(400)
undim ary_loadedter(400)
for i=1 to images
if image exist(i) then delete image i
next i
for ii=1 to images
if sprite exist(ii) then delete sprite ii
next ii
for t=1 to matrix
if matrix exist(t) then delete matrix t
next t
for tt=1 to models
if object exist(tt) then delete object tt
next tt
delete static objects
end
endfunction
REM === Function that creates the enemies ===
function fun_enemies(num,id,status,model$,texture,scale)
ary_ememies(num,1) = id
ary_ememies(num,2) = ary_enemy(id,2)
ary_ememies(num,3) = status
ary_ememies(num,4) = 140+num
ary_ememies(num,5) = ary_enemy(id,4)
ary_ememies(num,6) = ary_enemy(id,5)
load object "modelsenemy"+model$,140+num : texture object 140+num,texture
scale object 140+num,scale,scale,scale : xrotate object 140+num,90
fix object pivot 140+num
endfunction
REM === Function that places the created enemy ===
function fun_posenemy(num,x,y,z)
position object ary_ememies(num,4),x,y,z
endfunction
REM === Function creates a static object ===
function fun_object(mdlpack,posx,posy,posz,rotx,roty,rotz)
for i=1 to 11
if ary_model(mdlpack,i) > 0
if object exist(ary_model(mdlpack,i))
position object ary_model(mdlpack,i),posx,posy,posz
xrotate object ary_model(mdlpack,i),rotx
yrotate object ary_model(mdlpack,i),roty
zrotate object ary_model(mdlpack,i),rotz
make static object ary_model(mdlpack,i)
endif
endif
next i
endfunction
REM === Function that change option value ===
function fun_option(variable,add,max,min)
variable = variable+add
if variable > max
variable = min
endif
endfunction variable
REM === Function that reads the option file ===
function fun_optionread(fname$,curvalue)
if file exist("options"+fname$)
open to read 1,"options"+fname$
read float 1,curvalue
close file 1
endif
endfunction curvalue
REM === Function that writes the option file ===
function fun_optionwrite(fname$,curvalue)
if file exist("options"+fname$)=1 then delete file "options"+fname$
open to write 1,"options"+fname$
write string 1,str$(curvalue)
close file 1
endfunction curvalue
REM === Function that creates a model pack ===
function fun_modelpack(num,mdl1,mdl2,mdl3,mdl4,mdl5,mdl6,mdl7,mdl8,mdl9,mdl10)
if mdl1 > 0 then ary_model(num,2) = mdl1
if mdl2 > 0 then ary_model(num,3) = mdl2
if mdl3 > 0 then ary_model(num,4) = mdl3
if mdl4 > 0 then ary_model(num,5) = mdl4
if mdl5 > 0 then ary_model(num,6) = mdl5
if mdl6 > 0 then ary_model(num,7) = mdl6
if mdl7 > 0 then ary_model(num,8) = mdl7
if mdl8 > 0 then ary_model(num,9) = mdl8
if mdl9 > 0 then ary_model(num,10) = mdl9
if mdl10 > 0 then ary_model(num,11) = mdl10
endfunction
REM === Funcation that mesures distance ===
function fun_getdist(midx,midy,midz,x,y,z)
dis=0
dis=sqrt(((x-midx)^2)+((y-midy)^2)+((z-midz)^2))
endfunction dis
REM === Funcation that adds enemy to enemy list ===
function fun_addenemy(id,nameid,name$,health,dmg,atcrate,type,level)
ary_enemy(id,1) = nameid : ary_enemy(id,2) = health : ary_enemy(id,3) = dmg
ary_enemy(id,4) = atcrate : ary_enemy(id,5) = type : ary_enemy(id,6) = level
ary_enemyname$(nameid) = name$
endfunction
REM === Function that loads a model ===
function fun_setmodel(model$,id,texture,rotx,roty,rotz,fix,scale,show)
load object "models/"+model$,id
texture object id,texture
xrotate object id,rotx
yrotate object id,roty
zrotate object id,rotz
fix object pivot id
scale object id,scale,scale,scale
if show = 1 then show object id
if show = 0 then hide object id
endfunction
REM ==================================================
REM Enemies
REM ==================================================
REM 1 = Name id : 2 = Health : 3 = Dmg : 4 = Atc rate
REM 5 = Type : 6 = Level
REM Type 1 = Aggro : Type 2 = Neutral
REM ==================================================
function fun_setupenemy()
fun_addenemy(1,1,"Spider",20,1,15,2,1)
fun_addenemy(2,2,"Big spider",40,2,15,1,2)
endfunction
REM ==================================================
REM Levels
REM ==================================================
function lvl_load(terrain$,object$,wateruse,texmode1,texmode2)
REM === Load terrain ===
open to read 1,terrain$
read string 1,textureg$
read string 1,texturew$
for i=0 to 400
if file end(1)=0
read string 1,x$
read string 1,y$
read string 1,h$
ary_loadedter(i,1) = val(x$)
ary_loadedter(i,2) = val(y$)
ary_loadedter(i,3) = val(h$)
endif
next i
close file 1
REM === Load objects ===
open to read 1,object$
for i=0 to 400
if file end(1)=0
read string 1,mod$
read string 1,x$
read string 1,z$
read string 1,rot$
ary_loadedobj(i,1) = val(mod$)
ary_loadedobj(i,2) = val(x$)
ary_loadedobj(i,3) = val(z$)
ary_loadedobj(i,4) = val(rot$)
endif
next i
close file 1
REM === Load required resources ===
if file exist("textures"+textureg$)=1 then load image "textures"+textureg$,9999
if file exist("textures"+texturew$)=1 then load image "textures"+texturew$,9998
REM === Create water ===
if wateruse = 1 and image exist(9998)
make matrix 2,10000,10000,40,40
set matrix texture 2,texmode1,texmode2
prepare matrix texture 2,9998,1,1
position matrix 2,-2500,-5,-2500
ghost matrix on 2
update matrix 2
endif
REM === Create terrain ===
make matrix 1,3000,3000,30,30
set matrix texture 1,texmode1,texmode2
prepare matrix texture 1,9999,1,1
for i=0 to 400
if ary_loadedter(i,1) > -1 and ary_loadedter(i,2) > -1
set matrix height 1,ary_loadedter(i,1),ary_loadedter(i,2),ary_loadedter(i,3)
endif
next i
update matrix 1
REM === Create objects ===
for i=0 to 400
if ary_loadedobj(i,1) > -1 and ary_loadedobj(i,2) > -1 and ary_loadedobj(i,3) > -1
w = ary_loadedobj(i,2) : d = ary_loadedobj(i,3) : h = get ground height(1,w,d) : fun_object(ary_loadedobj(i,1),w,h,d,0,0,ary_loadedobj(i,4))
endif
next i
REM === Remove used resources ===
if image exist(9999)=1 then delete image 9999
if image exist(9998)=1 then delete image 9998
endfunction
That's the game source code.
The tiny thing I'm talking about is a change in the model loading code, but it shouldn't do somethign like this. I even changed it back without any success. I hope you guys can solve this, beacause I cannot. I'll gladly credit the person who solves it.
Oh, also, something that starts with fun_ is a function; ary_ is an array; var_ is a variable.
Note that not all variables have the var_ infront of it