X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fdamage.qc;h=4526673486c8c92a7ed860e08fe3e5ccb7d4ff6c;hb=a665ad7acf62cab3306dabd4ce8bb4862b4ab21c;hp=ae83d45eea011d890b8b3fd0430866d2b17312ca;hpb=c5121d69899c57253362a5a8d98d6a1435a5fb47;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index ae83d45ee..452667348 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -39,7 +39,7 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum) { // particle effects for players and objects damaged by weapons (eg: flames coming out of victims shot with rockets) - float life, nearestbone; + float life, nearestbone = 0; string specstr, effectname; entity e; @@ -61,7 +61,7 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum) continue; // player model bone blacklist // now choose the bone closest to impact origin - if(vlen(hitorg - gettaginfo(self, tagnum)) <= vlen(hitorg - gettaginfo(self, nearestbone))) + if(nearestbone == 0 || vlen(hitorg - gettaginfo(self, tagnum)) <= vlen(hitorg - gettaginfo(self, nearestbone))) nearestbone = tagnum; } gettaginfo(self, nearestbone); // set gettaginfo_name @@ -85,10 +85,10 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum) e = get_weaponinfo(type); effectname = strcat("damage_", e.netname); - + // if damage was dealt with a bullet weapon, our effect is blood // since blood is species dependent, include the species tag - if(type == WEP_SHOTGUN || type == WEP_UZI || type == WEP_RIFLE) + if(type == WEP_SHOTGUN || type == WEP_UZI || type == WEP_RIFLE) // WEAPONTODO: when we kill shells and bullets, what happens to this? { if(self.isplayermodel) { @@ -100,7 +100,7 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum) } e = spawn(); - setmodel(e, "null"); // necessary to attach and read origin // samual: FIXME: this is weird, is there some better way to do this? + setmodel(e, "null"); // necessary to attach and read origin setattachment(e, self, gettaginfo_name); // attach to the given bone e.classname = "damage"; e.owner = self; @@ -113,7 +113,7 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum) void Ent_DamageInfo(float isNew) { - float dmg, rad, edge, thisdmg, forcemul, species, hitplayer; + float dmg, rad, edge, thisdmg, forcemul, species, hitplayer = FALSE; vector force, thisforce; entity oldself; @@ -133,7 +133,7 @@ void Ent_DamageInfo(float isNew) force = decompressShortVector(ReadShort()); species = ReadByte(); - if not(isNew) + if (!isNew) return; if(rad < 0) @@ -143,7 +143,7 @@ void Ent_DamageInfo(float isNew) } else forcemul = 1; - + for(self = findradius(w_org, rad + MAX_DAMAGEEXTRARADIUS); self; self = self.chain) { // attached ents suck @@ -182,7 +182,7 @@ void Ent_DamageInfo(float isNew) if(vlen(thisforce)) { self.move_velocity = self.move_velocity + damage_explosion_calcpush(self.damageforcescale * thisforce, self.move_velocity, autocvar_g_balance_damagepush_speedfactor); - self.move_flags &~= FL_ONGROUND; + self.move_flags &= ~FL_ONGROUND; } if(w_issilent) @@ -198,7 +198,7 @@ void Ent_DamageInfo(float isNew) } self = oldself; - + if(DEATH_ISVEHICLE(w_deathtype)) { traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world); @@ -206,48 +206,48 @@ void Ent_DamageInfo(float isNew) w_backoff = trace_plane_normal; else w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16)); - + setorigin(self, w_org + w_backoff * 2); // for sound() calls - + switch(w_deathtype) { - case DEATH_VHCRUSH: + case DEATH_VH_CRUSH: break; - + // spiderbot - case DEATH_SBMINIGUN: + case DEATH_VH_SPID_MINIGUN: string _snd; _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw"); - sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("spiderbot_minigun_impact"), self.origin, w_backoff * 1000, 1); break; - case DEATH_SBROCKET: - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + case DEATH_VH_SPID_ROCKET: + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("spiderbot_rocket_explode"), self.origin, w_backoff * 1000, 1); break; - case DEATH_SBBLOWUP: - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); + case DEATH_VH_SPID_DEATH: + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1); break; - - case DEATH_WAKIGUN: - sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + + case DEATH_VH_WAKI_GUN: + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("wakizashi_gun_impact"), self.origin, w_backoff * 1000, 1); break; - case DEATH_WAKIROCKET: - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + case DEATH_VH_WAKI_ROCKET: + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("wakizashi_rocket_explode"), self.origin, w_backoff * 1000, 1); break; - case DEATH_WAKIBLOWUP: - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); + case DEATH_VH_WAKI_DEATH: + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1); break; - - case DEATH_RAPTOR_CANNON: - sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM); + + case DEATH_VH_RAPT_CANNON: + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("raptor_cannon_impact"), self.origin, w_backoff * 1000, 1); break; - case DEATH_RAPTOR_BOMB_SPLIT: + case DEATH_VH_RAPT_FRAGMENT: float i; vector ang, vel; for(i = 1; i < 4; ++i) @@ -256,25 +256,25 @@ void Ent_DamageInfo(float isNew) ang = vectoangles(vel); RaptorCBShellfragToss(w_org, vel, ang + '0 0 1' * (120 * i)); } - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, w_backoff * 1000, 1); break; - case DEATH_RAPTOR_BOMB: - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM); + case DEATH_VH_RAPT_BOMB: + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("raptor_bomb_impact"), self.origin, w_backoff * 1000, 1); break; - case DEATH_RAPTOR_DEATH: - sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN); + case DEATH_VH_RAPT_DEATH: + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1); break; - case DEATH_BUMB_GUN: - sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM); + case DEATH_VH_BUMB_GUN: + sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("bigplasma_impact"), self.origin, w_backoff * 1000, 1); break; } } - - + + if(DEATH_ISTURRET(w_deathtype)) { string _snd; @@ -283,60 +283,60 @@ void Ent_DamageInfo(float isNew) w_backoff = trace_plane_normal; else w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16)); - + setorigin(self, w_org + w_backoff * 2); // for sound() calls - + switch(w_deathtype) - { + { case DEATH_TURRET_EWHEEL: - sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("laser_impact"), self.origin, w_backoff * 1000, 1); break; - + case DEATH_TURRET_FLAC: pointparticles(particleeffectnum("hagar_explode"), w_org, '0 0 0', 1); _snd = strcat("weapons/hagexp", ftos(1 + rint(random() * 2)), ".waw"); - sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM); break; - + case DEATH_TURRET_MLRS: case DEATH_TURRET_HK: - case DEATH_TURRET_WALKER_ROCKET: + case DEATH_TURRET_WALK_ROCKET: case DEATH_TURRET_HELLION: - sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("rocket_explode"), self.origin, w_backoff * 1000, 1); break; - + case DEATH_TURRET_MACHINEGUN: - case DEATH_TURRET_WALKER_GUN: + case DEATH_TURRET_WALK_GUN: _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw"); - sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM); pointparticles(particleeffectnum("machinegun_impact"), self.origin, w_backoff * 1000, 1); break; - + case DEATH_TURRET_PLASMA: - sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_MIN); + sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1); break; - - case DEATH_TURRET_WALKER_MEELE: - sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_MIN); + + case DEATH_TURRET_WALK_MEELE: + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTEN_MIN); pointparticles(particleeffectnum("TE_SPARK"), self.origin, w_backoff * 1000, 1); break; case DEATH_TURRET_PHASER: break; - + case DEATH_TURRET_TESLA: te_smallflash(self.origin); break; } } - + // TODO spawn particle effects and sounds based on w_deathtype if(!DEATH_ISSPECIAL(w_deathtype)) - if not(hitplayer && !rad) // don't show ground impacts for hitscan weapons if a player was hit + if(!hitplayer || rad) // don't show ground impacts for hitscan weapons if a player was hit { float hitwep; @@ -344,19 +344,12 @@ void Ent_DamageInfo(float isNew) w_random = prandom(); traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world); - if(trace_fraction < 1 && hitwep != WEP_NEX && hitwep != WEP_MINSTANEX) + if(trace_fraction < 1 && hitwep != WEP_NEX && hitwep != WEP_VAPORIZER) w_backoff = trace_plane_normal; else w_backoff = -1 * normalize(force); setorigin(self, w_org + w_backoff * 2); // for sound() calls - (get_weaponinfo(hitwep)).weapon_func(WR_IMPACTEFFECT); + WEP_ACTION(hitwep, WR_IMPACTEFFECT); } } - -void DamageInfo_Precache() -{ - float i; - for(i = WEP_FIRST; i <= WEP_LAST; ++i) - (get_weaponinfo(i)).weapon_func(WR_PRECACHE); -}