From: Samual Lenks Date: Mon, 31 Mar 2014 22:57:37 +0000 (-0400) Subject: Add explicit rocket jump functionality which saves you from falling better X-Git-Tag: xonotic-v0.8.0~152^2~29^2~6 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=749a766928356da7d7fcc1c3b9ec188d98cb671b;p=xonotic%2Fxonotic-data.pk3dir.git Add explicit rocket jump functionality which saves you from falling better --- diff --git a/bal-wep-xonotic.cfg b/bal-wep-xonotic.cfg index 65783f4a0..562119b7e 100644 --- a/bal-wep-xonotic.cfg +++ b/bal-wep-xonotic.cfg @@ -264,6 +264,7 @@ set g_balance_arc_beam_range 1000 set g_balance_arc_beam_refire 0.5 set g_balance_arc_beam_returnspeed 8 set g_balance_arc_beam_tightness 0.5 +set g_balance_arc_burst_ammo 0 set g_balance_arc_burst_damage 500 set g_balance_arc_burst_healing_aps 100 set g_balance_arc_burst_healing_hps 100 @@ -444,13 +445,18 @@ set g_balance_devastator_reload_time 2 set g_balance_devastator_remote_damage 70 set g_balance_devastator_remote_edgedamage 35 set g_balance_devastator_remote_force 400 +set g_balance_devastator_remote_jump_damage 40 +set g_balance_devastator_remote_jump_radius 200 +set g_balance_devastator_remote_jump_velocity_z_add 500 +set g_balance_devastator_remote_jump_velocity_z_max 1500 +set g_balance_devastator_remote_jump_velocity_z_min 500 set g_balance_devastator_remote_radius 110 set g_balance_devastator_speed 1300 set g_balance_devastator_speedaccel 1300 set g_balance_devastator_speedstart 1000 set g_balance_devastator_switchdelay_drop 0.3 set g_balance_devastator_switchdelay_raise 0.2 -set g_balance_devastator_weaponreplace "arc" +set g_balance_devastator_weaponreplace "" set g_balance_devastator_weaponstart 0 set g_balance_devastator_weaponstartoverride -1 set g_balance_devastator_weaponthrowable 1 diff --git a/qcsrc/common/weapons/w_devastator.qc b/qcsrc/common/weapons/w_devastator.qc index b0d7a0a1a..90df8bfd9 100644 --- a/qcsrc/common/weapons/w_devastator.qc +++ b/qcsrc/common/weapons/w_devastator.qc @@ -36,6 +36,11 @@ REGISTER_WEAPON( w_cvar(id, sn, NONE, remote_damage) \ w_cvar(id, sn, NONE, remote_edgedamage) \ w_cvar(id, sn, NONE, remote_force) \ + w_cvar(id, sn, NONE, remote_jump_damage) \ + w_cvar(id, sn, NONE, remote_jump_radius) \ + w_cvar(id, sn, NONE, remote_jump_velocity_z_add) \ + w_cvar(id, sn, NONE, remote_jump_velocity_z_max) \ + w_cvar(id, sn, NONE, remote_jump_velocity_z_min) \ w_cvar(id, sn, NONE, remote_radius) \ w_cvar(id, sn, NONE, speed) \ w_cvar(id, sn, NONE, speedaccel) \ @@ -82,7 +87,18 @@ void W_Devastator_Explode(void) self.event_damage = func_null; self.takedamage = DAMAGE_NO; - RadiusDamage(self, self.realowner, WEP_CVAR(devastator, damage), WEP_CVAR(devastator, edgedamage), WEP_CVAR(devastator, radius), world, world, WEP_CVAR(devastator, force), self.projectiledeathtype, other); + RadiusDamage( + self, + self.realowner, + WEP_CVAR(devastator, damage), + WEP_CVAR(devastator, edgedamage), + WEP_CVAR(devastator, radius), + world, + world, + WEP_CVAR(devastator, force), + self.projectiledeathtype, + other + ); if(self.realowner.weapon == WEP_DEVASTATOR) { @@ -103,7 +119,63 @@ void W_Devastator_DoRemoteExplode(void) self.event_damage = func_null; self.takedamage = DAMAGE_NO; - RadiusDamage(self, self.realowner, WEP_CVAR(devastator, remote_damage), WEP_CVAR(devastator, remote_edgedamage), WEP_CVAR(devastator, remote_radius), world, world, WEP_CVAR(devastator, remote_force), self.projectiledeathtype | HITTYPE_BOUNCE, world); + float handled_as_rocketjump = FALSE; + + entity head = WarpZone_FindRadius( + self.origin, + WEP_CVAR(devastator, remote_jump_radius), + FALSE + ); + + while(head) + { + if(head.takedamage && (head == self.realowner)) + { + float distance_to_head = vlen(self.origin - head.WarpZone_findradius_nearest); + if(distance_to_head <= WEP_CVAR(devastator, remote_jump_radius)) + { + head.velocity_x *= 0.9; + head.velocity_y *= 0.9; + head.velocity_z = bound( + WEP_CVAR(devastator, remote_jump_velocity_z_min), + head.velocity_z + WEP_CVAR(devastator, remote_jump_velocity_z_add), + WEP_CVAR(devastator, remote_jump_velocity_z_max) + ); + + handled_as_rocketjump = TRUE; + RadiusDamage( + self, + head, + WEP_CVAR(devastator, remote_jump_damage), + WEP_CVAR(devastator, remote_jump_damage), + WEP_CVAR(devastator, remote_jump_radius), + world, + head, + 0, + self.projectiledeathtype | HITTYPE_BOUNCE, + world + ); + break; + } + } + head = head.chain; + } + + if(!handled_as_rocketjump) + { + RadiusDamage( + self, + self.realowner, + WEP_CVAR(devastator, remote_damage), + WEP_CVAR(devastator, remote_edgedamage), + WEP_CVAR(devastator, remote_radius), + self, + world, + WEP_CVAR(devastator, remote_force), + self.projectiledeathtype | HITTYPE_BOUNCE, + world + ); + } if(self.realowner.weapon == WEP_DEVASTATOR) { @@ -168,9 +240,6 @@ vector W_Devastator_SteerTo(vector thisdir, vector goaldir, float maxturn_cos) void W_Devastator_Think(void) { vector desireddir, olddir, newdir, desiredorigin, goal; -#if 0 - float cosminang, cosmaxang, cosang; -#endif float velspeed, f; self.nextthink = time; if(time > self.cnt)