home *** CD-ROM | disk | FTP | other *** search
/ DarkBasic Professional / DarkBasicPro.iso / data1.cab / Lang_Files_(English) / Help / tutorials / tutorial8.dba < prev    next >
Encoding:
Text File  |  2004-09-22  |  6.7 KB  |  263 lines

  1. rem Tutorial 8
  2.  
  3. rem Initial settings
  4. sync on : sync rate 100
  5. backdrop off : hide mouse
  6.  
  7. rem Select font
  8. set text font "arial" : set text size 16
  9. set text to bold : set text transparent
  10.  
  11. rem Loading prompt
  12. sync : center text screen width()/2,screen height()/2,"LOADING" : sync
  13.  
  14. rem Load all media for game
  15. gosub _load_game
  16.  
  17. rem Setup all objects for game
  18. gosub _setup_game
  19.  
  20. rem Game loop
  21. do
  22.  
  23.  rem Control game elements
  24.  gosub _control_player
  25.  gosub _control_gunandbullet
  26.  gosub _control_enemies
  27.  
  28.  rem Update screen
  29.  sync
  30.  
  31. rem End loop
  32. loop
  33.  
  34. rem End program
  35. end
  36.  
  37. _control_player:
  38.  
  39. rem Control player direction
  40. rotate camera camera angle x(0)+(mousemovey()/2.0),camera angle y(0)+(mousemovex()/2.0),0
  41.  
  42. rem Control player movement
  43. cx#=camera angle x(0) : cy#=camera angle y(0)
  44. if upkey()=1 then xrotate camera 0,0 : move camera 0,0.2 : xrotate camera 0,cx#
  45. if downkey()=1 then xrotate camera 0,0 : move camera 0,-0.2 : xrotate camera 0,cx#
  46. if leftkey()=1 then yrotate camera 0,cy#-90 : move camera 0.2 : yrotate camera 0,cy#
  47. if rightkey()=1 then yrotate camera 0,cy#+90 : move camera 0.2 : yrotate camera 0,cy#
  48. if wrapvalue(camera angle x(0))>40 and wrapvalue(camera angle x(0))<180 then xrotate camera 0,40
  49. if wrapvalue(camera angle x(0))>180 and wrapvalue(camera angle x(0))<280 then xrotate camera 0,280
  50.  
  51. rem Apply simple gravity to player
  52. position camera camera position x(),camera position y()-0.1,camera position z()
  53.  
  54. rem Player is always focal point of sky
  55. position object SkyObj,camera position x(),camera position y(),camera position z()
  56.  
  57. rem Position listener at player for 3D sound
  58. position listener camera position x(),camera position y(),camera position z()
  59. rotate listener camera angle x(),camera angle y(),camera angle z()
  60.  
  61. rem In case of restart
  62. if restart=1
  63.    restart=0
  64.    set bsp collision off 1
  65.    rotate camera 0,0,0
  66.    position camera 2,2,2
  67.    set bsp camera collision 1,0,0.75,0
  68. endif
  69.  
  70. return
  71.  
  72. _control_gunandbullet:
  73.  
  74.  rem Control gun firing
  75.  if mouseclick()=1 and bullet=-50
  76.   bullet=100
  77.   play sound GunSnd
  78.   position object BulletObj,camera position x(0),camera position y(0),camera position z(0)
  79.   rotate object BulletObj,camera angle x(0),camera angle y(0),0
  80.   set bsp object collision 2,BulletObj,0.1,1
  81.   move object BulletObj,0.2
  82.  endif
  83.  
  84.  rem Control life of bullet
  85.  if bullet>0
  86.  
  87.   rem If bullet collides with BSP world
  88.   if bsp collision hit(2)=1 or bulletimpact=1
  89.    rem End bullet on wall
  90.    position sound ImpactSnd,object position x(BulletObj), object position y(BulletObj), object position z(BulletObj)
  91.    play sound ImpactSnd
  92.    bulletimpact=0
  93.    bullet=0
  94.   else
  95.    rem Move bullet
  96.    dec bullet
  97.    move object BulletObj,0.5
  98.   endif
  99.  
  100.   rem Bullet dies
  101.   if bullet=0
  102.    set bsp collision off 2
  103.   endif
  104.  
  105.  else
  106.   rem Gun recharge phase
  107.   if bullet>-50 then dec bullet
  108.  endif
  109.  
  110. return
  111.  
  112. _control_enemies:
  113.  
  114.  rem Variable for finding closest enemy
  115.  cdist#=9999.99
  116.  
  117.  rem Handle enemies within world
  118.  for ene=EneObj to EneObj+4
  119.  
  120.   rem If enemy alive
  121.   if object visible(ene)=1
  122.  
  123.   rem Kill this enemy
  124.   killenemy=0
  125.  
  126.   rem Move enemy on a slow curve for appearance of intelegence
  127.   if object angle z(ene)=0
  128.    yrotate object ene,wrapvalue(object angle y(ene)+2)
  129.   endif
  130.   if object angle z(ene)=1
  131.    yrotate object ene,wrapvalue(object angle y(ene)-2)
  132.   endif
  133.   if object angle z(ene)=2
  134.    move object ene,0.05
  135.   else
  136.    move object ene,0.02
  137.   endif
  138.  
  139.   rem Switch direction of curve based on a random value
  140.   if rnd(200)=1 then zrotate object ene,rnd(1)
  141.  
  142.   rem Handle gravity for enemy
  143.   position object ene,object position x(ene),object position y(ene)-0.01,object position z(ene)
  144.  
  145.   rem Work out angle and distance between enemy and player
  146.   dx#=camera position x(0)-object position x(ene)
  147.   dy#=camera position y(0)-object position y(ene)
  148.   dz#=camera position z(0)-object position z(ene)
  149.   dist#=abs(sqrt(abs(dx#*dx#)+abs(dy#*dy#)+abs(dz#*dz#)))
  150.   viewa#=wrapvalue(atanfull(dx#,dz#))
  151.   obja#=wrapvalue(object angle y(ene))
  152.   if viewa#>180 then viewa#=viewa#-360
  153.   if obja#>180 then obja#=obja#-360
  154.  
  155.   rem *ADDCODE* TUT8A
  156.  
  157.   rem *ADDCODE* TUT8B
  158.  
  159.   rem *ADDCODE* TUT8C
  160.  
  161.   rem Closest enemy emits the enemy sound
  162.   if dist#<cdist#
  163.    cdist#=dist#
  164.    position sound EnemySnd,object position x(ene), object position y(ene), object position z(ene)
  165.    position sound EnemygunSnd,object position x(ene), object position y(ene), object position z(ene)
  166.    position sound EnemydieSnd,object position x(ene), object position y(ene), object position z(ene)
  167.   endif
  168.  
  169.   rem Hide enemy when die animation over
  170.   if object frame(ene)>26+25 and object visible(ene)=1
  171.    killenemy=1
  172.   endif
  173.  
  174.   if killenemy=1
  175.    set bsp collision off 3+(ene-EneObj)
  176.    hide object ene : dec aliensleft
  177.    killenemy=0
  178.   endif
  179.  
  180.   rem If enemy alive ENDIF
  181.   endif
  182.  
  183.  next ene
  184.  
  185. return
  186.  
  187. _control_stats:
  188. return
  189.  
  190. _setup_game:
  191.  
  192.  rem Setup camera
  193.  set camera range 0.1,5000
  194.  autocam off
  195.  
  196.  rem Setup sky model
  197.  set object SkyObj,1,0,0,0,0,0,0
  198.  scale object SkyObj,20,20,20
  199.  
  200.  rem Setup gun for player
  201.  lock object on GunObj
  202.  scale object GunObj,2,2,4
  203.  rotate object GunObj,270,0,0
  204.  position object GunObj,0.5,-1,2
  205.  disable object zdepth GunObj
  206.  
  207.  rem Create object for bullet
  208.  BulletObj=3 : make object cube BulletObj,0.1
  209.  
  210.  rem Create simple sprite based crosshair
  211.  sprite 1,320-16,240-16,CrossHairImg
  212.  set sprite 1,0,1
  213.  
  214.  rem *ADDCODE* TUT8D
  215.  
  216.  rem Start the enemy presence sound
  217.  loop sound EnemySnd
  218.  scale listener 0.1
  219.  
  220.  rem Trigger player initialisation
  221.  restart=1
  222.  
  223. return
  224.  
  225. _load_game:
  226.  
  227.  rem Load BSP world and sky model
  228.  load bsp "world\ikzdm1.pk3","ikzdm1.bsp"
  229.  SkyObj=1 : load object "models\sky\am.x",SkyObj
  230.  
  231.  rem Load model for gun
  232.  GunObj=2 : load object "models\gun\gun.x",GunObj
  233.  
  234.  rem Load models for enemies
  235.  EneObj=11
  236.  for ene=EneObj to EneObj+4
  237.   load object "models\enemy\H-Alien Psionic-Idle.x",ene
  238.   append object "models\enemy\H-Alien Psionic-Die.x", ene, total object frames(ene)+1
  239.   position object ene,2,2,4
  240.   loop object ene,0,25
  241.  next ene
  242.  
  243.  rem Load all sounds
  244.  GunSnd=1 : load sound "sounds\gun.wav",GunSnd
  245.  ImpactSnd=2 : load 3dsound "sounds\impact.wav",ImpactSnd
  246.  DieSnd=3 : load sound "sounds\die.wav",DieSnd
  247.  EnemySnd=11 : load 3dsound "sounds\enemy.wav",EnemySnd
  248.  EnemygunSnd=12 : load 3dsound "sounds\enemygun.wav",EnemygunSnd
  249.  EnemydieSnd=13 : load 3dsound "sounds\enemydie.wav",EnemydieSnd
  250.  
  251.  rem Load music (WAV best for looping)
  252.  MusicSnd=101 : load sound "sounds\ingame.wav",MusicSnd
  253.  loop sound MusicSnd : set sound volume MusicSnd,80
  254.  
  255.  rem Load images
  256.  FireImg=1 : load image "images\fire.bmp",FireImg
  257.  CrossHairImg=2 : load image "images\crosshair.bmp",CrossHairImg
  258.  
  259. return
  260.  
  261. rem *ADDCODE* TUT8E
  262.  
  263.