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

  1. main:
  2. level waittill prespawn
  3.     if (level.bombs == NIL)
  4.         level.bombs = 2
  5.  
  6.     if ($nebel)
  7.     for (local.i=1;local.i<$nebel.size+1;local.i++)
  8.         $nebel[local.i] thread turret_start "nebel"
  9.  
  10.     if ($nebel_trigger)
  11.     for (local.i=1;local.i<$nebel_trigger.size+1;local.i++)
  12.         $nebel_trigger[local.i] thread trigger_start "nebel"
  13.  
  14.     if ($mg42)
  15.     for (local.i=1;local.i<$mg42.size+1;local.i++)
  16.         $mg42[local.i] thread mg42_start
  17.  
  18.     if ($flak88)
  19.     for (local.i=1;local.i<$flak88.size+1;local.i++)
  20.         $flak88[local.i] thread flak88_start
  21. end
  22.  
  23. on local.set:
  24.     if ($nebel)
  25.     for (local.i=1;local.i<$nebel.size+1;local.i++)
  26.         if ($nebel[local.i].set == local.set)
  27.             $nebel[local.i].do_attack = TRUE
  28.  
  29.     if ($nebel_trigger)
  30.     for (local.i=1;local.i<$nebel_trigger.size+1;local.i++)
  31.         if ($nebel_trigger[local.i].set == local.set)
  32.             $nebel_trigger[local.i].turret.do_attack = TRUE
  33. end
  34.  
  35. off local.set:
  36.     if ($nebel)
  37.     for (local.i=1;local.i<$nebel.size+1;local.i++)
  38.         if ($nebel[local.i].set == local.set)
  39.             $nebel[local.i].do_attack = FALSE
  40.  
  41.     if ($nebel_trigger)
  42.     for (local.i=1;local.i<$nebel_trigger.size+1;local.i++)
  43.         if ($nebel_trigger[local.i].set == local.set)
  44.             $nebel_trigger[local.i].turret.do_attack = FALSE
  45. end
  46.  
  47.  
  48. mg42_start local.type:
  49.     level waittill spawn
  50.     if !(self.set)
  51.         self.set = -1
  52.     
  53.     if (self.target)
  54.     {
  55.         local.man = $(self.target)
  56.         local.man.mg = self
  57.         local.man thread gunner_think
  58.     }
  59.     else
  60.     {
  61.         println ("Error, MG42 at " + self.origin + " had no target gunner.")
  62.         end
  63.     }
  64. end
  65.  
  66. gunner_think:
  67.     self.mg targettype "auto"
  68.     self type_idle "machinegunner"
  69.     self type_attack "machinegunner"
  70.     self type_disguise "machinegunner"
  71.     self type_grenade "machinegunner"
  72.     self gun "MG42"
  73.     self turret self.mg
  74.     self threatbias 5000
  75.  
  76.     local.mg = self.mg
  77.     local.org = self.origin
  78.     if (self.target)
  79.     {
  80.         local.siz = $(self.target).size
  81.         for (local.i=local.siz;local.i>0;local.i--)
  82.         {
  83.             local.ent[local.i] = $(self.target)[local.i]
  84.             local.ent[local.i] = waitthread global/spawner.scr::spawner_create local.ent[local.i]
  85.         }
  86.     }
  87.  
  88. //    self.targetname = "not_feeling_like_myself_anymore"
  89.     if (local.mg.min_time)
  90.         local.mg burstfiresettings local.mg.min_time local.mg.max_time local.mg.min_delay local.mg.max_delay
  91.  
  92.     self waittill death
  93.     if (local.mg.thread)
  94.     {
  95.         thread level.script::local.mg.thread
  96.         println ("ran thread " + local.mg.thread)
  97.     }
  98.     else
  99.         println ("no thread to ran thread")
  100.  
  101.     local.spawn_org = spawn script_origin
  102.     local.spawn_org.origin = local.org
  103.  
  104.     while (local.siz)
  105.     {
  106.         for (local.i=1;local.i<local.siz+1;local.i++)
  107.         {
  108.             if !($player canseenoents local.ent[local.i])
  109.             {
  110.                 local.newent = waitthread global/spawner.scr::spawner_activate local.ent[local.i]
  111.                 local.newent tether local.spawn_org
  112.                 local.newent leash 16
  113.  
  114.                 while ((isalive local.newent) && (vector_length (local.newent.origin - local.org) > 128))
  115.                 {
  116.                     local.newent runto local.org
  117.                     wait 2
  118.                 }
  119.  
  120.                 if (isalive local.newent)
  121.                 {
  122.                     local.newent type_idle "machinegunner"
  123.                     local.newent type_attack "machinegunner"
  124.                     local.newent type_disguise "machinegunner"
  125.                     local.newent type_grenade "machinegunner"
  126.                     local.newent gun "MG42"
  127.                     local.newent turret local.mg
  128.                     local.newent threatbias 5000
  129.  
  130.                     local.newent waittill death
  131.  
  132. //                    if (local.mg.thread)
  133. //                        thread level.script::local.mg.thread
  134.  
  135.                     wait (7 + randomint(4))
  136.                 }
  137.             }
  138.         }
  139.         wait 2
  140.     }
  141.  
  142. end
  143.  
  144. trigger_start local.type:
  145.     level waittill spawn
  146.     if !(self.set)
  147.         self.set = -1
  148.  
  149.     if (self.target)
  150.     {
  151.         local.aim = $(self.target)
  152.         if (local.aim.target)
  153.         {
  154.             println ("turret trigger at origin " + self.origin + " has target " + local.aim.target)
  155.             local.turret = $(local.aim.target)
  156.             self.turret = local.turret
  157.             local.trigger = self
  158.  
  159.             local.bomb = -1
  160.             if (local.turret.target)
  161.             {
  162.                 local.bombtrigger = $(local.turret.target)
  163.                 if (local.bombtrigger.target)
  164.                 {
  165.                     local.bomb = $(local.bombtrigger.target)
  166.                     println ("Error, Turret at " + local.turret.origin + " has a bomb.")
  167.                 }
  168.                 else
  169.                 {
  170.                     local.bomb = -1
  171.                     println ("Error, Turret at " + local.turret.origin + " has a bomb trigger but no bomb.")
  172.                 }
  173.             }
  174.             println ("Created turret at " + local.turret.origin);
  175.         }
  176.         else
  177.         {
  178.             println ("Error, Turret Trigger at " + self.origin + " had no Turret to set off.")
  179.             end
  180.         }
  181.     }
  182.     else
  183.     {
  184.         println ("Error, Turret Trigger at " + self.origin + " had no target to aim at.")
  185.         end
  186.     }
  187.  
  188.     local.turret thread turret_think local.type local.trigger local.aim local.bomb local.bombtrigger
  189. end
  190.  
  191. turret_think local.type local.trigger local.aim local.bomb local.bombtrigger:
  192.  
  193.     if (self.radius == NIL)
  194.         self.radius = 256
  195.  
  196.     if (self.arc == NIL)
  197.         self.arc = 0.2
  198.  
  199.     self.radius = self.radius * 2
  200.     self.do_attack = FALSE
  201.  
  202.     if (self.bomb == NIL)
  203.     {
  204.         self.bomb = 1    
  205.         if (local.bomb != -1)
  206.             thread bombtrigger local.bomb local.bombtrigger
  207.     }
  208.  
  209.     self.operator = TRUE
  210.     if ($nebeller)
  211.     for (local.i=1;local.i<$nebeller.size+1;local.i++)
  212.     {
  213.         if (vector_length (self.origin - $nebeller[local.i].origin) < 600)
  214.         {
  215.             $nebeller[local.i].nebl = self
  216.             $nebeller[local.i] thread nebel_owner
  217.             local.i = $nebeller.size+5
  218.         }
  219.     }
  220.  
  221.     self.lastshot = level.time
  222.     self.shooter = TRUE
  223.     while (self.shooter == TRUE)
  224.     {
  225.         local.trigger waittill trigger
  226.  
  227.         if ((self.shooter == TRUE) && (self.operator == TRUE))
  228.         if (((parm.other == $player) || (parm.other.targetname == "friendly")) || (self.do_attack == TRUE))
  229.         {
  230.             thread fire_turret local.aim
  231.             wait (0.25 + randomfloat(3))
  232.         }
  233.         wait 1
  234.     }
  235.  
  236. end
  237.  
  238. nebel_owner:
  239.     local.nebl = self.nebl
  240.     local.org = self.origin
  241.     if (self.target)
  242.     {
  243.         local.siz = $(self.target).size
  244.         for (local.i=local.siz;local.i>0;local.i--)
  245.         {
  246.             local.ent[local.i] = $(self.target)[local.i]
  247.             local.ent[local.i] = waitthread global/spawner.scr::spawner_create local.ent[local.i]
  248.         }
  249.     }
  250.  
  251.     self.targetname = "not_feeling_like_myself_anymore"
  252.     self waittill death
  253.     local.nebl.operator = FALSE
  254.     local.spawn_org = spawn script_origin
  255.     local.spawn_org.origin = local.org
  256.  
  257.     while ((local.siz) && (local.nebl.shooter == TRUE))
  258.     {
  259.         
  260.         for (local.i=1;local.i<local.siz+1;local.i++)
  261.         {
  262.             if ((local.nebl.shooter == TRUE) && !($player canseenoents local.ent[local.i]))
  263.             {
  264.                 local.newent = waitthread global/spawner.scr::spawner_activate local.ent[local.i]
  265.                 local.newent tether local.spawn_org
  266.                 local.newent leash 16
  267.  
  268.                 while ((isalive local.newent) && (vector_length (local.newent.origin - local.org) > 128))
  269.                 {
  270.                     local.newent runto local.org
  271.                     wait 2
  272.                 }
  273.  
  274.                 if (isalive local.newent)
  275.                 {
  276.                     local.nebl.operator = TRUE
  277.                     local.newent waittill death
  278.                     local.nebl.operator = FALSE
  279.                     wait (6 + randomint(4))
  280.                 }
  281.             }
  282.         }
  283.         wait 2
  284.     }
  285. end
  286.  
  287. flak88_start local.type:
  288.     level waittill spawn
  289.  
  290.     self setaimtarget $player
  291.     self turnspeed 6.666
  292. //    self waittill ontarget
  293.  
  294.     if !(self.set)
  295.         self.set = -1
  296.  
  297.     local.aimer = spawn human/german_wehrmact_soldier.tik
  298.     local.aimer.start = self gettagposition "tag_aimer"
  299.     local.aimer.angles = self gettagangles "tag_aimer"
  300.     local.aimer.origin = local.aimer.start
  301.     local.aimer exec global/disable_ai.scr
  302.     local.aimer.oldanim = 88_loader_turnleft
  303.     local.aimer thread animator 88_aimer_idle
  304.     local.aimer holster
  305. //    local.aimer lookat $player
  306.  
  307.     local.loader = spawn human/german_wehrmact_soldier.tik
  308.     local.loader.start = self gettagposition "tag_loader2"
  309.     local.loader.angles = self gettagangles "tag_loader2"
  310.     local.loader.origin = local.loader.start
  311.     local.loader exec global/disable_ai.scr
  312.     local.loader.oldanim = 88_loader_turnleft
  313.     local.loader thread animator 88_loader_idle
  314.     local.loader holster
  315. //    local.loader lookat $player
  316.  
  317.     local.timer = randomfloat(2)
  318.     local.turn = 0
  319.     local.aimer.no_idle = 1
  320.     local.loader.no_idle = 1
  321.     while (1)
  322.     {
  323.         local.start = $player.origin
  324.         local.end = self.origin
  325.         local.dif = local.start - local.end
  326.         local.ang = angles_toleft (self.angles)
  327.         local.total = (local.dif[0] * local.ang[0]) + (local.dif[1] * local.ang[1]) + (local.dif[2] * local.ang[2]) 
  328.         if (local.total > 1)
  329.             local.turn = 1
  330.         else
  331.         if (local.total < -1)
  332.             local.turn = -1
  333.         else
  334.             local.turn = 0
  335.  
  336.         if (isalive local.aimer)
  337.         {
  338.             local.aimer.start = self gettagposition "tag_aimer"
  339.             local.aimer.origin = local.aimer.start
  340.             local.aimer.angles = self gettagangles "tag_aimer"
  341.             if (local.turn < 0)
  342.                 local.aimer thread animator 88_aimer_turnleft
  343.             else
  344.             if (local.turn > 0)
  345.                 local.aimer thread animator 88_aimer_turnright
  346.             else
  347.                 local.aimer thread animator 88_aimer_idle
  348.         }
  349.         else
  350.             break
  351.  
  352.         if (isalive local.loader)
  353.         {
  354.             local.loader.start = self gettagposition "tag_loader2"
  355.             local.loader.origin = local.loader.start
  356.             local.loader.angles = self gettagangles "tag_loader2"
  357.  
  358.             if (local.turn < 0)
  359.                 local.loader thread animator 88_loader_turnleft
  360.             else
  361.             if (local.turn > 0)
  362.                 local.loader thread animator 88_loader_turnright
  363.             else
  364.                 local.loader thread animator 88_loader_idle
  365.         }
  366.         else
  367.             break
  368.  
  369.         waitframe
  370.  
  371. //            println local.total
  372.         if ((abs (local.total) < 25) && (level.time > local.timer))
  373.         {
  374.             self setaimtarget NULL
  375.             if (local.aimer.animator)
  376.                 local.aimer.animator delete
  377.  
  378.             if (local.loader.animator)
  379.                 local.loader.animator delete
  380.  
  381.             local.aimer anim 88_aimer_fire
  382.             local.loader anim 88_loader_fire
  383.             wait 1
  384.  
  385.             local.timer = level.time + 4 + randomfloat(2)
  386.             $flak88 playsound flak_snd_fire
  387.             local.dist = vector_length ($flak88.origin - $player.origin)
  388.             local.dist = local.dist - 1300
  389.             local.range = 25 + (local.dist / 7)
  390.             local.offset = 50 + (local.dist / 1.2727)
  391.  
  392.             local.vec = vector_normalize (self.origin - ($player.origin))
  393.             local.a = vector_scale local.vec local.offset
  394.             local.a =  local.a + $player.origin + (0 0 32)
  395.  
  396.             for (local.i=0;local.i<2;local.i++)
  397.             {
  398.                 if (randomint(100) > 50)
  399.                 local.a[local.i] = local.a[local.i] + randomint(local.range)
  400.                 else
  401.                 local.a[local.i] = local.a[local.i] - randomint(local.range)
  402.             }
  403.             
  404.             exec global/model.scr local.a "models/fx/scriptbazookaexplosion.tik"
  405.             local.aimer waittill animdone
  406.  
  407.             local.aimer anim 88_aimer_load
  408.             local.loader anim 88_loader_load
  409.             local.aimer waittill animdone
  410.             wait 3
  411.             self setaimtarget $player
  412.         }
  413.  
  414.     }
  415.  
  416.     self setaimtarget NULL
  417.  
  418.     if (isalive local.loader)
  419.         local.loader thread attackplayer
  420.  
  421.     if (isalive local.aimer)
  422.         local.aimer thread attackplayer
  423.  
  424. end
  425.  
  426. attackplayer:
  427.     if (self.animator)
  428.         self.animator delete
  429.  
  430.     self.no_idle = 0
  431.     self.nosurprise = 1
  432.     self exec global/enable_ai.scr
  433. end
  434.  
  435. animator local.anim:
  436.     if (local.anim == self.oldanim)
  437.         end
  438.     self.oldanim = local.anim
  439.  
  440.     if (self.animator)
  441.         self.animator delete
  442.     
  443.     self.animator = local
  444.  
  445.     while (isalive self)
  446.     {
  447. //        println ("playing anim " + local.anim)
  448.         self anim local.anim
  449.         self waittill animdone
  450.     }
  451. end
  452.  
  453.  
  454. turret_start local.type:
  455.     level waittill spawn
  456.     if !(self.set)
  457.         self.set = -1
  458.  
  459.     if (self.target)
  460.     {
  461.         local.aim = $(self.target)
  462.         if (local.aim.target)
  463.         {
  464.             local.bomb = -1
  465.             local.trigger = $(local.aim.target)
  466.             if (local.trigger.target)
  467.             {
  468.                 local.bombtrigger = $(local.trigger.target)
  469.                 if (local.bombtrigger.target)
  470.                     local.bomb = $(local.bombtrigger.target)
  471.                 else
  472.                 {
  473.                     local.bomb = -1
  474.                     println ("Error, Turret at " + self.origin + " has a bomb trigger but no bomb.")
  475.                 }
  476.             }
  477.             println ("Created turret at " + self.origin);
  478.         }
  479.         else
  480.         {
  481.             println ("Error, Turret at " + self.origin + " had no trigger to set it off.")
  482.             end
  483.         }
  484.     }
  485.     else
  486.     {
  487.         println ("Error, Turret at " + self.origin + " had no target to aim at.")
  488.         end
  489.     }
  490.  
  491.     self thread turret_think local.type local.trigger local.aim local.bomb local.bombtrigger
  492. end
  493.  
  494. bombtrigger local.bomb local.bombtrigger:
  495.     
  496.     while (local.bombtrigger != NIL)
  497.     {
  498.         local.bombtrigger waittill trigger
  499.         println ("trying the trigger")
  500.         if (level.bombs > 0)
  501.         {
  502.             local.bombtrigger delete
  503.             local.bombtrigger = NIL
  504.             level.bombs--
  505.             local.bomb model animate/explosive.tik
  506.             $player stopwatch 5
  507.             local.bomb playsound plantbomb
  508.             local.bomb loopsound bombtick
  509.             wait 5
  510.             println ("KABOOM")
  511.             exec global/model.scr local.bomb.origin "emitters/mortar_higgins.tik"
  512.             local.bomb playsound explode_flak88
  513.             radiusdamage local.bomb.origin 300 300
  514.             local.bomb remove
  515.             self model statweapons/nebelwerfer_d.tik
  516.             self.shooter = FALSE
  517.             if (self.thread)
  518.             {
  519.                 self thread level.script::self.thread
  520.                 println ("TURRET THREADED " + self.thread)
  521.             }
  522.             else
  523.                 println "TURRET THREADED NONE"
  524.         }
  525.         else
  526.         iprintlnbold "You have no explosives."
  527.     }
  528.     
  529. end
  530.  
  531.  
  532. fire_turret local.aim:
  533.  
  534.     local.first = false
  535.  
  536.     if (level.time - self.lastshot > 10)
  537.         local.first = true
  538.  
  539.     self.lastshot = level.time
  540.  
  541.     local.ent = spawn script_origin
  542.     local.ent.origin = local.aim.origin
  543.     local.ent.origin += (( randomint (self.radius) - (self.radius *0.5)) ( randomint (self.radius) - (self.radius *0.5)) 300)
  544.     if (local.first == true)
  545.     {
  546.         println "FIRST SHOT"
  547.         local.playorg = $player.origin
  548.         local.destorg = local.ent.origin
  549.         local.rad = self.radius * 1
  550.         for (local.i=0;local.i<2;local.i++)
  551.         {
  552.             if (abs(local.playorg[local.i] - local.destorg[local.i]) < local.rad)
  553.             if (local.destorg[local.i] < local.playorg[local.i])
  554.                 local.destorg[local.i] = local.playorg[local.i] - local.rad
  555.             else
  556.                 local.destorg[local.i] = local.playorg[local.i] + local.rad
  557.         }
  558.         local.destorg[2]+=500
  559.         local.ent.origin = local.destorg
  560.     }
  561.  
  562.     local.ent droptofloor
  563.     println ("Player origin " + $player.origin + " and dest origin " + local.ent.origin + " and total dif " + vector_length ($player.origin - local.ent.origin))
  564.     local.target = local.ent.origin
  565.     local.ent delete
  566.  
  567.     local.org = angles_toforward (self.angles)
  568.     local.org = ((local.org * 135) + (self.origin)) + ( 0 0 30 )
  569.     local.rocket = spawn script_model
  570.     self playsound nebelwerfer_launch
  571.     local.dist = vector_length (local.target - self.origin)
  572.     local.frames = local.dist / 350.0
  573.     local.dist = local.dist * self.arc
  574.  
  575.     local.max = 10
  576.     for (local.i=0;local.i<local.max+1;local.i++)
  577.     {
  578.         local.spline[local.i] = spawn script_origin
  579. //        local.spline[local.i] model models/fx/fx_nebelwerfer.tik // projectiles/m2fgrenade.tik // 
  580. //        local.spline[local.i] scale 5
  581.  
  582.         local.spline[local.i].origin = local.target * float(local.i/(local.max*1.0)) + self.origin * float ((local.max - local.i)/(local.max*1.0))
  583.  
  584.         local.num = local.i
  585.         
  586.         if (local.num > local.max/2)
  587.             local.num = local.max - (local.num - local.max) - local.max
  588.  
  589.         local.num = (local.max /2.0) - local.num
  590.  
  591.         local.z = local.dist * ((local.num/(local.max*1.0))*(local.num/(local.max*1.0)))
  592.         local.spline[local.i].origin -= (0 0 local.z)
  593.         local.spline[local.i].origin += (0 0 (local.dist / 4.0))
  594.  
  595.     }
  596.  
  597.     local.rocket.angles = self.angles
  598.     local.rocket.origin = local.spline[0].origin
  599.     local.rocket model models/fx/fx_nebelwerfer.tik // model projectiles/m2fgrenade.tik // 
  600.     local.p = 0.0
  601.     for (local.i=1;local.i<local.max+1;local.i++)
  602.     {
  603.         while (local.p < local.frames + 1)
  604.         {
  605.             local.rocket.origin = local.spline[local.i-1].origin*((local.frames - local.p)/local.frames) + local.spline[local.i].origin*(local.p/local.frames)
  606.             wait 0.01
  607.             local.p++
  608.         }
  609.         while (local.p > 1)
  610.             local.p--
  611.     }
  612.     local.rocket.origin = local.spline[local.max].origin
  613.  
  614.     /*
  615.         for (local.i=1;local.i<local.max+1;local.i++)
  616.         for (local.p=1;local.p<local.frames+1;local.p++)
  617.         {
  618.             local.rocket.origin = local.spline[local.i-1].origin*((local.frames - local.p)/local.frames) + local.spline[local.i].origin*(local.p/local.frames)
  619.             wait 0.01
  620.         }
  621.     */
  622.     wait 0.1
  623.     for (local.i=0;local.i<local.max+1;local.i++)
  624.         local.spline[local.i] remove
  625.  
  626.     local.blastname = spawn models/emitters/mortar_dirt_nebelwerfer.tik
  627.     local.blastname.origin = local.rocket.origin
  628.     local.blastname anim start
  629.  
  630.     exec global/earthquake.scr .03 .05 0 0    //original .13 2 0 0
  631.  
  632.     local.damageamount = 260    
  633.  
  634.     if (level.skill == "1")
  635.         local.damageamount = 360    
  636.     else
  637.     if (level.skill == "2")
  638.         local.damageamount = 460    
  639.  
  640.     radiusdamage local.rocket.origin local.damageamount 650
  641.  
  642.     local.rocket remove
  643.  
  644.     wait 3
  645.  
  646.     //*** Remove the effect
  647.  
  648.     local.blastname remove
  649.  
  650.     
  651.     end
  652.     local.rocket flypath local.spline[0]
  653.     local.rocket waitmove
  654.  
  655. end
  656.  
  657. /////////////////////////////////////////////////////////////////////////////
  658. // playerturret_throbbox_think:
  659. // Connects a player turret's destruction to its throbbox so they remain
  660. // in sync when the turret is destroyed by other means.
  661. // Self:
  662. //   target name of the player mounted turret
  663. // Input:
  664. //   target name of the throbbox
  665. /////////////////////////////////////////////////////////////////////////////
  666. playerturret_throbbox_think local.throbbox:
  667.     self.health = 450
  668.     local.throbbox.health = 1
  669.     dprintln "Turret waiting for death"
  670.     self waittill death
  671.     dprintln "Turret dead"
  672.     if (isAlive local.throbbox)
  673.     {
  674.         dprintln "Turret throbbox blowup"
  675.         local.throbbox blowup
  676.     }
  677. end
  678.  
  679.  
  680. /////////////////////////////////////////////////////////////////////////////
  681. // playerturret_proj_think_aim:
  682. // Causes a projectile generator to control the way a playerturret looks
  683. // at its target while in AI mode and not controlled by a player
  684. // Self:
  685. //   target name of the player mounted turret turret0
  686. // Input:
  687. //   target name of the player mounted turret
  688. //   target name of the projectile generator
  689. /////////////////////////////////////////////////////////////////////////////
  690. playerturret_proj_think_aim local.turret local.projgen:
  691.     while (isAlive local.turret)
  692.     {
  693.         wait 0.1
  694.         local.val = local.projgen isturnedon
  695.         if ( local.val == 1 )
  696.         {
  697.             local.ent = local.projgen gettargetentity
  698.             self settargetentity local.ent
  699.         }
  700.     }
  701. end
  702.