mirror of
https://git.code.sf.net/p/quake/game-source
synced 2024-12-01 16:12:08 +00:00
129 lines
2.8 KiB
R
129 lines
2.8 KiB
R
|
#include "config.rh"
|
||
|
#include "paroxysm.rh"
|
||
|
|
||
|
/* Frank Condello 09.28.98 - made for the Paroxysm Quake Mod.
|
||
|
EMAIL: pox@planetquake.com
|
||
|
WEB: http://www.planetquake.com/paroxysm/
|
||
|
=========================================================================
|
||
|
*/
|
||
|
|
||
|
//Armor regeneration stations
|
||
|
//surprisingly little coding required to get this going
|
||
|
//Had to add a value/type check routine in T_Damage
|
||
|
|
||
|
// Armor is gained by standing at regen stations.
|
||
|
// The color of armor only indocates how much power your armor has left;
|
||
|
// all armor protects the same amount.
|
||
|
|
||
|
// A breakdown:
|
||
|
// 1 - 50 points is blue
|
||
|
// 51 - 150 points is yellow
|
||
|
// 151 - 255 points is red
|
||
|
|
||
|
// Regen Station default ambient sound
|
||
|
void() regen_ambientsound =
|
||
|
{
|
||
|
ambientsound (self.origin, "ambience/regen1.wav", 0.5, ATTN_STATIC);
|
||
|
};
|
||
|
|
||
|
// Particle stream replaced by a model with client side animation
|
||
|
#if 0
|
||
|
// A particle effect for regen stations
|
||
|
void (void) regen_make_smoke =
|
||
|
{
|
||
|
particle (self.origin + '0 0 +6', '1 1 36', self.clr, 12);
|
||
|
particle (self.origin + '0 0 +6', '-1 -1 36', self.clr, 12);
|
||
|
self.nextthink = time + 0.1;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
// Particle-emiting entity
|
||
|
void (float color) regen_streamer =
|
||
|
{
|
||
|
local entity streamer;
|
||
|
|
||
|
streamer = spawn ();
|
||
|
streamer.solid = SOLID_TRIGGER;
|
||
|
streamer.movetype = MOVETYPE_TOSS;
|
||
|
|
||
|
setmodel (streamer, "progs/stream.mdl");
|
||
|
setsize (streamer, '-16 -16 0', '16 16 56');
|
||
|
streamer.velocity = '0 0 0';
|
||
|
setorigin (streamer, self.origin);
|
||
|
|
||
|
streamer.skin = color;
|
||
|
|
||
|
regen_ambientsound ();
|
||
|
};
|
||
|
|
||
|
void () regen_touch =
|
||
|
{
|
||
|
if (other.classname != "player")
|
||
|
return;
|
||
|
|
||
|
if (other.regen_finished > time) // already touched
|
||
|
return;
|
||
|
|
||
|
if (other.armorvalue >= self.armregen) { // Station can't give more
|
||
|
other.regen_finished = time;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
other.armregen = self.armregen;
|
||
|
other.regen_finished = time + 0.2;
|
||
|
|
||
|
};
|
||
|
|
||
|
// Regen triggers for custom maps - can be BIG (whole rooms)
|
||
|
void () regen_station =
|
||
|
{
|
||
|
if (self.armregen <= 0)
|
||
|
self.armregen = 50;
|
||
|
InitTrigger ();
|
||
|
self.touch = regen_touch;
|
||
|
//self.netname = "regen station";
|
||
|
};
|
||
|
|
||
|
void (float type, float value) item_armor =
|
||
|
{
|
||
|
if (type < 0 || type > 2) // sanity checking
|
||
|
return;
|
||
|
|
||
|
precache_sound ("ambience/regen1.wav");
|
||
|
|
||
|
precache_model ("progs/regen.mdl");
|
||
|
precache_model ("progs/stream.mdl");
|
||
|
|
||
|
self.touch = regen_touch;
|
||
|
setmodel (self, "progs/regen.mdl");
|
||
|
self.skin = type;
|
||
|
setsize (self, '-16 -16 0', '16 16 56');
|
||
|
self.solid = SOLID_TRIGGER;
|
||
|
|
||
|
// Some existing DM maps rely on Droptofloor for proper placement
|
||
|
self.movetype = MOVETYPE_TOSS;
|
||
|
self.velocity = '0 0 0';
|
||
|
self.origin_z = self.origin_z + 6;
|
||
|
//self.netname = "regen station";
|
||
|
|
||
|
self.armregen = value;
|
||
|
|
||
|
regen_streamer (type);
|
||
|
};
|
||
|
|
||
|
// Replace armor pickups in existing maps
|
||
|
void () item_armor1 =
|
||
|
{
|
||
|
item_armor (0, 50);
|
||
|
};
|
||
|
|
||
|
void () item_armor2 =
|
||
|
{
|
||
|
item_armor (1, 150);
|
||
|
};
|
||
|
|
||
|
void() item_armorInv =
|
||
|
{
|
||
|
item_armor (2, 250);
|
||
|
};
|