// /*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4) // Used as a positional target for spotlights, etc. // */ // /void() info_null = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // remove(self); // }; // // /*QUAKED info_notnull (0 0.5 0) (-4 -4 -4) (4 4 4) // Used as a positional target for lightning. // */ // void() info_notnull = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // }; // // //============================================================================ // // float START_OFF = 1; // // void() light_use = // { // if (self.spawnflags & START_OFF) // { // lightstyle(self.style, "m"); // self.spawnflags = self.spawnflags - START_OFF; // } // else // { // lightstyle(self.style, "a"); // self.spawnflags = self.spawnflags + START_OFF; // } // }; // // /*QUAKED light (0 1 0) (-8 -8 -8) (8 8 8) START_OFF // Non-displayed light. // Default light value is 300 // Default style is 0 // If targeted, it will toggle between on or off. // */ // void() light = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // if (!self.targetname) // { // inert light // remove(self); // return; // } // // if (self.style >= 32) // { // self.use = light_use; // if (self.spawnflags & START_OFF) // lightstyle(self.style, "a"); // else // lightstyle(self.style, "m"); // } // }; // // /*QUAKED light_fluoro (0 1 0) (-8 -8 -8) (8 8 8) START_OFF // Non-displayed light. // Default light value is 300 // Default style is 0 // If targeted, it will toggle between on or off. // Makes steady fluorescent humming sound // */ // void() light_fluoro = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // if (self.style >= 32) // { // self.use = light_use; // if (self.spawnflags & START_OFF) // lightstyle(self.style, "a"); // else // lightstyle(self.style, "m"); // } // // precache_sound ("ambience/fl_hum1.wav"); // ambientsound (self.origin, "ambience/fl_hum1.wav", 0.5, ATTN_STATIC); // }; // // /*QUAKED light_fluorospark (0 1 0) (-8 -8 -8) (8 8 8) // Non-displayed light. // Default light value is 300 // Default style is 10 // Makes sparking, broken fluorescent sound // */ // void() light_fluorospark = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // if (!self.style) // self.style = 10; // // precache_sound ("ambience/buzz1.wav"); // ambientsound (self.origin, "ambience/buzz1.wav", 0.5, ATTN_STATIC); // }; // // /*QUAKED light_globe (0 1 0) (-8 -8 -8) (8 8 8) // Sphere globe light. // Default light value is 300 // Default style is 0 // */ // void() light_globe = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // precache_model ("progs/s_light.spr"); // setmodel (self, "progs/s_light.spr"); // makestatic (self); // }; // /*QUAKED FireAmbient (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() FireAmbient = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/fire1.wav"); // attenuate fast ambientsound (self.origin, "ambience/fire1.wav", 0.5, ATTN_STATIC); }; // // /*QUAKED light_torch_small_walltorch (0 .5 0) (-10 -10 -20) (10 10 20) // Short wall torch // Default light value is 200 // Default style is 0 // */ // void() light_torch_small_walltorch = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // precache_model ("progs/flame.mdl"); // setmodel (self, "progs/flame.mdl"); // FireAmbient (); // makestatic (self); // }; // // /*QUAKED light_flame_large_yellow (0 1 0) (-10 -10 -12) (12 12 18) // Large yellow flame ball // */ // void() light_flame_large_yellow = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // precache_model ("progs/flame2.mdl"); // setmodel (self, "progs/flame2.mdl"); // self.frame = 1; // FireAmbient (); // makestatic (self); // }; // // /*QUAKED light_flame_small_yellow (0 1 0) (-8 -8 -8) (8 8 8) START_OFF // Small yellow flame ball // */ // void() light_flame_small_yellow = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // precache_model ("progs/flame2.mdl"); // setmodel (self, "progs/flame2.mdl"); // FireAmbient (); // makestatic (self); // }; // // /*QUAKED light_flame_small_white (0 1 0) (-10 -10 -40) (10 10 40) START_OFF // Small white flame ball // */ // void() light_flame_small_white = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // precache_model ("progs/flame2.mdl"); // setmodel (self, "progs/flame2.mdl"); // FireAmbient (); // makestatic (self); // }; // /*QUAKED light_candle (0 1 0) (-10 -10 -40) (10 10 40) START_OFF //dumptruck_ds taken from honey (originally from Rogue) White candle */ void() light_candle = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_model ("progs/candle.mdl"); setmodel (self, "progs/candle.mdl"); makestatic (self); }; void() model_candle_think = { self.frame = self.frame + 1; if (self.frame > 3) self.frame = 0; self.nextthink = time + 0.1; }; void() model_candle = { precache_model ("progs/candle.mdl"); setmodel (self, "progs/candle.mdl"); self.think = model_candle_think; self.nextthink = time + 0.1; }; //============================================================================ /*QUAKED misc_fireball (0 .5 .8) (-8 -8 -8) (8 8 8) Lava Balls */ void() fire_fly; void() fire_touch; void() misc_fireball = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_model ("progs/lavaball.mdl"); self.classname = "fireball"; self.nextthink = time + (random() * 5); self.think = fire_fly; if (!self.speed) self.speed = 1000; }; void() fire_fly = { local entity fireball; fireball = spawn(); fireball.solid = SOLID_TRIGGER; fireball.movetype = MOVETYPE_TOSS; fireball.velocity = '0 0 1000'; fireball.velocity_x = (random() * 100) - 50; fireball.velocity_y = (random() * 100) - 50; fireball.velocity_z = self.speed + (random() * 200); fireball.classname = "fireball"; setmodel (fireball, "progs/lavaball.mdl"); setsize (fireball, '0 0 0', '0 0 0'); setorigin (fireball, self.origin); fireball.nextthink = time + 5; fireball.think = SUB_Remove; fireball.touch = fire_touch; self.nextthink = time + (random() * 5) + 3; self.think = fire_fly; }; void() fire_touch = { T_Damage (other, self, self, 20); remove(self); }; //============================================================================ void() barrel_explode = { self.takedamage = DAMAGE_NO; self.classname = "explo_box"; // did say self.owner T_RadiusDamage (self, self, 160, world); sound (self, CHAN_VOICE, "weapons/r_exp3.wav", 1, ATTN_NORM); particle (self.origin, '0 0 0', 75, 255); self.origin_z = self.origin_z + 32; BecomeExplosion (); }; /*QUAKED misc_explobox (0 .5 .8) (0 0 0) (32 32 64) TESTING THING */ void() misc_explobox = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; local float oldz; self.solid = SOLID_BBOX; self.movetype = MOVETYPE_NONE; precache_model ("maps/b_explob.bsp"); setmodel (self, "maps/b_explob.bsp"); precache_sound ("weapons/r_exp3.wav"); self.health = 20; self.th_die = barrel_explode; self.takedamage = DAMAGE_AIM; self.origin_z = self.origin_z + 2; oldz = self.origin_z; droptofloor(); if (oldz - self.origin_z > 250) { dprint ("item fell out of level at "); dprint (vtos(self.origin)); dprint ("\n"); remove(self); } }; /*QUAKED misc_explobox2 (0 .5 .8) (0 0 0) (32 32 64) Smaller exploding box, REGISTERED ONLY */ void() misc_explobox2 = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; local float oldz; self.solid = SOLID_BBOX; self.movetype = MOVETYPE_NONE; precache_model2 ("maps/b_exbox2.bsp"); setmodel (self, "maps/b_exbox2.bsp"); precache_sound ("weapons/r_exp3.wav"); self.health = 20; self.th_die = barrel_explode; self.takedamage = DAMAGE_AIM; self.origin_z = self.origin_z + 2; oldz = self.origin_z; droptofloor(); if (oldz - self.origin_z > 250) { dprint ("item fell out of level at "); dprint (vtos(self.origin)); dprint ("\n"); remove(self); } }; /*============================================================================== trap_spikeshooter from Hipnotic -- with additions by dumptruck_ds ==============================================================================*/ //MED 11/09/96 added new spawnflags -- taken from hipdefs.qc - dumptruck_ds float SPAWNFLAG_SUPERSPIKE = 1; float SPAWNFLAG_LASER = 2; float SPAWNFLAG_LAVABALL = 4; float SPAWNFLAG_ROCKET = 8; float SPAWNFLAG_VOREBALL = 16; float SPAWNFLAG_GRENADE = 32; float SPAWNFLAG_GIBS = 64; float SPAWNFLAG_SILENT = 128; void() ShalMissileTouch = //moved from Shalrath to enable shooter version { if (other == self.owner) return; // don't explode on owner if (other.classname == "monster_zombie") T_Damage (other, self, self, 110); T_RadiusDamage (self, self.owner, 40, world); sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM); WriteByte (MSG_BROADCAST, SVC_TEMPENTITY); WriteByte (MSG_BROADCAST, TE_EXPLOSION); WriteCoord (MSG_BROADCAST, self.origin_x); WriteCoord (MSG_BROADCAST, self.origin_y); WriteCoord (MSG_BROADCAST, self.origin_z); BecomeExplosion (); // self.velocity = '0 0 0'; // self.touch = SUB_Null; // setmodel (self, "progs/s_explod.spr"); // self.solid = SOLID_NOT; // s_explode1 (); }; void() ZombieGrenadeTouch = //moved from zombie.qc to enable shooter version { if (other == self.owner) return; // don't explode on owner if (other.takedamage) { T_Damage (other, self, self.owner, 10 ); sound (self, CHAN_WEAPON, "zombie/z_hit.wav", 1, ATTN_NORM); remove (self); return; } sound (self, CHAN_WEAPON, "zombie/z_miss.wav", 1, ATTN_NORM); // bounce sound self.velocity = '0 0 0'; self.avelocity = '0 0 0'; self.touch = SUB_Remove; }; void(vector org, vector vec) LaunchLaser; //MED 11/09/96 added lava ball and rocket //dumptruck_ds added voreball and grenades void() spikeshooter_use = { local entity lavaball; local entity voreball; local entity rockettrap; local entity gnade; local entity zgibs; if (self.spawnflags & SPAWNFLAG_LASER) { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "enforcer/enfire.wav", 1, ATTN_NORM); LaunchLaser (self.origin, self.movedir); newmis.spawnflags = self.spawnflags; } else if (self.spawnflags & SPAWNFLAG_LAVABALL) { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "boss1/throw.wav", 1, ATTN_NORM); //dms // sound (self, CHAN_VOICE, "knight/sword2.wav", 1, ATTN_NORM); //dms // sound (self, CHAN_VOICE, "weapons/ax1.wav", 1, ATTN_NORM); //dms lavaball = spawn(); lavaball.movetype = MOVETYPE_FLYMISSILE; lavaball.solid = SOLID_BBOX; lavaball.classname = "lavaball"; // set lavaball speed lavaball.velocity = self.movedir * 600; //was 300 dms lavaball.angles = vectoangles(lavaball.velocity); lavaball.owner = self; lavaball.touch = ShalMissileTouch; setmodel (lavaball, "progs/lavaball.mdl"); //dms setsize (lavaball, '0 0 0', '0 0 0'); setorigin (lavaball, self.origin); lavaball.avelocity = '0 0 400'; lavaball.nextthink = time + 5; lavaball.think = SUB_Remove; } else if (self.spawnflags & SPAWNFLAG_ROCKET) { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "weapons/sgun1.wav", 1, ATTN_NORM); rockettrap = spawn(); rockettrap.movetype = MOVETYPE_FLYMISSILE; rockettrap.solid = SOLID_BBOX; rockettrap.classname = "rockettrap"; // set rocket speed rockettrap.velocity = self.movedir * 1000; rockettrap.angles = vectoangles(rockettrap.velocity); rockettrap.owner = self; rockettrap.touch = T_MissileTouch; setmodel (rockettrap, "progs/missile.mdl"); //dms setsize (rockettrap, '0 0 0', '0 0 0'); setorigin (rockettrap, self.origin); // rockettrap.avelocity = '0 0 400'; rockettrap.nextthink = time + 5; rockettrap.think = SUB_Remove; } else if (self.spawnflags & SPAWNFLAG_VOREBALL) { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "shalrath/attack2.wav", 1, ATTN_NORM); voreball = spawn(); voreball.movetype = MOVETYPE_FLYMISSILE; voreball.solid = SOLID_BBOX; voreball.classname = "voreball"; // set voreball speed voreball.velocity = self.movedir * 600; //was 300 dms voreball.angles = vectoangles(voreball.velocity); voreball.owner = self; voreball.touch = ShalMissileTouch; setmodel (voreball, "progs/v_spike.mdl"); //dms setsize (voreball, '0 0 0', '0 0 0'); setorigin (voreball, self.origin); voreball.avelocity = '0 0 400'; voreball.nextthink = time + 5; voreball.think = SUB_Remove; } else if (self.spawnflags & SPAWNFLAG_GRENADE) { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "weapons/grenade.wav", 1, ATTN_NORM); gnade = spawn(); gnade.movetype = MOVETYPE_BOUNCE; // gnade.movetype = MOVETYPE_FLYMISSILE; gnade.solid = SOLID_BBOX; gnade.classname = "gnade"; // set grenade speed // gnade.velocity = self.movedir * 600; //was 300 dms gnade.velocity = self.movedir * 600 + v_up * 200 + crandom()*v_right*10 + crandom()*v_up*10; gnade.angles = vectoangles(gnade.velocity); gnade.owner = self; gnade.touch = GrenadeTouch; setmodel (gnade, "progs/grenade.mdl"); //dms setsize (gnade, '0 0 0', '0 0 0'); setorigin (gnade, self.origin); gnade.avelocity = '300 300 300'; gnade.nextthink = time + 2.5; gnade.think = GrenadeExplode; } else if (self.spawnflags & SPAWNFLAG_GIBS) { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "zombie/z_shot1.wav", 1, ATTN_NORM); zgibs = spawn (); zgibs.owner = self; zgibs.movetype = MOVETYPE_BOUNCE; zgibs.solid = SOLID_BBOX; zgibs.classname = "zgibs"; setmodel (zgibs, "progs/zom_gib.mdl"); setsize (zgibs, '0 0 0', '0 0 0'); setorigin (zgibs, self.origin); zgibs.velocity = self.movedir * 600 + v_up * 200 + crandom()*v_right*10 + crandom()*v_up*10; zgibs.avelocity = '3000 1000 2000'; zgibs.touch = ZombieGrenadeTouch; // set missile duration zgibs.nextthink = time + 2.5; zgibs.think = SUB_Remove; } else { if (!(self.spawnflags & SPAWNFLAG_SILENT)) sound (self, CHAN_VOICE, "weapons/spike2.wav", 1, ATTN_NORM); launch_spike (self.origin, self.movedir); newmis.velocity = self.movedir * 500; if (self.spawnflags & SPAWNFLAG_SUPERSPIKE) newmis.touch = superspike_touch; } }; //MED 11/01/96 added state capability void() shooter_think = { if (self.state) { spikeshooter_use (); } self.nextthink = time + self.wait; }; /*QUAKED trap_spikeshooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser lavaball rocket silent When triggered, fires a spike in the direction set in QuakeEd. Laser is only for REGISTERED. */ //MED 11/01/96 commented out setmovedir void() trap_spikeshooter = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; SetMovedir (); self.use = spikeshooter_use; if (self.spawnflags & SPAWNFLAG_LASER) { precache_model2 ("progs/laser.mdl"); precache_sound2 ("enforcer/enfire.wav"); precache_sound2 ("enforcer/enfstop.wav"); } else if (self.spawnflags & SPAWNFLAG_LAVABALL) { precache_model ("progs/lavaball.mdl"); // precache_sound2 ("knight/sword2.wav"); //dms precache_sound2 ("boss1/throw.wav"); //dms } else if (self.spawnflags & SPAWNFLAG_ROCKET) { precache_model ("progs/missile.mdl"); precache_sound ("weapons/sgun1.wav"); } else if (self.spawnflags & SPAWNFLAG_VOREBALL) { precache_model ("progs/v_spike.mdl"); precache_sound ("shalrath/attack2.wav"); } else if (self.spawnflags & SPAWNFLAG_GRENADE) { precache_model ("progs/grenade.mdl"); precache_sound ("weapons/grenade.wav"); // grenade launcher } else if (self.spawnflags & SPAWNFLAG_GIBS) { precache_model ("progs/zom_gib.mdl"); precache_sound ("zombie/z_shot1.wav"); // Zombie gibs precache_sound ("zombie/z_miss.wav"); precache_sound ("zombie/z_hit.wav"); } else precache_sound ("weapons/spike2.wav"); }; /*QUAKED trap_shooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser lavaball rocket silent Continuously fires spikes. "wait" time between spike (1.0 default) "nextthink" delay before firing first spike, so multiple shooters can be stagered. */ void() trap_shooter = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; trap_spikeshooter (); if (self.wait == 0) self.wait = 1; //MED 11/01/96 added state capability self.state = 1; self.nextthink = self.nextthink + self.wait + self.ltime; self.think = shooter_think; }; //MED 11/01/96 added new use function void() trap_shooter_use = { self.state = 1 - self.state; }; //MED 11/01/96 added new function /*QUAKED trap_switched_shooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser lavaball rocket silent Continuously fires spikes. "wait" time between spike (1.0 default) "nextthink" delay before firing first spike, so multiple shooters can be stagered. "state" 0 initially off, 1 initially on. (0 default) */ void() trap_switched_shooter = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; trap_spikeshooter (); if (self.wait == 0) self.wait = 1; //MED 11/01/96 added state capability self.nextthink = self.nextthink + self.wait + self.ltime; self.think = shooter_think; self.use = trap_shooter_use; }; /* =============================================================================== =============================================================================== */ void() make_bubbles; void() bubble_remove; void() bubble_bob; /*QUAKED air_bubbles (0 .5 .8) (-8 -8 -8) (8 8 8) testing air bubbles */ void() air_bubbles = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; if (deathmatch) { remove (self); return; } precache_model ("progs/s_bubble.spr"); self.nextthink = time + 1; self.think = make_bubbles; }; void() make_bubbles = { local entity bubble; bubble = spawn(); setmodel (bubble, "progs/s_bubble.spr"); setorigin (bubble, self.origin); bubble.movetype = MOVETYPE_NOCLIP; bubble.solid = SOLID_NOT; bubble.velocity = '0 0 15'; bubble.nextthink = time + 0.5; bubble.think = bubble_bob; bubble.touch = bubble_remove; bubble.classname = "bubble"; bubble.frame = 0; bubble.cnt = 0; setsize (bubble, '-8 -8 -8', '8 8 8'); self.nextthink = time + random() + 0.5; self.think = make_bubbles; }; void() bubble_split = { local entity bubble; bubble = spawn(); setmodel (bubble, "progs/s_bubble.spr"); setorigin (bubble, self.origin); bubble.movetype = MOVETYPE_NOCLIP; bubble.solid = SOLID_NOT; bubble.velocity = self.velocity; bubble.nextthink = time + 0.5; bubble.think = bubble_bob; bubble.touch = bubble_remove; bubble.classname = "bubble"; bubble.frame = 1; bubble.cnt = 10; setsize (bubble, '-8 -8 -8', '8 8 8'); self.frame = 1; self.cnt = 10; if (self.waterlevel != 3) remove (self); }; void() bubble_remove = { if (other.classname == self.classname) { // dprint ("bump"); return; } remove(self); }; void() bubble_bob = { local float rnd1, rnd2, rnd3; self.cnt = self.cnt + 1; if (self.cnt == 4) bubble_split(); if (self.cnt == 20) remove(self); rnd1 = self.velocity_x + (-10 + (random() * 20)); rnd2 = self.velocity_y + (-10 + (random() * 20)); rnd3 = self.velocity_z + 10 + random() * 10; if (rnd1 > 10) rnd1 = 5; if (rnd1 < -10) rnd1 = -5; if (rnd2 > 10) rnd2 = 5; if (rnd2 < -10) rnd2 = -5; if (rnd3 < 10) rnd3 = 15; if (rnd3 > 30) rnd3 = 25; self.velocity_x = rnd1; self.velocity_y = rnd2; self.velocity_z = rnd3; self.nextthink = time + 0.5; self.think = bubble_bob; }; /*~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~> ~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~<~>~*/ /*QUAKED viewthing (0 .5 .8) (-8 -8 -8) (8 8 8) Just for the debugging level. Don't use */ void() viewthing = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; self.movetype = MOVETYPE_NONE; self.solid = SOLID_NOT; precache_model ("progs/player.mdl"); setmodel (self, "progs/player.mdl"); }; /* ============================================================================== SIMPLE BMODELS ============================================================================== */ void() func_wall_use = { // change to alternate textures self.frame = 1 - self.frame; }; /*QUAKED func_wall (0 .5 .8) ? This is just a solid wall if not inhibitted */ void() func_wall = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; self.angles = '0 0 0'; self.movetype = MOVETYPE_PUSH; // so it doesn't get pushed by anything self.solid = SOLID_BSP; self.use = func_wall_use; setmodel (self, self.model); }; /*QUAKED func_illusionary (0 .5 .8) ? A simple entity that looks solid but lets you walk through it. */ void() func_illusionary = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; self.angles = '0 0 0'; self.movetype = MOVETYPE_NONE; self.solid = SOLID_NOT; setmodel (self, self.model); makestatic (self); }; /*QUAKED func_episodegate (0 .5 .8) ? E1 E2 E3 E4 This bmodel will appear if the episode has allready been completed, so players can't reenter it. */ void() func_episodegate = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; if (!(serverflags & self.spawnflags)) return; // can still enter episode self.angles = '0 0 0'; self.movetype = MOVETYPE_PUSH; // so it doesn't get pushed by anything self.solid = SOLID_BSP; self.use = func_wall_use; setmodel (self, self.model); }; /*QUAKED func_bossgate (0 .5 .8) ? This bmodel appears unless players have all of the episode sigils. */ void() func_bossgate = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; if ( (serverflags & 15) == 15) return; // all episodes completed self.angles = '0 0 0'; self.movetype = MOVETYPE_PUSH; // so it doesn't get pushed by anything self.solid = SOLID_BSP; self.use = func_wall_use; setmodel (self, self.model); }; //============================================================================ /*QUAKED ambient_suck_wind (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_suck_wind = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/suck1.wav"); ambientsound (self.origin, "ambience/suck1.wav", 1, ATTN_STATIC); }; /*QUAKED ambient_drone (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_drone = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/drone6.wav"); ambientsound (self.origin, "ambience/drone6.wav", 0.5, ATTN_STATIC); }; /*QUAKED ambient_flouro_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_flouro_buzz = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/buzz1.wav"); ambientsound (self.origin, "ambience/buzz1.wav", 1, ATTN_STATIC); }; /*QUAKED ambient_drip (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_drip = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/drip1.wav"); ambientsound (self.origin, "ambience/drip1.wav", 0.5, ATTN_STATIC); }; /*QUAKED ambient_comp_hum (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_comp_hum = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/comp1.wav"); ambientsound (self.origin, "ambience/comp1.wav", 1, ATTN_STATIC); }; /*QUAKED ambient_thunder (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ // void() ambient_thunder = // { // if (SUB_Inhibit ()) // new spawnflags for all entities -- iw // return; // // precache_sound ("ambience/thunder1.wav"); // ambientsound (self.origin, "ambience/thunder1.wav", 0.5, ATTN_STATIC); // }; /*QUAKED ambient_light_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_light_buzz = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/fl_hum1.wav"); ambientsound (self.origin, "ambience/fl_hum1.wav", 0.5, ATTN_STATIC); }; /*QUAKED ambient_swamp1 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_swamp1 = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/swamp1.wav"); ambientsound (self.origin, "ambience/swamp1.wav", 0.5, ATTN_STATIC); }; /*QUAKED ambient_swamp2 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_swamp2 = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/swamp2.wav"); ambientsound (self.origin, "ambience/swamp2.wav", 0.5, ATTN_STATIC); }; ///////////////////////////////////////////////////////////// ////////// dumptruck_ds //////////////////////////////////// /////////////////////////////////////////////////////////// /* Additions to Ambient Sound effects. These are hard coded into the engine and usually play back automatically when the sky or water textures are used. If you'd prefer to use these in custom setups, you can use the command line switch -nomabient in when you VIS your map to disable the hard coded sounds. */ /*QUAKED ambient_water1 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_water1 = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/water1.wav"); ambientsound (self.origin, "ambience/water1.wav", 1, ATTN_STATIC); }; /*QUAKED ambient_wind2 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_wind2 = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound ("ambience/wind2.wav"); ambientsound (self.origin, "ambience/wind2.wav", 1, ATTN_STATIC); }; ///////////////////////////////////////////////////////////// ////////// dumptruck_ds //////////////////////////////////// /////////////////////////////////////////////////////////// /* The original ambient_thunder was included in Quake but the code was missing. This version is borrowed from the Zerstörer mod but modified to only play the original thumder1.wav included in the game. This is also different than the other ambient sounds as it plays back randomly as opposed to looping. You only need one of these in your level. It will play everywhere. */ void() thunder_go_boom = { if (random() < 0.5) sound (self, CHAN_AUTO, "ambience/thunder1.wav", 0.7, ATTN_NONE); else sound (self, CHAN_AUTO, "ambience/thunder1.wav", 1, ATTN_NONE); self.think = thunder_go_boom; self.nextthink = time + 40*random(); }; /*QUAKED ambient_thunder (0.3 0.1 0.6) (-10 -10 -8) (10 10 8) */ void() ambient_thunder = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; // changed from ambient to delayed sound (sounds better) precache_sound ("ambience/thunder1.wav"); // precache_sound ("ambience/thunder2.wav"); this file in not included in the game self.think = thunder_go_boom; self.nextthink = time + random(); }; //============================================================================ void() noise_think = { self.nextthink = time + 0.5; sound (self, 1, "enforcer/enfire.wav", 1, ATTN_NORM); sound (self, 2, "enforcer/enfstop.wav", 1, ATTN_NORM); sound (self, 3, "enforcer/sight1.wav", 1, ATTN_NORM); sound (self, 4, "enforcer/sight2.wav", 1, ATTN_NORM); sound (self, 5, "enforcer/sight3.wav", 1, ATTN_NORM); sound (self, 6, "enforcer/sight4.wav", 1, ATTN_NORM); sound (self, 7, "enforcer/pain1.wav", 1, ATTN_NORM); }; /*QUAKED misc_noisemaker (1 0.5 0) (-10 -10 -10) (10 10 10) For optimzation testing, starts a lot of sounds. */ void() misc_noisemaker = { if (SUB_Inhibit ()) // new spawnflags for all entities -- iw return; precache_sound2 ("enforcer/enfire.wav"); precache_sound2 ("enforcer/enfstop.wav"); precache_sound2 ("enforcer/sight1.wav"); precache_sound2 ("enforcer/sight2.wav"); precache_sound2 ("enforcer/sight3.wav"); precache_sound2 ("enforcer/sight4.wav"); precache_sound2 ("enforcer/pain1.wav"); precache_sound2 ("enforcer/pain2.wav"); precache_sound2 ("enforcer/death1.wav"); precache_sound2 ("enforcer/idle1.wav"); self.nextthink = time + 0.1 + random(); self.think = noise_think; };