as released 1997-08-12

This commit is contained in:
archive 1997-08-12 00:00:00 +00:00
parent 2a4c0638b2
commit 88be1d246c
11 changed files with 217 additions and 95 deletions

129
client.qc
View file

@ -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);
@ -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 else
bprint (PRINT_MEDIUM," checks if his weapon is loaded\n"); bprint (PRINT_MEDIUM," discharges into the water.\n");
}
else
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,9 +1381,6 @@ 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 OctaRocket!\n";
else
deathstring2 = "'s quad rocket\n"; 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");

View file

@ -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,7 +123,7 @@ 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
@ -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);
else
T_Damage (head, inflictor, attacker, points); T_Damage (head, inflictor, attacker, points);
} }
} }
} }
} }
head = head.chain; head = head.chain;
@ -316,14 +314,9 @@ void(entity attacker, float damage) T_BeamDamage =
if (points > 0) if (points > 0)
{ {
if (CanDamage (head, attacker)) if (CanDamage (head, attacker))
{
if (head.classname == "monster_shambler")
T_Damage (head, attacker, attacker, points*0.5);
else
T_Damage (head, attacker, attacker, points); T_Damage (head, attacker, attacker, points);
} }
} }
}
head = head.chain; head = head.chain;
} }
}; };

View file

@ -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);
}; };

View file

@ -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;

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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
View 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();
};

View file

@ -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;
} }

View file

@ -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,8 +394,7 @@ 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);
@ -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