home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Internet / Strony_WWW / Quake / patches / Qboost4_qc.lha / Qboost4_qc / misc.qc < prev    next >
Text File  |  1999-06-28  |  15KB  |  665 lines

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