3 void Ent_DamageInfo(float isNew)
\r
5 float hittype, dmg, rad, edge, thisdmg, forcemul;
\r
7 vector force, org, thisforce;
\r
12 hittype = ReadShort();
\r
14 issilent = (hittype & 0x8000);
\r
15 hittype = (hittype & 0x7FFF);
\r
17 org_x = ReadCoord();
\r
18 org_y = ReadCoord();
\r
19 org_z = ReadCoord();
\r
24 force = decompressShortVector(ReadShort());
\r
37 for(self = findradius(org, rad); self; self = self.chain)
\r
41 thisdmg = vlen(self.origin - org) / rad;
\r
46 thisdmg = dmg + (edge - dmg) * thisdmg;
\r
47 thisforce = forcemul * vlen(force) * (thisdmg / dmg) * normalize(self.origin - org);
\r
52 thisforce = forcemul * vlen(force) * normalize(self.origin - org);
\r
58 thisforce = forcemul * force;
\r
61 //print("check ", ftos(num_for_edict(self)), " ", self.classname, "\n");
\r
62 //print(ftos(self.damageforcescale), "\n");
\r
63 //print(vtos(thisforce), "\n");
\r
64 if(self.damageforcescale)
\r
67 self.move_velocity = self.move_velocity + self.damageforcescale * thisforce;
\r
68 self.move_flags &~= FL_ONGROUND;
\r
69 //print("pushed ", ftos(num_for_edict(self)), " loose\n");
\r
75 if(self.event_damage)
\r
76 self.event_damage(thisdmg, hittype, org, thisforce);
\r
81 // TODO spawn particle effects and sounds based on hittype
\r
83 if(!DEATH_ISSPECIAL(hittype))
\r
85 float hitwep, secondary, bounce, headshot;
\r
86 vector org2, backoff;
\r
89 hitwep = DEATH_WEAPONOFWEAPONDEATH(hittype);
\r
90 secondary = hittype & HITTYPE_SECONDARY;
\r
91 bounce = hittype & HITTYPE_BOUNCE;
\r
92 headshot = hittype & HITTYPE_HEADSHOT;
\r
95 traceline(org - normalize(force) * 16, org + normalize(force) * 16, MOVE_NOMONSTERS, world);
\r
96 if(trace_fraction < 1)
\r
97 backoff = trace_plane_normal;
\r
99 backoff = -1 * normalize(force);
\r
101 setorigin(self, org + backoff * 2); // for sound() calls
\r
106 org2 = org + backoff * 6;
\r
107 pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1);
\r
109 sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
\r
112 dprint("Unhandled damage of weapon ", ftos(hitwep), "\n");
\r
118 void DamageInfo_Precache()
\r