void Ent_DamageEffect()
{
float type, specnum1, specnum2, entnumber;
+ float is_body;
vector org;
string specstr, effectnum;
entity e;
e = get_weaponinfo(type);
+ if(specnum1 >= 100)
+ {
+ // The server sends the specnum increased by 100 when the target is a dead body (a trick used to save bandwidth)
+ // Species range from 0 to 15, and could never reach 100, so this should never risk causing a conflict.
+ // Revert the species back and mark that this is a dead body.
+ specnum1 -= 100;
+ is_body = TRUE;
+ }
+
specnum2 = (specnum1 & 0x78) / 8; // blood type: using four bits (0..7, bit indexes 3,4,5)
specstr = species_prefix(specnum2);
// if this is a copied dead body, send the num of its player instead
if(pl.classname == "body")
+ {
e.team = num_for_edict(pl.owner);
+
+ // Use a trick to indicate this is a copied dead body and not an alive player to the client (saves an extra WriteByte).
+ // Do this by increasing species with 100 (species range from 0 to 15, and there could never be 100 of them).
+ // The client will notice this and turn them back, while also noting what the server is trying to say.
+ e.state += 100;
+ }
else
e.team = num_for_edict(pl);