DarkBASIC Pro
Versão de Avaliação
Patch 5.7
USB Dongle
Forum
Indique
Lista de Email
Diário Antigo
Outros Produtos
Cartography Shop
DarkMatter
Local DBPro Sites
Italy
UK
Visualizador de Código Fonte
Este é o Código Fonte de "Room Demo".
Cor:
Verde
Laranja
Branco
Tam. Fonte:
Padrão
Grande
` This code is copyright Dark Basic Software Limited 2002 Rem Project: RoomDemo Rem Created: 30/07/2002 17:17:07 rem Hours: 20 rem Initialise sync on : sync rate 60 : hide mouse : backdrop off set image colorkey 0,0,0 set text font "Verdana" set text size 20 rem Global data global ambience# as integer global blockobj as integer dim objtype(10000) rem Make Hero gosub _make_hero rem Make Room gosub _create_lights gosub _make_room rem Start things off gosub _start_demo rem Main loop do rem Control Hero gosub _control_hero rem Control room effects gosub _control_effects rem Stats center text screen width()/2,440,user$ rem Update screen sync rem End loop loop end _control_hero: rem Store hero position before action oox1#=object position x(1)-40 ooy1#=object position y(1) ooz1#=object position z(1)-40 oox2#=object position x(1)+40 ooy2#=object position y(1)+190 ooz2#=object position z(1)+40 rem Move hero walk=0 scrape=0 if grabseq=0 if upkey()=1 then move object 1,4 : walk=1 if downkey()=1 then move object 1,-4 : walk=1 if leftkey()=1 then yrotate object 1,wrapvalue(object angle y(1)-4) : walk=1 if rightkey()=1 then yrotate object 1,wrapvalue(object angle y(1)+4) : walk=1 if controlkey()=1 and grab=0 and pushslider>0 then grab=1 : grabseq=1 : change=0 else if grabseq>=2 and grabseq<=3 and upkey()=1 and pushslider>0 if object position z(pushslider)<1800 if pushdire=1 then move object 1,4 : move object pushslider,4 : scrape=1 endif if object position x(pushslider)>200 if pushdire=2 then move object 1,4 : yrotate object pushslider,270 : move object pushslider,4 : yrotate object pushslider,0 : scrape=1 endif endif endif if (controlkey()=0 or upkey()=0) and grab=1 and grabseq<>4 then grabseq=4 : change=0 if (controlkey()=0 or upkey()=0) then pushslider=0 if scrape=1 then set sound volume 3,100 else set sound volume 3,0 rem Track hero with camera x#=object position x(1) y#=object position y(1) z#=object position z(1) a#=object angle y(1) d#=250.0 h#=185.0 s#=50.0 set camera to follow x#,y#,z#,a#,d#,h#,s#,1 rem Ensure hero stays within blocks ox1#=object position x(1)-40 oy1#=object position y(1) oz1#=object position z(1)-40 ox2#=object position x(1)+40 oy2#=object position y(1)+190 oz2#=object position z(1)+40 if get static collision hit(oox1#,ooy1#,ooz1#,oox2#,ooy2#,ooz2#,ox1#,oy1#,oz1#,ox2#,oy2#,oz2#)>0 ox#=object position x(1) oy#=object position y(1) oz#=object position z(1) ox#=ox#-get static collision x() oz#=oz#-get static collision z() position object 1,ox#,oy#,oz# endif rem Ensure hero stays outside sliding blocks colwithslider=object collision(1,0) if colwithslider=1 ox#=object position x(1) oy#=object position y(1) oz#=object position z(1) ox#=ox#-get object collision x() oz#=oz#-get object collision z() position object 1,ox#,oy#,oz# user$="USE CONTROL KEY AND FORWARD TO PUSH BLOCK" else user$="USE ARROW KEYS TO MOVE AROUND" endif if vic=1 then user$="YOU FOUND THE SECRET ROOM - WELL DONE!" rem If touching slider, figure out which one if colwithslider=1 and controlkey()=1 nearest=0 dist#=999999 for obj=101 to blockobj-1 if objtype(obj)=3 dx#=object position x(obj)-object position x(1) dz#=object position z(obj)-object position z(1) dd#=sqrt(abs(dx#*dx#)+abs(dz#*dz#)) da#=wrapvalue(atanfull(dx#,dz#)) if dd#
360-22 or a#<22) and (da#>360-16 or da#<16) then ok=1 : tdire=1 if (a#>270-22 and a#<270+22) and (da#>270-16 and da#<270+16) then ok=1 : tdire=2 if ok=1 then dist#=dd# : nearest=obj : dire=tdire endif endif next obj if nearest>0 then pushslider=nearest : pushdire=dire endif rem Ensure camera stays within blocks ocx1#=cx1# : ocy1#=cy1# : ocz1#=cz1# ocx2#=cx2# : ocy2#=cy2# : ocz2#=cz2# cx1#=camera position x()-20 cy1#=camera position y()-10 cz1#=camera position z()-20 cx2#=camera position x()+20 cy2#=camera position y()+10 cz2#=camera position z()+20 if get static collision hit(ocx1#,ocy1#,ocz1#,ocx2#,ocy2#,ocz2#,cx1#,cy1#,cz1#,cx2#,cy2#,cz2#)>0 cx#=camera position x() cy#=camera position y() cz#=camera position z() cx#=cx#-get static collision x() cy#=cy#-get static collision y() cz#=cz#-get static collision z() position camera cx#,cy#,cz# endif rem Animate hero for walking if grab=0 if walk<>lastwalk then change=1 if change=1 if walk=0 then loop object 1,0*heroframe#,39*heroframe# if walk=1 then loop object 1,40*heroframe#,59*heroframe# change=0 : lastwalk=walk endif else if change=0 if grabseq=1 then play object 1,60*heroframe#,80*heroframe# if grabseq=2 then play object 1,120*heroframe#,150*heroframe# if grabseq=3 then loop object 1,130*heroframe#,149*heroframe# if grabseq=4 then play object 1,80*heroframe#,100*heroframe# if grabseq=5 then play object 1,60*heroframe#,80*heroframe# if grabseq=6 then play object 1,160*heroframe#,190*heroframe# if grabseq=7 then loop object 1,170*heroframe#,189*heroframe# change=1 else if grabseq=1 rem Ensure hero faces slider slowly if pushdire=1 then a#=curveangle(0,object angle y(1),4.0) if pushdire=2 then a#=curveangle(270,object angle y(1),4.0) yrotate object 1,a# endif if grabseq>=1 and grabseq<=2 rem Ensure hero moves far enough away dx#=object position x(pushslider)-object position x(1) dz#=object position z(pushslider)-object position z(1) dd#=sqrt(abs(dx#*dx#)+abs(dz#*dz#)) if dd#<204 then move object 1,-4.0 endif if grabseq=1 and object frame(1)>79*heroframe# then change=0 : inc grabseq if grabseq=2 and object frame(1)>=149*heroframe# then change=0 : inc grabseq if grabseq=4 and object frame(1)>=95*heroframe# then grabseq=0 : grab=0 : lastwalk=-1 if grabseq=5 and object frame(1)>79*heroframe# then change=0 : inc grabseq if grabseq=6 and object frame(1)>=189*heroframe# then change=0 : inc grabseq endif endif rem Control ambience based on light proximity dx#=abs(camera position x()-400) : dy#=abs(camera position z()-600) distamb#=sqrt((dx#*dx#)+(dy#*dy#))/35.0 if distamb#>15 then distamb#=15 ambience#=curvevalue(distamb#,ambience#,5.0) set ambient light ambience# rem reposition listener for 3dsound position listener object position x(1),object position y(1)+250,object position z(1) return _control_effects: rem Scroll lightspot scroll object texture 2001,0,0.0005 rem Control effect on objects for obj=101 to blockobj-1 if objtype(obj)>0 r#=wrapvalue(r#+0.5) if objtype(obj)=1 then yrotate object obj,90+(cos(wrapvalue(r#+wrapvalue(obj*100)))*5.0) if objtype(obj)=2 then yrotate object obj,0+(cos(wrapvalue(r#+wrapvalue(obj*100)))*5.0) endif next obj rem Move particle in fire slightly position particle emissions 1,0,0,(rnd(20)-10)/20.0 rem Rotate green spotlight l#=wrapvalue(l#+1) : position light 4,400+sin(l#)*50,100,1700+cos(l#)*50 if object position x(1)<600 and object position z(1)>1400 and vic=0 then play sound 4 : vic=1 return _start_demo: rem Begin Hero Activity position object 1,400,0,600 yrotate object 1,90 heroframe#=total object frames(1)/200.0 loop object 1,0,39*heroframe# rem Setup conelight object make object cone 2001,500 position object 2001,400,0,600 scale object 2001,100,500,100 ghost object on 2001,0 load image "media\gfx\shimer.bmp",2001 texture object 2001,2001 scale object texture 2001,1,0.2 set object collision off 2001 rem Begins ounds loop sound 1 : loop sound 2 rem Setup camera position camera 400,250,600 return _create_lights: rem Setup main soft light set point light 0,400,0,600 position light 0,400,0,600 set light range 0,10000 rem Create cone of light make light 1 set spot light 1,5,60 position light 1,400,500,600 rem Create particles for fire load image "media\gfx\fire.bmp",1 make particles 1,1,5,60.0 set particle gravity 1,1 set particle life 1,10 set particle speed 1,0.006 rem Create particles for torches torchparticles=2 for t=2 to 3 make light t set point light t,0,0,0 color light t,rgb(255,48,48) make particles t,1,10,20.0 set particle gravity t,-3 set particle life t,15 set particle speed t,0.006 next t rem Create green light of secret room make light 4 set point light 4,0,0,0 color light 4,rgb(32,255,32) set light range 4,600 return _make_hero: rem Load Hero load object "media\hero\roomdemo.x",1 xrotate object 1,270 fix object pivot 1 rotate object 1,0,180,0 set object speed 1,12000 make object collision box 1,-40,0,-40,40,150,40,0 rem Load Sounds load 3dsound "media\sounds\fire.wav",1 : position sound 1,1200,250,400 load 3dsound "media\sounds\wind.wav",2 : position sound 2,600,250,400 load sound "media\sounds\move.wav",3 : set sound volume 3,0 : loop sound 3 load sound "media\sounds\treat.wav",4 return _make_room: rem Room media set dir "media\room\" rem Create Floor template template=1001 : make object cube template,200 make mesh from object template,template delete object template rem Load template images template=1001 : load image "floor.bmp",template template=1002 : load image "roof.bmp",template template=1003 : load image "wallb.bmp",template template=1004 : load image "wallc.bmp",template template=1005 : load image "walld.bmp",template template=1006 : load image "iron.bmp",template rem Load template transparent images template=1011 : load image "bannera.bmp",template template=1012 : load image "bannerb.bmp",template template=1013 : load image "bannerc.bmp",template rem Create room blockobj=101 for pass=0 to 1 restore _room1 for z=0 to 9 for x=0 to 9 read mapid if pass=0 if mapid=0 gosub _addfloor gosub _addroof endif if mapid=1 gosub _addlowerwall gosub _addupperwall endif if mapid=2 gosub _addfloor load object "door.x",blockobj position object blockobj,x*200,0,(10-z)*200 set object collision off blockobj coly=100 : gosub _setblockcollision inc blockobj gosub _addupperwall endif if mapid=3 gosub _addfloor endif if mapid=4 gosub _addfloor load object "fireplace.x",blockobj set object collision off blockobj coly=100 : gosub _setblockcollision position object blockobj,x*200,0,(10-z)*200 position particles 1,(x*200)-70,-20,(10-z)*200 yrotate object blockobj,270 inc blockobj gosub _addupperwall endif if mapid=5 gosub _addfloor gosub _addroof load object "torch.x",blockobj set object collision off blockobj position object blockobj,x*200,150,(10-z)*200 position particles torchparticles,(x*200)+75,210,(10-z)*200 position light torchparticles,(x*200),50,(10-z)*200 inc torchparticles inc blockobj endif if mapid=6 gosub _addlowerwall gosub _addupperwindow endif if mapid=7 gosub _addlowerwall gosub _addupperwall endif if mapid=8 gosub _addlowerwall gosub _addupperwall endif if mapid=9 make object blockobj,1001,1004 set object collision off blockobj position object blockobj,x*200,100,(10-z)*200 inc blockobj make object blockobj,1001,1005 position object blockobj,x*200,300,(10-z)*200 inc blockobj endif if mapid=10 gosub _addfloor make object blockobj,1001,1006 make object collision box blockobj,-100,-100,-100,100,100,100,0 position object blockobj,x*200,100,(10-z)*200 objtype(blockobj)=3 inc blockobj gosub _addupperwall endif endif if pass=1 if mapid=4 gosub _addbannerc endif if mapid=7 gosub _addbannera endif if mapid=8 gosub _addbannerb endif endif next x next z next pass rem restore directory set dir "..\.." return _addfloor: make object blockobj,1001,1001 set object collision off blockobj position object blockobj,x*200,-100,(10-z)*200 inc blockobj return _addroof: make object blockobj,1001,1002 set object collision off blockobj position object blockobj,x*200,500,(10-z)*200 inc blockobj return _addlowerwall: make object blockobj,1001,1003 set object collision off blockobj position object blockobj,x*200,100,(10-z)*200 coly=100 : gosub _setblockcollision inc blockobj return _addupperwall: make object blockobj,1001,1003 set object collision off blockobj position object blockobj,x*200,300,(10-z)*200 coly=300 : gosub _setblockcollision inc blockobj return _addupperwindow: load object "window.x",blockobj set object collision off blockobj position object blockobj,x*200,200,(10-z)*200 coly=300 : gosub _setblockcollision inc blockobj return _addbannera: load object "bannera.x",blockobj set object collision off blockobj texture object blockobj,1011 position object blockobj,(x*200),165,((10-z)*200)+115 yrotate object blockobj,90 set object blockobj,1,1,1 objtype(blockobj)=1 inc blockobj return _addbannerb: load object "bannerb.x",blockobj set object collision off blockobj texture object blockobj,1012 position object blockobj,(x*200),165,((10-z)*200)-115 yrotate object blockobj,90 set object blockobj,1,1,1 objtype(blockobj)=1 inc blockobj return _addbannerc: load object "bannera.x",blockobj set object collision off blockobj texture object blockobj,1013 position object blockobj,(x*200)-115,165,((10-z)*200) set object blockobj,1,1,1,1,0,0,0 objtype(blockobj)=2 inc blockobj return _setblockcollision: make static collision box (x*200)-100,coly-100,((10-z)*200)-100,(x*200)+100,coly+100,((10-z)*200)+100 return _room1: data 01,01,09,01,01,01,01,01,01,01 data 01,00,00,00,01,00,00,00,00,01 data 09,00,00,00,10,00,00,00,00,01 data 01,00,00,00,01,00,00,00,00,01 data 01,08,02,08,01,00,00,00,00,01 data 01,00,00,00,01,10,01,01,02,01 data 01,00,00,00,00,00,05,01,00,01 data 01,00,03,00,00,00,00,04,00,01 data 01,00,00,00,00,00,05,01,00,01 data 01,06,07,06,07,07,01,01,01,01
Selecionar todo o Código
Ver este download
Copyright © 2003 Dark Basic Software Limited.
Virtual Object Informática Ltda.®