From 153d483e07bd2705e830fcc3144bd21c94ea5324 Mon Sep 17 00:00:00 2001 From: Samual Lenks Date: Sun, 29 Jul 2012 20:20:35 -0400 Subject: [PATCH] More work on laser --- qcsrc/server/g_damage.qc | 46 ---------------------------------------- qcsrc/server/w_laser.qc | 33 ++++++++++++++++------------ 2 files changed, 20 insertions(+), 59 deletions(-) diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 710c7d4e2..ba2eedf85 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -1138,52 +1138,6 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in print(sprintf(" D=%f F=%f\n", finaldmg, vlen(force))); } - // laser force adjustments :P - if(DEATH_WEAPONOF(deathtype) == WEP_LASER) - { - if (targ == attacker) - { - vector vel; - - float force_zscale; - float force_velocitybiasramp; - float force_velocitybias; - - force_velocitybiasramp = autocvar_sv_maxspeed; - if(deathtype & HITTYPE_SECONDARY) - { - force_zscale = autocvar_g_balance_laser_secondary_force_zscale; - force_velocitybias = autocvar_g_balance_laser_secondary_force_velocitybias; - } - else - { - force_zscale = autocvar_g_balance_laser_primary_force_zscale; - force_velocitybias = autocvar_g_balance_laser_primary_force_velocitybias; - } - - vel = targ.velocity; - vel_z = 0; - vel = normalize(vel) * bound(0, vlen(vel) / force_velocitybiasramp, 1) * force_velocitybias; - force = - vlen(force) - * - normalize(normalize(force) + vel); - - force_z *= force_zscale; - } - else - { - if(deathtype & HITTYPE_SECONDARY) - { - force *= autocvar_g_balance_laser_secondary_force_other_scale; - } - else - { - force *= autocvar_g_balance_laser_primary_force_other_scale; - } - } - } - //if (targ == attacker) //{ // print("hits ", ftos(hits), " / ", ftos(total)); diff --git a/qcsrc/server/w_laser.qc b/qcsrc/server/w_laser.qc index 2522bd444..c3e3cb316 100644 --- a/qcsrc/server/w_laser.qc +++ b/qcsrc/server/w_laser.qc @@ -130,21 +130,28 @@ void W_Laser_Shockwave() { next = head.chain; - if((head != self) && !head.shockwave_hit && head.takedamage) + if(!head.shockwave_hit && head.takedamage) { - // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in g_damage.qc) - center = PLAYER_CENTER(head); - - multiplier_from_accuracy = 1; - multiplier_from_distance = (1 - (distance_to_hit ? min(1, (distance_to_hit / distance_to_end)) : 0)); - multiplier = max(autocvar_g_balance_laser_primary_multiplier_min, ((multiplier_from_accuracy * autocvar_g_balance_laser_primary_multiplier_accuracy) + (multiplier_from_distance * autocvar_g_balance_laser_primary_multiplier_distance))); - - final_force = ((normalize(center - attack_hitpos) * autocvar_g_balance_laser_primary_force) * multiplier); - final_damage = (autocvar_g_balance_laser_primary_damage * multiplier + autocvar_g_balance_laser_primary_edgedamage * (1 - multiplier)); - Damage(head, self, self, final_damage, WEP_LASER, head.origin, final_force); + if(head == self) + { + // jumping like normal + } + else + { + // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in g_damage.qc) + center = PLAYER_CENTER(head); + + multiplier_from_accuracy = 1; + multiplier_from_distance = (1 - (distance_to_hit ? min(1, (distance_to_hit / distance_to_end)) : 0)); + multiplier = max(autocvar_g_balance_laser_primary_multiplier_min, ((multiplier_from_accuracy * autocvar_g_balance_laser_primary_multiplier_accuracy) + (multiplier_from_distance * autocvar_g_balance_laser_primary_multiplier_distance))); + + final_force = ((normalize(center - attack_hitpos) * autocvar_g_balance_laser_primary_force) * multiplier); + final_damage = (autocvar_g_balance_laser_primary_damage * multiplier + autocvar_g_balance_laser_primary_edgedamage * (1 - multiplier)); + Damage(head, self, self, final_damage, WEP_LASER, head.origin, final_force); - head.shockwave_hit = TRUE; - print("debug: DIRECT HIT: multiplier = ", ftos(multiplier), strcat(", damage = ", ftos(final_damage), ", force = ", ftos(vlen(final_force))),"... multiplier_from_accuracy = ", ftos(multiplier_from_accuracy), ", multiplier_from_distance = ", ftos(multiplier_from_distance), ".\n"); + head.shockwave_hit = TRUE; + print("debug: DIRECT HIT: multiplier = ", ftos(multiplier), strcat(", damage = ", ftos(final_damage), ", force = ", ftos(vlen(final_force))),"... multiplier_from_accuracy = ", ftos(multiplier_from_accuracy), ", multiplier_from_distance = ", ftos(multiplier_from_distance), ".\n"); + } } head = next; } -- 2.39.2