Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Jul 12th, 2010 | Syntax: None | Size: 15.39 KB | Hits: 29 | Expires: Never
Copy text to clipboard
  1.  
  2. /*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)
  3. Used as a positional target for spotlights, etc.
  4. */
  5. void() info_null =
  6. {
  7.         remove(self);
  8. };
  9.  
  10. /*QUAKED info_notnull (0 0.5 0) (-4 -4 -4) (4 4 4)
  11. Used as a positional target for lightning.
  12. */
  13. void() info_notnull =
  14. {
  15. };
  16.  
  17. //============================================================================
  18.  
  19. float START_OFF = 1;
  20.  
  21. void() light_use =
  22. {
  23.         if (self.spawnflags & START_OFF)
  24.         {
  25.                 lightstyle(self.style, "m");
  26.                 self.spawnflags = self.spawnflags - START_OFF;
  27.         }
  28.         else
  29.         {
  30.                 lightstyle(self.style, "a");
  31.                 self.spawnflags = self.spawnflags + START_OFF;
  32.         }
  33. };
  34.  
  35. /*QUAKED light (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
  36. Non-displayed light.
  37. Default light value is 300
  38. Default style is 0
  39. If targeted, it will toggle between on or off.
  40. */
  41. void() light =
  42. {
  43.         if (!self.targetname)
  44.         {       // inert light
  45.                 remove(self);
  46.                 return;
  47.         }
  48.        
  49.         if (self.style >= 32)
  50.         {
  51.                 self.use = light_use;
  52.                 if (self.spawnflags & START_OFF)
  53.                         lightstyle(self.style, "a");
  54.                 else
  55.                         lightstyle(self.style, "m");
  56.         }
  57. };
  58.  
  59. /*QUAKED light_fluoro (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
  60. Non-displayed light.
  61. Default light value is 300
  62. Default style is 0
  63. If targeted, it will toggle between on or off.
  64. Makes steady fluorescent humming sound
  65. */
  66. void() light_fluoro =
  67. {
  68.         if (self.style >= 32)
  69.         {
  70.                 self.use = light_use;
  71.                 if (self.spawnflags & START_OFF)
  72.                         lightstyle(self.style, "a");
  73.                 else
  74.                         lightstyle(self.style, "m");
  75.         }
  76.        
  77.         precache_sound ("ambience/fl_hum1.wav");
  78.         ambientsound (self.origin, "ambience/fl_hum1.wav", 0.5, ATTN_STATIC);
  79. };
  80.  
  81. /*QUAKED light_fluorospark (0 1 0) (-8 -8 -8) (8 8 8)
  82. Non-displayed light.
  83. Default light value is 300
  84. Default style is 10
  85. Makes sparking, broken fluorescent sound
  86. */
  87. void() light_fluorospark =
  88. {
  89.         if (!self.style)
  90.                 self.style = 10;
  91.  
  92.         precache_sound ("ambience/buzz1.wav");
  93.         ambientsound (self.origin, "ambience/buzz1.wav", 0.5, ATTN_STATIC);
  94. };
  95.  
  96. /*QUAKED light_globe (0 1 0) (-8 -8 -8) (8 8 8)
  97. Sphere globe light.
  98. Default light value is 300
  99. Default style is 0
  100. */
  101. void() light_globe =
  102. {
  103.         precache_model ("progs/s_light.spr");
  104.         setmodel (self, "progs/s_light.spr");
  105.         makestatic (self);
  106. };
  107.  
  108. void() FireAmbient =
  109. {
  110.         precache_sound ("ambience/fire1.wav");
  111. // attenuate fast
  112.         ambientsound (self.origin, "ambience/fire1.wav", 0.5, ATTN_STATIC);
  113. };
  114.  
  115. /*QUAKED light_torch_small_walltorch (0 .5 0) (-10 -10 -20) (10 10 20)
  116. Short wall torch
  117. Default light value is 200
  118. Default style is 0
  119. */
  120. void() light_torch_small_walltorch =
  121. {
  122.         precache_model ("progs/flame.mdl");
  123.         setmodel (self, "progs/flame.mdl");
  124.         FireAmbient ();
  125.         makestatic (self);
  126. };
  127.  
  128. /*QUAKED light_flame_large_yellow (0 1 0) (-10 -10 -12) (12 12 18)
  129. Large yellow flame ball
  130. */
  131. void() light_flame_large_yellow =
  132. {
  133.         precache_model ("progs/flame2.mdl");
  134.         setmodel (self, "progs/flame2.mdl");
  135.         self.frame = 1;
  136.         FireAmbient ();
  137.         makestatic (self);
  138. };
  139.  
  140. /*QUAKED light_flame_small_yellow (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
  141. Small yellow flame ball
  142. */
  143. void() light_flame_small_yellow =
  144. {
  145.         precache_model ("progs/flame2.mdl");
  146.         setmodel (self, "progs/flame2.mdl");
  147.         FireAmbient ();
  148.         makestatic (self);
  149. };
  150.  
  151. /*QUAKED light_flame_small_white (0 1 0) (-10 -10 -40) (10 10 40) START_OFF
  152. Small white flame ball
  153. */
  154. void() light_flame_small_white =
  155. {
  156.         precache_model ("progs/flame2.mdl");
  157.         setmodel (self, "progs/flame2.mdl");
  158.         FireAmbient ();
  159.         makestatic (self);
  160. };
  161.  
  162. //============================================================================
  163.  
  164.  
  165. /*QUAKED misc_fireball (0 .5 .8) (-8 -8 -8) (8 8 8)
  166. Lava Balls
  167. */
  168.  
  169. void() fire_fly;
  170. void() fire_touch;
  171. void() misc_fireball =
  172. {
  173.        
  174.         precache_model ("progs/lavaball.mdl");
  175.         self.classname = "fireball";
  176.         self.nextthink = time + (random() * 5);
  177.         self.think = fire_fly;
  178.         if (!self.speed)
  179.                 self.speed == 1000;
  180. };
  181.  
  182. void() fire_fly =
  183. {
  184. local entity    fireball;
  185.  
  186.         fireball = spawn();
  187.         fireball.solid = SOLID_TRIGGER;
  188.         fireball.movetype = MOVETYPE_TOSS;
  189.         fireball.velocity = '0 0 1000';
  190.         fireball.velocity_x = (random() * 100) - 50;
  191.         fireball.velocity_y = (random() * 100) - 50;
  192.         fireball.velocity_z = self.speed + (random() * 200);
  193.         fireball.classname = "fireball";
  194.         setmodel (fireball, "progs/lavaball.mdl");
  195.         setsize (fireball, '0 0 0', '0 0 0');
  196.         setorigin (fireball, self.origin);
  197.         fireball.nextthink = time + 5;
  198.         fireball.think = SUB_Remove;
  199.         fireball.touch = fire_touch;
  200.        
  201.         self.nextthink = time + (random() * 5) + 3;
  202.         self.think = fire_fly;
  203. };
  204.  
  205.  
  206. void() fire_touch =
  207. {
  208.         T_Damage (other, self, self, 20);
  209.         remove(self);
  210. };
  211.  
  212. //============================================================================
  213.  
  214.  
  215. void() barrel_explode =
  216. {
  217.         self.takedamage = DAMAGE_NO;
  218.         self.classname = "explo_box";
  219.         // did say self.owner
  220.         T_RadiusDamage (self, self, 160, world);
  221.         sound (self, CHAN_VOICE, "weapons/r_exp3.wav", 1, ATTN_NORM);
  222.         particle (self.origin, '0 0 0', 75, 255);
  223.  
  224.         self.origin_z = self.origin_z + 32;
  225.         BecomeExplosion ();
  226. };
  227.  
  228.  
  229.  
  230. /*QUAKED misc_explobox (0 .5 .8) (0 0 0) (32 32 64)
  231. TESTING THING
  232. */
  233.  
  234. void() misc_explobox =
  235. {
  236.         local float     oldz;
  237.        
  238.         self.solid = SOLID_BBOX;
  239.         self.movetype = MOVETYPE_NONE;
  240.         precache_model ("maps/b_explob.bsp");
  241.         setmodel (self, "maps/b_explob.bsp");
  242.         precache_sound ("weapons/r_exp3.wav");
  243.         self.health = 20;
  244.         self.th_die = barrel_explode;
  245.         self.takedamage = DAMAGE_AIM;
  246.  
  247.         self.origin_z = self.origin_z + 2;
  248.         oldz = self.origin_z;
  249.         droptofloor();
  250.         if (oldz - self.origin_z > 250)
  251.         {
  252.                 dprint ("item fell out of level at ");
  253.                 dprint (vtos(self.origin));
  254.                 dprint ("\n");
  255.                 remove(self);
  256.         }
  257. };
  258.  
  259.  
  260.  
  261.  
  262. /*QUAKED misc_explobox2 (0 .5 .8) (0 0 0) (32 32 64)
  263. Smaller exploding box, REGISTERED ONLY
  264. */
  265.  
  266. void() misc_explobox2 =
  267. {
  268.         local float     oldz;
  269.        
  270.         self.solid = SOLID_BBOX;
  271.         self.movetype = MOVETYPE_NONE;
  272.         precache_model2 ("maps/b_exbox2.bsp");
  273.         setmodel (self, "maps/b_exbox2.bsp");
  274.         precache_sound ("weapons/r_exp3.wav");
  275.         self.health = 20;
  276.         self.th_die = barrel_explode;
  277.         self.takedamage = DAMAGE_AIM;
  278.  
  279.         self.origin_z = self.origin_z + 2;
  280.         oldz = self.origin_z;
  281.         droptofloor();
  282.         if (oldz - self.origin_z > 250)
  283.         {
  284.                 dprint ("item fell out of level at ");
  285.                 dprint (vtos(self.origin));
  286.                 dprint ("\n");
  287.                 remove(self);
  288.         }
  289. };
  290.  
  291. //============================================================================
  292.  
  293. float SPAWNFLAG_SUPERSPIKE      = 1;
  294. float SPAWNFLAG_LASER = 2;
  295.  
  296. void(vector org, vector vec) LaunchLaser;
  297.  
  298. void() spikeshooter_use =
  299. {
  300.         if (self.spawnflags & SPAWNFLAG_LASER)
  301.         {
  302.                 sound (self, CHAN_VOICE, "enforcer/enfire.wav", 1, ATTN_NORM);
  303.                 LaunchLaser (self.origin, self.movedir);
  304.         }
  305.         else
  306.         {
  307.                 sound (self, CHAN_VOICE, "weapons/spike2.wav", 1, ATTN_NORM);
  308.                 launch_spike (self.origin, self.movedir);
  309.                 newmis.velocity = self.movedir * 10000;
  310.                 if (self.spawnflags & SPAWNFLAG_SUPERSPIKE)
  311.                         newmis.touch = superspike_touch;
  312.         }
  313. };
  314.  
  315. void() shooter_think =
  316. {
  317.         spikeshooter_use ();
  318.         self.nextthink = time + self.wait;
  319.         newmis.velocity = self.movedir * 100000;
  320. };
  321.  
  322.  
  323. /*QUAKED trap_spikeshooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser
  324. When triggered, fires a spike in the direction set in QuakeEd.
  325. Laser is only for REGISTERED.
  326. */
  327.  
  328. void() trap_spikeshooter =
  329. {
  330.         SetMovedir ();
  331.         self.use = spikeshooter_use;
  332.         if (self.spawnflags & SPAWNFLAG_LASER)
  333.         {
  334.                 precache_model2 ("progs/laser.mdl");
  335.                
  336.                 precache_sound2 ("enforcer/enfire.wav");
  337.                 precache_sound2 ("enforcer/enfstop.wav");
  338.         }
  339.         else
  340.                 precache_sound ("weapons/spike2.wav");
  341. };
  342.  
  343.  
  344. /*QUAKED trap_shooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser
  345. Continuously fires spikes.
  346. "wait" time between spike (1.0 default)
  347. "nextthink" delay before firing first spike, so multiple shooters can be stagered.
  348. */
  349. void() trap_shooter =
  350. {
  351.         trap_spikeshooter ();
  352.        
  353.         if (self.wait == 0)
  354.                 self.wait = 1;
  355.         self.nextthink = self.nextthink + self.wait + self.ltime;
  356.         self.think = shooter_think;
  357. };
  358.  
  359.  
  360.  
  361. /*
  362. ===============================================================================
  363.  
  364.  
  365. ===============================================================================
  366. */
  367.  
  368.  
  369. void() make_bubbles;
  370. void() bubble_remove;
  371. void() bubble_bob;
  372.  
  373. /*QUAKED air_bubbles (0 .5 .8) (-8 -8 -8) (8 8 8)
  374.  
  375. testing air bubbles
  376. */
  377.  
  378. void() air_bubbles =
  379.  
  380. {
  381.         if (deathmatch)
  382.         {
  383.                 remove (self);
  384.                 return;
  385.         }
  386.         precache_model ("progs/s_bubble.spr");
  387.         self.nextthink = time + 1;
  388.         self.think = make_bubbles;
  389. };
  390.  
  391. void() make_bubbles =
  392. {
  393. local entity    bubble;
  394.  
  395.         bubble = spawn();
  396.         setmodel (bubble, "progs/s_bubble.spr");
  397.         setorigin (bubble, self.origin);
  398.         bubble.movetype = MOVETYPE_NOCLIP;
  399.         bubble.solid = SOLID_NOT;
  400.         bubble.velocity = '0 0 15';
  401.         bubble.nextthink = time + 0.5;
  402.         bubble.think = bubble_bob;
  403.         bubble.touch = bubble_remove;
  404.         bubble.classname = "bubble";
  405.         bubble.frame = 0;
  406.         bubble.cnt = 0;
  407.         setsize (bubble, '-8 -8 -8', '8 8 8');
  408.         self.nextthink = time + random() + 0.5;
  409.         self.think = make_bubbles;
  410. };
  411.  
  412. void() bubble_split =
  413. {
  414. local entity    bubble;
  415.         bubble = spawn();
  416.         setmodel (bubble, "progs/s_bubble.spr");
  417.         setorigin (bubble, self.origin);
  418.         bubble.movetype = MOVETYPE_NOCLIP;
  419.         bubble.solid = SOLID_NOT;
  420.         bubble.velocity = self.velocity;
  421.         bubble.nextthink = time + 0.5;
  422.         bubble.think = bubble_bob;
  423.         bubble.touch = bubble_remove;
  424.         bubble.classname = "bubble";
  425.         bubble.frame = 1;
  426.         bubble.cnt = 10;
  427.         setsize (bubble, '-8 -8 -8', '8 8 8');
  428.         self.frame = 1;
  429.         self.cnt = 10;
  430.         if (self.waterlevel != 3)
  431.                 remove (self);
  432. };
  433.  
  434. void() bubble_remove =
  435. {
  436.         if (other.classname == self.classname)
  437.         {
  438. //              dprint ("bump");
  439.                 return;
  440.         }
  441.         remove(self);
  442. };
  443.  
  444. void() bubble_bob =
  445. {
  446. local float             rnd1, rnd2, rnd3;
  447. local vector    vtmp1, modi;
  448.  
  449.         self.cnt = self.cnt + 1;
  450.         if (self.cnt == 4)
  451.                 bubble_split();
  452.         if (self.cnt == 20)
  453.                 remove(self);
  454.  
  455.         rnd1 = self.velocity_x + (-10 + (random() * 20));
  456.         rnd2 = self.velocity_y + (-10 + (random() * 20));
  457.         rnd3 = self.velocity_z + 10 + random() * 10;
  458.  
  459.         if (rnd1 > 10)
  460.                 rnd1 = 5;
  461.         if (rnd1 < -10)
  462.                 rnd1 = -5;
  463.                
  464.         if (rnd2 > 10)
  465.                 rnd2 = 5;
  466.         if (rnd2 < -10)
  467.                 rnd2 = -5;
  468.                
  469.         if (rnd3 < 10)
  470.                 rnd3 = 15;
  471.         if (rnd3 > 30)
  472.                 rnd3 = 25;
  473.        
  474.         self.velocity_x = rnd1;
  475.         self.velocity_y = rnd2;
  476.         self.velocity_z = rnd3;
  477.                
  478.         self.nextthink = time + 0.5;
  479.         self.think = bubble_bob;
  480. };
  481.  
  482. /*~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>
  483. ~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~*/
  484.  
  485. /*QUAKED viewthing (0 .5 .8) (-8 -8 -8) (8 8 8)
  486.  
  487. Just for the debugging level.  Don't use
  488. */
  489.  
  490. void() viewthing =
  491.  
  492. {
  493.         self.movetype = MOVETYPE_NONE;
  494.         self.solid = SOLID_NOT;
  495.         precache_model ("progs/player.mdl");
  496.         setmodel (self, "progs/player.mdl");
  497. };
  498.  
  499.  
  500. /*
  501. ==============================================================================
  502.  
  503. SIMPLE BMODELS
  504.  
  505. ==============================================================================
  506. */
  507.  
  508. void() func_wall_use =
  509. {       // change to alternate textures
  510.         self.frame = 1 - self.frame;
  511. };
  512.  
  513. /*QUAKED func_wall (0 .5 .8) ?
  514. This is just a solid wall if not inhibitted
  515. */
  516. void() func_wall =
  517. {
  518.         self.angles = '0 0 0';
  519.         self.movetype = MOVETYPE_PUSH;  // so it doesn't get pushed by anything
  520.         self.solid = SOLID_BSP;
  521.         self.use = func_wall_use;
  522.         setmodel (self, self.model);
  523. };
  524.  
  525.  
  526. /*QUAKED func_illusionary (0 .5 .8) ?
  527. A simple entity that looks solid but lets you walk through it.
  528. */
  529. void() func_illusionary =
  530.  
  531. {
  532.         self.angles = '0 0 0';
  533.         self.movetype = MOVETYPE_NONE;
  534.         self.solid = SOLID_NOT;
  535.         setmodel (self, self.model);
  536.         makestatic ();
  537. };
  538.  
  539. /*QUAKED func_episodegate (0 .5 .8) ? E1 E2 E3 E4
  540. This bmodel will appear if the episode has allready been completed, so players can't reenter it.
  541. */
  542. void() func_episodegate =
  543.  
  544. {
  545.         if (!(serverflags & self.spawnflags))
  546.                 return;                 // can still enter episode
  547.  
  548.         self.angles = '0 0 0';
  549.         self.movetype = MOVETYPE_PUSH;  // so it doesn't get pushed by anything
  550.         self.solid = SOLID_BSP;
  551.         self.use = func_wall_use;
  552.         setmodel (self, self.model);
  553. };
  554.  
  555. /*QUAKED func_bossgate (0 .5 .8) ?
  556. This bmodel appears unless players have all of the episode sigils.
  557. */
  558. void() func_bossgate =
  559.  
  560. {
  561.         if ( (serverflags & 15) == 15)
  562.                 return;         // all episodes completed
  563.         self.angles = '0 0 0';
  564.         self.movetype = MOVETYPE_PUSH;  // so it doesn't get pushed by anything
  565.         self.solid = SOLID_BSP;
  566.         self.use = func_wall_use;
  567.         setmodel (self, self.model);
  568. };
  569.  
  570. //============================================================================
  571. /*QUAKED ambient_suck_wind (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  572. */
  573. void() ambient_suck_wind =
  574. {
  575.         precache_sound ("ambience/suck1.wav");
  576.         ambientsound (self.origin, "ambience/suck1.wav", 1, ATTN_STATIC);
  577. };
  578.  
  579. /*QUAKED ambient_drone (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  580. */
  581. void() ambient_drone =
  582. {
  583.         precache_sound ("ambience/drone6.wav");
  584.         ambientsound (self.origin, "ambience/drone6.wav", 0.5, ATTN_STATIC);
  585. };
  586.  
  587. /*QUAKED ambient_flouro_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  588. */
  589. void() ambient_flouro_buzz =
  590. {
  591.         precache_sound ("ambience/buzz1.wav");
  592.         ambientsound (self.origin, "ambience/buzz1.wav", 1, ATTN_STATIC);
  593. };
  594. /*QUAKED ambient_drip (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  595. */
  596. void() ambient_drip =
  597. {
  598.         precache_sound ("ambience/drip1.wav");
  599.         ambientsound (self.origin, "ambience/drip1.wav", 0.5, ATTN_STATIC);
  600. };
  601. /*QUAKED ambient_comp_hum (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  602. */
  603. void() ambient_comp_hum =
  604. {
  605.         precache_sound ("ambience/comp1.wav");
  606.         ambientsound (self.origin, "ambience/comp1.wav", 1, ATTN_STATIC);
  607. };
  608. /*QUAKED ambient_thunder (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  609. */
  610. void() ambient_thunder =
  611. {
  612.         precache_sound ("ambience/thunder1.wav");
  613.         ambientsound (self.origin, "ambience/thunder1.wav", 0.5, ATTN_STATIC);
  614. };
  615. /*QUAKED ambient_light_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  616. */
  617. void() ambient_light_buzz =
  618. {
  619.         precache_sound ("ambience/fl_hum1.wav");
  620.         ambientsound (self.origin, "ambience/fl_hum1.wav", 0.5, ATTN_STATIC);
  621. };
  622. /*QUAKED ambient_swamp1 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  623. */
  624. void() ambient_swamp1 =
  625. {
  626.         precache_sound ("ambience/swamp1.wav");
  627.         ambientsound (self.origin, "ambience/swamp1.wav", 0.5, ATTN_STATIC);
  628. };
  629. /*QUAKED ambient_swamp2 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
  630. */
  631. void() ambient_swamp2 =
  632. {
  633.         precache_sound ("ambience/swamp2.wav");
  634.         ambientsound (self.origin, "ambience/swamp2.wav", 0.5, ATTN_STATIC);
  635. };
  636.  
  637. //============================================================================
  638.  
  639. void() noise_think =
  640. {
  641.         self.nextthink = time + 0.5;
  642.         sound (self, 1, "enforcer/enfire.wav", 1, ATTN_NORM);
  643.         sound (self, 2, "enforcer/enfstop.wav", 1, ATTN_NORM);
  644.         sound (self, 3, "enforcer/sight1.wav", 1, ATTN_NORM);
  645.         sound (self, 4, "enforcer/sight2.wav", 1, ATTN_NORM);
  646.         sound (self, 5, "enforcer/sight3.wav", 1, ATTN_NORM);
  647.         sound (self, 6, "enforcer/sight4.wav", 1, ATTN_NORM);
  648.         sound (self, 7, "enforcer/pain1.wav", 1, ATTN_NORM);
  649. };
  650.  
  651. /*QUAKED misc_noisemaker (1 0.5 0) (-10 -10 -10) (10 10 10)
  652.  
  653. For optimzation testing, starts a lot of sounds.
  654. */
  655.  
  656. void() misc_noisemaker =
  657.  
  658. {
  659.         precache_sound2 ("enforcer/enfire.wav");
  660.         precache_sound2 ("enforcer/enfstop.wav");
  661.         precache_sound2 ("enforcer/sight1.wav");
  662.         precache_sound2 ("enforcer/sight2.wav");
  663.         precache_sound2 ("enforcer/sight3.wav");
  664.         precache_sound2 ("enforcer/sight4.wav");
  665.         precache_sound2 ("enforcer/pain1.wav");
  666.         precache_sound2 ("enforcer/pain2.wav");
  667.         precache_sound2 ("enforcer/death1.wav");
  668.         precache_sound2 ("enforcer/idle1.wav");
  669.  
  670.         self.nextthink = time + 0.1 + random();
  671.         self.think = noise_think;
  672. };