From: Mario Date: Tue, 5 Nov 2024 11:57:08 +0000 (+1000) Subject: Remove the Shockwave X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=678e805357da23d7fcec1937b46060a7eac864cf;p=xonotic%2Fxonotic-data.pk3dir.git Remove the Shockwave --- diff --git a/bal-wep-mario.cfg b/bal-wep-mario.cfg index 6a2462d33..5953a5bb3 100644 --- a/bal-wep-mario.cfg +++ b/bal-wep-mario.cfg @@ -689,58 +689,7 @@ set g_balance_seeker_weaponstart 0 set g_balance_seeker_weaponstartoverride -1 set g_balance_seeker_weaponthrowable 1 // }}} -// {{{ #19: Shockwave -set g_balance_shockwave_blast_animtime 0.3 -set g_balance_shockwave_blast_damage 40 -set g_balance_shockwave_blast_distance 1000 -set g_balance_shockwave_blast_edgedamage 0 -set g_balance_shockwave_blast_force 15 -set g_balance_shockwave_blast_force_forwardbias 50 -set g_balance_shockwave_blast_force_zscale 1 -set g_balance_shockwave_blast_jump_damage 20 -set g_balance_shockwave_blast_jump_edgedamage 0 -set g_balance_shockwave_blast_jump_force 100 -set g_balance_shockwave_blast_jump_force_velocitybias 1 -set g_balance_shockwave_blast_jump_force_zscale 1 -set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_jump_multiplier_distance 0.5 -set g_balance_shockwave_blast_jump_multiplier_min 0 -set g_balance_shockwave_blast_jump_radius 150 -set g_balance_shockwave_blast_multiplier_accuracy 0.45 -set g_balance_shockwave_blast_multiplier_distance 0.2 -set g_balance_shockwave_blast_multiplier_min 0 -set g_balance_shockwave_blast_refire 0.75 -set g_balance_shockwave_blast_splash_damage 15 -set g_balance_shockwave_blast_splash_edgedamage 0 -set g_balance_shockwave_blast_splash_force 100 -set g_balance_shockwave_blast_splash_force_forwardbias 50 -set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_splash_multiplier_distance 0.5 -set g_balance_shockwave_blast_splash_multiplier_min 0 -set g_balance_shockwave_blast_splash_radius 70 -set g_balance_shockwave_blast_spread_max 120 -set g_balance_shockwave_blast_spread_min 25 -set g_balance_shockwave_melee_animtime 1.3 -set g_balance_shockwave_melee_damage 80 -set g_balance_shockwave_melee_delay 0.25 -set g_balance_shockwave_melee_force 200 -set g_balance_shockwave_melee_multihit 1 -set g_balance_shockwave_melee_no_doubleslap 1 -set g_balance_shockwave_melee_nonplayerdamage 40 -set g_balance_shockwave_melee_range 120 -set g_balance_shockwave_melee_refire 1.25 -set g_balance_shockwave_melee_swing_side 120 -set g_balance_shockwave_melee_swing_up 30 -set g_balance_shockwave_melee_time 0.15 -set g_balance_shockwave_melee_traces 10 -set g_balance_shockwave_switchdelay_drop 0.2 -set g_balance_shockwave_switchdelay_raise 0.2 -set g_balance_shockwave_weaponreplace "" -set g_balance_shockwave_weaponstart 0 -set g_balance_shockwave_weaponstartoverride -1 -set g_balance_shockwave_weaponthrowable 0 -// }}} -// {{{ #20: Arc +// {{{ #19: Arc set g_balance_arc_beam_ammo 6 set g_balance_arc_beam_animtime 0.1 set g_balance_arc_beam_botaimlifetime 0 @@ -796,7 +745,7 @@ set g_balance_arc_weaponstart 0 set g_balance_arc_weaponstartoverride -1 set g_balance_arc_weaponthrowable 1 // }}} -// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON) +// {{{ #20: Overkill Heavy Machine Gun (MUTATOR WEAPON) set g_balance_okhmg_primary_ammo 1 set g_balance_okhmg_primary_damage 30 set g_balance_okhmg_primary_force 10 @@ -815,7 +764,7 @@ set g_balance_okhmg_weaponstart 0 set g_balance_okhmg_weaponstartoverride 0 set g_balance_okhmg_weaponthrowable 0 // }}} -// {{{ #22: Overkill MachineGun (MUTATOR WEAPON) +// {{{ #21: Overkill MachineGun (MUTATOR WEAPON) set g_balance_okmachinegun_damagefalloff_forcehalflife 0 set g_balance_okmachinegun_damagefalloff_halflife 0 set g_balance_okmachinegun_damagefalloff_maxdist 0 @@ -838,7 +787,7 @@ set g_balance_okmachinegun_weaponstart 0 set g_balance_okmachinegun_weaponstartoverride -1 set g_balance_okmachinegun_weaponthrowable 1 // }}} -// {{{ #23: Overkill Nex (MUTATOR WEAPON) +// {{{ #22: Overkill Nex (MUTATOR WEAPON) set g_balance_oknex_charge 0 set g_balance_oknex_charge_animlimit 0.5 set g_balance_oknex_charge_limit 1 @@ -878,7 +827,7 @@ set g_balance_oknex_weaponstart 0 set g_balance_oknex_weaponstartoverride -1 set g_balance_oknex_weaponthrowable 1 // }}} -// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) +// {{{ #23: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) set g_balance_okrpc_primary_ammo 10 set g_balance_okrpc_primary_animtime 1 set g_balance_okrpc_primary_damage 150 @@ -902,7 +851,7 @@ set g_balance_okrpc_weaponstart 0 set g_balance_okrpc_weaponstartoverride 0 set g_balance_okrpc_weaponthrowable 0 // }}} -// {{{ #25: Overkill Shotgun (MUTATOR WEAPON) +// {{{ #24: Overkill Shotgun (MUTATOR WEAPON) set g_balance_okshotgun_primary_ammo 3 set g_balance_okshotgun_primary_animtime 0.65 set g_balance_okshotgun_primary_bot_range 512 diff --git a/bal-wep-nexuiz25.cfg b/bal-wep-nexuiz25.cfg index bfd58cf17..9206fdd3d 100644 --- a/bal-wep-nexuiz25.cfg +++ b/bal-wep-nexuiz25.cfg @@ -689,58 +689,7 @@ set g_balance_seeker_weaponstart 0 set g_balance_seeker_weaponstartoverride -1 set g_balance_seeker_weaponthrowable 1 // }}} -// {{{ #19: Shockwave -set g_balance_shockwave_blast_animtime 0.3 -set g_balance_shockwave_blast_damage 20 -set g_balance_shockwave_blast_distance 1000 -set g_balance_shockwave_blast_edgedamage 0 -set g_balance_shockwave_blast_force 200 -set g_balance_shockwave_blast_force_forwardbias 50 -set g_balance_shockwave_blast_force_zscale 2 -set g_balance_shockwave_blast_jump_damage 20 -set g_balance_shockwave_blast_jump_edgedamage 0 -set g_balance_shockwave_blast_jump_force 300 -set g_balance_shockwave_blast_jump_force_velocitybias 0 -set g_balance_shockwave_blast_jump_force_zscale 1.25 -set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_jump_multiplier_distance 0.5 -set g_balance_shockwave_blast_jump_multiplier_min 0 -set g_balance_shockwave_blast_jump_radius 150 -set g_balance_shockwave_blast_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_multiplier_distance 0.5 -set g_balance_shockwave_blast_multiplier_min 0 -set g_balance_shockwave_blast_refire 0.75 -set g_balance_shockwave_blast_splash_damage 15 -set g_balance_shockwave_blast_splash_edgedamage 0 -set g_balance_shockwave_blast_splash_force 100 -set g_balance_shockwave_blast_splash_force_forwardbias 50 -set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_splash_multiplier_distance 0.5 -set g_balance_shockwave_blast_splash_multiplier_min 0 -set g_balance_shockwave_blast_splash_radius 70 -set g_balance_shockwave_blast_spread_max 120 -set g_balance_shockwave_blast_spread_min 25 -set g_balance_shockwave_melee_animtime 1.3 -set g_balance_shockwave_melee_damage 80 -set g_balance_shockwave_melee_delay 0.25 -set g_balance_shockwave_melee_force 200 -set g_balance_shockwave_melee_multihit 1 -set g_balance_shockwave_melee_no_doubleslap 1 -set g_balance_shockwave_melee_nonplayerdamage 40 -set g_balance_shockwave_melee_range 120 -set g_balance_shockwave_melee_refire 1.25 -set g_balance_shockwave_melee_swing_side 120 -set g_balance_shockwave_melee_swing_up 30 -set g_balance_shockwave_melee_time 0.15 -set g_balance_shockwave_melee_traces 10 -set g_balance_shockwave_switchdelay_drop 0.15 -set g_balance_shockwave_switchdelay_raise 0.15 -set g_balance_shockwave_weaponreplace "" -set g_balance_shockwave_weaponstart 0 -set g_balance_shockwave_weaponstartoverride -1 -set g_balance_shockwave_weaponthrowable 0 -// }}} -// {{{ #20: Arc +// {{{ #19: Arc set g_balance_arc_beam_ammo 4 set g_balance_arc_beam_animtime 0.2 set g_balance_arc_beam_botaimlifetime 0 @@ -796,7 +745,7 @@ set g_balance_arc_weaponstart 0 set g_balance_arc_weaponstartoverride -1 set g_balance_arc_weaponthrowable 1 // }}} -// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON) +// {{{ #20: Overkill Heavy Machine Gun (MUTATOR WEAPON) set g_balance_okhmg_primary_ammo 1 set g_balance_okhmg_primary_damage 30 set g_balance_okhmg_primary_force 10 @@ -815,7 +764,7 @@ set g_balance_okhmg_weaponstart 0 set g_balance_okhmg_weaponstartoverride 0 set g_balance_okhmg_weaponthrowable 0 // }}} -// {{{ #22: Overkill MachineGun (MUTATOR WEAPON) +// {{{ #21: Overkill MachineGun (MUTATOR WEAPON) set g_balance_okmachinegun_damagefalloff_forcehalflife 0 set g_balance_okmachinegun_damagefalloff_halflife 0 set g_balance_okmachinegun_damagefalloff_maxdist 0 @@ -838,7 +787,7 @@ set g_balance_okmachinegun_weaponstart 0 set g_balance_okmachinegun_weaponstartoverride -1 set g_balance_okmachinegun_weaponthrowable 1 // }}} -// {{{ #23: Overkill Nex (MUTATOR WEAPON) +// {{{ #22: Overkill Nex (MUTATOR WEAPON) set g_balance_oknex_charge 0 set g_balance_oknex_charge_animlimit 0.5 set g_balance_oknex_charge_limit 1 @@ -878,7 +827,7 @@ set g_balance_oknex_weaponstart 0 set g_balance_oknex_weaponstartoverride -1 set g_balance_oknex_weaponthrowable 1 // }}} -// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) +// {{{ #23: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) set g_balance_okrpc_primary_ammo 10 set g_balance_okrpc_primary_animtime 1 set g_balance_okrpc_primary_damage 150 @@ -902,7 +851,7 @@ set g_balance_okrpc_weaponstart 0 set g_balance_okrpc_weaponstartoverride 0 set g_balance_okrpc_weaponthrowable 0 // }}} -// {{{ #25: Overkill Shotgun (MUTATOR WEAPON) +// {{{ #24: Overkill Shotgun (MUTATOR WEAPON) set g_balance_okshotgun_primary_ammo 3 set g_balance_okshotgun_primary_animtime 0.65 set g_balance_okshotgun_primary_bot_range 512 diff --git a/bal-wep-samual.cfg b/bal-wep-samual.cfg index dd555810a..e2137cc28 100644 --- a/bal-wep-samual.cfg +++ b/bal-wep-samual.cfg @@ -689,58 +689,7 @@ set g_balance_seeker_weaponstart 0 set g_balance_seeker_weaponstartoverride -1 set g_balance_seeker_weaponthrowable 1 // }}} -// {{{ #19: Shockwave -set g_balance_shockwave_blast_animtime 0.3 -set g_balance_shockwave_blast_damage 20 -set g_balance_shockwave_blast_distance 1000 -set g_balance_shockwave_blast_edgedamage 0 -set g_balance_shockwave_blast_force 200 -set g_balance_shockwave_blast_force_forwardbias 50 -set g_balance_shockwave_blast_force_zscale 2 -set g_balance_shockwave_blast_jump_damage 20 -set g_balance_shockwave_blast_jump_edgedamage 0 -set g_balance_shockwave_blast_jump_force 300 -set g_balance_shockwave_blast_jump_force_velocitybias 0 -set g_balance_shockwave_blast_jump_force_zscale 1.25 -set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_jump_multiplier_distance 0.5 -set g_balance_shockwave_blast_jump_multiplier_min 0 -set g_balance_shockwave_blast_jump_radius 150 -set g_balance_shockwave_blast_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_multiplier_distance 0.5 -set g_balance_shockwave_blast_multiplier_min 0 -set g_balance_shockwave_blast_refire 0.75 -set g_balance_shockwave_blast_splash_damage 15 -set g_balance_shockwave_blast_splash_edgedamage 0 -set g_balance_shockwave_blast_splash_force 100 -set g_balance_shockwave_blast_splash_force_forwardbias 50 -set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_splash_multiplier_distance 0.5 -set g_balance_shockwave_blast_splash_multiplier_min 0 -set g_balance_shockwave_blast_splash_radius 70 -set g_balance_shockwave_blast_spread_max 120 -set g_balance_shockwave_blast_spread_min 25 -set g_balance_shockwave_melee_animtime 1.3 -set g_balance_shockwave_melee_damage 80 -set g_balance_shockwave_melee_delay 0.25 -set g_balance_shockwave_melee_force 200 -set g_balance_shockwave_melee_multihit 1 -set g_balance_shockwave_melee_no_doubleslap 1 -set g_balance_shockwave_melee_nonplayerdamage 40 -set g_balance_shockwave_melee_range 120 -set g_balance_shockwave_melee_refire 1.25 -set g_balance_shockwave_melee_swing_side 120 -set g_balance_shockwave_melee_swing_up 30 -set g_balance_shockwave_melee_time 0.15 -set g_balance_shockwave_melee_traces 10 -set g_balance_shockwave_switchdelay_drop 0.2 -set g_balance_shockwave_switchdelay_raise 0.2 -set g_balance_shockwave_weaponreplace "" -set g_balance_shockwave_weaponstart 1 -set g_balance_shockwave_weaponstartoverride -1 -set g_balance_shockwave_weaponthrowable 0 -// }}} -// {{{ #20: Arc +// {{{ #19: Arc set g_balance_arc_beam_ammo 0 set g_balance_arc_beam_animtime 0.2 set g_balance_arc_beam_botaimlifetime 0 @@ -796,7 +745,7 @@ set g_balance_arc_weaponstart 0 set g_balance_arc_weaponstartoverride -1 set g_balance_arc_weaponthrowable 1 // }}} -// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON) +// {{{ #20: Overkill Heavy Machine Gun (MUTATOR WEAPON) set g_balance_okhmg_primary_ammo 1 set g_balance_okhmg_primary_damage 30 set g_balance_okhmg_primary_force 10 @@ -815,7 +764,7 @@ set g_balance_okhmg_weaponstart 0 set g_balance_okhmg_weaponstartoverride 0 set g_balance_okhmg_weaponthrowable 0 // }}} -// {{{ #22: Overkill MachineGun (MUTATOR WEAPON) +// {{{ #21: Overkill MachineGun (MUTATOR WEAPON) set g_balance_okmachinegun_damagefalloff_forcehalflife 0 set g_balance_okmachinegun_damagefalloff_halflife 0 set g_balance_okmachinegun_damagefalloff_maxdist 0 @@ -838,7 +787,7 @@ set g_balance_okmachinegun_weaponstart 0 set g_balance_okmachinegun_weaponstartoverride -1 set g_balance_okmachinegun_weaponthrowable 1 // }}} -// {{{ #23: Overkill Nex (MUTATOR WEAPON) +// {{{ #22: Overkill Nex (MUTATOR WEAPON) set g_balance_oknex_charge 0 set g_balance_oknex_charge_animlimit 0.5 set g_balance_oknex_charge_limit 1 @@ -878,7 +827,7 @@ set g_balance_oknex_weaponstart 0 set g_balance_oknex_weaponstartoverride -1 set g_balance_oknex_weaponthrowable 1 // }}} -// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) +// {{{ #23: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) set g_balance_okrpc_primary_ammo 10 set g_balance_okrpc_primary_animtime 1 set g_balance_okrpc_primary_damage 150 @@ -902,7 +851,7 @@ set g_balance_okrpc_weaponstart 0 set g_balance_okrpc_weaponstartoverride 0 set g_balance_okrpc_weaponthrowable 0 // }}} -// {{{ #25: Overkill Shotgun (MUTATOR WEAPON) +// {{{ #24: Overkill Shotgun (MUTATOR WEAPON) set g_balance_okshotgun_primary_ammo 3 set g_balance_okshotgun_primary_animtime 0.65 set g_balance_okshotgun_primary_bot_range 512 diff --git a/bal-wep-xdf.cfg b/bal-wep-xdf.cfg index 0c33b8e0c..53d578621 100644 --- a/bal-wep-xdf.cfg +++ b/bal-wep-xdf.cfg @@ -689,58 +689,7 @@ set g_balance_seeker_weaponstart 0 set g_balance_seeker_weaponstartoverride -1 set g_balance_seeker_weaponthrowable 1 // }}} -// {{{ #19: Shockwave -set g_balance_shockwave_blast_animtime 0.3 -set g_balance_shockwave_blast_damage 40 -set g_balance_shockwave_blast_distance 1000 -set g_balance_shockwave_blast_edgedamage 0 -set g_balance_shockwave_blast_force 15 -set g_balance_shockwave_blast_force_forwardbias 50 -set g_balance_shockwave_blast_force_zscale 1 -set g_balance_shockwave_blast_jump_damage 20 -set g_balance_shockwave_blast_jump_edgedamage 0 -set g_balance_shockwave_blast_jump_force 100 -set g_balance_shockwave_blast_jump_force_velocitybias 1 -set g_balance_shockwave_blast_jump_force_zscale 1 -set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_jump_multiplier_distance 0.5 -set g_balance_shockwave_blast_jump_multiplier_min 0 -set g_balance_shockwave_blast_jump_radius 150 -set g_balance_shockwave_blast_multiplier_accuracy 0.45 -set g_balance_shockwave_blast_multiplier_distance 0.2 -set g_balance_shockwave_blast_multiplier_min 0 -set g_balance_shockwave_blast_refire 0.75 -set g_balance_shockwave_blast_splash_damage 15 -set g_balance_shockwave_blast_splash_edgedamage 0 -set g_balance_shockwave_blast_splash_force 100 -set g_balance_shockwave_blast_splash_force_forwardbias 50 -set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_splash_multiplier_distance 0.5 -set g_balance_shockwave_blast_splash_multiplier_min 0 -set g_balance_shockwave_blast_splash_radius 70 -set g_balance_shockwave_blast_spread_max 120 -set g_balance_shockwave_blast_spread_min 25 -set g_balance_shockwave_melee_animtime 1.3 -set g_balance_shockwave_melee_damage 80 -set g_balance_shockwave_melee_delay 0.25 -set g_balance_shockwave_melee_force 200 -set g_balance_shockwave_melee_multihit 1 -set g_balance_shockwave_melee_no_doubleslap 1 -set g_balance_shockwave_melee_nonplayerdamage 40 -set g_balance_shockwave_melee_range 120 -set g_balance_shockwave_melee_refire 1.25 -set g_balance_shockwave_melee_swing_side 120 -set g_balance_shockwave_melee_swing_up 30 -set g_balance_shockwave_melee_time 0.15 -set g_balance_shockwave_melee_traces 10 -set g_balance_shockwave_switchdelay_drop 0 -set g_balance_shockwave_switchdelay_raise 0 -set g_balance_shockwave_weaponreplace "" -set g_balance_shockwave_weaponstart 0 -set g_balance_shockwave_weaponstartoverride -1 -set g_balance_shockwave_weaponthrowable 0 -// }}} -// {{{ #20: Arc +// {{{ #19: Arc set g_balance_arc_beam_ammo 6 set g_balance_arc_beam_animtime 0.1 set g_balance_arc_beam_botaimlifetime 0 @@ -796,7 +745,7 @@ set g_balance_arc_weaponstart 0 set g_balance_arc_weaponstartoverride -1 set g_balance_arc_weaponthrowable 1 // }}} -// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON) +// {{{ #20: Overkill Heavy Machine Gun (MUTATOR WEAPON) set g_balance_okhmg_primary_ammo 1 set g_balance_okhmg_primary_damage 30 set g_balance_okhmg_primary_force 10 @@ -815,7 +764,7 @@ set g_balance_okhmg_weaponstart 0 set g_balance_okhmg_weaponstartoverride 0 set g_balance_okhmg_weaponthrowable 0 // }}} -// {{{ #22: Overkill MachineGun (MUTATOR WEAPON) +// {{{ #21: Overkill MachineGun (MUTATOR WEAPON) set g_balance_okmachinegun_damagefalloff_forcehalflife 0 set g_balance_okmachinegun_damagefalloff_halflife 0 set g_balance_okmachinegun_damagefalloff_maxdist 0 @@ -838,7 +787,7 @@ set g_balance_okmachinegun_weaponstart 0 set g_balance_okmachinegun_weaponstartoverride -1 set g_balance_okmachinegun_weaponthrowable 1 // }}} -// {{{ #23: Overkill Nex (MUTATOR WEAPON) +// {{{ #22: Overkill Nex (MUTATOR WEAPON) set g_balance_oknex_charge 0 set g_balance_oknex_charge_animlimit 0.5 set g_balance_oknex_charge_limit 1 @@ -878,7 +827,7 @@ set g_balance_oknex_weaponstart 0 set g_balance_oknex_weaponstartoverride -1 set g_balance_oknex_weaponthrowable 1 // }}} -// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) +// {{{ #23: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) set g_balance_okrpc_primary_ammo 10 set g_balance_okrpc_primary_animtime 1 set g_balance_okrpc_primary_damage 150 @@ -902,7 +851,7 @@ set g_balance_okrpc_weaponstart 0 set g_balance_okrpc_weaponstartoverride 0 set g_balance_okrpc_weaponthrowable 0 // }}} -// {{{ #25: Overkill Shotgun (MUTATOR WEAPON) +// {{{ #24: Overkill Shotgun (MUTATOR WEAPON) set g_balance_okshotgun_primary_ammo 3 set g_balance_okshotgun_primary_animtime 0.65 set g_balance_okshotgun_primary_bot_range 512 diff --git a/bal-wep-xonotic.cfg b/bal-wep-xonotic.cfg index e24b172e8..5a32cda84 100644 --- a/bal-wep-xonotic.cfg +++ b/bal-wep-xonotic.cfg @@ -689,58 +689,7 @@ set g_balance_seeker_weaponstart 0 set g_balance_seeker_weaponstartoverride -1 set g_balance_seeker_weaponthrowable 1 // }}} -// {{{ #19: Shockwave -set g_balance_shockwave_blast_animtime 0.3 -set g_balance_shockwave_blast_damage 40 -set g_balance_shockwave_blast_distance 1000 -set g_balance_shockwave_blast_edgedamage 0 -set g_balance_shockwave_blast_force 15 -set g_balance_shockwave_blast_force_forwardbias 50 -set g_balance_shockwave_blast_force_zscale 1 -set g_balance_shockwave_blast_jump_damage 20 -set g_balance_shockwave_blast_jump_edgedamage 0 -set g_balance_shockwave_blast_jump_force 100 -set g_balance_shockwave_blast_jump_force_velocitybias 1 -set g_balance_shockwave_blast_jump_force_zscale 1 -set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_jump_multiplier_distance 0.5 -set g_balance_shockwave_blast_jump_multiplier_min 0 -set g_balance_shockwave_blast_jump_radius 150 -set g_balance_shockwave_blast_multiplier_accuracy 0.45 -set g_balance_shockwave_blast_multiplier_distance 0.2 -set g_balance_shockwave_blast_multiplier_min 0 -set g_balance_shockwave_blast_refire 0.75 -set g_balance_shockwave_blast_splash_damage 15 -set g_balance_shockwave_blast_splash_edgedamage 0 -set g_balance_shockwave_blast_splash_force 100 -set g_balance_shockwave_blast_splash_force_forwardbias 50 -set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5 -set g_balance_shockwave_blast_splash_multiplier_distance 0.5 -set g_balance_shockwave_blast_splash_multiplier_min 0 -set g_balance_shockwave_blast_splash_radius 70 -set g_balance_shockwave_blast_spread_max 120 -set g_balance_shockwave_blast_spread_min 25 -set g_balance_shockwave_melee_animtime 1.3 -set g_balance_shockwave_melee_damage 80 -set g_balance_shockwave_melee_delay 0.25 -set g_balance_shockwave_melee_force 200 -set g_balance_shockwave_melee_multihit 1 -set g_balance_shockwave_melee_no_doubleslap 1 -set g_balance_shockwave_melee_nonplayerdamage 40 -set g_balance_shockwave_melee_range 120 -set g_balance_shockwave_melee_refire 1.25 -set g_balance_shockwave_melee_swing_side 120 -set g_balance_shockwave_melee_swing_up 30 -set g_balance_shockwave_melee_time 0.15 -set g_balance_shockwave_melee_traces 10 -set g_balance_shockwave_switchdelay_drop 0.2 -set g_balance_shockwave_switchdelay_raise 0.2 -set g_balance_shockwave_weaponreplace "" -set g_balance_shockwave_weaponstart 0 -set g_balance_shockwave_weaponstartoverride -1 -set g_balance_shockwave_weaponthrowable 0 -// }}} -// {{{ #20: Arc +// {{{ #19: Arc set g_balance_arc_beam_ammo 6 set g_balance_arc_beam_animtime 0.1 set g_balance_arc_beam_botaimlifetime 0 @@ -796,7 +745,7 @@ set g_balance_arc_weaponstart 0 set g_balance_arc_weaponstartoverride -1 set g_balance_arc_weaponthrowable 1 // }}} -// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON) +// {{{ #20: Overkill Heavy Machine Gun (MUTATOR WEAPON) set g_balance_okhmg_primary_ammo 1 set g_balance_okhmg_primary_damage 30 set g_balance_okhmg_primary_force 10 @@ -815,7 +764,7 @@ set g_balance_okhmg_weaponstart 0 set g_balance_okhmg_weaponstartoverride 0 set g_balance_okhmg_weaponthrowable 0 // }}} -// {{{ #22: Overkill MachineGun (MUTATOR WEAPON) +// {{{ #21: Overkill MachineGun (MUTATOR WEAPON) set g_balance_okmachinegun_damagefalloff_forcehalflife 0 set g_balance_okmachinegun_damagefalloff_halflife 0 set g_balance_okmachinegun_damagefalloff_maxdist 0 @@ -838,7 +787,7 @@ set g_balance_okmachinegun_weaponstart 0 set g_balance_okmachinegun_weaponstartoverride -1 set g_balance_okmachinegun_weaponthrowable 1 // }}} -// {{{ #23: Overkill Nex (MUTATOR WEAPON) +// {{{ #22: Overkill Nex (MUTATOR WEAPON) set g_balance_oknex_charge 0 set g_balance_oknex_charge_animlimit 0.5 set g_balance_oknex_charge_limit 1 @@ -878,7 +827,7 @@ set g_balance_oknex_weaponstart 0 set g_balance_oknex_weaponstartoverride -1 set g_balance_oknex_weaponthrowable 1 // }}} -// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) +// {{{ #23: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON) set g_balance_okrpc_primary_ammo 10 set g_balance_okrpc_primary_animtime 1 set g_balance_okrpc_primary_damage 150 @@ -902,7 +851,7 @@ set g_balance_okrpc_weaponstart 0 set g_balance_okrpc_weaponstartoverride 0 set g_balance_okrpc_weaponthrowable 0 // }}} -// {{{ #25: Overkill Shotgun (MUTATOR WEAPON) +// {{{ #24: Overkill Shotgun (MUTATOR WEAPON) set g_balance_okshotgun_primary_ammo 3 set g_balance_okshotgun_primary_animtime 0.65 set g_balance_okshotgun_primary_bot_range 512 diff --git a/gfx/hud/luma/weaponshockwave.tga b/gfx/hud/luma/weaponshockwave.tga deleted file mode 100644 index c37b837bc..000000000 Binary files a/gfx/hud/luma/weaponshockwave.tga and /dev/null differ diff --git a/models/weapons/g_shockwave_luma.iqm b/models/weapons/g_shockwave_luma.iqm deleted file mode 100644 index a5cc3e602..000000000 Binary files a/models/weapons/g_shockwave_luma.iqm and /dev/null differ diff --git a/models/weapons/g_shockwave_luma.iqm_0.skin b/models/weapons/g_shockwave_luma.iqm_0.skin deleted file mode 100644 index 5a243ffc5..000000000 --- a/models/weapons/g_shockwave_luma.iqm_0.skin +++ /dev/null @@ -1 +0,0 @@ -Plane,g_shockwave_luma diff --git a/models/weapons/g_shockwave_luma.tga b/models/weapons/g_shockwave_luma.tga deleted file mode 100644 index 74eb94ec7..000000000 Binary files a/models/weapons/g_shockwave_luma.tga and /dev/null differ diff --git a/models/weapons/make-sprites.sh b/models/weapons/make-sprites.sh index 3b8c43721..41650e123 100755 --- a/models/weapons/make-sprites.sh +++ b/models/weapons/make-sprites.sh @@ -75,7 +75,6 @@ sprite gl "Mortar" ff0000 # Red sprite porto "Port-O-Launch" 808080 # Gray sprite campingrifle "Rifle" 80ff00 # Chartreuse sprite seeker "T.A.G.\nSeeker" 80ff00 # Chartreuse -#sprite shockwave "Shockwave" 804000 # Cinnamon sprite shotgun "Shotgun" 804000 # Cinnamon sprite tuba "Tuba" 00ff00 # Green sprite minstanex "Vaporizer" 80ffff # Anakiwa diff --git a/notifications.cfg b/notifications.cfg index 413836892..a21984c63 100644 --- a/notifications.cfg +++ b/notifications.cfg @@ -352,8 +352,6 @@ seta notification_INFO_WEAPON_RIFLE_MURDER_PIERCING "1" "0 = off, 1 = print to c seta notification_INFO_WEAPON_SEEKER_MURDER_SPRAY "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_WEAPON_SEEKER_MURDER_TAG "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_WEAPON_SEEKER_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" -seta notification_INFO_WEAPON_SHOCKWAVE_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" -seta notification_INFO_WEAPON_SHOCKWAVE_MURDER_SLAP "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_WEAPON_SHOTGUN_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_WEAPON_SHOTGUN_MURDER_SLAP "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_WEAPON_THINKING_WITH_PORTALS "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" @@ -736,8 +734,6 @@ seta notification_WEAPON_RIFLE_MURDER_PIERCING "1" "Enable this multiple notific seta notification_WEAPON_SEEKER_MURDER_SPRAY "1" "Enable this multiple notification" seta notification_WEAPON_SEEKER_MURDER_TAG "1" "Enable this multiple notification" seta notification_WEAPON_SEEKER_SUICIDE "1" "Enable this multiple notification" -seta notification_WEAPON_SHOCKWAVE_MURDER "1" "Enable this multiple notification" -seta notification_WEAPON_SHOCKWAVE_MURDER_SLAP "1" "Enable this multiple notification" seta notification_WEAPON_SHOTGUN_MURDER "1" "Enable this multiple notification" seta notification_WEAPON_SHOTGUN_MURDER_SLAP "1" "Enable this multiple notification" seta notification_WEAPON_THINKING_WITH_PORTALS "1" "Enable this multiple notification" diff --git a/qcsrc/common/models/all.inc b/qcsrc/common/models/all.inc index b8fc08f38..5a706ed97 100644 --- a/qcsrc/common/models/all.inc +++ b/qcsrc/common/models/all.inc @@ -241,11 +241,6 @@ MODEL(SEEKER_VIEW, W_Model("h_seeker.iqm")); MODEL(SEEKER_WORLD, W_Model("v_seeker.md3")); MODEL(SEEKER_ITEM, W_Model("g_seeker.md3")); -MODEL(SHOCKWAVE_MUZZLEFLASH, "models/uziflash.md3"); -MODEL(SHOCKWAVE_VIEW, W_Model("h_shotgun.iqm")); -MODEL(SHOCKWAVE_WORLD, W_Model("v_shotgun.md3")); -MODEL(SHOCKWAVE_ITEM, W_Model("g_shotgun.md3")); - MODEL(ARC_MUZZLEFLASH, "models/flash.md3"); MODEL(ARC_VIEW, W_Model("h_arc.iqm")); MODEL(ARC_WORLD, W_Model("v_arc.md3")); diff --git a/qcsrc/common/mutators/mutator/nades/nades.qc b/qcsrc/common/mutators/mutator/nades/nades.qc index 323c14d98..f47cf2cd5 100644 --- a/qcsrc/common/mutators/mutator/nades/nades.qc +++ b/qcsrc/common/mutators/mutator/nades/nades.qc @@ -1058,7 +1058,7 @@ void nade_damage(entity this, entity inflictor, entity attacker, float damage, i } else if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN) || DEATH_ISWEAPON(deathtype, WEP_OVERKILL_MACHINEGUN)) damage = this.max_health * 0.1; - else if(DEATH_ISWEAPON(deathtype, WEP_SHOCKWAVE) || DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) || DEATH_ISWEAPON(deathtype, WEP_OVERKILL_SHOTGUN)) // WEAPONTODO + else if(DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) || DEATH_ISWEAPON(deathtype, WEP_OVERKILL_SHOTGUN)) // WEAPONTODO { if(!(deathtype & HITTYPE_SECONDARY)) damage = this.max_health * 1.15; diff --git a/qcsrc/common/mutators/mutator/new_toys/sv_new_toys.qc b/qcsrc/common/mutators/mutator/new_toys/sv_new_toys.qc index e2a5ea41a..3bb13a9f5 100644 --- a/qcsrc/common/mutators/mutator/new_toys/sv_new_toys.qc +++ b/qcsrc/common/mutators/mutator/new_toys/sv_new_toys.qc @@ -122,7 +122,6 @@ bool nt_IsNewToy(int w) case WEP_MINE_LAYER.m_id: case WEP_HLAC.m_id: case WEP_RIFLE.m_id: - case WEP_SHOCKWAVE.m_id: case WEP_ARC.m_id: return true; default: @@ -138,7 +137,6 @@ string nt_GetFullReplacement(string w) case "devastator": return "minelayer"; case "machinegun": return "hlac"; case "vortex": return "rifle"; - //case "shotgun": return "shockwave"; default: return string_null; } } diff --git a/qcsrc/common/notifications/all.inc b/qcsrc/common/notifications/all.inc index fd61b5686..836fef289 100644 --- a/qcsrc/common/notifications/all.inc +++ b/qcsrc/common/notifications/all.inc @@ -524,8 +524,6 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != MSG_INFO_NOTIF(WEAPON_SEEKER_MURDER_SPRAY, N_CONSOLE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponseeker", _("^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"), "") MSG_INFO_NOTIF(WEAPON_SEEKER_MURDER_TAG, N_CONSOLE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponseeker", _("^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"), "") MSG_INFO_NOTIF(WEAPON_SEEKER_SUICIDE, N_CONSOLE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponseeker", _("^BG%s^K1 played with tiny Seeker rockets%s%s"), "") - MSG_INFO_NOTIF(WEAPON_SHOCKWAVE_MURDER, N_CONSOLE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponshockwave", _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"), "") - MSG_INFO_NOTIF(WEAPON_SHOCKWAVE_MURDER_SLAP, N_CONSOLE, 3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1", "notify_melee_shotgun", _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"), "") MSG_INFO_NOTIF(WEAPON_SHOTGUN_MURDER, N_CONSOLE, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponshotgun", _("^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"), "") MSG_INFO_NOTIF(WEAPON_SHOTGUN_MURDER_SLAP, N_CONSOLE, 3, 2, "spree_inf s2 s1 s3loc spree_end", "s2 s1", "notify_melee_shotgun", _("^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"), "") MSG_INFO_NOTIF(WEAPON_THINKING_WITH_PORTALS, N_CONSOLE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_selfkill", _("^BG%s^K1 is now thinking with portals%s%s"), "") @@ -1008,8 +1006,6 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != MSG_MULTI_NOTIF(WEAPON_SEEKER_MURDER_SPRAY, N_ENABLE, NULL, INFO_WEAPON_SEEKER_MURDER_SPRAY, NULL) MSG_MULTI_NOTIF(WEAPON_SEEKER_MURDER_TAG, N_ENABLE, NULL, INFO_WEAPON_SEEKER_MURDER_TAG, NULL) MSG_MULTI_NOTIF(WEAPON_SEEKER_SUICIDE, N_ENABLE, NULL, INFO_WEAPON_SEEKER_SUICIDE, CENTER_DEATH_SELF_GENERIC) - MSG_MULTI_NOTIF(WEAPON_SHOCKWAVE_MURDER, N_ENABLE, NULL, INFO_WEAPON_SHOCKWAVE_MURDER, NULL) - MSG_MULTI_NOTIF(WEAPON_SHOCKWAVE_MURDER_SLAP, N_ENABLE, NULL, INFO_WEAPON_SHOCKWAVE_MURDER_SLAP, NULL) MSG_MULTI_NOTIF(WEAPON_SHOTGUN_MURDER, N_ENABLE, NULL, INFO_WEAPON_SHOTGUN_MURDER, NULL) MSG_MULTI_NOTIF(WEAPON_SHOTGUN_MURDER_SLAP, N_ENABLE, NULL, INFO_WEAPON_SHOTGUN_MURDER_SLAP, NULL) MSG_MULTI_NOTIF(WEAPON_THINKING_WITH_PORTALS, N_ENABLE, NULL, INFO_WEAPON_THINKING_WITH_PORTALS, CENTER_DEATH_SELF_GENERIC) diff --git a/qcsrc/common/weapons/all.inc b/qcsrc/common/weapons/all.inc index 15e61025b..7b83f03f4 100644 --- a/qcsrc/common/weapons/all.inc +++ b/qcsrc/common/weapons/all.inc @@ -23,9 +23,8 @@ #include "weapon/rifle.qh" #include "weapon/fireball.qh" #include "weapon/seeker.qh" -#include "weapon/shockwave.qh" #include "weapon/arc.qh" // Weapon registry is sorted to allocate the weapons included above first, update the value below to the number of listed weapons // TODO: remove eventually in a way that does not cause https://gitlab.com/xonotic/xonotic-data.pk3dir/-/issues/2714 -#define WEP_HARDCODED_IMPULSES 20 +#define WEP_HARDCODED_IMPULSES 19 diff --git a/qcsrc/common/weapons/weapon/_mod.inc b/qcsrc/common/weapons/weapon/_mod.inc index 20d390c09..9a099a5c7 100644 --- a/qcsrc/common/weapons/weapon/_mod.inc +++ b/qcsrc/common/weapons/weapon/_mod.inc @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include diff --git a/qcsrc/common/weapons/weapon/_mod.qh b/qcsrc/common/weapons/weapon/_mod.qh index 02d0ffa57..4767ccf8a 100644 --- a/qcsrc/common/weapons/weapon/_mod.qh +++ b/qcsrc/common/weapons/weapon/_mod.qh @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include diff --git a/qcsrc/common/weapons/weapon/shockwave.qc b/qcsrc/common/weapons/weapon/shockwave.qc deleted file mode 100644 index 605dbd7da..000000000 --- a/qcsrc/common/weapons/weapon/shockwave.qc +++ /dev/null @@ -1,815 +0,0 @@ -#include "shockwave.qh" - -#ifdef GAMEQC -REGISTER_NET_TEMP(TE_CSQC_SHOCKWAVEPARTICLE) -#endif - -#ifdef SVQC - -const float MAX_SHOCKWAVE_HITS = 10; -//#define DEBUG_SHOCKWAVE - -.float swing_prev; -.entity swing_alreadyhit; -.float shockwave_blasttime; -entity shockwave_hit[MAX_SHOCKWAVE_HITS]; -float shockwave_hit_damage[MAX_SHOCKWAVE_HITS]; -vector shockwave_hit_force[MAX_SHOCKWAVE_HITS]; - -// MELEE ATTACK MODE -void W_Shockwave_Melee_Think(entity this) -{ - // declarations - float i, f, swing, swing_factor, swing_damage, meleetime, is_player; - entity target_victim; - vector targpos; - - // check to see if we can still continue, otherwise give up now - if(IS_DEAD(this.realowner) && WEP_CVAR(WEP_SHOCKWAVE, melee_no_doubleslap)) - { - delete(this); - return; - } - - // set start time of melee - if(!this.cnt) - { - this.cnt = time; - W_PlayStrengthSound(this.realowner); - } - - // update values for v_* vectors - makevectors(this.realowner.v_angle); - - // calculate swing percentage based on time - meleetime = WEP_CVAR(WEP_SHOCKWAVE, melee_time) * W_WeaponRateFactor(this.realowner); - swing = bound(0, (this.cnt + meleetime - time) / meleetime, 10); - f = ((1 - swing) * WEP_CVAR(WEP_SHOCKWAVE, melee_traces)); - - // perform the traces needed for this frame - for(i=this.swing_prev; i < f; ++i) - { - swing_factor = ((1 - (i / WEP_CVAR(WEP_SHOCKWAVE, melee_traces))) * 2 - 1); - - targpos = (this.realowner.origin + this.realowner.view_ofs - + (v_forward * WEP_CVAR(WEP_SHOCKWAVE, melee_range)) - + (v_up * swing_factor * WEP_CVAR(WEP_SHOCKWAVE, melee_swing_up)) - + (v_right * swing_factor * WEP_CVAR(WEP_SHOCKWAVE, melee_swing_side))); - - WarpZone_traceline_antilag( - this.realowner, - (this.realowner.origin + this.realowner.view_ofs), - targpos, - false, - this.realowner, - ANTILAG_LATENCY(this.realowner) - ); - - // draw lightning beams for debugging -#ifdef DEBUG_SHOCKWAVE - te_lightning2(NULL, targpos, this.realowner.origin + this.realowner.view_ofs + v_forward * 5 - v_up * 5); - te_customflash(targpos, 40, 2, '1 1 1'); -#endif - - is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body" || IS_MONSTER(trace_ent)); - - if((trace_fraction < 1) // if trace is good, apply the damage and remove this if necessary - && (trace_ent.takedamage == DAMAGE_AIM) - && (trace_ent != this.swing_alreadyhit) - && (is_player || WEP_CVAR(WEP_SHOCKWAVE, melee_nonplayerdamage))) - { - target_victim = trace_ent; // so it persists through other calls - - if(is_player) // this allows us to be able to nerf the non-player damage done in e.g. assault or onslaught - swing_damage = (WEP_CVAR(WEP_SHOCKWAVE, melee_damage) * min(1, swing_factor + 1)); - else - swing_damage = (WEP_CVAR(WEP_SHOCKWAVE, melee_nonplayerdamage) * min(1, swing_factor + 1)); - - // trigger damage with this calculated info - Damage( - target_victim, - this.realowner, - this.realowner, - swing_damage, - (WEP_SHOCKWAVE.m_id | HITTYPE_SECONDARY), - this.weaponentity_fld, - (this.realowner.origin + this.realowner.view_ofs), - (v_forward * WEP_CVAR(WEP_SHOCKWAVE, melee_force)) - ); - - // handle accuracy - if(accuracy_isgooddamage(this.realowner, target_victim)) - { accuracy_add(this.realowner, WEP_SHOCKWAVE, 0, swing_damage); } - - #ifdef DEBUG_SHOCKWAVE - LOG_INFOF( - "MELEE: %s hitting %s with %f damage (factor: %f) at %f time.", - this.realowner.netname, - target_victim.netname, - swing_damage, - swing_factor, - time - ); - #endif - - // allow multiple hits with one swing, but not against the same player twice - if(WEP_CVAR(WEP_SHOCKWAVE, melee_multihit)) - { - this.swing_alreadyhit = target_victim; - continue; // move along to next trace - } - else - { - delete(this); - return; - } - } - } - - if(time >= this.cnt + meleetime) - { - // melee is finished - delete(this); - return; - } - else - { - // set up next frame - this.swing_prev = i; - this.nextthink = time; - } -} - -void W_Shockwave_Melee(Weapon thiswep, entity actor, .entity weaponentity, int fire) -{ - sound(actor, CH_WEAPON_A, SND_SHOTGUN_MELEE, VOL_BASE, ATTN_NORM); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, WEP_CVAR(WEP_SHOCKWAVE, melee_animtime), w_ready); - - entity meleetemp = new_pure(meleetemp); - meleetemp.owner = meleetemp.realowner = actor; - setthink(meleetemp, W_Shockwave_Melee_Think); - meleetemp.nextthink = time + WEP_CVAR(WEP_SHOCKWAVE, melee_delay) * W_WeaponRateFactor(actor); - meleetemp.weaponentity_fld = weaponentity; - W_SetupShot_Range(actor, weaponentity, true, 0, SND_Null, 0, WEP_CVAR(WEP_SHOCKWAVE, melee_damage), WEP_CVAR(WEP_SHOCKWAVE, melee_range), thiswep.m_id | HITTYPE_SECONDARY); -} - -// SHOCKWAVE ATTACK MODE -float W_Shockwave_Attack_CheckSpread( - vector targetorg, - vector nearest_on_line, - vector sw_shotorg, - vector attack_endpos) -{ - float spreadlimit; - float distance_of_attack = vlen(sw_shotorg - attack_endpos); - float distance_from_line = vlen(targetorg - nearest_on_line); - - spreadlimit = (distance_of_attack ? min(1, (vlen(sw_shotorg - nearest_on_line) / distance_of_attack)) : 1); - spreadlimit = - ( - (WEP_CVAR(WEP_SHOCKWAVE, blast_spread_min) * (1 - spreadlimit)) - + - (WEP_CVAR(WEP_SHOCKWAVE, blast_spread_max) * spreadlimit) - ); - - if( - (spreadlimit && (distance_from_line <= spreadlimit)) - && - ((vlen(normalize(targetorg - sw_shotorg) - normalize(attack_endpos - sw_shotorg)) * RAD2DEG) <= 90) - ) - { return bound(0, (distance_from_line / spreadlimit), 1); } - else - { return false; } -} - -float W_Shockwave_Attack_IsVisible( - entity actor, - entity head, - vector nearest_on_line, - vector sw_shotorg, - vector attack_endpos) -{ - vector nearest_to_attacker = head.WarpZone_findradius_nearest; - vector center = (head.origin + (head.mins + head.maxs) * 0.5); - vector corner; - float i; - - // STEP ONE: Check if the nearest point is clear - if(W_Shockwave_Attack_CheckSpread(nearest_to_attacker, nearest_on_line, sw_shotorg, attack_endpos)) - { - WarpZone_TraceLine(sw_shotorg, nearest_to_attacker, MOVE_NOMONSTERS, actor); - if(trace_fraction == 1) { return true; } // yes, the nearest point is clear and we can allow the damage - } - - // STEP TWO: Check if shotorg to center point is clear - if(W_Shockwave_Attack_CheckSpread(center, nearest_on_line, sw_shotorg, attack_endpos)) - { - WarpZone_TraceLine(sw_shotorg, center, MOVE_NOMONSTERS, actor); - if(trace_fraction == 1) { return true; } // yes, the center point is clear and we can allow the damage - } - - // STEP THREE: Check each corner to see if they are clear - for(i=1; i<=8; ++i) - { - corner = get_corner_position(head, i); - if(W_Shockwave_Attack_CheckSpread(corner, nearest_on_line, sw_shotorg, attack_endpos)) - { - WarpZone_TraceLine(sw_shotorg, corner, MOVE_NOMONSTERS, actor); - if(trace_fraction == 1) { return true; } // yes, this corner is clear and we can allow the damage - } - } - - return false; -} - -float W_Shockwave_Attack_CheckHit( - float queue, - entity head, - vector final_force, - float final_damage) -{ - if(!head) { return false; } - float i; - - for(i = 0; i <= queue; ++i) - { - if(shockwave_hit[i] == head) - { - if(vlen2(final_force) > vlen2(shockwave_hit_force[i])) { shockwave_hit_force[i] = final_force; } - if(final_damage > shockwave_hit_damage[i]) { shockwave_hit_damage[i] = final_damage; } - return false; - } - } - - shockwave_hit[queue] = head; - shockwave_hit_force[queue] = final_force; - shockwave_hit_damage[queue] = final_damage; - return true; -} - -void W_Shockwave_Send(entity actor) -{ - WriteHeader(MSG_BROADCAST, TE_CSQC_SHOCKWAVEPARTICLE); - WriteVector(MSG_BROADCAST, w_shotorg); - WriteVector(MSG_BROADCAST, w_shotdir); - WriteShort(MSG_BROADCAST, WEP_CVAR(WEP_SHOCKWAVE, blast_distance)); - WriteByte(MSG_BROADCAST, bound(0, WEP_CVAR(WEP_SHOCKWAVE, blast_spread_max), 255)); - WriteByte(MSG_BROADCAST, bound(0, WEP_CVAR(WEP_SHOCKWAVE, blast_spread_min), 255)); - WriteByte(MSG_BROADCAST, etof(actor)); -} - -void W_Shockwave_Attack(Weapon thiswep, entity actor, .entity weaponentity) -{ - // declarations - float multiplier, multiplier_from_accuracy, multiplier_from_distance; - float final_damage; - vector final_force, center, vel; - entity head; - - float i, queue = 0; - - // set up the shot direction - W_SetupShot(actor, weaponentity, true, 3, SND_LASERGUN_FIRE, CH_WEAPON_B, WEP_CVAR(WEP_SHOCKWAVE, blast_damage), thiswep.m_id); - vector attack_endpos = (w_shotorg + (w_shotdir * WEP_CVAR(WEP_SHOCKWAVE, blast_distance))); - WarpZone_TraceLine(w_shotorg, attack_endpos, MOVE_NOMONSTERS, actor); - vector attack_hitpos = trace_endpos; - float distance_to_end = vlen(w_shotorg - attack_endpos); - float distance_to_hit = vlen(w_shotorg - attack_hitpos); - //entity transform = WarpZone_trace_transform; - - // do the firing effect now - W_Shockwave_Send(actor); - Damage_DamageInfo( - attack_hitpos, - WEP_CVAR(WEP_SHOCKWAVE, blast_splash_damage), - WEP_CVAR(WEP_SHOCKWAVE, blast_splash_edgedamage), - WEP_CVAR(WEP_SHOCKWAVE, blast_splash_radius), - w_shotdir * WEP_CVAR(WEP_SHOCKWAVE, blast_splash_force), - thiswep.m_id, - 0, - actor - ); - - // splash damage/jumping trace - head = WarpZone_FindRadius( - attack_hitpos, - max( - WEP_CVAR(WEP_SHOCKWAVE, blast_splash_radius), - WEP_CVAR(WEP_SHOCKWAVE, blast_jump_radius) - ), - false - ); - - float lag = ((IS_REAL_CLIENT(actor)) ? ANTILAG_LATENCY(actor) : 0); - bool noantilag = ((IS_CLIENT(actor)) ? CS_CVAR(actor).cvar_cl_noantilag : false); - if(lag < 0.001) - lag = 0; - if(autocvar_g_antilag == 0 || noantilag) - lag = 0; // only do hitscan, but no antilag - if(lag) - antilag_takeback_all(actor, lag); - - while(head) - { - if(head.takedamage) - { - float distance_to_head = vlen(attack_hitpos - head.WarpZone_findradius_nearest); - - if((head == actor) && (distance_to_head <= WEP_CVAR(WEP_SHOCKWAVE, blast_jump_radius))) - { - // ======================== - // BLAST JUMP CALCULATION - // ======================== - - // calculate importance of distance and accuracy for this attack - multiplier_from_accuracy = (1 - - (distance_to_head ? - min(1, (distance_to_head / WEP_CVAR(WEP_SHOCKWAVE, blast_jump_radius))) - : - 0 - ) - ); - multiplier_from_distance = (1 - - (distance_to_hit ? - min(1, (distance_to_hit / distance_to_end)) - : - 0 - ) - ); - multiplier = - max( - WEP_CVAR(WEP_SHOCKWAVE, blast_jump_multiplier_min), - ( - (multiplier_from_accuracy * WEP_CVAR(WEP_SHOCKWAVE, blast_jump_multiplier_accuracy)) - + - (multiplier_from_distance * WEP_CVAR(WEP_SHOCKWAVE, blast_jump_multiplier_distance)) - ) - ); - - // calculate damage from multiplier: 1 = "highest" damage, 0 = "lowest" edgedamage - final_damage = - ( - (WEP_CVAR(WEP_SHOCKWAVE, blast_jump_damage) * multiplier) - + - (WEP_CVAR(WEP_SHOCKWAVE, blast_jump_edgedamage) * (1 - multiplier)) - ); - - // figure out the direction of force - vel = normalize(vec2(head.velocity)); - vel *= - ( - bound(0, (vlen(vel) / autocvar_sv_maxspeed), 1) - * - WEP_CVAR(WEP_SHOCKWAVE, blast_jump_force_velocitybias) - ); - - if (autocvar_g_player_damageplayercenter) - { - vector shot_origin = CENTER_OR_VIEWOFS(actor); - shot_origin.z += actor.(weaponentity).movedir.z; - //if (head == actor) // was checked for already, is true - final_force = normalize((shot_origin - attack_hitpos) + vel); - //else // use target's bbox centerpoint - //final_force = normalize(((head.origin + ((head.mins + head.maxs) * 0.5)) - attack_hitpos) + vel); - } - else - { - // if it's a player, use the view origin as reference - final_force = normalize((CENTER_OR_VIEWOFS(head) - attack_hitpos) + vel); - } - - // now multiply the direction by force units - final_force *= (WEP_CVAR(WEP_SHOCKWAVE, blast_jump_force) * multiplier); - final_force.z *= WEP_CVAR(WEP_SHOCKWAVE, blast_jump_force_zscale); - - // trigger damage with this calculated info - Damage( - head, - actor, - actor, - final_damage, - thiswep.m_id, - weaponentity, - head.origin, - final_force - ); - - #ifdef DEBUG_SHOCKWAVE - LOG_INFOF( - "SELF HIT: multiplier = %f, damage = %f, force = %f... " - "multiplier_from_accuracy = %f, multiplier_from_distance = %f.", - multiplier, - final_damage, - vlen(final_force), - multiplier_from_accuracy, - multiplier_from_distance - ); - #endif - } - else if(distance_to_head <= WEP_CVAR(WEP_SHOCKWAVE, blast_splash_radius)) - { - // ========================== - // BLAST SPLASH CALCULATION - // ========================== - - // calculate importance of distance and accuracy for this attack - multiplier_from_accuracy = (1 - - (distance_to_head ? - min(1, (distance_to_head / WEP_CVAR(WEP_SHOCKWAVE, blast_splash_radius))) - : - 0 - ) - ); - multiplier_from_distance = (1 - - (distance_to_hit ? - min(1, (distance_to_hit / distance_to_end)) - : - 0 - ) - ); - multiplier = - max( - WEP_CVAR(WEP_SHOCKWAVE, blast_splash_multiplier_min), - ( - (multiplier_from_accuracy * WEP_CVAR(WEP_SHOCKWAVE, blast_splash_multiplier_accuracy)) - + - (multiplier_from_distance * WEP_CVAR(WEP_SHOCKWAVE, blast_splash_multiplier_distance)) - ) - ); - - // calculate damage from multiplier: 1 = "highest" damage, 0 = "lowest" edgedamage - final_damage = - ( - (WEP_CVAR(WEP_SHOCKWAVE, blast_splash_damage) * multiplier) - + - (WEP_CVAR(WEP_SHOCKWAVE, blast_splash_edgedamage) * (1 - multiplier)) - ); - - // figure out the direction of force - final_force = (w_shotdir * WEP_CVAR(WEP_SHOCKWAVE, blast_splash_force_forwardbias)); - if (autocvar_g_player_damageplayercenter) - { - //if (head == actor) // was checked for already, is false - //final_force = normalize(CENTER_OR_VIEWOFS(actor) + '0 0 actor.(weaponentity).movedir.z' - (attack_hitpos - final_force)); - //else // use target's bbox centerpoint - final_force = normalize((head.origin + ((head.mins + head.maxs) * 0.5)) - (attack_hitpos - final_force)); - } - else - { - // if it's a player, use the view origin as reference - final_force = normalize(CENTER_OR_VIEWOFS(head) - (attack_hitpos - final_force)); - } - //te_lightning2(NULL, attack_hitpos, (attack_hitpos + (final_force * 200))); - - // now multiply the direction by force units - final_force *= (WEP_CVAR(WEP_SHOCKWAVE, blast_splash_force) * multiplier); - final_force.z *= WEP_CVAR(WEP_SHOCKWAVE, blast_force_zscale); - - // queue damage with this calculated info - if(W_Shockwave_Attack_CheckHit(queue, head, final_force, final_damage)) { queue = min(queue + 1, MAX_SHOCKWAVE_HITS); } - - #ifdef DEBUG_SHOCKWAVE - LOG_INFOF( - "SPLASH HIT: multiplier = %f, damage = %f, force = %f... " - "multiplier_from_accuracy = %f, multiplier_from_distance = %f.", - multiplier, - final_damage, - vlen(final_force), - multiplier_from_accuracy, - multiplier_from_distance - ); - #endif - } - } - head = head.chain; - } - - // cone damage trace - head = WarpZone_FindRadius(w_shotorg, WEP_CVAR(WEP_SHOCKWAVE, blast_distance), false); - while(head) - { - if((head != actor) && head.takedamage) - { - // ======================== - // BLAST CONE CALCULATION - // ======================== - - if (autocvar_g_player_damageplayercenter) - { - //if (head == actor) // was checked for already, is false - //center = CENTER_OR_VIEWOFS(actor) + '0 0 actor.(weaponentity).movedir.z'; - //else // use target's bbox centerpoint - center = head.origin + ((head.mins + head.maxs) * 0.5); - } - else - { - // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in damage.qc) - center = CENTER_OR_VIEWOFS(head); - } - - // find the closest point on the enemy to the center of the attack - float h; // hypotenuse, which is the distance between attacker to head - float a; // adjacent side, which is the distance between attacker and the point on w_shotdir that is closest to head.origin - - h = vlen(center - actor.origin); - a = h * (normalize(center - actor.origin) * w_shotdir); - // WEAPONTODO: replace with simpler method - - vector nearest_on_line = (w_shotorg + a * w_shotdir); - vector nearest_to_attacker = NearestPointOnBoundingBox(center + head.mins, center + head.maxs, nearest_on_line); - - if((vdist(head.WarpZone_findradius_dist, <=, WEP_CVAR(WEP_SHOCKWAVE, blast_distance))) - && (W_Shockwave_Attack_IsVisible(actor, head, nearest_on_line, w_shotorg, attack_endpos))) - { - // calculate importance of distance and accuracy for this attack - multiplier_from_accuracy = (1 - - W_Shockwave_Attack_CheckSpread( - nearest_to_attacker, - nearest_on_line, - w_shotorg, - attack_endpos - ) - ); - multiplier_from_distance = (1 - - (distance_to_hit ? - min(1, (vlen(head.WarpZone_findradius_dist) / distance_to_end)) - : - 0 - ) - ); - multiplier = - max( - WEP_CVAR(WEP_SHOCKWAVE, blast_multiplier_min), - ( - (multiplier_from_accuracy * WEP_CVAR(WEP_SHOCKWAVE, blast_multiplier_accuracy)) - + - (multiplier_from_distance * WEP_CVAR(WEP_SHOCKWAVE, blast_multiplier_distance)) - ) - ); - - // calculate damage from multiplier: 1 = "highest" damage, 0 = "lowest" edgedamage - final_damage = - ( - (WEP_CVAR(WEP_SHOCKWAVE, blast_damage) * multiplier) - + - (WEP_CVAR(WEP_SHOCKWAVE, blast_edgedamage) * (1 - multiplier)) - ); - - // figure out the direction of force - final_force = (w_shotdir * WEP_CVAR(WEP_SHOCKWAVE, blast_force_forwardbias)); - final_force = normalize(center - (nearest_on_line - final_force)); - //te_lightning2(NULL, nearest_on_line, (attack_hitpos + (final_force * 200))); - - // now multiply the direction by force units - final_force *= (WEP_CVAR(WEP_SHOCKWAVE, blast_force) * multiplier); - final_force.z *= WEP_CVAR(WEP_SHOCKWAVE, blast_force_zscale); - - // queue damage with this calculated info - if(W_Shockwave_Attack_CheckHit(queue, head, final_force, final_damage)) { queue = min(queue + 1, MAX_SHOCKWAVE_HITS); } - - #ifdef DEBUG_SHOCKWAVE - LOG_INFOF( - "BLAST HIT: multiplier = %f, damage = %f, force = %f... " - "multiplier_from_accuracy = %f, multiplier_from_distance = %f.", - multiplier, - final_damage, - vlen(final_force), - multiplier_from_accuracy, - multiplier_from_distance - ); - #endif - } - } - head = head.chain; - } - - for(i = 1; i <= queue; ++i) - { - head = shockwave_hit[i-1]; - final_force = shockwave_hit_force[i-1]; - final_damage = shockwave_hit_damage[i-1]; - - Damage( - head, - actor, - actor, - final_damage, - thiswep.m_id, - weaponentity, - head.origin, - final_force - ); - - if(accuracy_isgooddamage(actor, head)) - accuracy_add(actor, thiswep, 0, final_damage); - - #ifdef DEBUG_SHOCKWAVE - LOG_INFOF( - "SHOCKWAVE by %s: damage = %f, force = %f.", - actor.netname, - final_damage, - vlen(final_force) - ); - #endif - - shockwave_hit[i-1] = NULL; - shockwave_hit_force[i-1] = '0 0 0'; - shockwave_hit_damage[i-1] = 0; - } - - if(lag) - antilag_restore_all(actor); -} - -METHOD(Shockwave, wr_aim, void(entity thiswep, entity actor, .entity weaponentity)) -{ - if(vdist(actor.origin - actor.enemy.origin, <=, WEP_CVAR(WEP_SHOCKWAVE, melee_range))) - { PHYS_INPUT_BUTTON_ATCK2(actor) = bot_aim(actor, weaponentity, 1000000, 0, 0.001, false, false); } - else - { PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, 1000000, 0, 0.001, false, false); } -} - -METHOD(Shockwave, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire)) -{ - if(fire & 1) - { - if(time >= actor.(weaponentity).shockwave_blasttime) // handle refire separately so the secondary can be fired straight after a primary - { - if(weapon_prepareattack(thiswep, actor, weaponentity, false, WEP_CVAR(WEP_SHOCKWAVE, blast_animtime))) - { - W_Shockwave_Attack(thiswep, actor, weaponentity); - actor.(weaponentity).shockwave_blasttime = time + WEP_CVAR(WEP_SHOCKWAVE, blast_refire) * W_WeaponRateFactor(actor); - weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR(WEP_SHOCKWAVE, blast_animtime), w_ready); - } - } - } - else if(fire & 2) - { - //if(actor.clip_load >= 0) // we are not currently reloading - if(weapon_prepareattack(thiswep, actor, weaponentity, true, WEP_CVAR(WEP_SHOCKWAVE, melee_refire))) - { - // attempt forcing playback of the anim by switching to another anim (that we never play) here... - weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, 0, W_Shockwave_Melee); - } - } -} - -METHOD(Shockwave, wr_checkammo1, bool(entity thiswep, entity actor, .entity weaponentity)) -{ - return true; // infinite ammo -} - -METHOD(Shockwave, wr_checkammo2, bool(entity thiswep, entity actor, .entity weaponentity)) -{ - // shockwave has infinite ammo - return true; -} - -METHOD(Shockwave, wr_suicidemessage, Notification(entity thiswep)) -{ - return WEAPON_THINKING_WITH_PORTALS; -} - -METHOD(Shockwave, wr_killmessage, Notification(entity thiswep)) -{ - if(w_deathtype & HITTYPE_SECONDARY) - return WEAPON_SHOCKWAVE_MURDER_SLAP; - else - return WEAPON_SHOCKWAVE_MURDER; -} - -#endif -#ifdef CSQC -// WEAPONTODO: add client side settings for these -const float SW_MAXALPHA = 0.5; -const float SW_FADETIME = 0.4; -const float SW_DISTTOMIN = 200; -void Draw_Shockwave(entity this) -{ - // fading/removal control - float a = bound(0, (SW_MAXALPHA - ((time - this.sw_time) / SW_FADETIME)), SW_MAXALPHA); - if(a < ALPHA_MIN_VISIBLE) { delete(this); } - - // WEAPONTODO: save this only once when creating the entity - vector sw_color = entcs_GetColor(this.sv_entnum - 1); // Team_ColorRGB(entcs_GetTeam(this.sv_entnum)); - - // WEAPONTODO: trace to find what we actually hit - vector endpos = (this.sw_shotorg + (this.sw_shotdir * this.sw_distance)); - - vector _forward, right, up; - VECTOR_VECTORS(this.sw_shotdir, _forward, right, up); - - // WEAPONTODO: combine and simplify these calculations - vector min_end = ((this.sw_shotorg + (this.sw_shotdir * SW_DISTTOMIN)) + (up * this.sw_spread_min)); - vector max_end = (endpos + (up * this.sw_spread_max)); - float spread_to_min = vlen(normalize(min_end - this.sw_shotorg) - this.sw_shotdir); - float spread_to_max = vlen(normalize(max_end - min_end) - this.sw_shotdir); - - vector first_min_end = '0 0 0', prev_min_end = '0 0 0', new_min_end = '0 0 0'; - vector first_max_end = '0 0 0', prev_max_end = '0 0 0', new_max_end = '0 0 0'; - float new_max_dist, new_min_dist; - - vector deviation, angle = '0 0 0'; - float counter, divisions = 20; - for(counter = 0; counter < divisions; ++counter) - { - // perfect circle effect lines - makevectors('0 360 0' * (counter / divisions)); - angle.y = v_forward.x; - angle.z = v_forward.y; - - // first do the spread_to_min effect - deviation = angle * spread_to_min; - deviation = ((this.sw_shotdir + (right * deviation.y) + (up * deviation.z))); - new_min_dist = SW_DISTTOMIN; - new_min_end = (this.sw_shotorg + (deviation * new_min_dist)); - //te_lightning2(NULL, new_min_end, this.sw_shotorg); - - // then calculate spread_to_max effect - deviation = angle * spread_to_max; - deviation = ((this.sw_shotdir + (right * deviation.y) + (up * deviation.z))); - new_max_dist = vlen(new_min_end - endpos); - new_max_end = (new_min_end + (deviation * new_max_dist)); - //te_lightning2(NULL, new_end, prev_min_end); - - - if(counter == 0) - { - first_min_end = new_min_end; - first_max_end = new_max_end; - } - - if(counter >= 1) - { - // draw from shot origin to min spread radius - R_BeginPolygon("", DRAWFLAG_NORMAL, false); - R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(new_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(this.sw_shotorg, '0 0 0', sw_color, a); - R_EndPolygon(); - - // draw from min spread radius to max spread radius - R_BeginPolygon("", DRAWFLAG_NORMAL, false); - R_PolygonVertex(new_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(prev_max_end, '0 0 0', sw_color, a); - R_PolygonVertex(new_max_end, '0 0 0', sw_color, a); - R_EndPolygon(); - } - - prev_min_end = new_min_end; - prev_max_end = new_max_end; - - // last division only - if((counter + 1) == divisions) - { - // draw from shot origin to min spread radius - R_BeginPolygon("", DRAWFLAG_NORMAL, false); - R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(first_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(this.sw_shotorg, '0 0 0', sw_color, a); - R_EndPolygon(); - - // draw from min spread radius to max spread radius - R_BeginPolygon("", DRAWFLAG_NORMAL, false); - R_PolygonVertex(first_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a); - R_PolygonVertex(prev_max_end, '0 0 0', sw_color, a); - R_PolygonVertex(first_max_end, '0 0 0', sw_color, a); - R_EndPolygon(); - } - } -} - -NET_HANDLE(TE_CSQC_SHOCKWAVEPARTICLE, bool isNew) -{ - Net_ReadShockwaveParticle(); - return true; -} - -void Net_ReadShockwaveParticle() -{ - entity shockwave = new(shockwave_cone); - shockwave.draw = Draw_Shockwave; - IL_PUSH(g_drawables, shockwave); - - shockwave.sw_shotorg = ReadVector(); - shockwave.sw_shotdir = ReadVector(); - - shockwave.sw_distance = ReadShort(); - shockwave.sw_spread_max = ReadByte(); - shockwave.sw_spread_min = ReadByte(); - - shockwave.sv_entnum = ReadByte(); - - shockwave.sw_time = time; -} - -METHOD(Shockwave, wr_impacteffect, void(entity thiswep, entity actor)) -{ - // handled by Net_ReadShockwaveParticle - //vector org2 = w_org + w_backoff * 2; - //pointparticles(EFFECT_BLASTER_IMPACT, org2, w_backoff * 1000, 1); -} - -#endif diff --git a/qcsrc/common/weapons/weapon/shockwave.qh b/qcsrc/common/weapons/weapon/shockwave.qh deleted file mode 100644 index fede776cb..000000000 --- a/qcsrc/common/weapons/weapon/shockwave.qh +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -CLASS(Shockwave, Weapon) -/* spawnfunc */ ATTRIB(Shockwave, m_canonical_spawnfunc, string, "weapon_shockwave"); -/* ammotype */ //ATTRIB(Shockwave, ammo_type, Resource, RES_NONE); -/* impulse */ ATTRIB(Shockwave, impulse, int, 2); -/* flags */ ATTRIB(Shockwave, spawnflags, int, WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_HIDDEN | WEP_TYPE_HITSCAN | WEP_FLAG_CANCLIMB | WEP_TYPE_MELEE_SEC); -/* rating */ ATTRIB(Shockwave, bot_pickupbasevalue, float, 3000); -/* color */ ATTRIB(Shockwave, wpcolor, vector, '0.5 0.25 0'); -/* modelname */ ATTRIB(Shockwave, mdl, string, "shotgun"); -#ifdef GAMEQC -/* model */ ATTRIB(Shockwave, m_model, Model, MDL_SHOCKWAVE_ITEM); -#endif -/* crosshair */ ATTRIB(Shockwave, w_crosshair, string, "gfx/crosshairshotgun"); -/* crosshair */ ATTRIB(Shockwave, w_crosshair_size, float, 0.7); -/* wepimg */ ATTRIB(Shockwave, model2, string, "weaponshockwave"); -/* refname */ ATTRIB(Shockwave, netname, string, "shockwave"); -/* wepname */ ATTRIB(Shockwave, m_name, string, _("Shockwave")); - -#define X(BEGIN, P, END, class, prefix) \ - BEGIN(class) \ - P(class, prefix, blast_animtime, float, NONE) \ - P(class, prefix, blast_damage, float, NONE) \ - P(class, prefix, blast_distance, float, NONE) \ - P(class, prefix, blast_edgedamage, float, NONE) \ - P(class, prefix, blast_force, float, NONE) \ - P(class, prefix, blast_force_forwardbias, float, NONE) \ - P(class, prefix, blast_force_zscale, float, NONE) \ - P(class, prefix, blast_jump_damage, float, NONE) \ - P(class, prefix, blast_jump_edgedamage, float, NONE) \ - P(class, prefix, blast_jump_force, float, NONE) \ - P(class, prefix, blast_jump_force_velocitybias, float, NONE) \ - P(class, prefix, blast_jump_force_zscale, float, NONE) \ - P(class, prefix, blast_jump_multiplier_accuracy, float, NONE) \ - P(class, prefix, blast_jump_multiplier_distance, float, NONE) \ - P(class, prefix, blast_jump_multiplier_min, float, NONE) \ - P(class, prefix, blast_jump_radius, float, NONE) \ - P(class, prefix, blast_multiplier_accuracy, float, NONE) \ - P(class, prefix, blast_multiplier_distance, float, NONE) \ - P(class, prefix, blast_multiplier_min, float, NONE) \ - P(class, prefix, blast_refire, float, NONE) \ - P(class, prefix, blast_splash_damage, float, NONE) \ - P(class, prefix, blast_splash_edgedamage, float, NONE) \ - P(class, prefix, blast_splash_force, float, NONE) \ - P(class, prefix, blast_splash_force_forwardbias, float, NONE) \ - P(class, prefix, blast_splash_multiplier_accuracy, float, NONE) \ - P(class, prefix, blast_splash_multiplier_distance, float, NONE) \ - P(class, prefix, blast_splash_multiplier_min, float, NONE) \ - P(class, prefix, blast_splash_radius, float, NONE) \ - P(class, prefix, blast_spread_max, float, NONE) \ - P(class, prefix, blast_spread_min, float, NONE) \ - P(class, prefix, melee_animtime, float, NONE) \ - P(class, prefix, melee_damage, float, NONE) \ - P(class, prefix, melee_delay, float, NONE) \ - P(class, prefix, melee_force, float, NONE) \ - P(class, prefix, melee_multihit, float, NONE) \ - P(class, prefix, melee_no_doubleslap, float, NONE) \ - P(class, prefix, melee_nonplayerdamage, float, NONE) \ - P(class, prefix, melee_range, float, NONE) \ - P(class, prefix, melee_refire, float, NONE) \ - P(class, prefix, melee_swing_side, float, NONE) \ - P(class, prefix, melee_swing_up, float, NONE) \ - P(class, prefix, melee_time, float, NONE) \ - P(class, prefix, melee_traces, float, NONE) \ - P(class, prefix, switchdelay_raise, float, NONE) \ - P(class, prefix, switchdelay_drop, float, NONE) \ - P(class, prefix, weaponreplace, string, NONE) \ - P(class, prefix, weaponstart, float, NONE) \ - P(class, prefix, weaponstartoverride, float, NONE) \ - P(class, prefix, weaponthrowable, float, NONE) \ - END() - W_PROPS(X, Shockwave, shockwave) -#undef X - -ENDCLASS(Shockwave) -REGISTER_WEAPON(SHOCKWAVE, NEW(Shockwave)); - -SPAWNFUNC_WEAPON(weapon_shockwave, WEP_SHOCKWAVE) - -#ifdef CSQC -void Net_ReadShockwaveParticle(); -.vector sw_shotorg; -.vector sw_shotdir; -.float sw_distance; -.float sw_spread_max; -.float sw_spread_min; -.float sw_time; -#endif diff --git a/qcsrc/lib/warpzone/TODO b/qcsrc/lib/warpzone/TODO index 927ab1298..f34e5868e 100644 --- a/qcsrc/lib/warpzone/TODO +++ b/qcsrc/lib/warpzone/TODO @@ -20,5 +20,4 @@ Weapon support: - fireball: YES (BFG effect cannot work through warpzones by design, so it's not available through warpzones) - hook: YES -- shockwave: NO (does not support warpzones currently) - tuba: NO (sound) diff --git a/randomitems-xonotic.cfg b/randomitems-xonotic.cfg index 592cfc837..1ce445214 100644 --- a/randomitems-xonotic.cfg +++ b/randomitems-xonotic.cfg @@ -24,7 +24,6 @@ set g_random_items_replace_weapon_crylink "random" "Classnames to replace crylin set g_random_items_replace_weapon_vortex "random" "Classnames to replace vortex with." set g_random_items_replace_weapon_hagar "random" "Classnames to replace hagar with." set g_random_items_replace_weapon_devastator "random" "Classnames to replace devastator with." -set g_random_items_replace_weapon_shockwave "random" "Classnames to replace shockwave with." set g_random_items_replace_weapon_arc "random" "Classnames to replace arc with." set g_random_items_replace_weapon_hook "random" "Classnames to replace hook with." set g_random_items_replace_weapon_tuba "random" "Classnames to replace tuba with." @@ -75,7 +74,6 @@ set g_random_items_weapon_crylink_probability 1 "Probability of random crylink s set g_random_items_weapon_vortex_probability 1 "Probability of random vortex spawning in the map." set g_random_items_weapon_hagar_probability 1 "Probability of random hagar spawning in the map." set g_random_items_weapon_devastator_probability 1 "Probability of random devastator spawning in the map." -set g_random_items_weapon_shockwave_probability 0 "Probability of random shockwave spawning in the map." set g_random_items_weapon_arc_probability 0 "Probability of random arc spawning in the map." set g_random_items_weapon_hook_probability 0 "Probability of random hook spawning in the map." set g_random_items_weapon_tuba_probability 0 "Probability of random tuba spawning in the map." @@ -136,7 +134,6 @@ set g_random_loot_weapon_crylink_probability 1 "Probability of random crylink sp set g_random_loot_weapon_vortex_probability 1 "Probability of random vortex spawning as loot." set g_random_loot_weapon_hagar_probability 1 "Probability of random hagar spawning as loot." set g_random_loot_weapon_devastator_probability 1 "Probability of random devastator spawning as loot." -set g_random_loot_weapon_shockwave_probability 0 "Probability of random shockwave spawning as loot." set g_random_loot_weapon_arc_probability 0 "Probability of random arc spawning as loot." set g_random_loot_weapon_hook_probability 0 "Probability of random hook spawning as loot." set g_random_loot_weapon_tuba_probability 0 "Probability of random tuba spawning as loot." diff --git a/scripts/luma.shader b/scripts/luma.shader index c5c58d581..e35ac943c 100644 --- a/scripts/luma.shader +++ b/scripts/luma.shader @@ -369,17 +369,6 @@ g_seeker_luma } } -g_shockwave_luma -{ - deformVertexes autosprite - cull none - nopicmip - { - map models/weapons/g_shockwave_luma - blendfunc blend - } -} - g_shotgun_luma { deformVertexes autosprite diff --git a/xonotic-client.cfg b/xonotic-client.cfg index d3009cd34..c8a002f28 100644 --- a/xonotic-client.cfg +++ b/xonotic-client.cfg @@ -671,14 +671,14 @@ gl_texturecompression_lightcubemaps 0 gl_texturecompression_q3bsplightmaps 0 gl_texturecompression_sky 1 -seta cl_weaponpriority "vaporizer okhmg okrpc oknex vortex fireball mortar okmachinegun machinegun hagar rifle arc electro devastator crylink minelayer okshotgun shotgun shockwave hlac tuba blaster porto seeker hook" "weapon priority list" +seta cl_weaponpriority "vaporizer okhmg okrpc oknex vortex fireball mortar okmachinegun machinegun hagar rifle arc electro devastator crylink minelayer okshotgun shotgun hlac tuba blaster porto seeker hook" "weapon priority list" seta cl_weaponpriority_useforcycling 0 "when set, weapon cycling by the mouse wheel makes use of the weapon priority list (the special value 2 uses the weapon ID list for cycling)" seta cl_weaponpriority0 "okrpc devastator mortar hagar seeker fireball" "use weapon_priority_0_prev for prev gun from this list, weapon_priority_0_best for best gun, weapon_priority_0_next for next gun. Default value: explosives" -seta cl_weaponpriority1 "vaporizer oknex vortex crylink hlac arc electro blaster shockwave" "use weapon_priority_1_prev for prev gun from this list, weapon_priority_1_best for best gun, weapon_priority_1_next for next gun. Default value: energy" +seta cl_weaponpriority1 "vaporizer oknex vortex crylink hlac arc electro blaster" "use weapon_priority_1_prev for prev gun from this list, weapon_priority_1_best for best gun, weapon_priority_1_next for next gun. Default value: energy" seta cl_weaponpriority2 "vaporizer oknex vortex rifle" "use weapon_priority_2_prev for prev gun from this list, weapon_priority_2_best for best gun, weapon_priority_2_next for next gun. Default value: hitscan exact" -seta cl_weaponpriority3 "vaporizer okhmg oknex vortex rifle okmachinegun machinegun okshotgun shotgun shockwave" "use weapon_priority_3_prev for prev gun from this list, weapon_priority_3_best for best gun, weapon_priority_3_next for next gun. Default value: hitscan all" -seta cl_weaponpriority4 "mortar minelayer hlac hagar crylink seeker okshotgun shotgun shockwave" "use weapon_priority_4_prev for prev gun from this list, weapon_priority_4_best for best gun, weapon_priority_4_next for next gun. Default value: spam weapons" -seta cl_weaponpriority5 "blaster shockwave hook porto" "use weapon_priority_5_prev for prev gun from this list, weapon_priority_5_best for best gun, weapon_priority_5_next for next gun. Default value: weapons for moving" +seta cl_weaponpriority3 "vaporizer okhmg oknex vortex rifle okmachinegun machinegun okshotgun shotgun" "use weapon_priority_3_prev for prev gun from this list, weapon_priority_3_best for best gun, weapon_priority_3_next for next gun. Default value: hitscan all" +seta cl_weaponpriority4 "mortar minelayer hlac hagar crylink seeker okshotgun shotgun" "use weapon_priority_4_prev for prev gun from this list, weapon_priority_4_best for best gun, weapon_priority_4_next for next gun. Default value: spam weapons" +seta cl_weaponpriority5 "blaster hook porto" "use weapon_priority_5_prev for prev gun from this list, weapon_priority_5_best for best gun, weapon_priority_5_next for next gun. Default value: weapons for moving" seta cl_weaponpriority6 "" "use weapon_priority_6_prev for prev gun from this list, weapon_priority_6_best for best gun, weapon_priority_6_next for next gun" seta cl_weaponpriority7 "" "use weapon_priority_7_prev for prev gun from this list, weapon_priority_7_best for best gun, weapon_priority_7_next for next gun" seta cl_weaponpriority8 "" "use weapon_priority_8_prev for prev gun from this list, weapon_priority_8_best for best gun, weapon_priority_8_next for next gun" diff --git a/xonotic-server.cfg b/xonotic-server.cfg index 67f9be443..1ca06917c 100644 --- a/xonotic-server.cfg +++ b/xonotic-server.cfg @@ -148,9 +148,9 @@ set bot_ai_keyboard_threshold 0.57 set bot_ai_aimskill_offset 1.8 "Amount of error induced to the bots aim" set bot_ai_aimskill_think 1 "Aiming velocity. Use values below 1 for slower aiming" set bot_ai_custom_weapon_priority_distances "300 850" "Define close and far distances in any order. Based on the distance to the enemy bots will choose different weapons" -set bot_ai_custom_weapon_priority_far "vaporizer oknex vortex rifle electro devastator mortar hagar hlac crylink blaster okmachinegun machinegun fireball seeker okshotgun shotgun shockwave tuba minelayer" "Desired weapons for far distances ordered by priority" -set bot_ai_custom_weapon_priority_mid "vaporizer devastator oknex vortex fireball seeker mortar electro okmachinegun machinegun arc crylink hlac hagar okshotgun shotgun shockwave blaster rifle tuba minelayer" "Desired weapons for middle distances ordered by priority" -set bot_ai_custom_weapon_priority_close "vaporizer oknex vortex okshotgun shotgun shockwave okmachinegun machinegun arc hlac tuba seeker hagar crylink mortar electro devastator blaster fireball rifle minelayer" "Desired weapons for close distances ordered by priority" +set bot_ai_custom_weapon_priority_far "vaporizer oknex vortex rifle electro devastator mortar hagar hlac crylink blaster okmachinegun machinegun fireball seeker okshotgun shotgun tuba minelayer" "Desired weapons for far distances ordered by priority" +set bot_ai_custom_weapon_priority_mid "vaporizer devastator oknex vortex fireball seeker mortar electro okmachinegun machinegun arc crylink hlac hagar okshotgun shotgun blaster rifle tuba minelayer" "Desired weapons for middle distances ordered by priority" +set bot_ai_custom_weapon_priority_close "vaporizer oknex vortex okshotgun shotgun okmachinegun machinegun arc hlac tuba seeker hagar crylink mortar electro devastator blaster fireball rifle minelayer" "Desired weapons for close distances ordered by priority" set bot_ai_weapon_combo 1 "Enable bots to do weapon combos" set bot_ai_weapon_combo_threshold 0.4 "Try to make a combo N seconds after the last attack" set bot_ai_friends_aware_pickup_radius "500" "Bots will not pickup items if a team mate is this distance near the item"