forked from id/quake-qw-qc
as released 1997-08-12
This commit is contained in:
parent
2a4c0638b2
commit
88be1d246c
11 changed files with 217 additions and 95 deletions
137
client.qc
137
client.qc
|
@ -903,6 +903,8 @@ void() PlayerPreThink =
|
||||||
|
|
||||||
makevectors (self.v_angle); // is this still used
|
makevectors (self.v_angle); // is this still used
|
||||||
|
|
||||||
|
self.deathtype = "";
|
||||||
|
|
||||||
CheckRules ();
|
CheckRules ();
|
||||||
WaterMove ();
|
WaterMove ();
|
||||||
/*
|
/*
|
||||||
|
@ -1140,9 +1142,9 @@ void() PlayerPostThink =
|
||||||
sound (self, CHAN_BODY, "player/h2ojump.wav", 1, ATTN_NORM);
|
sound (self, CHAN_BODY, "player/h2ojump.wav", 1, ATTN_NORM);
|
||||||
else if (self.jump_flag < -650)
|
else if (self.jump_flag < -650)
|
||||||
{
|
{
|
||||||
|
self.deathtype = "falling";
|
||||||
T_Damage (self, world, world, 5);
|
T_Damage (self, world, world, 5);
|
||||||
sound (self, CHAN_VOICE, "player/land2.wav", 1, ATTN_NORM);
|
sound (self, CHAN_VOICE, "player/land2.wav", 1, ATTN_NORM);
|
||||||
self.deathtype = "falling";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sound (self, CHAN_VOICE, "player/land.wav", 1, ATTN_NORM);
|
sound (self, CHAN_VOICE, "player/land.wav", 1, ATTN_NORM);
|
||||||
|
@ -1186,9 +1188,9 @@ void() ClientDisconnect =
|
||||||
{
|
{
|
||||||
// let everyone else know
|
// let everyone else know
|
||||||
bprint (PRINT_HIGH, self.netname);
|
bprint (PRINT_HIGH, self.netname);
|
||||||
bprint (PRINT_HIGH, " left the game with ");
|
bprint (PRINT_HIGH, " left the game with ");
|
||||||
bprint (PRINT_HIGH, ftos(self.frags));
|
bprint (PRINT_HIGH, ftos(self.frags));
|
||||||
bprint (PRINT_HIGH, " frags\n");
|
bprint (PRINT_HIGH, " frags\n");
|
||||||
sound (self, CHAN_BODY, "player/tornoff2.wav", 1, ATTN_NONE);
|
sound (self, CHAN_BODY, "player/tornoff2.wav", 1, ATTN_NONE);
|
||||||
set_suicide_frame ();
|
set_suicide_frame ();
|
||||||
};
|
};
|
||||||
|
@ -1200,6 +1202,7 @@ ClientObituary
|
||||||
called when a player dies
|
called when a player dies
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void(entity targ, entity attacker) ClientObituary =
|
void(entity targ, entity attacker) ClientObituary =
|
||||||
{
|
{
|
||||||
local float rnum;
|
local float rnum;
|
||||||
|
@ -1208,6 +1211,9 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
local string attackerteam, targteam;
|
local string attackerteam, targteam;
|
||||||
|
|
||||||
rnum = random();
|
rnum = random();
|
||||||
|
//ZOID 12-13-96: self.team doesn't work in QW. Use keys
|
||||||
|
attackerteam = infokey(attacker, "team");
|
||||||
|
targteam = infokey(targ, "team");
|
||||||
|
|
||||||
if (targ.classname == "player")
|
if (targ.classname == "player")
|
||||||
{
|
{
|
||||||
|
@ -1216,7 +1222,6 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
{
|
{
|
||||||
if (targ.deathtype == "selfwater")
|
if (targ.deathtype == "selfwater")
|
||||||
{
|
{
|
||||||
targ.deathtype = "";
|
|
||||||
bprint (PRINT_MEDIUM, targ.netname);
|
bprint (PRINT_MEDIUM, targ.netname);
|
||||||
bprint (PRINT_MEDIUM," electrocutes himself.\n ");
|
bprint (PRINT_MEDIUM," electrocutes himself.\n ");
|
||||||
targ.frags = targ.frags - 1;
|
targ.frags = targ.frags - 1;
|
||||||
|
@ -1230,6 +1235,7 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
bprint (PRINT_MEDIUM," was telefragged by ");
|
bprint (PRINT_MEDIUM," was telefragged by ");
|
||||||
bprint (PRINT_MEDIUM,attacker.owner.netname);
|
bprint (PRINT_MEDIUM,attacker.owner.netname);
|
||||||
bprint (PRINT_MEDIUM,"\n");
|
bprint (PRINT_MEDIUM,"\n");
|
||||||
|
logfrag (attacker.owner, targ);
|
||||||
|
|
||||||
attacker.owner.frags = attacker.owner.frags + 1;
|
attacker.owner.frags = attacker.owner.frags + 1;
|
||||||
return;
|
return;
|
||||||
|
@ -1246,44 +1252,72 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// double 666 telefrag (can happen often in deathmatch 4)
|
||||||
|
if (attacker.classname == "teledeath3")
|
||||||
|
{
|
||||||
|
bprint (PRINT_MEDIUM,targ.netname);
|
||||||
|
bprint (PRINT_MEDIUM," was telefragged by ");
|
||||||
|
bprint (PRINT_MEDIUM,attacker.owner.netname);
|
||||||
|
bprint (PRINT_MEDIUM, "'s Satan's power\n");
|
||||||
|
targ.frags = targ.frags - 1;
|
||||||
|
logfrag (targ, targ);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (targ.deathtype == "squish")
|
if (targ.deathtype == "squish")
|
||||||
{
|
{
|
||||||
targ.deathtype = "";
|
if (teamplay && targteam == attackerteam && attackerteam != "" && targ != attacker)
|
||||||
if (attacker != world)
|
{
|
||||||
|
logfrag (attacker, attacker);
|
||||||
|
attacker.frags = attacker.frags - 1;
|
||||||
|
bprint (PRINT_MEDIUM,attacker.netname);
|
||||||
|
bprint (PRINT_MEDIUM," squished a teammate\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (attacker.classname == "player" && attacker != targ)
|
||||||
{
|
{
|
||||||
bprint (PRINT_MEDIUM, attacker.netname);
|
bprint (PRINT_MEDIUM, attacker.netname);
|
||||||
bprint (PRINT_MEDIUM," squishes ");
|
bprint (PRINT_MEDIUM," squishes ");
|
||||||
bprint (PRINT_MEDIUM,targ.netname);
|
bprint (PRINT_MEDIUM,targ.netname);
|
||||||
bprint (PRINT_MEDIUM,"\n");
|
bprint (PRINT_MEDIUM,"\n");
|
||||||
|
logfrag (attacker, targ);
|
||||||
attacker.frags = attacker.frags + 1;
|
attacker.frags = attacker.frags + 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logfrag (targ, targ);
|
||||||
|
targ.frags = targ.frags - 1; // killed self
|
||||||
|
bprint (PRINT_MEDIUM,targ.netname);
|
||||||
|
bprint (PRINT_MEDIUM," was squished\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attacker.classname == "player")
|
if (attacker.classname == "player")
|
||||||
{
|
{
|
||||||
//ZOID 12-13-96: self.team doesn't work in QW. Use keys
|
|
||||||
attackerteam = infokey(attacker, "team");
|
|
||||||
targteam = infokey(targ, "team");
|
|
||||||
|
|
||||||
if (targ == attacker)
|
if (targ == attacker)
|
||||||
{
|
{
|
||||||
// killed self
|
// killed self
|
||||||
logfrag (attacker, attacker);
|
logfrag (attacker, attacker);
|
||||||
attacker.frags = attacker.frags - 1;
|
attacker.frags = attacker.frags - 1;
|
||||||
bprint (PRINT_MEDIUM,targ.netname);
|
bprint (PRINT_MEDIUM,targ.netname);
|
||||||
|
if (targ.deathtype == "grenade")
|
||||||
if (targ.weapon == 64 && targ.waterlevel > 1)
|
|
||||||
{
|
|
||||||
bprint (PRINT_MEDIUM," discharges into the water.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (targ.weapon == 16)
|
|
||||||
bprint (PRINT_MEDIUM," tries to put the pin back in\n");
|
bprint (PRINT_MEDIUM," tries to put the pin back in\n");
|
||||||
else if (rnum)
|
else if (targ.deathtype == "rocket")
|
||||||
bprint (PRINT_MEDIUM," becomes bored with life\n");
|
bprint (PRINT_MEDIUM," becomes bored with life\n");
|
||||||
|
else if (targ.weapon == 64 && targ.waterlevel > 1)
|
||||||
|
{
|
||||||
|
if (targ.watertype == CONTENT_SLIME)
|
||||||
|
bprint (PRINT_MEDIUM," discharges into the slime\n");
|
||||||
|
else if (targ.watertype == CONTENT_LAVA)
|
||||||
|
bprint (PRINT_MEDIUM," discharges into the lava\n");
|
||||||
|
else
|
||||||
|
bprint (PRINT_MEDIUM," discharges into the water.\n");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
bprint (PRINT_MEDIUM," checks if his weapon is loaded\n");
|
bprint (PRINT_MEDIUM," becomes bored with life\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( (teamplay == 2) && (targteam == attackerteam) &&
|
else if ( (teamplay == 2) && (targteam == attackerteam) &&
|
||||||
|
@ -1310,32 +1344,17 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
attacker.frags = attacker.frags + 1;
|
attacker.frags = attacker.frags + 1;
|
||||||
|
|
||||||
rnum = attacker.weapon;
|
rnum = attacker.weapon;
|
||||||
if (rnum == IT_AXE)
|
if (targ.deathtype == "nail")
|
||||||
{
|
|
||||||
deathstring = " was ax-murdered by ";
|
|
||||||
deathstring2 = "\n";
|
|
||||||
}
|
|
||||||
if (rnum == IT_SHOTGUN)
|
|
||||||
{
|
|
||||||
deathstring = " chewed on ";
|
|
||||||
deathstring2 = "'s boomstick\n";
|
|
||||||
}
|
|
||||||
if (rnum == IT_SUPER_SHOTGUN)
|
|
||||||
{
|
|
||||||
deathstring = " ate 2 loads of ";
|
|
||||||
deathstring2 = "'s buckshot\n";
|
|
||||||
}
|
|
||||||
if (rnum == IT_NAILGUN)
|
|
||||||
{
|
{
|
||||||
deathstring = " was nailed by ";
|
deathstring = " was nailed by ";
|
||||||
deathstring2 = "\n";
|
deathstring2 = "\n";
|
||||||
}
|
}
|
||||||
if (rnum == IT_SUPER_NAILGUN)
|
else if (targ.deathtype == "supernail")
|
||||||
{
|
{
|
||||||
deathstring = " was punctured by ";
|
deathstring = " was punctured by ";
|
||||||
deathstring2 = "\n";
|
deathstring2 = "\n";
|
||||||
}
|
}
|
||||||
if (rnum == IT_GRENADE_LAUNCHER)
|
else if (targ.deathtype == "grenade")
|
||||||
{
|
{
|
||||||
deathstring = " eats ";
|
deathstring = " eats ";
|
||||||
deathstring2 = "'s pineapple\n";
|
deathstring2 = "'s pineapple\n";
|
||||||
|
@ -1345,10 +1364,9 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
deathstring2 = "'s grenade\n";
|
deathstring2 = "'s grenade\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rnum == IT_ROCKET_LAUNCHER)
|
else if (targ.deathtype == "rocket")
|
||||||
{
|
{
|
||||||
|
if (attacker.super_damage_finished > 0 && targ.health < -40)
|
||||||
if (attacker.super_damage_finished > 0)
|
|
||||||
{
|
{
|
||||||
rnum = random();
|
rnum = random();
|
||||||
if (rnum < 0.3)
|
if (rnum < 0.3)
|
||||||
|
@ -1363,10 +1381,7 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
bprint (PRINT_MEDIUM, " a new one\n");
|
bprint (PRINT_MEDIUM, " a new one\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (deathmatch == 4)
|
deathstring2 = "'s quad rocket\n";
|
||||||
deathstring2 = "'s OctaRocket!\n";
|
|
||||||
else
|
|
||||||
deathstring2 = "'s quad rocket\n";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1378,10 +1393,23 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
deathstring2 = "'s rocket\n" ;
|
deathstring2 = "'s rocket\n" ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if (rnum == IT_LIGHTNING)
|
else if (rnum == IT_AXE)
|
||||||
|
{
|
||||||
|
deathstring = " was ax-murdered by ";
|
||||||
|
deathstring2 = "\n";
|
||||||
|
}
|
||||||
|
else if (rnum == IT_SHOTGUN)
|
||||||
|
{
|
||||||
|
deathstring = " chewed on ";
|
||||||
|
deathstring2 = "'s boomstick\n";
|
||||||
|
}
|
||||||
|
else if (rnum == IT_SUPER_SHOTGUN)
|
||||||
|
{
|
||||||
|
deathstring = " ate 2 loads of ";
|
||||||
|
deathstring2 = "'s buckshot\n";
|
||||||
|
}
|
||||||
|
else if (rnum == IT_LIGHTNING)
|
||||||
{
|
{
|
||||||
deathstring = " accepts ";
|
deathstring = " accepts ";
|
||||||
if (attacker.waterlevel > 1)
|
if (attacker.waterlevel > 1)
|
||||||
|
@ -1438,22 +1466,21 @@ void(entity targ, entity attacker) ClientObituary =
|
||||||
bprint (PRINT_MEDIUM," blew up\n");
|
bprint (PRINT_MEDIUM," blew up\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (attacker.solid == SOLID_BSP && attacker != world)
|
|
||||||
{
|
|
||||||
bprint (PRINT_MEDIUM," was squished\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (targ.deathtype == "falling")
|
if (targ.deathtype == "falling")
|
||||||
{
|
{
|
||||||
targ.deathtype = "";
|
|
||||||
bprint (PRINT_MEDIUM," fell to his death\n");
|
bprint (PRINT_MEDIUM," fell to his death\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (attacker.classname == "trap_shooter" || attacker.classname == "trap_spikeshooter")
|
if (targ.deathtype == "nail" || targ.deathtype == "supernail")
|
||||||
{
|
{
|
||||||
bprint (PRINT_MEDIUM," was spiked\n");
|
bprint (PRINT_MEDIUM," was spiked\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (targ.deathtype == "laser")
|
||||||
|
{
|
||||||
|
bprint (PRINT_MEDIUM," was zapped\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (attacker.classname == "fireball")
|
if (attacker.classname == "fireball")
|
||||||
{
|
{
|
||||||
bprint (PRINT_MEDIUM," ate a lavaball\n");
|
bprint (PRINT_MEDIUM," ate a lavaball\n");
|
||||||
|
|
37
combat.qc
37
combat.qc
|
@ -2,7 +2,7 @@
|
||||||
void() T_MissileTouch;
|
void() T_MissileTouch;
|
||||||
void() info_player_start;
|
void() info_player_start;
|
||||||
void(entity targ, entity attacker) ClientObituary;
|
void(entity targ, entity attacker) ClientObituary;
|
||||||
void(entity inflictor, entity attacker, float damage, entity ignore) T_RadiusDamage;
|
void(entity inflictor, entity attacker, float damage, entity ignore, string dtype) T_RadiusDamage;
|
||||||
|
|
||||||
/*SERVER
|
/*SERVER
|
||||||
void() monster_death_use;
|
void() monster_death_use;
|
||||||
|
@ -123,11 +123,11 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage=
|
||||||
|
|
||||||
|
|
||||||
// check for quad damage powerup on the attacker
|
// check for quad damage powerup on the attacker
|
||||||
if (attacker.super_damage_finished > time)
|
if (attacker.super_damage_finished > time && inflictor.classname != "door")
|
||||||
if (deathmatch == 4)
|
if (deathmatch == 4)
|
||||||
damage = damage * 8;
|
damage = damage * 8;
|
||||||
else
|
else
|
||||||
damage = damage * 4;
|
damage = damage * 4;
|
||||||
|
|
||||||
// save damage based on the target's armor level
|
// save damage based on the target's armor level
|
||||||
|
|
||||||
|
@ -196,11 +196,13 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage=
|
||||||
targteam = infokey(targ, "team");
|
targteam = infokey(targ, "team");
|
||||||
|
|
||||||
if ((teamplay == 1) && (targteam == attackerteam) &&
|
if ((teamplay == 1) && (targteam == attackerteam) &&
|
||||||
(attacker.classname == "player") && (attackerteam != ""))
|
(attacker.classname == "player") && (attackerteam != "") &&
|
||||||
|
inflictor.classname !="door")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((teamplay == 3) && (targteam == attackerteam) &&
|
if ((teamplay == 3) && (targteam == attackerteam) &&
|
||||||
(attacker.classname == "player") && (attackerteam != "") &&
|
(attacker.classname == "player") && (attackerteam != "") &&
|
||||||
(targ != attacker))
|
(targ != attacker)&& inflictor.classname !="door")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// do the damage
|
// do the damage
|
||||||
|
@ -246,7 +248,7 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage=
|
||||||
T_RadiusDamage
|
T_RadiusDamage
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void(entity inflictor, entity attacker, float damage, entity ignore) T_RadiusDamage =
|
void(entity inflictor, entity attacker, float damage, entity ignore, string dtype) T_RadiusDamage =
|
||||||
{
|
{
|
||||||
local float points;
|
local float points;
|
||||||
local entity head;
|
local entity head;
|
||||||
|
@ -276,15 +278,11 @@ void(entity inflictor, entity attacker, float damage, entity ignore) T_RadiusDam
|
||||||
if (points > 0)
|
if (points > 0)
|
||||||
{
|
{
|
||||||
if (CanDamage (head, inflictor))
|
if (CanDamage (head, inflictor))
|
||||||
{ // shambler takes half damage from all explosions
|
{
|
||||||
if (head.classname == "monster_shambler")
|
head.deathtype = dtype;
|
||||||
T_Damage (head, inflictor, attacker, points*0.5);
|
T_Damage (head, inflictor, attacker, points);
|
||||||
else
|
|
||||||
T_Damage (head, inflictor, attacker, points);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
head = head.chain;
|
head = head.chain;
|
||||||
|
@ -316,12 +314,7 @@ void(entity attacker, float damage) T_BeamDamage =
|
||||||
if (points > 0)
|
if (points > 0)
|
||||||
{
|
{
|
||||||
if (CanDamage (head, attacker))
|
if (CanDamage (head, attacker))
|
||||||
{
|
T_Damage (head, attacker, attacker, points);
|
||||||
if (head.classname == "monster_shambler")
|
|
||||||
T_Damage (head, attacker, attacker, points*0.5);
|
|
||||||
else
|
|
||||||
T_Damage (head, attacker, attacker, points);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
head = head.chain;
|
head = head.chain;
|
||||||
|
|
3
doors.qc
3
doors.qc
|
@ -33,7 +33,7 @@ void() door_blocked =
|
||||||
{
|
{
|
||||||
other.deathtype = "squish";
|
other.deathtype = "squish";
|
||||||
T_Damage (other, self, self.goalentity, self.dmg);
|
T_Damage (other, self, self.goalentity, self.dmg);
|
||||||
other.deathtype = "";
|
|
||||||
// if a door has a negative wait, it would never come back if blocked,
|
// if a door has a negative wait, it would never come back if blocked,
|
||||||
// so let it just squash the object to death real fast
|
// so let it just squash the object to death real fast
|
||||||
if (self.wait >= 0)
|
if (self.wait >= 0)
|
||||||
|
@ -680,6 +680,7 @@ void () secret_blocked =
|
||||||
if (time < self.attack_finished)
|
if (time < self.attack_finished)
|
||||||
return;
|
return;
|
||||||
self.attack_finished = time + 0.5;
|
self.attack_finished = time + 0.5;
|
||||||
|
other.deathtype = "squish";
|
||||||
T_Damage (other, self, self, self.dmg);
|
T_Damage (other, self, self, self.dmg);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
6
items.qc
6
items.qc
|
@ -75,7 +75,7 @@ void(float timeleft) DropQuad =
|
||||||
local entity item;
|
local entity item;
|
||||||
|
|
||||||
item = spawn();
|
item = spawn();
|
||||||
item.origin = self.origin - '0 0 24';
|
item.origin = self.origin;
|
||||||
|
|
||||||
item.velocity_z = 300;
|
item.velocity_z = 300;
|
||||||
item.velocity_x = -100 + (random() * 200);
|
item.velocity_x = -100 + (random() * 200);
|
||||||
|
@ -135,7 +135,7 @@ void(float timeleft) DropRing =
|
||||||
local entity item;
|
local entity item;
|
||||||
|
|
||||||
item = spawn();
|
item = spawn();
|
||||||
item.origin = self.origin - '0 0 24';
|
item.origin = self.origin;
|
||||||
|
|
||||||
item.velocity_z = 300;
|
item.velocity_z = 300;
|
||||||
item.velocity_x = -100 + (random() * 200);
|
item.velocity_x = -100 + (random() * 200);
|
||||||
|
@ -1425,7 +1425,7 @@ void() item_artifact_super_damage =
|
||||||
self.noise = "items/damage.wav";
|
self.noise = "items/damage.wav";
|
||||||
setmodel (self, "progs/quaddama.mdl");
|
setmodel (self, "progs/quaddama.mdl");
|
||||||
if (deathmatch == 4)
|
if (deathmatch == 4)
|
||||||
self.netname == "OctaPower";
|
self.netname = "OctaPower";
|
||||||
else
|
else
|
||||||
self.netname = "Quad Damage";
|
self.netname = "Quad Damage";
|
||||||
self.items = IT_QUAD;
|
self.items = IT_QUAD;
|
||||||
|
|
3
misc.qc
3
misc.qc
|
@ -217,7 +217,7 @@ void() barrel_explode =
|
||||||
self.takedamage = DAMAGE_NO;
|
self.takedamage = DAMAGE_NO;
|
||||||
self.classname = "explo_box";
|
self.classname = "explo_box";
|
||||||
// did say self.owner
|
// did say self.owner
|
||||||
T_RadiusDamage (self, self, 160, world);
|
T_RadiusDamage (self, self, 160, world, "");
|
||||||
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
||||||
WriteByte (MSG_MULTICAST, TE_EXPLOSION);
|
WriteByte (MSG_MULTICAST, TE_EXPLOSION);
|
||||||
WriteCoord (MSG_MULTICAST, self.origin_x);
|
WriteCoord (MSG_MULTICAST, self.origin_x);
|
||||||
|
@ -316,6 +316,7 @@ void() Laser_Touch =
|
||||||
if (other.health)
|
if (other.health)
|
||||||
{
|
{
|
||||||
SpawnBlood (org, 15);
|
SpawnBlood (org, 15);
|
||||||
|
other.deathtype = "laser";
|
||||||
T_Damage (other, self, self.owner, 15);
|
T_Damage (other, self, self.owner, 15);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
3
plats.qc
3
plats.qc
|
@ -111,6 +111,7 @@ void() plat_crush =
|
||||||
{
|
{
|
||||||
//dprint ("plat_crush\n");
|
//dprint ("plat_crush\n");
|
||||||
|
|
||||||
|
other.deathtype = "squish";
|
||||||
T_Damage (other, self, self, 1);
|
T_Damage (other, self, self, 1);
|
||||||
|
|
||||||
if (self.state == STATE_UP)
|
if (self.state == STATE_UP)
|
||||||
|
@ -223,8 +224,10 @@ void() train_blocked =
|
||||||
if (time < self.attack_finished)
|
if (time < self.attack_finished)
|
||||||
return;
|
return;
|
||||||
self.attack_finished = time + 0.5;
|
self.attack_finished = time + 0.5;
|
||||||
|
other.deathtype = "squish";
|
||||||
T_Damage (other, self, self, self.dmg);
|
T_Damage (other, self, self, self.dmg);
|
||||||
};
|
};
|
||||||
|
|
||||||
void() train_use =
|
void() train_use =
|
||||||
{
|
{
|
||||||
if (self.think != func_train_find)
|
if (self.think != func_train_find)
|
||||||
|
|
|
@ -7,6 +7,7 @@ items.qc
|
||||||
weapons.qc
|
weapons.qc
|
||||||
world.qc
|
world.qc
|
||||||
client.qc
|
client.qc
|
||||||
|
spectate.qc
|
||||||
player.qc
|
player.qc
|
||||||
doors.qc
|
doors.qc
|
||||||
buttons.qc
|
buttons.qc
|
||||||
|
|
|
@ -14,6 +14,7 @@ void() monster_fish = {remove(self);};
|
||||||
void() monster_shalrath = {remove(self);};
|
void() monster_shalrath = {remove(self);};
|
||||||
void() monster_enforcer = {remove(self);};
|
void() monster_enforcer = {remove(self);};
|
||||||
void() monster_oldone = {remove(self);};
|
void() monster_oldone = {remove(self);};
|
||||||
|
void() event_lightning = {remove(self);};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
84
spectate.qc
Normal file
84
spectate.qc
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
// Spectator functions
|
||||||
|
// Added Aug11'97 by Zoid <zoid@idsoftware.com>
|
||||||
|
//
|
||||||
|
// These functions are called from the server if they exist.
|
||||||
|
// Note that Spectators only have one think since they movement code doesn't
|
||||||
|
// track them much. Impulse commands work as usual, but don't call
|
||||||
|
// the regular ImpulseCommand handler in weapons.qc since Spectators don't
|
||||||
|
// have any weapons and things can explode.
|
||||||
|
//
|
||||||
|
// --- Zoid.
|
||||||
|
|
||||||
|
/*
|
||||||
|
===========
|
||||||
|
SpectatorConnect
|
||||||
|
|
||||||
|
called when a spectator connects to a server
|
||||||
|
============
|
||||||
|
*/
|
||||||
|
void() SpectatorConnect =
|
||||||
|
{
|
||||||
|
bprint (PRINT_MEDIUM, "Spectator ");
|
||||||
|
bprint (PRINT_MEDIUM, self.netname);
|
||||||
|
bprint (PRINT_MEDIUM, " entered the game\n");
|
||||||
|
|
||||||
|
self.goalentity = world; // used for impulse 1 below
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
===========
|
||||||
|
SpectatorDisconnect
|
||||||
|
|
||||||
|
called when a spectator disconnects from a server
|
||||||
|
============
|
||||||
|
*/
|
||||||
|
void() SpectatorDisconnect =
|
||||||
|
{
|
||||||
|
bprint (PRINT_MEDIUM, "Spectator ");
|
||||||
|
bprint (PRINT_MEDIUM, self.netname);
|
||||||
|
bprint (PRINT_MEDIUM, " left the game\n");
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
================
|
||||||
|
SpectatorImpulseCommand
|
||||||
|
|
||||||
|
Called by SpectatorThink if the spectator entered an impulse
|
||||||
|
================
|
||||||
|
*/
|
||||||
|
void() SpectatorImpulseCommand =
|
||||||
|
{
|
||||||
|
if (self.impulse == 1) {
|
||||||
|
// teleport the spectator to the next spawn point
|
||||||
|
// note that if the spectator is tracking, this doesn't do
|
||||||
|
// much
|
||||||
|
self.goalentity = find(self.goalentity, classname, "info_player_deathmatch");
|
||||||
|
if (self.goalentity == world)
|
||||||
|
self.goalentity = find(self.goalentity, classname, "info_player_deathmatch");
|
||||||
|
if (self.goalentity != world) {
|
||||||
|
setorigin(self, self.goalentity.origin);
|
||||||
|
self.angles = self.goalentity.angles;
|
||||||
|
self.fixangle = TRUE; // turn this way immediately
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.impulse = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
================
|
||||||
|
SpectatorThink
|
||||||
|
|
||||||
|
Called every frame after physics are run
|
||||||
|
================
|
||||||
|
*/
|
||||||
|
void() SpectatorThink =
|
||||||
|
{
|
||||||
|
// self.origin, etc contains spectator position, so you could
|
||||||
|
// do some neat stuff here
|
||||||
|
|
||||||
|
if (self.impulse)
|
||||||
|
SpectatorImpulseCommand();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
16
triggers.qc
16
triggers.qc
|
@ -318,16 +318,28 @@ void(vector org) spawn_tfog =
|
||||||
|
|
||||||
void() tdeath_touch =
|
void() tdeath_touch =
|
||||||
{
|
{
|
||||||
|
local entity other2;
|
||||||
|
|
||||||
if (other == self.owner)
|
if (other == self.owner)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// frag anyone who teleports in on top of an invincible player
|
// frag anyone who teleports in on top of an invincible player
|
||||||
if (other.classname == "player")
|
if (other.classname == "player")
|
||||||
{
|
{
|
||||||
|
if (other.invincible_finished > time &&
|
||||||
|
self.owner.invincible_finished > time) {
|
||||||
|
self.classname = "teledeath3";
|
||||||
|
other.invincible_finished = 0;
|
||||||
|
self.owner.invincible_finished = 0;
|
||||||
|
T_Damage (other, self, self, 50000);
|
||||||
|
other2 = self.owner;
|
||||||
|
self.owner = other;
|
||||||
|
T_Damage (other2, self, self, 50000);
|
||||||
|
}
|
||||||
|
|
||||||
if (other.invincible_finished > time)
|
if (other.invincible_finished > time)
|
||||||
|
{
|
||||||
self.classname = "teledeath2";
|
self.classname = "teledeath2";
|
||||||
if (self.owner.classname != "player")
|
|
||||||
{ // other monsters explode themselves
|
|
||||||
T_Damage (self.owner, self, self, 50000);
|
T_Damage (self.owner, self, self, 50000);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
21
weapons.qc
21
weapons.qc
|
@ -2,7 +2,7 @@
|
||||||
*/
|
*/
|
||||||
void (entity targ, entity inflictor, entity attacker, float damage) T_Damage;
|
void (entity targ, entity inflictor, entity attacker, float damage) T_Damage;
|
||||||
void () player_run;
|
void () player_run;
|
||||||
void(entity bomb, entity attacker, float rad, entity ignore) T_RadiusDamage;
|
void(entity bomb, entity attacker, float rad, entity ignore, string dtype) T_RadiusDamage;
|
||||||
void(vector org, float damage) SpawnBlood;
|
void(vector org, float damage) SpawnBlood;
|
||||||
void() SuperDamageSound;
|
void() SuperDamageSound;
|
||||||
|
|
||||||
|
@ -386,8 +386,7 @@ void() T_MissileTouch =
|
||||||
|
|
||||||
if (other.health)
|
if (other.health)
|
||||||
{
|
{
|
||||||
if (other.classname == "monster_shambler")
|
other.deathtype = "rocket";
|
||||||
damg = damg * 0.5; // mostly immune
|
|
||||||
T_Damage (other, self, self.owner, damg );
|
T_Damage (other, self, self.owner, damg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,10 +394,9 @@ void() T_MissileTouch =
|
||||||
// was done in the impact
|
// was done in the impact
|
||||||
|
|
||||||
|
|
||||||
T_RadiusDamage (self, self.owner, 120, other);
|
T_RadiusDamage (self, self.owner, 120, other, "rocket");
|
||||||
|
|
||||||
|
// sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
|
||||||
// sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
|
|
||||||
self.origin = self.origin - 8 * normalize(self.velocity);
|
self.origin = self.origin - 8 * normalize(self.velocity);
|
||||||
|
|
||||||
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
||||||
|
@ -446,7 +444,7 @@ void() W_FireRocket =
|
||||||
// set newmis duration
|
// set newmis duration
|
||||||
newmis.nextthink = time + 5;
|
newmis.nextthink = time + 5;
|
||||||
newmis.think = SUB_Remove;
|
newmis.think = SUB_Remove;
|
||||||
newmis.classname = "grenade";
|
newmis.classname = "rocket";
|
||||||
|
|
||||||
setmodel (newmis, "progs/missile.mdl");
|
setmodel (newmis, "progs/missile.mdl");
|
||||||
setsize (newmis, '0 0 0', '0 0 0');
|
setsize (newmis, '0 0 0', '0 0 0');
|
||||||
|
@ -545,7 +543,7 @@ void() W_FireLightning =
|
||||||
cells = self.ammo_cells;
|
cells = self.ammo_cells;
|
||||||
self.ammo_cells = 0;
|
self.ammo_cells = 0;
|
||||||
W_SetCurrentAmmo ();
|
W_SetCurrentAmmo ();
|
||||||
T_RadiusDamage (self, self, 35*cells, world);
|
T_RadiusDamage (self, self, 35*cells, world, "");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -554,7 +552,7 @@ void() W_FireLightning =
|
||||||
cells = self.ammo_cells;
|
cells = self.ammo_cells;
|
||||||
self.ammo_cells = 0;
|
self.ammo_cells = 0;
|
||||||
W_SetCurrentAmmo ();
|
W_SetCurrentAmmo ();
|
||||||
T_RadiusDamage (self, self, 35*cells, world);
|
T_RadiusDamage (self, self, 35*cells, world,"");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -599,8 +597,7 @@ void() GrenadeExplode =
|
||||||
}
|
}
|
||||||
self.voided = 1;
|
self.voided = 1;
|
||||||
|
|
||||||
|
T_RadiusDamage (self, self.owner, 120, world, "grenade");
|
||||||
T_RadiusDamage (self, self.owner, 120, world);
|
|
||||||
|
|
||||||
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
WriteByte (MSG_MULTICAST, SVC_TEMPENTITY);
|
||||||
WriteByte (MSG_MULTICAST, TE_EXPLOSION);
|
WriteByte (MSG_MULTICAST, TE_EXPLOSION);
|
||||||
|
@ -796,6 +793,7 @@ local float rand;
|
||||||
if (other.takedamage)
|
if (other.takedamage)
|
||||||
{
|
{
|
||||||
spawn_touchblood (9);
|
spawn_touchblood (9);
|
||||||
|
other.deathtype = "nail";
|
||||||
T_Damage (other, self, self.owner, 9);
|
T_Damage (other, self, self.owner, 9);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -842,6 +840,7 @@ local float rand;
|
||||||
if (other.takedamage)
|
if (other.takedamage)
|
||||||
{
|
{
|
||||||
spawn_touchblood (18);
|
spawn_touchblood (18);
|
||||||
|
other.deathtype = "supernail";
|
||||||
T_Damage (other, self, self.owner, 18);
|
T_Damage (other, self, self.owner, 18);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue