mirror of
https://github.com/id-Software/quake-rerelease-qc.git
synced 2026-03-20 00:49:37 +01:00
Initial commit of Update 3 QuakeC
This commit is contained in:
181
quakec_rogue/earthq.qc
Normal file
181
quakec_rogue/earthq.qc
Normal file
@@ -0,0 +1,181 @@
|
||||
/* Copyright (C) 1996-2022 id Software LLC
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
See file, 'COPYING', for details.
|
||||
*/
|
||||
|
||||
// earthquake
|
||||
|
||||
// ============================================================
|
||||
// Level-Wide Earthquakes
|
||||
// ============================================================
|
||||
float EQ_RANDOM = 1;
|
||||
|
||||
void() stop_earthquake;
|
||||
|
||||
void() earthquake_rumble =
|
||||
{
|
||||
if (self.attack_finished < time)
|
||||
stop_earthquake();
|
||||
else
|
||||
{
|
||||
sound( self, CHAN_VOICE, "equake/rumble.wav", 1, ATTN_NONE );
|
||||
self.think = earthquake_rumble;
|
||||
self.nextthink = time + 1;
|
||||
}
|
||||
};
|
||||
|
||||
void() start_earthquake =
|
||||
{
|
||||
earthquake_active = 1;
|
||||
if ( self.spawnflags & EQ_RANDOM )
|
||||
self.attack_finished = time + random() * self.delay;
|
||||
else
|
||||
self.attack_finished = time + self.delay;
|
||||
earthquake_rumble();
|
||||
};
|
||||
|
||||
void() stop_earthquake =
|
||||
{
|
||||
earthquake_active = 0;
|
||||
self.think = start_earthquake;
|
||||
if ( self.spawnflags & EQ_RANDOM )
|
||||
self.nextthink = time + random() * self.wait;
|
||||
else
|
||||
self.nextthink = time + self.wait;
|
||||
};
|
||||
|
||||
/*QUAKED earthquake (0 1 0) (-8 -8 -8) (8 8 8) Random
|
||||
The Earthquake generator.
|
||||
|
||||
delay - duration of the tremor (default 20)
|
||||
wait - time between tremors (default 60)
|
||||
weapon - richter scale of movement (default 40)
|
||||
|
||||
RANDOM affects the times only. It will change the randomly between
|
||||
0-n where n is the duration or time between.
|
||||
|
||||
weapon - if you give a weapon value of 40, the X and Y displacement
|
||||
can vary between -20 and +20, a range of 40.
|
||||
*/
|
||||
void() earthquake =
|
||||
{
|
||||
if (!self.delay)
|
||||
self.delay = 20;
|
||||
if (!self.wait)
|
||||
self.wait = 60;
|
||||
if (!self.weapon)
|
||||
self.weapon = 40;
|
||||
|
||||
precache_sound ("equake/rumble.wav");
|
||||
earthquake_active = 0;
|
||||
earthquake_intensity = self.weapon * 0.5;
|
||||
|
||||
setsize (self, '0 0 0', '0 0 0');
|
||||
self.think = stop_earthquake;
|
||||
self.nextthink = time + 1;
|
||||
};
|
||||
|
||||
// ============================================================
|
||||
// Earthquake trigger
|
||||
// ============================================================
|
||||
void() earthquake_touch =
|
||||
{
|
||||
if (self.delay)
|
||||
{
|
||||
if ( self.attack_finished < time )
|
||||
{
|
||||
sound ( self, CHAN_VOICE, "equake/rumble.wav", 1, ATTN_NORM );
|
||||
self.attack_finished = time + 1;
|
||||
}
|
||||
|
||||
if ( other.classname == "player" )
|
||||
{
|
||||
if ( other.flags & FL_ONGROUND )
|
||||
{
|
||||
other.velocity_x = other.velocity_x +
|
||||
(random() * self.weapon * 2) -
|
||||
self.weapon;
|
||||
other.velocity_y = other.velocity_y +
|
||||
(random() * self.weapon * 2) -
|
||||
self.weapon;
|
||||
other.velocity_z = other.velocity_z +
|
||||
(random() * self.weapon * 2) -
|
||||
self.weapon;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void() earthquake_use =
|
||||
{
|
||||
self.delay = !self.delay;
|
||||
};
|
||||
|
||||
/*QUAKED trigger_earthquake (.5 .5 .5) ?
|
||||
The Earthquake generator.
|
||||
|
||||
Anytime a person is in an active field, they shake. If the trigger is a target, it will be OFF until triggered. It will then toggle between ON and OFF.
|
||||
|
||||
weapon - richter scale of movement (default 40)
|
||||
|
||||
weapon - if you give a weapon value of 40, the X and Y displacement
|
||||
can vary between -20 and +20, a range of 40.
|
||||
*/
|
||||
void() trigger_earthquake =
|
||||
{
|
||||
precache_sound ("equake/rumble.wav");
|
||||
|
||||
if (!self.weapon)
|
||||
self.weapon = 40;
|
||||
|
||||
self.weapon = self.weapon * 0.5;
|
||||
self.delay = 1;
|
||||
self.touch = earthquake_touch;
|
||||
|
||||
if (self.targetname)
|
||||
{
|
||||
self.use = earthquake_use;
|
||||
self.delay = 0;
|
||||
}
|
||||
|
||||
InitTrigger();
|
||||
};
|
||||
|
||||
void() kill_earthquake =
|
||||
{
|
||||
local entity eq;
|
||||
|
||||
if ( other.classname != "player" )
|
||||
return;
|
||||
|
||||
eq = find (world, classname, "earthquake");
|
||||
if (eq != world)
|
||||
{
|
||||
earthquake_active = 0;
|
||||
remove (eq);
|
||||
}
|
||||
};
|
||||
|
||||
/*QUAKED trigger_earthquake_kill (.5 .5 .5) ?
|
||||
Trigger to kill the level-wide earthquake.
|
||||
*/
|
||||
void() trigger_earthquake_kill =
|
||||
{
|
||||
self.touch = kill_earthquake;
|
||||
|
||||
InitTrigger();
|
||||
};
|
||||
Reference in New Issue
Block a user