home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 2003 June / macformat-130.iso / mac / Reviewed⁄Demos / Spearhead Demo / demota / pak1.pk3 / global / obj_dm.scr < prev    next >
Encoding:
Text File  |  2002-10-21  |  6.8 KB  |  257 lines

  1. //
  2. //
  3. //    LOGIC FOR OBJECTIVE BASED DEATHMATCH ENTITIES
  4. //
  5. //
  6.  
  7. //***********************************************
  8. // initialization thread... 
  9. //***********************************************
  10.  
  11. bomb_thinker:
  12. // Steve says planting time = 6 seconds
  13. // defusing time = 12 second
  14. // tick time = 36 seconds
  15.  
  16.     level.bomb_defuse_time = 60 //tenths of a second
  17.     level.bomb_set_time = 50  //tenths of a second
  18.     level.bomb_tick_time = 45  //seconds (was 60 seconds, then 30 seconds)
  19. //    level.wait_after_explode = 2  //seconds time after target is destroyed before the level ends (no longer used, done in code now)
  20.     level.bomb_explosion_radius = 1054  //quake units
  21.     level.bomb_use_distance = 128 //quake units
  22.     level.bomb_damage = 200
  23.     level.bombusefov = 30
  24.  
  25.     level.subtitleX = 100
  26.     level.subtitleY = 50
  27.  
  28.     println "----------------------Z-----------------------"
  29.     println "self = " self
  30.     println "self.target (flak 88 or other) = " self.target
  31.     println "self.target.destroyed_model = " self.target.destroyed_model
  32.     println "self.target.target (collision entity) = " self.target.target
  33.     println "self.trigger_name = " self.trigger_name
  34.     println "self.exploder_set = " self.exploder_set
  35.     println "self.explosion_fx = " self.explosion_fx
  36.     println "self.explosion_sound = " self.explosion_sound
  37.     println "self.killarea = " self.killarea
  38.     println "----------------------Z-----------------------"
  39.     
  40.     self.target.collisionent = self.target.target
  41.     self.target notsolid
  42.     thread bomb_waittill_set
  43. end
  44.  
  45. //***********************************************
  46. // first thread... controls allies using the trigger
  47. //***********************************************
  48.  
  49.  
  50. bomb_waittill_set:
  51.  
  52. self model items/pulse_explosive.tik
  53.  
  54. while ( $(self.trigger_name) )
  55. {
  56. println "waittill trigger " self.trigger_name 
  57. self.trigger_name waittill trigger
  58.  
  59.     local.player = parm.other
  60.     //"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'
  61.         if (local.player.dmteam != level.planting_team) 
  62.     {
  63.         goto bomb_waittill_set
  64.         println "failed dmteam check" local.player.dmteam    
  65.     }
  66.  
  67.     
  68.     
  69.     local.counter = 0
  70.     while ( (Isalive local.player) && (local.player cansee self level.bombusefov level.bomb_use_distance) && (local.player.useheld == 1) )
  71.     {
  72.         if (local.counter == 0)
  73.             local.player stopwatch (level.bomb_set_time * .1)
  74.             
  75.         local.counter++
  76.     //    if ((local.counter % 5) == 0)
  77.     //        locprint level.subtitleX level.subtitleY("set "+ local.counter)
  78.  
  79.         wait .1
  80.         if (local.counter >= level.bomb_set_time)
  81.         {
  82.             iprintlnbold "A Bomb has been planted!"
  83.             if (level.planting_team == "allies")
  84.                 self playsound dfr_objective_o
  85.             else
  86.                 self playsound den_objective_o
  87.             thread bomb_waittill_defuse
  88.             thread bomb_waittill_explode
  89.             self.live = 1
  90.             level.bombs_planted ++
  91.             end
  92.         }
  93.     }
  94.     if (local.counter > 0)
  95.         local.player stopwatch 0
  96.     println "usetrigger but failed check" 
  97.     if ! (self cansee local.player level.bombusefov  level.bomb_use_distance) 
  98.         println "failed cansee check"    
  99.     if ! (local.player.useheld == 1)
  100.         println "failed useheld check" local.player.useheld
  101. }
  102. end
  103.  
  104.  
  105. //***********************************************
  106. // second thread... controls axis using the trigger
  107. //***********************************************
  108. bomb_waittill_defuse:
  109. while ( $(self.trigger_name) )
  110. {
  111. self.trigger_name waittill trigger
  112.  
  113.     local.player = parm.other
  114.     
  115.     //"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'
  116.     if (local.player.dmteam != level.defusing_team)
  117.     {      
  118.         println "failed dmteam check" local.player.dmteam
  119.         goto bomb_waittill_defuse
  120.     }
  121.     
  122.     
  123.     local.counter = 0
  124.     while ( (Isalive local.player) && (local.player cansee self level.bombusefov  level.bomb_use_distance) && (local.player.useheld == 1) )
  125.     {
  126.         if (local.counter == 0)
  127.             local.player stopwatch (level.bomb_defuse_time * .1)
  128.             
  129.         local.counter++
  130.     //    if ((local.counter % 5) == 0)
  131.     //        locprint level.subtitleX level.subtitleY ("defuse "+local.counter)
  132.  
  133.         wait .1
  134.         if (local.counter >= level.bomb_defuse_time)
  135.         {
  136.             iprintlnbold "A Bomb has been defused!"
  137.             if (level.defusing_team == "allies")
  138.                 self playsound dfr_diffused_d
  139.             else
  140.                 self playsound den_diffused_d
  141.             thread bomb_waittill_set //start first thread again
  142.             self.live = 0
  143.             level.bombs_planted --
  144.             end
  145.         }
  146.     }
  147.     if (local.counter > 0)
  148.         local.player stopwatch 0
  149. }
  150. end
  151.  
  152.  
  153. //***********************************************
  154. // third thread... times the bomb and makes it explode at the right time
  155. //***********************************************
  156. bomb_waittill_explode:
  157.     self model items/explosive.tik
  158.     self playsound plantbomb
  159.  
  160.  
  161.     self loopsound bombtick
  162.     
  163.     local.start_time = level.time
  164.     while (level.time < (local.start_time + level.bomb_tick_time) )
  165.     {
  166.         wait .1
  167.         if (self.live != 1)
  168.         {
  169.             self stoploopsound
  170.             end
  171.         }
  172.         if (level.time == (local.start_time + level.bomb_tick_time - 10) )
  173.         {
  174.             self stoploopsound
  175.             self loopsound final_countdown
  176.         }
  177.      }
  178.      self stoploopsound
  179.     thread bomb_explode
  180. end
  181.  
  182.  
  183. //***********************************************
  184. // fourth thread... controls the explosion 
  185. //***********************************************
  186. bomb_explode:
  187.     self.trigger_name remove
  188.  
  189.     thread jitter_large 0
  190.     
  191.     if (self.exploder_set != NIL)
  192.         exec global/exploder.scr::explode self.exploder_set
  193.     
  194.     if (self.explosion_fx != NIL)
  195.     {
  196.         self thread spawn_fx self.explosion_fx
  197.     }
  198.     
  199.     if (self.explosion_sound != NIL)
  200.         self playsound self.explosion_sound
  201.  
  202.     if (self.target != NIL)
  203.     {
  204.         if (self.target.destroyed_model != NIL)
  205.         {
  206.             local.damaged = self.target thread spawn_damaged self.target.destroyed_model
  207.         }
  208.         self.target remove
  209.         waitframe
  210.     }
  211.     radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  212.     if (self.killarea != NIL)
  213.     {
  214.         self.killarea volumedamage 1000
  215.     }
  216.     self hide
  217.  
  218.     self.live = 0
  219.     
  220.     self.exploded = 1
  221.     level.targets_destroyed = level.targets_destroyed + 1
  222.  
  223.     // we delay the decrementing of    level.bombs_planted so that the script has
  224.     // time to determin the winner before the timelimit gets checked and hit
  225.     wait 0.5
  226.     level.bombs_planted --
  227. end
  228.  
  229.  
  230. //----------------------------------
  231. spawn_fx local.fx:
  232.     local.temp = spawn script_model model local.fx
  233.     local.temp.origin = self.origin
  234.     local.temp anim start
  235.     wait 5
  236.     local.temp remove
  237. end
  238.  
  239. spawn_damaged local.model:
  240.     local.damaged = spawn script_model model local.model
  241.     local.damaged.origin = self.origin
  242.     local.damaged.angles = self.angles
  243. end local.damaged
  244.  
  245. //******************************
  246. // jitter large effect
  247. // jitter_large [delay]
  248. //******************************
  249. jitter_large local.time:
  250.     if (local.time)
  251.         wait local.time
  252.  
  253.     waitexec global/earthquake.scr .35 10 0 0
  254.     waitexec global/earthquake.scr .23 6 0 0
  255.     waitexec global/earthquake.scr 1 1 0 0
  256.     waitexec global/earthquake.scr 1.25 .3 0 1
  257. end