230 lines
5.3 KiB
C++
230 lines
5.3 KiB
C++
/*
|
|
* $Header: /H3MP/hcode/rings.hc 26 10/28/97 1:01p Mgummelt $
|
|
*/
|
|
void player_fly(void);
|
|
void Ring_Init(string modelname,string name);
|
|
|
|
void ring_touch (void)
|
|
{
|
|
float amount;
|
|
entity holdself;
|
|
|
|
if ((other.classname != "player") || (other.health <= 0))
|
|
return;
|
|
|
|
// Was it thrown out by player just a frame of two ago?????
|
|
if (self.owner == other && self.artifact_ignore_owner_time > time)
|
|
return;
|
|
if (self.artifact_ignore_time > time)
|
|
return;
|
|
|
|
amount = random();
|
|
if (amount < 0.5)
|
|
{
|
|
sprint (other, STR_YOUPOSSESS);
|
|
sprint (other, self.netname);
|
|
}
|
|
else
|
|
{
|
|
sprint (other, STR_YOUHAVEACQUIRED);
|
|
sprint (other, self.netname);
|
|
}
|
|
|
|
sprint (other,"\n");
|
|
|
|
if (deathmatch||(self.classname == "Ring_Flight"&&!self.owner))
|
|
{
|
|
self.mdl = self.model;
|
|
self.nextthink = time + 60;
|
|
self.think = SUB_regen;
|
|
}
|
|
|
|
sound (other, CHAN_VOICE, "items/ringpkup.wav", 1, ATTN_NORM);
|
|
stuffcmd (other, "bf\n");
|
|
self.solid = SOLID_NOT;
|
|
self.model = string_null;
|
|
|
|
// take appropriate action
|
|
if ((self.classname == "Ring_Flight") && (deathmatch))
|
|
{
|
|
other.cnt_flight += 1;
|
|
}
|
|
else if (self.classname == "Ring_Flight")
|
|
{
|
|
if(other.rings_active&RING_FLIGHT)//add time to current ring
|
|
{
|
|
other.ring_flight = 100;
|
|
other.ring_flight_time = time + 1;
|
|
}
|
|
else
|
|
{
|
|
other.rings(+)RING_FLIGHT;
|
|
other.ring_flight = 100;
|
|
other.ring_flight_time = time + 1;
|
|
holdself = self;
|
|
self = other;
|
|
player_fly();
|
|
self = holdself;
|
|
other.rings_active (+) RING_FLIGHT;
|
|
}
|
|
other.rings_low (-) RING_FLIGHT;
|
|
}
|
|
else if (self.classname == "Ring_WaterBreathing")
|
|
{
|
|
other.rings = other.rings | RING_WATER;
|
|
other.ring_water = 100;
|
|
other.ring_water_time = time + 1;
|
|
|
|
if (other.rings_low & RING_WATER)
|
|
other.rings_low (-) RING_WATER;
|
|
|
|
}
|
|
else if (self.classname == "Ring_Turning")
|
|
{
|
|
other.rings = other.rings | RING_TURNING;
|
|
other.ring_turning = 100;
|
|
other.ring_turning_time = time + 1;
|
|
|
|
other.rings_active (+) RING_TURNING;
|
|
|
|
if (other.rings_low & RING_TURNING)
|
|
other.rings_low (-) RING_TURNING;
|
|
}
|
|
else if (self.classname == "Ring_Regeneration")
|
|
{
|
|
other.rings = other.rings | RING_REGENERATION;
|
|
other.ring_regeneration = 100;
|
|
other.rings_active (+) RING_REGENERATION;
|
|
|
|
if (other.rings_low & RING_REGENERATION)
|
|
other.rings_low (-) RING_REGENERATION;
|
|
}
|
|
|
|
activator = other;
|
|
SUB_UseTargets(); // fire all targets / killtargets
|
|
}
|
|
|
|
/*QUAKED Ring_WaterBreathing (0 0 0) (-8 -8 -44) (8 8 20) FLOATING
|
|
Ring of Water Breathing
|
|
-------------------------FIELDS-------------------------
|
|
None
|
|
--------------------------------------------------------
|
|
*/
|
|
void Ring_WaterBreathing (void)
|
|
{
|
|
precache_model("models/ringwb.mdl");
|
|
Ring_Init("models/ringwb.mdl",STR_RINGWATERBREATHING);
|
|
}
|
|
|
|
/*QUAKED Ring_Flight (0 0 0) (-8 -8 -44) (8 8 20) FLOATING
|
|
Ring of Flight
|
|
-------------------------FIELDS-------------------------
|
|
None
|
|
--------------------------------------------------------
|
|
*/
|
|
void Ring_Flight (void)
|
|
{
|
|
precache_model("models/ringft.mdl");
|
|
Ring_Init("models/ringft.mdl",STR_RINGFLIGHT);
|
|
}
|
|
|
|
/*QUAKED Ring_Regeneration (0 0 0) (-8 -8 -44) (8 8 20) FLOATING
|
|
Ring of Regeneration
|
|
-------------------------FIELDS-------------------------
|
|
None
|
|
--------------------------------------------------------
|
|
*/
|
|
void Ring_Regeneration (void)
|
|
{
|
|
precache_model("models/ringre.mdl");
|
|
Ring_Init("models/ringre.mdl",STR_RINGREGENERATION);
|
|
}
|
|
|
|
/*QUAKED Ring_Turning (0 0 0) (-8 -8 -44) (8 8 20) FLOATING
|
|
Ring of Turning
|
|
-------------------------FIELDS-------------------------
|
|
None
|
|
--------------------------------------------------------
|
|
*/
|
|
void Ring_Turning (void)
|
|
{
|
|
precache_model("models/ringtn.mdl");
|
|
Ring_Init("models/ringtn.mdl",STR_RINGTURNING);
|
|
}
|
|
|
|
void Ring_Init(string modelname,string name)
|
|
{
|
|
setmodel(self, modelname);
|
|
self.netname = name;
|
|
|
|
setsize(self,'0 0 0','0 0 0');
|
|
self.hull=HULL_POINT;
|
|
self.touch = ring_touch;
|
|
|
|
StartItem();
|
|
}
|
|
|
|
/*
|
|
* $Log: /H3MP/hcode/rings.hc $
|
|
*
|
|
* 26 10/28/97 1:01p Mgummelt
|
|
* Massive replacement, rewrote entire code... just kidding. Added
|
|
* support for 5th class.
|
|
*
|
|
* 24 9/11/97 12:02p Mgummelt
|
|
*
|
|
* 23 9/02/97 2:01a Rlove
|
|
*
|
|
* 22 9/01/97 9:32p Rlove
|
|
*
|
|
* 21 8/31/97 8:52a Mgummelt
|
|
*
|
|
* 20 8/26/97 7:45a Rlove
|
|
*
|
|
* 19 8/25/97 6:01p Rlove
|
|
*
|
|
* 18 8/21/97 12:00a Mgummelt
|
|
*
|
|
* 17 8/20/97 11:56p Mgummelt
|
|
*
|
|
* 16 8/15/97 11:40a Rlove
|
|
*
|
|
* 15 8/14/97 8:00a Rlove
|
|
*
|
|
* 14 8/14/97 6:42a Rlove
|
|
*
|
|
* 13 7/21/97 3:03p Rlove
|
|
*
|
|
* 12 7/08/97 7:07a Rlove
|
|
* Changed bounding box on rings
|
|
*
|
|
* 11 6/25/97 8:28a Rlove
|
|
* Added ring of turning
|
|
*
|
|
* 10 6/24/97 5:44p Rlove
|
|
* Rings of Flight and Regeneration are working
|
|
*
|
|
* 9 6/24/97 3:54p Rlove
|
|
* New ring system
|
|
*
|
|
* 8 6/13/97 10:11a Rlove
|
|
* Moved all message.hc to strings.hc
|
|
*
|
|
* 7 6/04/97 8:49a Rlove
|
|
* Added ring of absorption
|
|
*
|
|
* 6 6/03/97 7:41a Rlove
|
|
* Added ring of absorption model
|
|
*
|
|
* 5 5/22/97 3:30p Mgummelt
|
|
*
|
|
* 4 2/12/97 3:59p Rlove
|
|
* Invincibility is done, changed a few things with ring of water
|
|
* breathing and the lava death
|
|
*
|
|
* 3 1/10/97 1:02p Rlove
|
|
*
|
|
* 2 12/26/96 10:01a Rlove
|
|
* Ring of Water Breathing is working, now on to the Bra of Miracles
|
|
*
|
|
*/
|