X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fweapons%2Ftracing.qc;h=176b69e6b6c9e5f720f2dfc09fb9af13367c1ff8;hp=5c64a0ec64d3ff6e89f5d7f2efbf8d0ac7383355;hb=4ee2807b2d8f808928ef14b3e814945b3edb4350;hpb=f6dd336135aa93ee4617df2389c3bfb28f0e1c58 diff --git a/qcsrc/server/weapons/tracing.qc b/qcsrc/server/weapons/tracing.qc index 5c64a0ec64..176b69e6b6 100644 --- a/qcsrc/server/weapons/tracing.qc +++ b/qcsrc/server/weapons/tracing.qc @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include @@ -20,9 +20,9 @@ // this function calculates w_shotorg and w_shotdir based on the weapon model // offset, trueaim and antilag, and won't put w_shotorg inside a wall. // make sure you call makevectors first (FIXME?) -void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector mi, vector ma, float antilag, float recoil, Sound snd, float chan, float maxdamage, float range) +void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vector s_forward, vector mi, vector ma, float antilag, float recoil, Sound snd, float chan, float maxdamage, float range) { - TC(Sound, snd); + TC(Sound, snd); float nudge = 1; // added to traceline target and subtracted from result TOOD(divVerent): do we still need this? Doesn't the engine do this now for us? float oldsolid; vector vecs, dv; @@ -58,7 +58,6 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m if(IS_PLAYER(ent)) W_HitPlotAnalysis(ent, v_forward, v_right, v_up); - .entity weaponentity = weaponentities[0]; // TODO: unhardcode vector md = ent.(weaponentity).movedir; if(md.x > 0) vecs = md; @@ -300,7 +299,7 @@ void FireRailgunBullet (entity this, vector start, vector end, float bdamage, fl )); if(pseudoprojectile) - remove(pseudoprojectile); + delete(pseudoprojectile); } // find all the entities the railgun hit and hurt them @@ -377,9 +376,9 @@ void fireBullet(entity this, vector start, vector dir, float spread, float max_s if(lag) { FOREACH_CLIENT(IS_PLAYER(it) && it != this, antilag_takeback(it, CS(it), time - lag)); - FOREACH_ENTITY_FLAGS(flags, FL_MONSTER, { - if (it != this) - antilag_takeback(it, it, time - lag); + IL_EACH(g_monsters, it != this, + { + antilag_takeback(it, it, time - lag); }); } @@ -476,7 +475,10 @@ void fireBullet(entity this, vector start, vector dir, float spread, float max_s break; float dist_taken = max(autocvar_g_ballistics_mindistance, vlen(trace_endpos - start)); - solid_penetration_left *= (dist_taken / maxdist); + // fraction_used_of_what_is_left = dist_taken / maxdist + // solid_penetration_left = solid_penetration_left - solid_penetration_left * fraction_used_of_what_is_left + solid_penetration_left *= 1 - dist_taken / maxdist; + solid_penetration_left = max(solid_penetration_left, 0); // Only show effect when going through a player (invisible otherwise) if (hit && (hit.solid != SOLID_BSP)) @@ -492,9 +494,9 @@ void fireBullet(entity this, vector start, vector dir, float spread, float max_s if(lag) { FOREACH_CLIENT(IS_PLAYER(it) && it != this, antilag_restore(it, CS(it))); - FOREACH_ENTITY_FLAGS(flags, FL_MONSTER, { - if (it != this) - antilag_restore(it, it); + IL_EACH(g_monsters, it != this, + { + antilag_restore(it, it); }); }