From: Rudolf Polzer Date: Thu, 12 Dec 2013 12:16:14 +0000 (+0100) Subject: Merge branch 'divVerent/ballistic2' into samual/weapons X-Git-Tag: xonotic-v0.8.0~152^2~223 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=fbb52b893f7be6bf4073f1853761c4f2fc11a343 Merge branch 'divVerent/ballistic2' into samual/weapons Conflicts: bal-wep-xonotic.cfg qcsrc/common/weapons/w_machinegun.qc qcsrc/common/weapons/w_rifle.qc qcsrc/common/weapons/w_shotgun.qc qcsrc/server/autocvars.qh qcsrc/server/tturrets/units/unit_machinegun.qc qcsrc/server/tturrets/units/unit_walker.qc qcsrc/server/weapons/tracing.qc --- fbb52b893f7be6bf4073f1853761c4f2fc11a343 diff --cc bal-wep-xonotic.cfg index e395278bd,000000000..277809b16 mode 100644,000000..100644 --- a/bal-wep-xonotic.cfg +++ b/bal-wep-xonotic.cfg @@@ -1,717 -1,0 +1,711 @@@ +// {{{ #1: Blaster +set g_balance_blaster_primary_animtime 0.2 +set g_balance_blaster_primary_damage 25 +set g_balance_blaster_primary_delay 0 +set g_balance_blaster_primary_edgedamage 12.5 +set g_balance_blaster_primary_force 300 +set g_balance_blaster_primary_lifetime 5 +set g_balance_blaster_primary_radius 70 +set g_balance_blaster_primary_refire 0.7 +set g_balance_blaster_primary_shotangle 0 +set g_balance_blaster_primary_speed 6000 +set g_balance_blaster_primary_spread 0 +set g_balance_blaster_secondary 0 +set g_balance_blaster_secondary_animtime 0.2 +set g_balance_blaster_secondary_damage 25 +set g_balance_blaster_secondary_delay 0 +set g_balance_blaster_secondary_edgedamage 12.5 +set g_balance_blaster_secondary_force 300 +set g_balance_blaster_secondary_lifetime 5 +set g_balance_blaster_secondary_radius 70 +set g_balance_blaster_secondary_refire 0.7 +set g_balance_blaster_secondary_shotangle 0 +set g_balance_blaster_secondary_speed 6000 +set g_balance_blaster_secondary_spread 0 +set g_balance_blaster_switchdelay_drop 0.15 +set g_balance_blaster_switchdelay_raise 0.15 +set g_balance_blaster_weaponreplace "" +set g_balance_blaster_weaponstart 1 +set g_balance_blaster_weaponstartoverride -1 +// }}} +// {{{ #2: Shockwave +set g_balance_shockwave_blast_animtime 0.3 +set g_balance_shockwave_blast_damage 20 +set g_balance_shockwave_blast_distance 2000 +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 +// }}} +// {{{ #3: Machine Gun - set g_balance_uzi_bulletconstant 115 +set g_balance_uzi_burst 3 +set g_balance_uzi_burst_ammo 3 +set g_balance_uzi_burst_animtime 0.3 +set g_balance_uzi_burst_refire 0.06 +set g_balance_uzi_burst_refire2 0.45 +set g_balance_uzi_burst_speed 0 +set g_balance_uzi_first 1 +set g_balance_uzi_first_ammo 1 +set g_balance_uzi_first_damage 14 +set g_balance_uzi_first_force 5 +set g_balance_uzi_first_refire 0.125 +set g_balance_uzi_first_spread 0.03 +set g_balance_uzi_mode 1 +set g_balance_uzi_reload_ammo 60 +set g_balance_uzi_reload_time 2 - set g_balance_uzi_speed 18000 ++set g_balance_uzi_solidpenetration 13.1 +set g_balance_uzi_spread_add 0.012 +set g_balance_uzi_spread_max 0.05 +set g_balance_uzi_spread_min 0.02 +set g_balance_uzi_sustained_ammo 1 +set g_balance_uzi_sustained_damage 10 +set g_balance_uzi_sustained_force 5 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_spread 0.03 +set g_balance_uzi_switchdelay_drop 0.2 +set g_balance_uzi_switchdelay_raise 0.2 +set g_balance_uzi_weaponreplace "arc" +set g_balance_uzi_weaponstart 0 +set g_balance_uzi_weaponstartoverride -1 +// }}} +// {{{ #4: Mortar +set g_balance_mortar_bouncefactor 0.5 +set g_balance_mortar_bouncestop 0.075 +set g_balance_mortar_primary_ammo 2 +set g_balance_mortar_primary_animtime 0.3 +set g_balance_mortar_primary_damage 50 +set g_balance_mortar_primary_damageforcescale 0 +set g_balance_mortar_primary_edgedamage 25 +set g_balance_mortar_primary_force 250 +set g_balance_mortar_primary_health 15 +set g_balance_mortar_primary_lifetime 5 +set g_balance_mortar_primary_lifetime_stick 0 +set g_balance_mortar_primary_radius 120 +set g_balance_mortar_primary_refire 0.8 +set g_balance_mortar_primary_remote_minbouncecnt 0 +set g_balance_mortar_primary_speed 1900 +set g_balance_mortar_primary_speed_up 225 +set g_balance_mortar_primary_speed_z 0 +set g_balance_mortar_primary_spread 0 +set g_balance_mortar_primary_type 0 +set g_balance_mortar_reload_ammo 0 +set g_balance_mortar_reload_time 2 +set g_balance_mortar_secondary_ammo 2 +set g_balance_mortar_secondary_animtime 0.3 +set g_balance_mortar_secondary_damage 60 +set g_balance_mortar_secondary_damageforcescale 4 +set g_balance_mortar_secondary_edgedamage 30 +set g_balance_mortar_secondary_force 250 +set g_balance_mortar_secondary_health 30 +set g_balance_mortar_secondary_lifetime 5 +set g_balance_mortar_secondary_lifetime_bounce 0.5 +set g_balance_mortar_secondary_lifetime_stick 0 +set g_balance_mortar_secondary_radius 120 +set g_balance_mortar_secondary_refire 0.7 +set g_balance_mortar_secondary_remote_detonateprimary 0 +set g_balance_mortar_secondary_speed 1400 +set g_balance_mortar_secondary_speed_up 150 +set g_balance_mortar_secondary_speed_z 0 +set g_balance_mortar_secondary_spread 0 +set g_balance_mortar_secondary_type 1 +set g_balance_mortar_switchdelay_drop 0.2 +set g_balance_mortar_switchdelay_raise 0.2 +set g_balance_mortar_weaponreplace "" +set g_balance_mortar_weaponstart 0 +set g_balance_mortar_weaponstartoverride -1 +// }}} +// {{{ #5: Mine Layer (MUTATOR WEAPON) +set g_balance_minelayer_ammo 4 +set g_balance_minelayer_animtime 0.4 +set g_balance_minelayer_damage 40 +set g_balance_minelayer_damageforcescale 0 +set g_balance_minelayer_detonatedelay -1 +set g_balance_minelayer_edgedamage 20 +set g_balance_minelayer_force 250 +set g_balance_minelayer_health 15 +set g_balance_minelayer_lifetime 10 +set g_balance_minelayer_lifetime_countdown 0.5 +set g_balance_minelayer_limit 3 +set g_balance_minelayer_protection 0 +set g_balance_minelayer_proximityradius 150 +set g_balance_minelayer_radius 175 +set g_balance_minelayer_refire 1.5 +set g_balance_minelayer_reload_ammo 0 +set g_balance_minelayer_reload_time 2 +set g_balance_minelayer_remote_damage 45 +set g_balance_minelayer_remote_edgedamage 40 +set g_balance_minelayer_remote_force 300 +set g_balance_minelayer_remote_radius 200 +set g_balance_minelayer_speed 1000 +set g_balance_minelayer_switchdelay_drop 0.2 +set g_balance_minelayer_switchdelay_raise 0.2 +set g_balance_minelayer_time 0.5 +set g_balance_minelayer_weaponreplace "" +set g_balance_minelayer_weaponstart 0 +set g_balance_minelayer_weaponstartoverride -1 +// }}} +// {{{ #6: Electro +set g_balance_electro_combo_comboradius 300 +set g_balance_electro_combo_comboradius_thruwall 200 +set g_balance_electro_combo_damage 50 +set g_balance_electro_combo_edgedamage 25 +set g_balance_electro_combo_force 120 +set g_balance_electro_combo_radius 150 +set g_balance_electro_combo_safeammocheck 1 +set g_balance_electro_combo_speed 2000 +set g_balance_electro_primary_ammo 4 +set g_balance_electro_primary_animtime 0.3 +set g_balance_electro_primary_comboradius 300 +set g_balance_electro_primary_damage 40 +set g_balance_electro_primary_edgedamage 20 +set g_balance_electro_primary_force 200 +set g_balance_electro_primary_lifetime 5 +set g_balance_electro_primary_midaircombo_explode 1 +set g_balance_electro_primary_midaircombo_interval 0.1 +set g_balance_electro_primary_midaircombo_radius 100 +set g_balance_electro_primary_radius 100 +set g_balance_electro_primary_refire 0.6 +set g_balance_electro_primary_speed 2500 +set g_balance_electro_primary_spread 0 +set g_balance_electro_reload_ammo 0 +set g_balance_electro_reload_time 2 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_secondary_animtime 0.2 +set g_balance_electro_secondary_bouncefactor 0.3 +set g_balance_electro_secondary_bouncestop 0.05 +set g_balance_electro_secondary_count 3 +set g_balance_electro_secondary_damage 40 +set g_balance_electro_secondary_damagedbycontents 1 +set g_balance_electro_secondary_damageforcescale 4 +set g_balance_electro_secondary_edgedamage 20 +set g_balance_electro_secondary_force 50 +set g_balance_electro_secondary_health 5 +set g_balance_electro_secondary_lifetime 4 +set g_balance_electro_secondary_radius 150 +set g_balance_electro_secondary_refire 0.2 +set g_balance_electro_secondary_refire2 1.6 +set g_balance_electro_secondary_speed 1000 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_speed_z 0 +set g_balance_electro_secondary_spread 0.04 +set g_balance_electro_secondary_touchexplode 0 +set g_balance_electro_switchdelay_drop 0.2 +set g_balance_electro_switchdelay_raise 0.2 +set g_balance_electro_weaponreplace "" +set g_balance_electro_weaponstart 0 +set g_balance_electro_weaponstartoverride -1 +// }}} +// {{{ #7: Arc +set g_balance_arc_primary_ammo 0 +set g_balance_arc_primary_animtime 0 +set g_balance_arc_primary_damage 0 +set g_balance_arc_primary_falloff_halflifedist 0 +set g_balance_arc_primary_falloff_maxdist 0 +set g_balance_arc_primary_falloff_mindist 0 +set g_balance_arc_primary_force 0 +set g_balance_arc_primary_range 0 +set g_balance_arc_primary_refire 0 +set g_balance_arc_secondary_ammo 0 +set g_balance_arc_switchdelay_drop 0 +set g_balance_arc_switchdelay_raise 0 +set g_balance_arc_weaponreplace "" +set g_balance_arc_weaponstart 0 +set g_balance_arc_weaponstartoverride -1 +// }}} +// {{{ #8: Crylink +set g_balance_crylink_primary_ammo 3 +set g_balance_crylink_primary_animtime 0.3 +set g_balance_crylink_primary_bouncedamagefactor 0.5 +set g_balance_crylink_primary_bounces 1 +set g_balance_crylink_primary_damage 12 +set g_balance_crylink_primary_edgedamage 6 +set g_balance_crylink_primary_force -50 +set g_balance_crylink_primary_joindelay 0.1 +set g_balance_crylink_primary_joinexplode 1 +set g_balance_crylink_primary_joinexplode_damage 0 +set g_balance_crylink_primary_joinexplode_edgedamage 0 +set g_balance_crylink_primary_joinexplode_force 0 +set g_balance_crylink_primary_joinexplode_radius 0 +set g_balance_crylink_primary_joinspread 0.2 +set g_balance_crylink_primary_linkexplode 1 +set g_balance_crylink_primary_middle_fadetime 5 +set g_balance_crylink_primary_middle_lifetime 5 +set g_balance_crylink_primary_other_fadetime 5 +set g_balance_crylink_primary_other_lifetime 5 +set g_balance_crylink_primary_radius 80 +set g_balance_crylink_primary_refire 0.7 +set g_balance_crylink_primary_shots 6 +set g_balance_crylink_primary_speed 2000 +set g_balance_crylink_primary_spread 0.08 +set g_balance_crylink_reload_ammo 0 +set g_balance_crylink_reload_time 2 +set g_balance_crylink_secondary 1 +set g_balance_crylink_secondary_ammo 2 +set g_balance_crylink_secondary_animtime 0.2 +set g_balance_crylink_secondary_bouncedamagefactor 0.5 +set g_balance_crylink_secondary_bounces 0 +set g_balance_crylink_secondary_damage 10 +set g_balance_crylink_secondary_edgedamage 5 +set g_balance_crylink_secondary_force -250 +set g_balance_crylink_secondary_joindelay 0 +set g_balance_crylink_secondary_joinexplode 0 +set g_balance_crylink_secondary_joinexplode_damage 0 +set g_balance_crylink_secondary_joinexplode_edgedamage 0 +set g_balance_crylink_secondary_joinexplode_force 0 +set g_balance_crylink_secondary_joinexplode_radius 0 +set g_balance_crylink_secondary_joinspread 0 +set g_balance_crylink_secondary_linkexplode 1 +set g_balance_crylink_secondary_middle_fadetime 5 +set g_balance_crylink_secondary_middle_lifetime 5 +set g_balance_crylink_secondary_other_fadetime 5 +set g_balance_crylink_secondary_other_lifetime 5 +set g_balance_crylink_secondary_radius 100 +set g_balance_crylink_secondary_refire 0.7 +set g_balance_crylink_secondary_shots 5 +set g_balance_crylink_secondary_speed 3000 +set g_balance_crylink_secondary_spread 0.01 +set g_balance_crylink_secondary_spreadtype 1 +set g_balance_crylink_switchdelay_drop 0.2 +set g_balance_crylink_switchdelay_raise 0.2 +set g_balance_crylink_weaponreplace "" +set g_balance_crylink_weaponstart 0 +set g_balance_crylink_weaponstartoverride -1 +// }}} +// {{{ #9: Vortex +set g_balance_nex_charge 1 +set g_balance_nex_charge_animlimit 0.5 +set g_balance_nex_charge_limit 1 +set g_balance_nex_charge_maxspeed 800 +set g_balance_nex_charge_mindmg 40 +set g_balance_nex_charge_minspeed 400 +set g_balance_nex_charge_rate 0.4 +set g_balance_nex_charge_rot_pause 0 +set g_balance_nex_charge_rot_rate 0 +set g_balance_nex_charge_shot_multiplier 0 +set g_balance_nex_charge_start 0.5 +set g_balance_nex_charge_velocity_rate 0 +set g_balance_nex_primary_ammo 6 +set g_balance_nex_primary_animtime 0.6 +set g_balance_nex_primary_damage 80 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 +set g_balance_nex_primary_damagefalloff_halflife 0 +set g_balance_nex_primary_damagefalloff_maxdist 0 +set g_balance_nex_primary_damagefalloff_mindist 0 +set g_balance_nex_primary_force 400 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_reload_ammo 0 +set g_balance_nex_reload_time 2 +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_ammo 2 +set g_balance_nex_secondary_animtime 0 +set g_balance_nex_secondary_chargepool 0 +set g_balance_nex_secondary_chargepool_pause_regen 1 +set g_balance_nex_secondary_chargepool_regen 0.15 +set g_balance_nex_secondary_damage 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_force 0 +set g_balance_nex_secondary_refire 0 +set g_balance_nex_switchdelay_drop 0.3 +set g_balance_nex_switchdelay_raise 0.25 +set g_balance_nex_weaponreplace "" +set g_balance_nex_weaponstart 0 +set g_balance_nex_weaponstartoverride -1 +// }}} +// {{{ #10: Hagar +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_primary_damage 25 +set g_balance_hagar_primary_damageforcescale 0 +set g_balance_hagar_primary_edgedamage 12.5 +set g_balance_hagar_primary_force 100 +set g_balance_hagar_primary_health 15 +set g_balance_hagar_primary_lifetime 5 +set g_balance_hagar_primary_radius 65 +set g_balance_hagar_primary_refire 0.16667 +set g_balance_hagar_primary_speed 2500 +set g_balance_hagar_primary_spread 0.03 +set g_balance_hagar_reload_ammo 0 +set g_balance_hagar_reload_time 2 +set g_balance_hagar_secondary 1 +set g_balance_hagar_secondary_ammo 1 +set g_balance_hagar_secondary_damage 40 +set g_balance_hagar_secondary_damageforcescale 0 +set g_balance_hagar_secondary_edgedamage 20 +set g_balance_hagar_secondary_force 75 +set g_balance_hagar_secondary_health 15 +set g_balance_hagar_secondary_lifetime_min 10 +set g_balance_hagar_secondary_lifetime_rand 0 +set g_balance_hagar_secondary_load 1 +set g_balance_hagar_secondary_load_abort 0 +set g_balance_hagar_secondary_load_animtime 0.2 +set g_balance_hagar_secondary_load_hold 4 +set g_balance_hagar_secondary_load_linkexplode 0 +set g_balance_hagar_secondary_load_max 4 +set g_balance_hagar_secondary_load_releasedeath 0 +set g_balance_hagar_secondary_load_speed 0.5 +set g_balance_hagar_secondary_load_spread 0.075 +set g_balance_hagar_secondary_load_spread_bias 0.5 +set g_balance_hagar_secondary_radius 80 +set g_balance_hagar_secondary_refire 0.5 +set g_balance_hagar_secondary_speed 2500 +set g_balance_hagar_secondary_spread 0.05 +set g_balance_hagar_switchdelay_drop 0.2 +set g_balance_hagar_switchdelay_raise 0.2 +set g_balance_hagar_weaponreplace "" +set g_balance_hagar_weaponstart 0 +set g_balance_hagar_weaponstartoverride -1 +// }}} +// {{{ #11: Devastator +set g_balance_devastator_ammo 4 +set g_balance_devastator_animtime 0.4 +set g_balance_devastator_damage 70 +set g_balance_devastator_damageforcescale 1 +set g_balance_devastator_detonatedelay 0.02 +set g_balance_devastator_edgedamage 35 +set g_balance_devastator_force 450 +set g_balance_devastator_guidedelay 0.2 +set g_balance_devastator_guidegoal 512 +set g_balance_devastator_guiderate 70 +set g_balance_devastator_guideratedelay 0.01 +set g_balance_devastator_guidestop 0 +set g_balance_devastator_health 30 +set g_balance_devastator_lifetime 10 +set g_balance_devastator_radius 110 +set g_balance_devastator_refire 1.2 +set g_balance_devastator_reload_ammo 0 +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_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 "" +set g_balance_devastator_weaponstart 0 +set g_balance_devastator_weaponstartoverride -1 +// }}} +// {{{ #12: Port-O-Launch +set g_balance_porto_primary_animtime 0.3 +set g_balance_porto_primary_lifetime 5 +set g_balance_porto_primary_refire 1.5 +set g_balance_porto_primary_speed 1000 +set g_balance_porto_secondary 1 +set g_balance_porto_secondary_animtime 0.3 +set g_balance_porto_secondary_lifetime 5 +set g_balance_porto_secondary_refire 1.5 +set g_balance_porto_secondary_speed 1000 +set g_balance_porto_switchdelay_drop 0.2 +set g_balance_porto_switchdelay_raise 0.2 +set g_balance_porto_weaponreplace "" +set g_balance_porto_weaponstart 0 +set g_balance_porto_weaponstartoverride -1 +// }}} +// {{{ #13: Vaporizer +set g_balance_minstanex_primary_ammo 10 +set g_balance_minstanex_primary_animtime 0.3 +set g_balance_minstanex_primary_refire 1 +set g_balance_minstanex_reload_ammo 0 +set g_balance_minstanex_reload_time 0 +set g_balance_minstanex_secondary_ammo 0 +set g_balance_minstanex_secondary_animtime 0.3 +set g_balance_minstanex_secondary_damage 0 +set g_balance_minstanex_secondary_delay 0 +set g_balance_minstanex_secondary_edgedamage 0 +set g_balance_minstanex_secondary_force 300 +set g_balance_minstanex_secondary_lifetime 5 +set g_balance_minstanex_secondary_radius 70 +set g_balance_minstanex_secondary_refire 0.7 +set g_balance_minstanex_secondary_shotangle 0 +set g_balance_minstanex_secondary_speed 6000 +set g_balance_minstanex_secondary_spread 0 +set g_balance_minstanex_switchdelay_drop 0.2 +set g_balance_minstanex_switchdelay_raise 0.2 +set g_balance_minstanex_weaponreplace "" +set g_balance_minstanex_weaponstart 0 +set g_balance_minstanex_weaponstartoverride -1 +// }}} +// {{{ #14: Grappling Hook +set g_balance_hook_primary_ammo 5 +set g_balance_hook_primary_animtime 0.3 +set g_balance_hook_primary_hooked_ammo 5 +set g_balance_hook_primary_hooked_time_free 2 +set g_balance_hook_primary_hooked_time_max 0 +set g_balance_hook_primary_refire 0 +set g_balance_hook_secondary_animtime 0.3 +set g_balance_hook_secondary_damage 25 +set g_balance_hook_secondary_damageforcescale 0 +set g_balance_hook_secondary_duration 1.5 +set g_balance_hook_secondary_edgedamage 5 +set g_balance_hook_secondary_force -2000 +set g_balance_hook_secondary_gravity 5 +set g_balance_hook_secondary_health 15 +set g_balance_hook_secondary_lifetime 5 +set g_balance_hook_secondary_power 3 +set g_balance_hook_secondary_radius 500 +set g_balance_hook_secondary_refire 3 +set g_balance_hook_secondary_speed 0 +set g_balance_hook_switchdelay_drop 0.2 +set g_balance_hook_switchdelay_raise 0.2 +set g_balance_hook_weaponreplace "" +set g_balance_hook_weaponstart 0 +set g_balance_hook_weaponstartoverride -1 +// }}} +// {{{ #15: Heavy Laser Assault Cannon (MUTATOR WEAPON) +set g_balance_hlac_primary_ammo 1 +set g_balance_hlac_primary_animtime 0.4 +set g_balance_hlac_primary_damage 18 +set g_balance_hlac_primary_edgedamage 9 +set g_balance_hlac_primary_force 90 +set g_balance_hlac_primary_lifetime 5 +set g_balance_hlac_primary_radius 70 +set g_balance_hlac_primary_refire 0.15 +set g_balance_hlac_primary_speed 9000 +set g_balance_hlac_primary_spread_add 0.0045 +set g_balance_hlac_primary_spread_crouchmod 0.25 +set g_balance_hlac_primary_spread_max 0.25 +set g_balance_hlac_primary_spread_min 0.01 +set g_balance_hlac_reload_ammo 0 +set g_balance_hlac_reload_time 2 +set g_balance_hlac_secondary 1 +set g_balance_hlac_secondary_ammo 10 +set g_balance_hlac_secondary_animtime 0.3 +set g_balance_hlac_secondary_damage 15 +set g_balance_hlac_secondary_edgedamage 7.5 +set g_balance_hlac_secondary_force 90 +set g_balance_hlac_secondary_lifetime 5 +set g_balance_hlac_secondary_radius 70 +set g_balance_hlac_secondary_refire 1 +set g_balance_hlac_secondary_shots 6 +set g_balance_hlac_secondary_speed 9000 +set g_balance_hlac_secondary_spread 0.15 +set g_balance_hlac_secondary_spread_crouchmod 0.5 +set g_balance_hlac_switchdelay_drop 0.2 +set g_balance_hlac_switchdelay_raise 0.2 +set g_balance_hlac_weaponreplace "" +set g_balance_hlac_weaponstart 0 +set g_balance_hlac_weaponstartoverride -1 +// }}} +// {{{ #16: @!#%'n Tuba +set g_balance_tuba_animtime 0.05 +set g_balance_tuba_attenuation 0.5 +set g_balance_tuba_damage 5 +set g_balance_tuba_edgedamage 0 +set g_balance_tuba_force 40 +set g_balance_tuba_radius 200 +set g_balance_tuba_refire 0.05 +set g_balance_tuba_switchdelay_drop 0.2 +set g_balance_tuba_switchdelay_raise 0.2 +set g_balance_tuba_weaponreplace "" +set g_balance_tuba_weaponstart 0 +set g_balance_tuba_weaponstartoverride -1 +// }}} +// {{{ #17: Rifle (MUTATOR WEAPON) +set g_balance_rifle_bursttime 0 +set g_balance_rifle_primary_ammo 10 +set g_balance_rifle_primary_animtime 0.4 - set g_balance_rifle_primary_bulletconstant 110 +set g_balance_rifle_primary_bullethail 0 +set g_balance_rifle_primary_burstcost 0 +set g_balance_rifle_primary_damage 80 +set g_balance_rifle_primary_force 100 - set g_balance_rifle_primary_lifetime 5 +set g_balance_rifle_primary_refire 1.2 +set g_balance_rifle_primary_shots 1 - set g_balance_rifle_primary_speed 40000 ++set g_balance_rifle_primary_solidpenetration 62.2 +set g_balance_rifle_primary_spread 0 +set g_balance_rifle_primary_tracer 1 +set g_balance_rifle_reload_ammo 80 +set g_balance_rifle_reload_time 2 +set g_balance_rifle_secondary 1 +set g_balance_rifle_secondary_ammo 10 +set g_balance_rifle_secondary_animtime 0.3 - set g_balance_rifle_secondary_bulletconstant 110 +set g_balance_rifle_secondary_bullethail 0 +set g_balance_rifle_secondary_burstcost 0 +set g_balance_rifle_secondary_damage 20 +set g_balance_rifle_secondary_force 50 - set g_balance_rifle_secondary_lifetime 5 +set g_balance_rifle_secondary_refire 0.9 +set g_balance_rifle_secondary_reload 0 +set g_balance_rifle_secondary_shots 4 - set g_balance_rifle_secondary_speed 20000 ++set g_balance_rifle_secondary_solidpenetration 15.5 +set g_balance_rifle_secondary_spread 0.04 +set g_balance_rifle_secondary_tracer 0 +set g_balance_rifle_switchdelay_drop 0.2 +set g_balance_rifle_switchdelay_raise 0.2 +set g_balance_rifle_weaponreplace "" +set g_balance_rifle_weaponstart 0 +set g_balance_rifle_weaponstartoverride -1 +// }}} +// {{{ #18: Fireball +set g_balance_fireball_primary_animtime 0.2 +set g_balance_fireball_primary_bfgdamage 100 +set g_balance_fireball_primary_bfgforce 0 +set g_balance_fireball_primary_bfgradius 1000 +set g_balance_fireball_primary_damage 200 +set g_balance_fireball_primary_damageforcescale 0 +set g_balance_fireball_primary_edgedamage 50 +set g_balance_fireball_primary_force 600 +set g_balance_fireball_primary_health 0 +set g_balance_fireball_primary_laserburntime 0.5 +set g_balance_fireball_primary_laserdamage 80 +set g_balance_fireball_primary_laseredgedamage 20 +set g_balance_fireball_primary_laserradius 256 +set g_balance_fireball_primary_lifetime 15 +set g_balance_fireball_primary_radius 200 +set g_balance_fireball_primary_refire 2 +set g_balance_fireball_primary_refire2 0 +set g_balance_fireball_primary_speed 1200 +set g_balance_fireball_primary_spread 0 +set g_balance_fireball_secondary_animtime 0.3 +set g_balance_fireball_secondary_damage 40 +set g_balance_fireball_secondary_damageforcescale 4 +set g_balance_fireball_secondary_damagetime 5 +set g_balance_fireball_secondary_laserburntime 0.5 +set g_balance_fireball_secondary_laserdamage 50 +set g_balance_fireball_secondary_laseredgedamage 20 +set g_balance_fireball_secondary_laserradius 110 +set g_balance_fireball_secondary_lifetime 7 +set g_balance_fireball_secondary_refire 1.5 +set g_balance_fireball_secondary_speed 900 +set g_balance_fireball_secondary_speed_up 100 +set g_balance_fireball_secondary_speed_z 0 +set g_balance_fireball_secondary_spread 0 +set g_balance_fireball_switchdelay_drop 0.2 +set g_balance_fireball_switchdelay_raise 0.2 +set g_balance_fireball_weaponreplace "" +set g_balance_fireball_weaponstart 0 +set g_balance_fireball_weaponstartoverride -1 +// }}} +// {{{ #19: T.A.G. Seeker (MUTATOR WEAPON) +set g_balance_seeker_flac_ammo 1 +set g_balance_seeker_flac_animtime 0.1 +set g_balance_seeker_flac_damage 15 +set g_balance_seeker_flac_edgedamage 10 +set g_balance_seeker_flac_force 50 +set g_balance_seeker_flac_lifetime 0.1 +set g_balance_seeker_flac_lifetime_rand 0.05 +set g_balance_seeker_flac_radius 100 +set g_balance_seeker_flac_refire 0.1 +set g_balance_seeker_flac_speed 3000 +set g_balance_seeker_flac_speed_up 1000 +set g_balance_seeker_flac_speed_z 0 +set g_balance_seeker_flac_spread 0.4 +set g_balance_seeker_missile_accel 1400 +set g_balance_seeker_missile_ammo 2 +set g_balance_seeker_missile_animtime 0.2 +set g_balance_seeker_missile_count 3 +set g_balance_seeker_missile_damage 30 +set g_balance_seeker_missile_damageforcescale 4 +set g_balance_seeker_missile_decel 1400 +set g_balance_seeker_missile_delay 0.25 +set g_balance_seeker_missile_edgedamage 10 +set g_balance_seeker_missile_force 150 +set g_balance_seeker_missile_health 5 +set g_balance_seeker_missile_lifetime 15 +set g_balance_seeker_missile_proxy 0 +set g_balance_seeker_missile_proxy_delay 0.2 +set g_balance_seeker_missile_proxy_maxrange 45 +set g_balance_seeker_missile_radius 80 +set g_balance_seeker_missile_refire 0.5 +set g_balance_seeker_missile_smart 1 +set g_balance_seeker_missile_smart_mindist 800 +set g_balance_seeker_missile_smart_trace_max 2500 +set g_balance_seeker_missile_smart_trace_min 1000 +set g_balance_seeker_missile_speed 700 +set g_balance_seeker_missile_speed_max 1300 +set g_balance_seeker_missile_speed_up 300 +set g_balance_seeker_missile_speed_z 0 +set g_balance_seeker_missile_spread 0 +set g_balance_seeker_missile_turnrate 0.65 +set g_balance_seeker_reload_ammo 0 +set g_balance_seeker_reload_time 2 +set g_balance_seeker_switchdelay_drop 0.2 +set g_balance_seeker_switchdelay_raise 0.2 +set g_balance_seeker_tag_ammo 1 +set g_balance_seeker_tag_animtime 0.2 +set g_balance_seeker_tag_damageforcescale 4 +set g_balance_seeker_tag_health 5 +set g_balance_seeker_tag_lifetime 15 +set g_balance_seeker_tag_refire 0.75 +set g_balance_seeker_tag_speed 5000 +set g_balance_seeker_tag_spread 0 +set g_balance_seeker_tag_tracker_lifetime 10 +set g_balance_seeker_type 0 +set g_balance_seeker_weaponreplace "" +set g_balance_seeker_weaponstart 0 +set g_balance_seeker_weaponstartoverride -1 +// }}} +// {{{ #20: Shotgun (MUTATOR WEAPON) +set g_balance_shotgun_primary_ammo 1 +set g_balance_shotgun_primary_animtime 0.2 - set g_balance_shotgun_primary_bulletconstant 75 +set g_balance_shotgun_primary_bullets 14 +set g_balance_shotgun_primary_damage 4 +set g_balance_shotgun_primary_force 15 +set g_balance_shotgun_primary_refire 0.75 - set g_balance_shotgun_primary_speed 8000 ++set g_balance_shotgun_primary_solidpenetration 3.8 +set g_balance_shotgun_primary_spread 0.12 +set g_balance_shotgun_reload_ammo 0 +set g_balance_shotgun_reload_time 2 +set g_balance_shotgun_secondary 1 +set g_balance_shotgun_secondary_animtime 1 +set g_balance_shotgun_secondary_damage 80 +set g_balance_shotgun_secondary_force 200 +set g_balance_shotgun_secondary_melee_delay 0.25 +set g_balance_shotgun_secondary_melee_multihit 1 +set g_balance_shotgun_secondary_melee_no_doubleslap 1 +set g_balance_shotgun_secondary_melee_nonplayerdamage 40 +set g_balance_shotgun_secondary_melee_range 120 +set g_balance_shotgun_secondary_melee_swing_side 120 +set g_balance_shotgun_secondary_melee_swing_up 30 +set g_balance_shotgun_secondary_melee_time 0.15 +set g_balance_shotgun_secondary_melee_traces 10 +set g_balance_shotgun_secondary_refire 1.25 +set g_balance_shotgun_switchdelay_drop 0.2 +set g_balance_shotgun_switchdelay_raise 0.2 +set g_balance_shotgun_weaponreplace "" +set g_balance_shotgun_weaponstart 0 +set g_balance_shotgun_weaponstartoverride -1 +// }}} diff --cc oldbalance25.cfg index 633bd9637,000000000..e32b459b0 mode 100644,000000..100644 --- a/oldbalance25.cfg +++ b/oldbalance25.cfg @@@ -1,781 -1,0 +1,779 @@@ +g_mod_balance Nexuiz25 + +// {{{ starting gear +set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_shotgun -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_uzi -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_balance_health_start 150 +set g_balance_armor_start 0 +set g_start_ammo_shells 40 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_start_ammo_fuel 0 +set g_warmup_start_health 250 "starting values when being in warmup-stage" +set g_warmup_start_armor 100 "starting values when being in warmup-stage" +set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage" +set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage" +set g_lms_start_health 250 +set g_lms_start_armor 100 +set g_lms_start_ammo_shells 50 +set g_lms_start_ammo_nails 150 +set g_lms_start_ammo_rockets 50 +set g_lms_start_ammo_cells 50 +set g_lms_start_ammo_fuel 0 +set g_balance_nix_roundtime 25 +set g_balance_nix_incrtime 1.6 +set g_balance_nix_ammo_shells 15 +set g_balance_nix_ammo_nails 45 +set g_balance_nix_ammo_rockets 15 +set g_balance_nix_ammo_cells 15 +set g_balance_nix_ammo_fuel 0 +set g_balance_nix_ammoincr_shells 2 +set g_balance_nix_ammoincr_nails 6 +set g_balance_nix_ammoincr_rockets 2 +set g_balance_nix_ammoincr_cells 2 +set g_balance_nix_ammoincr_fuel 2 +// }}} + +// {{{ pickup items +set g_pickup_ammo_anyway 0 +set g_pickup_weapons_anyway 0 +set g_pickup_shells 15 +set g_pickup_shells_weapon 15 +set g_pickup_shells_max 999 +set g_pickup_nails 80 +set g_pickup_nails_weapon 80 +set g_pickup_nails_max 999 +set g_pickup_rockets 15 +set g_pickup_rockets_weapon 15 +set g_pickup_rockets_max 999 +set g_pickup_cells 25 +set g_pickup_cells_weapon 25 +set g_pickup_cells_max 999 +set g_pickup_fuel 25 +set g_pickup_fuel_weapon 25 +set g_pickup_fuel_jetpack 50 +set g_pickup_fuel_max 999 +set g_pickup_armorsmall 5 +set g_pickup_armorsmall_max 999 +set g_pickup_armorsmall_anyway 0 +set g_pickup_armormedium 25 +set g_pickup_armormedium_max 999 +set g_pickup_armormedium_anyway 0 +set g_pickup_armorbig 50 +set g_pickup_armorbig_max 999 +set g_pickup_armorbig_anyway 0 +set g_pickup_armorlarge 100 +set g_pickup_armorlarge_max 999 +set g_pickup_armorlarge_anyway 0 +set g_pickup_healthsmall 5 +set g_pickup_healthsmall_max 999 +set g_pickup_healthsmall_anyway 0 +set g_pickup_healthmedium 25 +set g_pickup_healthmedium_max 999 +set g_pickup_healthmedium_anyway 0 +set g_pickup_healthlarge 50 +set g_pickup_healthlarge_max 999 +set g_pickup_healthlarge_anyway 0 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 999 +set g_pickup_healthmega_anyway 0 +set g_pickup_respawntime_short 15 +set g_pickup_respawntime_medium 20 +set g_pickup_respawntime_long 30 +set g_pickup_respawntime_powerup 120 +set g_pickup_respawntime_weapon 15 +set g_pickup_respawntime_superweapon 120 +set g_pickup_respawntime_ammo 15 +set g_pickup_respawntimejitter_short 0 +set g_pickup_respawntimejitter_medium 0 +set g_pickup_respawntimejitter_long 0 +set g_pickup_respawntimejitter_powerup 10 +set g_pickup_respawntimejitter_weapon 0 +set g_pickup_respawntimejitter_superweapon 10 +set g_pickup_respawntimejitter_ammo 0 +// }}} + +// {{{ regen/rot +set g_balance_health_regen 0.1 +set g_balance_health_regenlinear 0 +set g_balance_pause_health_regen 5 +set g_balance_pause_health_regen_spawn 0 +set g_balance_health_rot 0.1 +set g_balance_health_rotlinear 0 +set g_balance_pause_health_rot 5 +set g_balance_pause_health_rot_spawn 10 +set g_balance_health_regenstable 100 +set g_balance_health_rotstable 100 +set g_balance_health_limit 999 +set g_balance_armor_regen 0 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rot 0.1 +set g_balance_armor_rotlinear 0 +set g_balance_pause_armor_rot 5 +set g_balance_pause_armor_rot_spawn 10 +set g_balance_armor_regenstable 100 +set g_balance_armor_rotstable 100 +set g_balance_armor_limit 999 +set g_balance_armor_blockpercent 0.6 +set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)" +set g_balance_fuel_regenlinear 0 +set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter +set g_balance_fuel_rot 0.05 +set g_balance_fuel_rotlinear 0 +set g_balance_pause_fuel_rot 5 +set g_balance_pause_fuel_rot_spawn 10 +set g_balance_fuel_regenstable 50 +set g_balance_fuel_rotstable 100 +set g_balance_fuel_limit 999 +// }}} + +// {{{ misc +set g_balance_selfdamagepercent 0.6 +set g_weaponspeedfactor 1 "weapon projectile speed multiplier" +set g_weaponratefactor 1 "weapon fire rate multiplier" +set g_weapondamagefactor 1 "weapon damage multiplier" +set g_weaponforcefactor 1 "weapon force multiplier" +set g_weaponspreadfactor 1 "weapon spread multiplier" +set g_balance_firetransfer_time 0.9 +set g_balance_firetransfer_damage 0.8 +set g_throughfloor_damage 1 +set g_throughfloor_force 1 +set g_projectiles_damage 2 +// possible values: +// -2: absolutely no damage to projectiles (no exceptions) +// -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines) +// 0: only damage from contents (lava/slime) or exceptions +// 1: only self damage or damage from contents or exceptions +// 2: allow all damage to projectiles normally +set g_projectiles_keep_owner 0 +set g_projectiles_newton_style 2 +// possible values: +// 0: absolute velocity projectiles (like Quake) +// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +set g_projectiles_newton_style_2_minfactor 0.7 +set g_projectiles_newton_style_2_maxfactor 5 +set g_projectiles_spread_style 0 +// possible values: +// 0: forward + solid sphere (like Quake) - varies velocity +// 1: forward + flattened solid sphere +// 2: forward + solid circle +// 3: forward + normal distribution 3D - varies velocity +// 4: forward + normal distribution on a plane +// 5: forward + circle with 1-r falloff +// 6: forward + circle with 1-r^2 falloff +// 7: forward + circle with (1-r)(2-r) falloff +set g_balance_falldamage_deadminspeed 150 +set g_balance_falldamage_minspeed 1400 +set g_balance_falldamage_factor 0.15 +set g_balance_falldamage_maxdamage 25 +set g_balance_damagepush_speedfactor 0 +set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage +set g_balance_contents_drowndelay 10 // time under water before a player begins drowning +set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning +set g_balance_contents_playerdamage_lava 50 // damage per second for while player is inside lava +set g_balance_contents_playerdamage_slime 30 // damage per second for while player is inside slime +set g_balance_contents_projectiledamage 10000 // instantly kill projectiles upon touching lava/slime +set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone into a death trap" +// }}} + +// {{{ powerups +set g_balance_powerup_invincible_takedamage 0.2 +set g_balance_powerup_invincible_time 30 +set g_balance_powerup_strength_damage 3 +set g_balance_powerup_strength_force 4 +set g_balance_powerup_strength_time 30 +set g_balance_powerup_strength_selfdamage 1.5 +set g_balance_powerup_strength_selfforce 1.5 +set g_balance_superweapons_time 30 +// }}} + +// {{{ jetpack/hook +set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack" +set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction" +set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)" +set g_jetpack_maxspeed_side 1500 "max speed of the jetpack in xy direction" +set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction" +set g_jetpack_fuel 8 "fuel per second for jetpack" +set g_jetpack_attenuation 2 "jetpack sound attenuation" + +set g_grappling_hook_tarzan 2 // 2: can also pull players +set g_balance_grapplehook_speed_fly 1800 +set g_balance_grapplehook_speed_pull 2000 +set g_balance_grapplehook_force_rubber 2000 +set g_balance_grapplehook_force_rubber_overstretch 1000 +set g_balance_grapplehook_length_min 50 +set g_balance_grapplehook_stretch 50 +set g_balance_grapplehook_airfriction 0.2 +set g_balance_grapplehook_health 130 +set g_balance_grapplehook_damagedbycontents 0 +// }}} + +// {{{ weapon properties +// {{{ laser +set g_balance_laser_melee_animtime 0.3 +set g_balance_laser_melee_damage 80 +set g_balance_laser_melee_delay 0.25 +set g_balance_laser_melee_force 200 +set g_balance_laser_melee_multihit 1 +set g_balance_laser_melee_no_doubleslap 1 +set g_balance_laser_melee_nonplayerdamage 40 +set g_balance_laser_melee_range 120 +set g_balance_laser_melee_refire 1.25 +set g_balance_laser_melee_swing_side 120 +set g_balance_laser_melee_swing_up 30 +set g_balance_laser_melee_time 0.15 +set g_balance_laser_melee_traces 10 + +set g_balance_laser_primary 1 // 0 = shockwave attack, 1 = projectile primary +set g_balance_laser_primary_damage 35 +set g_balance_laser_primary_edgedamage 10 +set g_balance_laser_primary_force 400 +set g_balance_laser_primary_radius 70 +set g_balance_laser_primary_speed 9000 +set g_balance_laser_primary_spread 0 +set g_balance_laser_primary_refire 0.7 +set g_balance_laser_primary_animtime 0.3 +set g_balance_laser_primary_lifetime 30 +set g_balance_laser_primary_shotangle 0 +set g_balance_laser_primary_delay 0.05 +set g_balance_laser_primary_force_zscale 1 +set g_balance_laser_primary_force_velocitybias 0 +set g_balance_laser_primary_force_other_scale 1 + +set g_balance_laser_secondary 0 // 0 = switch away to last used weapon, 1 = projectile secondary, 2 = melee secondary +set g_balance_laser_secondary_damage 35 +set g_balance_laser_secondary_edgedamage 10 +set g_balance_laser_secondary_force 400 +set g_balance_laser_secondary_radius 70 +set g_balance_laser_secondary_speed 9000 +set g_balance_laser_secondary_spread 0 +set g_balance_laser_secondary_refire 0.7 +set g_balance_laser_secondary_animtime 0.3 +set g_balance_laser_secondary_lifetime 30 +set g_balance_laser_secondary_shotangle 0 +set g_balance_laser_secondary_delay 0 +set g_balance_laser_secondary_force_zscale 1 +set g_balance_laser_secondary_force_velocitybias 0 +set g_balance_laser_secondary_force_other_scale 1 + +set g_balance_laser_shockwave_damage 20 +set g_balance_laser_shockwave_distance 2000 +set g_balance_laser_shockwave_edgedamage 0 +set g_balance_laser_shockwave_force 200 +set g_balance_laser_shockwave_force_forwardbias 50 +set g_balance_laser_shockwave_force_zscale 1.5 +set g_balance_laser_shockwave_jump_damage 20 +set g_balance_laser_shockwave_jump_edgedamage 0 +set g_balance_laser_shockwave_jump_force 300 +set g_balance_laser_shockwave_jump_force_velocitybias 0 +set g_balance_laser_shockwave_jump_force_zscale 1.25 +set g_balance_laser_shockwave_jump_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_jump_multiplier_distance 0.5 +set g_balance_laser_shockwave_jump_multiplier_min 0 +set g_balance_laser_shockwave_jump_radius 150 +set g_balance_laser_shockwave_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_multiplier_distance 0.5 +set g_balance_laser_shockwave_multiplier_min 0 +set g_balance_laser_shockwave_splash_damage 15 +set g_balance_laser_shockwave_splash_edgedamage 0 +set g_balance_laser_shockwave_splash_force 100 +set g_balance_laser_shockwave_splash_force_forwardbias 50 +set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_splash_multiplier_distance 0.5 +set g_balance_laser_shockwave_splash_multiplier_min 0 +set g_balance_laser_shockwave_splash_radius 70 +set g_balance_laser_shockwave_spread_max 100 +set g_balance_laser_shockwave_spread_min 20 + +set g_balance_laser_switchdelay_drop 0.15 +set g_balance_laser_switchdelay_raise 0.15 +set g_balance_laser_reload_ammo 0 //default: 6 +set g_balance_laser_reload_time 2 +// }}} +// {{{ shotgun +set g_balance_shotgun_primary_bullets 6 +set g_balance_shotgun_primary_damage 9 +set g_balance_shotgun_primary_force 60 +set g_balance_shotgun_primary_spread 0.07 +set g_balance_shotgun_primary_refire 0.5 +set g_balance_shotgun_primary_animtime 0.2 +set g_balance_shotgun_primary_ammo 1 - set g_balance_shotgun_primary_speed 12000 - set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu ++set g_balance_shotgun_primary_solidpenetration 3.8 +set g_balance_shotgun_secondary 1 +set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow +set g_balance_shotgun_secondary_melee_range 120 +set g_balance_shotgun_secondary_melee_swing_side 120 +set g_balance_shotgun_secondary_melee_swing_up 30 +set g_balance_shotgun_secondary_melee_time 0.15 +set g_balance_shotgun_secondary_melee_traces 10 +set g_balance_shotgun_secondary_melee_no_doubleslap 1 +set g_balance_shotgun_secondary_melee_nonplayerdamage 0 +set g_balance_shotgun_secondary_melee_multihit 1 +set g_balance_shotgun_secondary_damage 115 +set g_balance_shotgun_secondary_force 150 +set g_balance_shotgun_secondary_refire 1.1 +set g_balance_shotgun_secondary_animtime 1 +set g_balance_shotgun_switchdelay_drop 0.15 +set g_balance_shotgun_switchdelay_raise 0.15 +set g_balance_shotgun_reload_ammo 0 //default: 5 +set g_balance_shotgun_reload_time 2 +// }}} +// {{{ uzi +set g_balance_uzi_mode 0 // Activates varible spread for sustained & burst mode secondary +set g_balance_uzi_spread_min 0.02 +set g_balance_uzi_spread_max 0.6 +set g_balance_uzi_spread_add 0.012 + +set g_balance_uzi_burst 0 // # of bullets in a burst (if set to 2 or more) +set g_balance_uzi_burst_animtime 0.75 +set g_balance_uzi_burst_refire 0.05 // refire between burst bullets +set g_balance_uzi_burst_refire2 0.75 // refire after burst +set g_balance_uzi_burst_spread 0.04 +set g_balance_uzi_burst_damage 18 +set g_balance_uzi_burst_force 50 +set g_balance_uzi_burst_ammo 3 + +set g_balance_uzi_first 1 +set g_balance_uzi_first_damage 30 +set g_balance_uzi_first_force 50 +set g_balance_uzi_first_spread 0.015 +set g_balance_uzi_first_refire 0.2 +set g_balance_uzi_first_ammo 1 + +set g_balance_uzi_sustained_damage 15 +set g_balance_uzi_sustained_force 27 +set g_balance_uzi_sustained_spread 0.05 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_ammo 1 + - set g_balance_uzi_speed 18000 - set g_balance_uzi_bulletconstant 115 // 13.1qu ++set g_balance_uzi_solidpenetration 13.1 + +set g_balance_uzi_switchdelay_drop 0.15 +set g_balance_uzi_switchdelay_raise 0.15 + +set g_balance_uzi_reload_ammo 0 //default: 30 +set g_balance_uzi_reload_time 2 +// }}} +// {{{ mortar +set g_balance_grenadelauncher_primary_type 0 +set g_balance_grenadelauncher_primary_damage 70 +set g_balance_grenadelauncher_primary_edgedamage 38 +set g_balance_grenadelauncher_primary_force 400 +set g_balance_grenadelauncher_primary_radius 140 +set g_balance_grenadelauncher_primary_speed 2000 +set g_balance_grenadelauncher_primary_speed_up 200 +set g_balance_grenadelauncher_primary_speed_z 0 +set g_balance_grenadelauncher_primary_spread 0 +set g_balance_grenadelauncher_primary_lifetime 30 +set g_balance_grenadelauncher_primary_lifetime2 1 +set g_balance_grenadelauncher_primary_refire 0.8 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_primary_health 25 +set g_balance_grenadelauncher_primary_damageforcescale 4 +set g_balance_grenadelauncher_primary_remote_minbouncecnt 0 + +set g_balance_grenadelauncher_secondary_type 1 +set g_balance_grenadelauncher_secondary_damage 70 +set g_balance_grenadelauncher_secondary_edgedamage 38 +set g_balance_grenadelauncher_secondary_force 400 +set g_balance_grenadelauncher_secondary_radius 140 +set g_balance_grenadelauncher_secondary_speed 1400 +set g_balance_grenadelauncher_secondary_speed_up 200 +set g_balance_grenadelauncher_secondary_speed_z 0 +set g_balance_grenadelauncher_secondary_spread 0 +set g_balance_grenadelauncher_secondary_lifetime 2.5 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0 +set g_balance_grenadelauncher_secondary_lifetime_stick 0 +set g_balance_grenadelauncher_secondary_refire 0.7 +set g_balance_grenadelauncher_secondary_animtime 0.3 +set g_balance_grenadelauncher_secondary_ammo 2 +set g_balance_grenadelauncher_secondary_health 10 +set g_balance_grenadelauncher_secondary_damageforcescale 4 +set g_balance_grenadelauncher_secondary_remote_detonateprimary 0 + +set g_balance_grenadelauncher_bouncefactor 0.5 +set g_balance_grenadelauncher_bouncestop 0.075 + +set g_balance_grenadelauncher_switchdelay_drop 0.15 +set g_balance_grenadelauncher_switchdelay_raise 0.15 + +set g_balance_grenadelauncher_reload_ammo 0 //default: 12 +set g_balance_grenadelauncher_reload_time 2 +// }}} +// {{{ electro +set g_balance_electro_lightning 0 +set g_balance_electro_primary_damage 65 +set g_balance_electro_primary_edgedamage 0 +set g_balance_electro_primary_force 200 +set g_balance_electro_primary_force_up 0 +set g_balance_electro_primary_radius 150 +set g_balance_electro_primary_comboradius 0 +set g_balance_electro_primary_speed 2000 +set g_balance_electro_primary_spread 0 +set g_balance_electro_primary_lifetime 30 +set g_balance_electro_primary_refire 0.6 +set g_balance_electro_primary_animtime 0.3 +set g_balance_electro_primary_ammo 2 +set g_balance_electro_primary_range 0 +set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius +set g_balance_electro_primary_falloff_maxdist 850 +set g_balance_electro_primary_falloff_halflifedist 425 +set g_balance_electro_secondary_damage 50 +set g_balance_electro_secondary_edgedamage 0 +set g_balance_electro_secondary_force 200 +set g_balance_electro_secondary_radius 150 +set g_balance_electro_secondary_speed 900 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_speed_z 0 +set g_balance_electro_secondary_spread 0 +set g_balance_electro_secondary_lifetime 5 +set g_balance_electro_secondary_refire 0.3 +set g_balance_electro_secondary_refire2 0 +set g_balance_electro_secondary_animtime 0.3 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_secondary_health 5 +set g_balance_electro_secondary_damageforcescale 4 +set g_balance_electro_secondary_damagedbycontents 0 +set g_balance_electro_secondary_count 1 +set g_balance_electro_secondary_bouncefactor 0.5 +set g_balance_electro_secondary_bouncestop 0.075 +set g_balance_electro_combo_damage 80 +set g_balance_electro_combo_edgedamage 0 +set g_balance_electro_combo_force 200 +set g_balance_electro_combo_radius 250 +set g_balance_electro_combo_comboradius 0 +set g_balance_electro_combo_speed 2000 +set g_balance_electro_combo_safeammocheck 0 +set g_balance_electro_switchdelay_drop 0.15 +set g_balance_electro_switchdelay_raise 0.15 +set g_balance_electro_reload_ammo 0 //default: 20 +set g_balance_electro_reload_time 2 +// }}} +// {{{ lightning +set g_balance_lightning_primary_ammo 5 +set g_balance_lightning_primary_animtime 0.2 +set g_balance_lightning_primary_damage 100 +set g_balance_lightning_primary_edgedamage 0 +set g_balance_lightning_primary_falloff_mindist 0 +set g_balance_lightning_primary_falloff_maxdist 0 +set g_balance_lightning_primary_falloff_halflifedist 0 +set g_balance_lightning_primary_force 425 +set g_balance_lightning_primary_lifetime 0 +set g_balance_lightning_primary_radius 850 +set g_balance_lightning_primary_range 800 +set g_balance_lightning_primary_refire 0.4 +set g_balance_lightning_primary_speed 0 +set g_balance_lightning_primary_spread 0 +set g_balance_lightning_secondary_ammo 5 +set g_balance_lightning_secondary_animtime 0.5 +set g_balance_lightning_secondary_damage 100 +set g_balance_lightning_secondary_damageforcescale 4 +set g_balance_lightning_secondary_edgedamage 80 +set g_balance_lightning_secondary_flyingdamage 1 +set g_balance_lightning_secondary_flyingforce -80 +set g_balance_lightning_secondary_flyingradius 200 +set g_balance_lightning_secondary_force -200 +set g_balance_lightning_secondary_health 1 +set g_balance_lightning_secondary_lifetime 30 +set g_balance_lightning_secondary_radius 300 +set g_balance_lightning_secondary_refire 5 +set g_balance_lightning_secondary_speed 600 +// }}} +// {{{ crylink +set g_balance_crylink_primary_damage 18 +set g_balance_crylink_primary_edgedamage 0 +set g_balance_crylink_primary_force -55 +set g_balance_crylink_primary_radius 80 +set g_balance_crylink_primary_speed 7000 +set g_balance_crylink_primary_spread 0.03 +set g_balance_crylink_primary_shots 4 +set g_balance_crylink_primary_bounces 1 +set g_balance_crylink_primary_refire 0.4 +set g_balance_crylink_primary_animtime 0.3 +set g_balance_crylink_primary_ammo 2 +set g_balance_crylink_primary_bouncedamagefactor 0.5 +set g_balance_crylink_primary_joindelay 0 +set g_balance_crylink_primary_joinspread 0 +set g_balance_crylink_primary_joinexplode 0 +set g_balance_crylink_primary_joinexplode_damage 0 +set g_balance_crylink_primary_joinexplode_edgedamage 0 +set g_balance_crylink_primary_joinexplode_radius 0 +set g_balance_crylink_primary_joinexplode_force 0 +set g_balance_crylink_primary_linkexplode 1 + +set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000 +set g_balance_crylink_primary_middle_fadetime 5 +set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450 +set g_balance_crylink_primary_other_fadetime 0.25 + +set g_balance_crylink_secondary 1 +set g_balance_crylink_secondary_damage 18 +set g_balance_crylink_secondary_edgedamage 0 +set g_balance_crylink_secondary_force -55 +set g_balance_crylink_secondary_radius 3 +set g_balance_crylink_secondary_speed 7000 +set g_balance_crylink_secondary_spread 0.08 +set g_balance_crylink_secondary_spreadtype 0 +set g_balance_crylink_secondary_shots 7 +set g_balance_crylink_secondary_bounces 0 +set g_balance_crylink_secondary_refire 0.5 +set g_balance_crylink_secondary_animtime 0.3 +set g_balance_crylink_secondary_ammo 2 +set g_balance_crylink_secondary_bouncedamagefactor 0.5 +set g_balance_crylink_secondary_joindelay 0 +set g_balance_crylink_secondary_joinspread 0 +set g_balance_crylink_secondary_joinexplode 0 +set g_balance_crylink_secondary_joinexplode_damage 0 +set g_balance_crylink_secondary_joinexplode_edgedamage 0 +set g_balance_crylink_secondary_joinexplode_radius 0 +set g_balance_crylink_secondary_joinexplode_force 0 +set g_balance_crylink_secondary_linkexplode 1 + +set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000 +set g_balance_crylink_secondary_middle_fadetime 5 +set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000 +set g_balance_crylink_secondary_line_fadetime 2 + +set g_balance_crylink_switchdelay_drop 0.15 +set g_balance_crylink_switchdelay_raise 0.15 + +set g_balance_crylink_reload_ammo 0 //default: 10 +set g_balance_crylink_reload_time 2 +// }}} +// {{{ nex +set g_balance_nex_primary_damage 100 +set g_balance_nex_primary_force 600 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_primary_animtime 0.3 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 0 +set g_balance_nex_primary_damagefalloff_maxdist 0 +set g_balance_nex_primary_damagefalloff_halflife 0 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_charge 0 +set g_balance_nex_secondary_charge_rate 0.1 +set g_balance_nex_secondary_chargepool 0 +set g_balance_nex_secondary_chargepool_regen 0.15 +set g_balance_nex_secondary_chargepool_pause_regen 1 +set g_balance_nex_secondary_chargepool_pause_health_regen 1 +set g_balance_nex_secondary_damage 100 +set g_balance_nex_secondary_force 600 +set g_balance_nex_secondary_refire 1.5 +set g_balance_nex_secondary_animtime 0.3 +set g_balance_nex_secondary_ammo 5 +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 + +set g_balance_nex_charge 0 +set g_balance_nex_charge_mindmg 40 +set g_balance_nex_charge_start 0 +set g_balance_nex_charge_rate 0.1 +set g_balance_nex_charge_animlimit 0.5 +set g_balance_nex_charge_limit 0.5 +set g_balance_nex_charge_rot_rate 0 +set g_balance_nex_charge_rot_pause 0 // Dont rot down until this long after release of charge button +set g_balance_nex_charge_shot_multiplier 0.5 +set g_balance_nex_charge_velocity_rate 0.2 +set g_balance_nex_charge_minspeed 400 +set g_balance_nex_charge_maxspeed 1000 + +set g_balance_nex_switchdelay_drop 0.15 +set g_balance_nex_switchdelay_raise 0.15 + +set g_balance_nex_reload_ammo 0 //default: 25 +set g_balance_nex_reload_time 2 +// }}} +// {{{ minstanex +set g_balance_minstanex_refire 1 +set g_balance_minstanex_animtime 0.3 +set g_balance_minstanex_ammo 10 +set g_balance_minstanex_laser_ammo 0 +set g_balance_minstanex_laser_animtime 0.3 +set g_balance_minstanex_laser_refire 0.7 +set g_balance_minstanex_switchdelay_drop 0.15 +set g_balance_minstanex_switchdelay_raise 0.15 +set g_balance_minstanex_reload_ammo 0 //default: 50 +set g_balance_minstanex_reload_time 2 +// }}} +// {{{ hagar +set g_balance_hagar_primary_damage 37 +set g_balance_hagar_primary_edgedamage 15 +set g_balance_hagar_primary_force 100 +set g_balance_hagar_primary_health 0 +set g_balance_hagar_primary_damageforcescale 0 +set g_balance_hagar_primary_radius 65 +set g_balance_hagar_primary_spread 0.010 +set g_balance_hagar_primary_speed 3000 +set g_balance_hagar_primary_lifetime 30 +set g_balance_hagar_primary_refire 0.15 +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary 1 +set g_balance_hagar_secondary_load 0 +set g_balance_hagar_secondary_load_speed 0.6 +set g_balance_hagar_secondary_load_spread 0.075 +set g_balance_hagar_secondary_load_spread_bias 0.5 +set g_balance_hagar_secondary_load_max 4 +set g_balance_hagar_secondary_load_hold 0 +set g_balance_hagar_secondary_load_releasedeath 1 +set g_balance_hagar_secondary_load_abort 1 +set g_balance_hagar_secondary_load_linkexplode 0 +set g_balance_hagar_secondary_load_animtime 0.2 +set g_balance_hagar_secondary_damage 37 +set g_balance_hagar_secondary_edgedamage 15 +set g_balance_hagar_secondary_force 100 +set g_balance_hagar_secondary_health 0 +set g_balance_hagar_secondary_damageforcescale 0 +set g_balance_hagar_secondary_radius 65 +set g_balance_hagar_secondary_spread 0.015 +set g_balance_hagar_secondary_speed 1400 +set g_balance_hagar_secondary_lifetime_min 30 +set g_balance_hagar_secondary_lifetime_rand 0 +set g_balance_hagar_secondary_refire 0.15 +set g_balance_hagar_secondary_ammo 1 +set g_balance_hagar_switchdelay_drop 0.15 +set g_balance_hagar_switchdelay_raise 0.15 +set g_balance_hagar_reload_ammo 0 //default: 25 +set g_balance_hagar_reload_time 2 +// }}} +// {{{ rocketlauncher +set g_balance_rocketlauncher_damage 105 +set g_balance_rocketlauncher_edgedamage 40 +set g_balance_rocketlauncher_force 600 +set g_balance_rocketlauncher_radius 150 +set g_balance_rocketlauncher_speed 850 +set g_balance_rocketlauncher_speedaccel 0 +set g_balance_rocketlauncher_speedstart 850 +set g_balance_rocketlauncher_lifetime 30 +set g_balance_rocketlauncher_refire 1 +set g_balance_rocketlauncher_animtime 0.3 +set g_balance_rocketlauncher_ammo 3 +set g_balance_rocketlauncher_health 40 +set g_balance_rocketlauncher_damageforcescale 4 +set g_balance_rocketlauncher_detonatedelay 0.2 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time +set g_balance_rocketlauncher_guiderate 90 // max degrees per second +set g_balance_rocketlauncher_guideratedelay 0.01 // immediate +set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic) +set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in +set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again +set g_balance_rocketlauncher_remote_damage 105 +set g_balance_rocketlauncher_remote_edgedamage 40 +set g_balance_rocketlauncher_remote_radius 150 +set g_balance_rocketlauncher_remote_force 600 +set g_balance_rocketlauncher_switchdelay_drop 0.15 +set g_balance_rocketlauncher_switchdelay_raise 0.15 +set g_balance_rocketlauncher_reload_ammo 0 //default: 25 +set g_balance_rocketlauncher_reload_time 2 +// }}} +// {{{ porto +set g_balance_porto_primary_refire 1.5 +set g_balance_porto_primary_animtime 0.3 +set g_balance_porto_primary_speed 2000 +set g_balance_porto_primary_lifetime 30 +set g_balance_porto_secondary 0 +set g_balance_porto_secondary_refire 1.5 +set g_balance_porto_secondary_animtime 0.3 +set g_balance_porto_secondary_speed 2000 +set g_balance_porto_secondary_lifetime 30 +set g_balance_porto_switchdelay_drop 0.15 +set g_balance_porto_switchdelay_raise 0.15 +set g_balance_portal_health 200 // these get recharged whenever the portal is used +set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used +// }}} +// {{{ hook +set g_balance_hook_primary_fuel 5 // hook monkeys set 0 +set g_balance_hook_primary_refire 0 // hook monkeys set 0 +set g_balance_hook_primary_animtime 0.3 // good shoot anim +set g_balance_hook_primary_hooked_time_max 0 // infinite +set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free +set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked +set g_balance_hook_secondary_damage 25 // not much +set g_balance_hook_secondary_edgedamage 5 // not much +set g_balance_hook_secondary_radius 500 // LOTS +set g_balance_hook_secondary_force -2000 // LOTS +set g_balance_hook_secondary_ammo 50 // a whole pack +set g_balance_hook_secondary_lifetime 30 // infinite +set g_balance_hook_secondary_speed 0 // not much throwing +set g_balance_hook_secondary_gravity 5 // fast falling +set g_balance_hook_secondary_refire 3 // don't drop too many bombs... +set g_balance_hook_secondary_animtime 0.3 // good shoot anim +set g_balance_hook_secondary_power 3 // effect behaves like a square function +set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds +set g_balance_hook_secondary_health 0 +set g_balance_hook_secondary_damageforcescale 0 +set g_balance_hook_switchdelay_drop 0.15 +set g_balance_hook_switchdelay_raise 0.15 +// }}} +// {{{ tuba +set g_balance_tuba_refire 0.05 +set g_balance_tuba_animtime 0.05 +set g_balance_tuba_attenuation 0.5 +set g_balance_tuba_volume 1 +set g_balance_tuba_fadetime 0.25 +set g_balance_tuba_damage 5 +set g_balance_tuba_edgedamage 0 +set g_balance_tuba_radius 200 +set g_balance_tuba_force 40 +set g_balance_tuba_pitchstep 6 +set g_balance_tuba_switchdelay_drop 0.15 +set g_balance_tuba_switchdelay_raise 0.15 +// }}} +// {{{ fireball +set g_balance_fireball_primary_animtime 0.15 +set g_balance_fireball_primary_bfgdamage 100 +set g_balance_fireball_primary_bfgforce 0 +set g_balance_fireball_primary_bfgradius 1000 +set g_balance_fireball_primary_damage 200 +set g_balance_fireball_primary_damageforcescale 4 +set g_balance_fireball_primary_edgedamage 0 +set g_balance_fireball_primary_force 700 +set g_balance_fireball_primary_health 50 +set g_balance_fireball_primary_laserburntime 0.5 +set g_balance_fireball_primary_laserdamage 80 +set g_balance_fireball_primary_laseredgedamage 20 +set g_balance_fireball_primary_laserradius 256 +set g_balance_fireball_primary_lifetime 15 +set g_balance_fireball_primary_radius 200 +set g_balance_fireball_primary_refire 5 +set g_balance_fireball_primary_refire2 0 +set g_balance_fireball_primary_speed 650 +set g_balance_fireball_primary_spread 0 +set g_balance_fireball_secondary_animtime 0.3 +set g_balance_fireball_secondary_damage 40 +set g_balance_fireball_secondary_damageforcescale 4 +set g_balance_fireball_secondary_damagetime 5 +set g_balance_fireball_secondary_force 100 +set g_balance_fireball_secondary_laserburntime 0.5 +set g_balance_fireball_secondary_laserdamage 50 +set g_balance_fireball_secondary_laseredgedamage 20 +set g_balance_fireball_secondary_laserradius 110 +set g_balance_fireball_secondary_lifetime 7 +set g_balance_fireball_secondary_refire 2 +set g_balance_fireball_secondary_speed 900 +set g_balance_fireball_secondary_speed_up 100 +set g_balance_fireball_secondary_speed_z 0 +set g_balance_fireball_secondary_spread 0 +set g_balance_fireball_switchdelay_drop 0.15 +set g_balance_fireball_switchdelay_raise 0.15 +// }}} diff --cc oldbalanceFruitieX.cfg index a10d8b58d,000000000..844bdd59e mode 100644,000000..100644 --- a/oldbalanceFruitieX.cfg +++ b/oldbalanceFruitieX.cfg @@@ -1,781 -1,0 +1,779 @@@ +g_mod_balance FruitieX + +// {{{ starting gear +set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_shotgun -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_uzi -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_balance_health_start 125 +set g_balance_armor_start 0 +set g_start_ammo_shells 20 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_start_ammo_fuel 0 +set g_warmup_start_health 200 "starting values when being in warmup-stage" +set g_warmup_start_armor 100 "starting values when being in warmup-stage" +set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage" +set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage" +set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage" +set g_lms_start_health 200 +set g_lms_start_armor 100 +set g_lms_start_ammo_shells 30 +set g_lms_start_ammo_nails 200 +set g_lms_start_ammo_rockets 150 +set g_lms_start_ammo_cells 150 +set g_lms_start_ammo_fuel 0 +set g_balance_nix_roundtime 25 +set g_balance_nix_incrtime 1.6 +set g_balance_nix_ammo_shells 15 +set g_balance_nix_ammo_nails 45 +set g_balance_nix_ammo_rockets 15 +set g_balance_nix_ammo_cells 15 +set g_balance_nix_ammo_fuel 0 +set g_balance_nix_ammoincr_shells 2 +set g_balance_nix_ammoincr_nails 6 +set g_balance_nix_ammoincr_rockets 2 +set g_balance_nix_ammoincr_cells 2 +set g_balance_nix_ammoincr_fuel 2 +// }}} + +// {{{ pickup items +set g_pickup_ammo_anyway 1 +set g_pickup_weapons_anyway 1 +set g_pickup_shells 20 +set g_pickup_shells_weapon 10 +set g_pickup_shells_max 45 +set g_pickup_nails 120 +set g_pickup_nails_weapon 60 +set g_pickup_nails_max 300 +set g_pickup_rockets 25 +set g_pickup_rockets_weapon 15 +set g_pickup_rockets_max 150 +set g_pickup_cells 30 +set g_pickup_cells_weapon 20 +set g_pickup_cells_max 150 +set g_pickup_fuel 25 +set g_pickup_fuel_weapon 15 +set g_pickup_fuel_jetpack 50 +set g_pickup_fuel_max 100 +set g_pickup_armorsmall 5 +set g_pickup_armorsmall_max 150 +set g_pickup_armorsmall_anyway 1 +set g_pickup_armormedium 25 +set g_pickup_armormedium_max 50 +set g_pickup_armormedium_anyway 0 +set g_pickup_armorbig 50 +set g_pickup_armorbig_max 75; // LOG: to allow a little more armor from medium armor +set g_pickup_armorbig_anyway 0 +set g_pickup_armorlarge 100 +set g_pickup_armorlarge_max 150 +set g_pickup_armorlarge_anyway 1 +set g_pickup_healthsmall 5 +set g_pickup_healthsmall_max 250 +set g_pickup_healthsmall_anyway 1 +set g_pickup_healthmedium 25 +set g_pickup_healthmedium_max 100 +set g_pickup_healthmedium_anyway 0 +set g_pickup_healthlarge 50 +set g_pickup_healthlarge_max 150 +set g_pickup_healthlarge_anyway 0 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 250 +set g_pickup_healthmega_anyway 1 +set g_pickup_respawntime_short 15 +set g_pickup_respawntime_medium 20 +set g_pickup_respawntime_long 30 +set g_pickup_respawntime_powerup 120 +set g_pickup_respawntime_weapon 10 +set g_pickup_respawntime_superweapon 120 +set g_pickup_respawntime_ammo 25 +set g_pickup_respawntimejitter_short 0 +set g_pickup_respawntimejitter_medium 0 +set g_pickup_respawntimejitter_long 0 +set g_pickup_respawntimejitter_powerup 10 +set g_pickup_respawntimejitter_weapon 0 +set g_pickup_respawntimejitter_superweapon 10 +set g_pickup_respawntimejitter_ammo 0 +// }}} + +// {{{ regen/rot +set g_balance_health_regen 0.05 +set g_balance_health_regenlinear 0 +set g_balance_pause_health_regen 5 +set g_balance_pause_health_regen_spawn 0 +set g_balance_health_rot 0 +set g_balance_health_rotlinear 1 +set g_balance_pause_health_rot 1 +set g_balance_pause_health_rot_spawn 0 +set g_balance_health_regenstable 100 +set g_balance_health_rotstable 100 +set g_balance_health_limit 999 +set g_balance_armor_regen 0 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rot 0 +set g_balance_armor_rotlinear 1 +set g_balance_pause_armor_rot 1 +set g_balance_pause_armor_rot_spawn 0 +set g_balance_armor_regenstable 100 +set g_balance_armor_rotstable 100 +set g_balance_armor_limit 999 +set g_balance_armor_blockpercent 0.7 +set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)" +set g_balance_fuel_regenlinear 0 +set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter +set g_balance_fuel_rot 0.05 +set g_balance_fuel_rotlinear 0 +set g_balance_pause_fuel_rot 5 +set g_balance_pause_fuel_rot_spawn 10 +set g_balance_fuel_regenstable 50 +set g_balance_fuel_rotstable 100 +set g_balance_fuel_limit 999 +// }}} + +// {{{ misc +set g_balance_selfdamagepercent 0.65 +set g_weaponspeedfactor 1 "weapon projectile speed multiplier" +set g_weaponratefactor 1 "weapon fire rate multiplier" +set g_weapondamagefactor 1 "weapon damage multiplier" +set g_weaponforcefactor 1 "weapon force multiplier" +set g_weaponspreadfactor 1 "weapon spread multiplier" +set g_balance_firetransfer_time 0.9 +set g_balance_firetransfer_damage 0.8 +set g_throughfloor_damage 0.7 +set g_throughfloor_force 0.8 +set g_projectiles_damage 2 +// possible values: +// -2: absolutely no damage to projectiles (no exceptions) +// -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines) +// 0: only damage from contents (lava/slime) or exceptions +// 1: only self damage or damage from contents or exceptions +// 2: allow all damage to projectiles normally +set g_projectiles_keep_owner 0 +set g_projectiles_newton_style 2 +// possible values: +// 0: absolute velocity projectiles (like Quake) +// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +set g_projectiles_newton_style_2_minfactor 0.7 +set g_projectiles_newton_style_2_maxfactor 5 +set g_projectiles_spread_style 7 +// possible values: +// 0: forward + solid sphere (like Quake) - varies velocity +// 1: forward + flattened solid sphere +// 2: forward + solid circle +// 3: forward + normal distribution 3D - varies velocity +// 4: forward + normal distribution on a plane +// 5: forward + circle with 1-r falloff +// 6: forward + circle with 1-r^2 falloff +// 7: forward + circle with (1-r)(2-r) falloff +set g_balance_falldamage_deadminspeed 150 +set g_balance_falldamage_minspeed 800 +set g_balance_falldamage_factor 0.20 +set g_balance_falldamage_maxdamage 15 +set g_balance_damagepush_speedfactor 2.5 +set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage +set g_balance_contents_drowndelay 10 // time under water before a player begins drowning +set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning +set g_balance_contents_playerdamage_lava 50 // damage per second for while player is inside lava +set g_balance_contents_playerdamage_slime 30 // damage per second for while player is inside slime +set g_balance_contents_projectiledamage 10000 // instantly kill projectiles upon touching lava/slime +set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone into a death trap" +// }}} + +// {{{ powerups +set g_balance_powerup_invincible_takedamage 0.6 +set g_balance_powerup_invincible_time 30 +set g_balance_powerup_strength_damage 3 +set g_balance_powerup_strength_force 4 +set g_balance_powerup_strength_time 30 +set g_balance_powerup_strength_selfdamage 1.5 +set g_balance_powerup_strength_selfforce 1.5 +set g_balance_superweapons_time 30 +// }}} + +// {{{ jetpack/hook +set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack" +set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction" +set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)" +set g_jetpack_maxspeed_side 1500 "max speed of the jetpack in xy direction" +set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction" +set g_jetpack_fuel 8 "fuel per second for jetpack" +set g_jetpack_attenuation 2 "jetpack sound attenuation" + +set g_grappling_hook_tarzan 2 // 2: can also pull players +set g_balance_grapplehook_speed_fly 1800 +set g_balance_grapplehook_speed_pull 2000 +set g_balance_grapplehook_force_rubber 2000 +set g_balance_grapplehook_force_rubber_overstretch 1000 +set g_balance_grapplehook_length_min 50 +set g_balance_grapplehook_stretch 50 +set g_balance_grapplehook_airfriction 0.2 +set g_balance_grapplehook_health 130 +set g_balance_grapplehook_damagedbycontents 0 +// }}} + +// {{{ weapon properties +// {{{ laser +set g_balance_laser_melee_animtime 0.3 +set g_balance_laser_melee_damage 80 +set g_balance_laser_melee_delay 0.25 +set g_balance_laser_melee_force 200 +set g_balance_laser_melee_multihit 1 +set g_balance_laser_melee_no_doubleslap 1 +set g_balance_laser_melee_nonplayerdamage 40 +set g_balance_laser_melee_range 120 +set g_balance_laser_melee_refire 1.25 +set g_balance_laser_melee_swing_side 120 +set g_balance_laser_melee_swing_up 30 +set g_balance_laser_melee_time 0.15 +set g_balance_laser_melee_traces 10 + +set g_balance_laser_primary 1 // 0 = shockwave attack, 1 = projectile primary +set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high +set g_balance_laser_primary_edgedamage 20 +set g_balance_laser_primary_force 150 // this looks insanely low, but actually isn't with zscale and velocitybias +set g_balance_laser_primary_radius 60 +set g_balance_laser_primary_speed 5000 +set g_balance_laser_primary_spread 0 +set g_balance_laser_primary_refire 0.6 +set g_balance_laser_primary_animtime 0.4 +set g_balance_laser_primary_lifetime 5 +set g_balance_laser_primary_shotangle 0 +set g_balance_laser_primary_delay 0 +set g_balance_laser_primary_force_zscale 2 // 300 upforce +set g_balance_laser_primary_force_velocitybias 0.3 +set g_balance_laser_primary_force_other_scale 2.5 // force 375 when pushing others around + +set g_balance_laser_secondary 0 // 0 = switch away to last used weapon, 1 = projectile secondary, 2 = melee secondary +set g_balance_laser_secondary_damage 200 // dps +set g_balance_laser_secondary_edgedamage 0 +set g_balance_laser_secondary_force 1300 +set g_balance_laser_secondary_radius 60 +set g_balance_laser_secondary_speed 0 +set g_balance_laser_secondary_spread 0 +set g_balance_laser_secondary_refire 0.066 +set g_balance_laser_secondary_animtime 0.066 +set g_balance_laser_secondary_lifetime 0 +set g_balance_laser_secondary_shotangle 0 +set g_balance_laser_secondary_delay 0 +set g_balance_laser_secondary_force_zscale 1.25 +set g_balance_laser_secondary_force_velocitybias 0 +set g_balance_laser_secondary_force_other_scale 0 + +set g_balance_laser_shockwave_damage 20 +set g_balance_laser_shockwave_distance 2000 +set g_balance_laser_shockwave_edgedamage 0 +set g_balance_laser_shockwave_force 200 +set g_balance_laser_shockwave_force_forwardbias 50 +set g_balance_laser_shockwave_force_zscale 1.5 +set g_balance_laser_shockwave_jump_damage 20 +set g_balance_laser_shockwave_jump_edgedamage 0 +set g_balance_laser_shockwave_jump_force 300 +set g_balance_laser_shockwave_jump_force_velocitybias 0 +set g_balance_laser_shockwave_jump_force_zscale 1.25 +set g_balance_laser_shockwave_jump_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_jump_multiplier_distance 0.5 +set g_balance_laser_shockwave_jump_multiplier_min 0 +set g_balance_laser_shockwave_jump_radius 150 +set g_balance_laser_shockwave_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_multiplier_distance 0.5 +set g_balance_laser_shockwave_multiplier_min 0 +set g_balance_laser_shockwave_splash_damage 15 +set g_balance_laser_shockwave_splash_edgedamage 0 +set g_balance_laser_shockwave_splash_force 100 +set g_balance_laser_shockwave_splash_force_forwardbias 50 +set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_splash_multiplier_distance 0.5 +set g_balance_laser_shockwave_splash_multiplier_min 0 +set g_balance_laser_shockwave_splash_radius 70 +set g_balance_laser_shockwave_spread_max 100 +set g_balance_laser_shockwave_spread_min 20 + +set g_balance_laser_switchdelay_drop 0.15 +set g_balance_laser_switchdelay_raise 0.15 +set g_balance_laser_reload_ammo 0 //default: 6 +set g_balance_laser_reload_time 2 +// }}} +// {{{ shotgun +set g_balance_shotgun_primary_bullets 18 +set g_balance_shotgun_primary_damage 3.5 // LOG: changed from 4 to 3.5, total damage 63 +set g_balance_shotgun_primary_force 20 +set g_balance_shotgun_primary_spread 0.16 // LOG: changed from 0.18 -> 0.16 to compensate a little for lower damage +set g_balance_shotgun_primary_refire 1 +set g_balance_shotgun_primary_animtime 0.3 +set g_balance_shotgun_primary_ammo 1 - set g_balance_shotgun_primary_speed 12000 - set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu ++set g_balance_shotgun_primary_solidpenetration 3.8 +set g_balance_shotgun_secondary 1 +set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow +set g_balance_shotgun_secondary_melee_range 120 +set g_balance_shotgun_secondary_melee_swing_side 120 +set g_balance_shotgun_secondary_melee_swing_up 30 +set g_balance_shotgun_secondary_melee_time 0.15 +set g_balance_shotgun_secondary_melee_traces 10 +set g_balance_shotgun_secondary_melee_no_doubleslap 1 +set g_balance_shotgun_secondary_melee_nonplayerdamage 0 +set g_balance_shotgun_secondary_melee_multihit 1 +set g_balance_shotgun_secondary_damage 110 +set g_balance_shotgun_secondary_force 150 +set g_balance_shotgun_secondary_refire 1.1 +set g_balance_shotgun_secondary_animtime 1 +set g_balance_shotgun_switchdelay_drop 0.15 +set g_balance_shotgun_switchdelay_raise 0.15 +set g_balance_shotgun_reload_ammo 0 //default: 5 +set g_balance_shotgun_reload_time 2 +// }}} +// {{{ uzi +set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary +set g_balance_uzi_spread_min 0.02 +set g_balance_uzi_spread_max 0.3 // LOG: 0.6 -> 0.3 +set g_balance_uzi_spread_add 0.008 + +set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more) +set g_balance_uzi_burst_animtime 0.45 +set g_balance_uzi_burst_refire 0.05 // refire between burst bullets +set g_balance_uzi_burst_refire2 0.45 // refire after burst +set g_balance_uzi_burst_spread 0.07 +set g_balance_uzi_burst_damage 25 +set g_balance_uzi_burst_force 50 +set g_balance_uzi_burst_ammo 3 + +set g_balance_uzi_first 1 +set g_balance_uzi_first_damage 15 / f/ LOG: 22 -> 15 +set g_balance_uzi_first_force 50 +set g_balance_uzi_first_spread 0.03 +set g_balance_uzi_first_refire 0.2 +set g_balance_uzi_first_ammo 2 + +set g_balance_uzi_sustained_damage 12 // 120 dps +set g_balance_uzi_sustained_force 12 +set g_balance_uzi_sustained_spread 0.06 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_ammo 1 + - set g_balance_uzi_speed 18000 - set g_balance_uzi_bulletconstant 115 // 13.1qu ++set g_balance_uzi_solidpenetration 13.1 + +set g_balance_uzi_switchdelay_drop 0.15 +set g_balance_uzi_switchdelay_raise 0.15 + +set g_balance_uzi_reload_ammo 0 //default: 30 +set g_balance_uzi_reload_time 2 +// }}} +// {{{ mortar +set g_balance_grenadelauncher_primary_type 0 +set g_balance_grenadelauncher_primary_damage 44 +set g_balance_grenadelauncher_primary_edgedamage 32 +set g_balance_grenadelauncher_primary_force 300 +set g_balance_grenadelauncher_primary_radius 115 +set g_balance_grenadelauncher_primary_speed 1500 +set g_balance_grenadelauncher_primary_speed_up 225 +set g_balance_grenadelauncher_primary_speed_z 0 +set g_balance_grenadelauncher_primary_spread 0 +set g_balance_grenadelauncher_primary_lifetime 5 +set g_balance_grenadelauncher_primary_lifetime2 0.65 +set g_balance_grenadelauncher_primary_refire 0.8 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_primary_health 80 +set g_balance_grenadelauncher_primary_damageforcescale 0 +set g_balance_grenadelauncher_primary_remote_minbouncecnt 0 + +set g_balance_grenadelauncher_secondary_type 1 +set g_balance_grenadelauncher_secondary_damage 62 +set g_balance_grenadelauncher_secondary_edgedamage 32 +set g_balance_grenadelauncher_secondary_force 300 +set g_balance_grenadelauncher_secondary_radius 150 +set g_balance_grenadelauncher_secondary_speed 1000 +set g_balance_grenadelauncher_secondary_speed_up 250 +set g_balance_grenadelauncher_secondary_speed_z 0 +set g_balance_grenadelauncher_secondary_spread 0 +set g_balance_grenadelauncher_secondary_lifetime 3 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0 +set g_balance_grenadelauncher_secondary_lifetime_stick 0.65 +set g_balance_grenadelauncher_secondary_refire 0.8 +set g_balance_grenadelauncher_secondary_animtime 0.3 +set g_balance_grenadelauncher_secondary_ammo 2 +set g_balance_grenadelauncher_secondary_health 40 +set g_balance_grenadelauncher_secondary_damageforcescale 0 +set g_balance_grenadelauncher_secondary_remote_detonateprimary 0 + +set g_balance_grenadelauncher_bouncefactor 0.5 +set g_balance_grenadelauncher_bouncestop 0.12 + +set g_balance_grenadelauncher_switchdelay_drop 0.15 +set g_balance_grenadelauncher_switchdelay_raise 0.15 + +set g_balance_grenadelauncher_reload_ammo 0 //default: 12 +set g_balance_grenadelauncher_reload_time 2 +// }}} +// {{{ electro +set g_balance_electro_lightning 1 +set g_balance_electro_primary_damage 100 +set g_balance_electro_primary_edgedamage 0 +set g_balance_electro_primary_force 425 +set g_balance_electro_primary_force_up 125 +set g_balance_electro_primary_radius 850 +set g_balance_electro_primary_comboradius 150 +set g_balance_electro_primary_speed 0 +set g_balance_electro_primary_spread 0 +set g_balance_electro_primary_lifetime 0 +set g_balance_electro_primary_refire 0.4 +set g_balance_electro_primary_animtime 0.2 +set g_balance_electro_primary_ammo 5 +set g_balance_electro_primary_range 800 +set g_balance_electro_primary_falloff_mindist 0 +set g_balance_electro_primary_falloff_maxdist 0 +set g_balance_electro_primary_falloff_halflifedist 0 +set g_balance_electro_secondary_damage 25 +set g_balance_electro_secondary_edgedamage 0 +set g_balance_electro_secondary_force 100 +set g_balance_electro_secondary_radius 100 +set g_balance_electro_secondary_speed 700 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_speed_z 0 +set g_balance_electro_secondary_spread 0.08 +set g_balance_electro_secondary_lifetime 3.5 +set g_balance_electro_secondary_refire 0.2 +set g_balance_electro_secondary_refire2 2 +set g_balance_electro_secondary_animtime 0.2 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_secondary_health 10 +set g_balance_electro_secondary_damageforcescale 4 +set g_balance_electro_secondary_damagedbycontents 0 +set g_balance_electro_secondary_count 3 +set g_balance_electro_secondary_bouncefactor 0.5 +set g_balance_electro_secondary_bouncestop 0.075 +set g_balance_electro_combo_damage 50 +set g_balance_electro_combo_edgedamage 0 +set g_balance_electro_combo_force 80 +set g_balance_electro_combo_radius 250 +set g_balance_electro_combo_comboradius 0 +set g_balance_electro_combo_speed 400 +set g_balance_electro_combo_safeammocheck 1 +set g_balance_electro_switchdelay_drop 0.15 +set g_balance_electro_switchdelay_raise 0.15 +set g_balance_electro_reload_ammo 0 //default: 20 +set g_balance_electro_reload_time 2 +// }}} +// {{{ lightning +set g_balance_lightning_primary_ammo 5 +set g_balance_lightning_primary_animtime 0.2 +set g_balance_lightning_primary_damage 100 +set g_balance_lightning_primary_edgedamage 0 +set g_balance_lightning_primary_falloff_mindist 0 +set g_balance_lightning_primary_falloff_maxdist 0 +set g_balance_lightning_primary_falloff_halflifedist 0 +set g_balance_lightning_primary_force 425 +set g_balance_lightning_primary_lifetime 0 +set g_balance_lightning_primary_radius 850 +set g_balance_lightning_primary_range 800 +set g_balance_lightning_primary_refire 0.4 +set g_balance_lightning_primary_speed 0 +set g_balance_lightning_primary_spread 0 +set g_balance_lightning_secondary_ammo 5 +set g_balance_lightning_secondary_animtime 0.5 +set g_balance_lightning_secondary_damage 100 +set g_balance_lightning_secondary_damageforcescale 4 +set g_balance_lightning_secondary_edgedamage 80 +set g_balance_lightning_secondary_flyingdamage 1 +set g_balance_lightning_secondary_flyingforce -80 +set g_balance_lightning_secondary_flyingradius 200 +set g_balance_lightning_secondary_force -200 +set g_balance_lightning_secondary_health 1 +set g_balance_lightning_secondary_lifetime 30 +set g_balance_lightning_secondary_radius 300 +set g_balance_lightning_secondary_refire 5 +set g_balance_lightning_secondary_speed 600 +// }}} +// {{{ crylink +set g_balance_crylink_primary_damage 7 // LOG: 10 -> 7 +set g_balance_crylink_primary_edgedamage 4 // LOG: 6 -> 4 +set g_balance_crylink_primary_force 35 +set g_balance_crylink_primary_radius 80 +set g_balance_crylink_primary_speed 1500 +set g_balance_crylink_primary_spread 0.05 +set g_balance_crylink_primary_shots 7 +set g_balance_crylink_primary_bounces 2 +set g_balance_crylink_primary_refire 0.8 +set g_balance_crylink_primary_animtime 0.3 +set g_balance_crylink_primary_ammo 2 +set g_balance_crylink_primary_bouncedamagefactor 0.2 +set g_balance_crylink_primary_joindelay 0 +set g_balance_crylink_primary_joinspread 0.2 +set g_balance_crylink_primary_joinexplode 0 +set g_balance_crylink_primary_joinexplode_damage 0 +set g_balance_crylink_primary_joinexplode_edgedamage 0 +set g_balance_crylink_primary_joinexplode_radius 0 +set g_balance_crylink_primary_joinexplode_force 0 +set g_balance_crylink_primary_linkexplode 1 + +set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000 +set g_balance_crylink_primary_middle_fadetime 5 +set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300 +set g_balance_crylink_primary_other_fadetime 0.25 + +set g_balance_crylink_secondary 1 +set g_balance_crylink_secondary_damage 5 // LOG: 8 -> 5 +set g_balance_crylink_secondary_edgedamage 3 +set g_balance_crylink_secondary_force 16 // LOG: 20 -> 16 +set g_balance_crylink_secondary_radius 15 // LOG: 20 -> 15 +set g_balance_crylink_secondary_speed 1250 // LOG: 1500 -> 1250 +set g_balance_crylink_secondary_spread 0.1 +set g_balance_crylink_secondary_spreadtype 0 +set g_balance_crylink_secondary_shots 6 +set g_balance_crylink_secondary_bounces 2 +set g_balance_crylink_secondary_refire 0.9 // LOG: 0.8 -> 0.9 +set g_balance_crylink_secondary_animtime 0.3 +set g_balance_crylink_secondary_ammo 3 // LOG: 2 -> 3 +set g_balance_crylink_secondary_bouncedamagefactor 0.4 // LOG: 0.2 -> 0.4 +set g_balance_crylink_secondary_joindelay 0 +set g_balance_crylink_secondary_joinspread 0.2 +set g_balance_crylink_secondary_joinexplode 0 +set g_balance_crylink_secondary_joinexplode_damage 0 +set g_balance_crylink_secondary_joinexplode_edgedamage 0 +set g_balance_crylink_secondary_joinexplode_radius 0 +set g_balance_crylink_secondary_joinexplode_force 0 +set g_balance_crylink_secondary_linkexplode 0 + +set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000 +set g_balance_crylink_secondary_middle_fadetime 5 +set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 8000 +set g_balance_crylink_secondary_line_fadetime 0.25 + +set g_balance_crylink_switchdelay_drop 0.15 +set g_balance_crylink_switchdelay_raise 0.15 + +set g_balance_crylink_reload_ammo 0 //default: 10 +set g_balance_crylink_reload_time 2 +// }}} +// {{{ nex +set g_balance_nex_primary_damage 90 +set g_balance_nex_primary_force 500 +set g_balance_nex_primary_refire 1 +set g_balance_nex_primary_animtime 0.3 +set g_balance_nex_primary_ammo 5 +set g_balance_nex_primary_damagefalloff_mindist 0 +set g_balance_nex_primary_damagefalloff_maxdist 0 +set g_balance_nex_primary_damagefalloff_halflife 0 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 + +set g_balance_nex_secondary 0 // LOG: disable secondary +set g_balance_nex_secondary_charge 0 // LOG: disable secondary charge +set g_balance_nex_secondary_charge_rate 0.4 +set g_balance_nex_secondary_chargepool 1 +set g_balance_nex_secondary_chargepool_regen 0.25 +set g_balance_nex_secondary_chargepool_pause_regen 2 +set g_balance_nex_secondary_chargepool_pause_health_regen 0.5 +set g_balance_nex_secondary_damage 0 +set g_balance_nex_secondary_force 0 +set g_balance_nex_secondary_refire 0 +set g_balance_nex_secondary_animtime 0 +set g_balance_nex_secondary_ammo 0.4 // full charge pool is 1, so it depletes in 2.5 secs +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 + +set g_balance_nex_charge 1 +set g_balance_nex_charge_mindmg 20 +set g_balance_nex_charge_start 0.5 +set g_balance_nex_charge_rate 0.5 +set g_balance_nex_charge_animlimit 0.5 +set g_balance_nex_charge_limit 1 // LOG: 0.5 -> 1 - allow to fully charge automaticaly +set g_balance_nex_charge_rot_rate 0 // LOG: 0.1 -> 0 - disable rot +set g_balance_nex_charge_rot_pause 0.5 // Dont rot down until this long after release of charge button +set g_balance_nex_charge_shot_multiplier 0 +set g_balance_nex_charge_velocity_rate 0 +set g_balance_nex_charge_minspeed 600 +set g_balance_nex_charge_maxspeed 1000 + +set g_balance_nex_switchdelay_drop 0.15 +set g_balance_nex_switchdelay_raise 0.15 + +set g_balance_nex_reload_ammo 0 //default: 25 +set g_balance_nex_reload_time 2 +// }}} +// {{{ minstanex +set g_balance_minstanex_refire 1 +set g_balance_minstanex_animtime 0.50 +set g_balance_minstanex_ammo 10 +set g_balance_minstanex_laser_ammo 0 +set g_balance_minstanex_laser_animtime 0.3 +set g_balance_minstanex_laser_refire 0.6 +set g_balance_minstanex_switchdelay_drop 0.15 +set g_balance_minstanex_switchdelay_raise 0.15 +set g_balance_minstanex_reload_ammo 0 //default: 50 +set g_balance_minstanex_reload_time 2 +// }}} +// {{{ hagar +set g_balance_hagar_primary_damage 14 +set g_balance_hagar_primary_edgedamage 6 +set g_balance_hagar_primary_force 70 +set g_balance_hagar_primary_health 0 +set g_balance_hagar_primary_damageforcescale 0 +set g_balance_hagar_primary_radius 110 +set g_balance_hagar_primary_spread 0.1 +set g_balance_hagar_primary_speed 1800 +set g_balance_hagar_primary_lifetime 5 +set g_balance_hagar_primary_refire 0.12 +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary 1 +set g_balance_hagar_secondary_load 0 +set g_balance_hagar_secondary_load_speed 0.6 +set g_balance_hagar_secondary_load_spread 0.075 +set g_balance_hagar_secondary_load_spread_bias 0.5 +set g_balance_hagar_secondary_load_max 4 +set g_balance_hagar_secondary_load_hold 0 +set g_balance_hagar_secondary_load_releasedeath 1 +set g_balance_hagar_secondary_load_abort 1 +set g_balance_hagar_secondary_load_linkexplode 0 +set g_balance_hagar_secondary_load_animtime 0.2 +set g_balance_hagar_secondary_damage 14 // default for _load: 32 +set g_balance_hagar_secondary_edgedamage 6 // default for _load: 10 +set g_balance_hagar_secondary_force 70 // default for _load: 160 +set g_balance_hagar_secondary_health 0 +set g_balance_hagar_secondary_damageforcescale 0 +set g_balance_hagar_secondary_radius 125 +set g_balance_hagar_secondary_spread 0.15 // default for _load: 0.08 +set g_balance_hagar_secondary_speed 1800 +set g_balance_hagar_secondary_lifetime_min 5 +set g_balance_hagar_secondary_lifetime_rand 0 +set g_balance_hagar_secondary_refire 0.12 // default for _load: 0.8 +set g_balance_hagar_secondary_ammo 1 +set g_balance_hagar_switchdelay_drop 0.15 +set g_balance_hagar_switchdelay_raise 0.15 +set g_balance_hagar_reload_ammo 0 //default: 25 +set g_balance_hagar_reload_time 2 +// }}} +// {{{ rocketlauncher +set g_balance_rocketlauncher_damage 82 +set g_balance_rocketlauncher_edgedamage 32 +set g_balance_rocketlauncher_force 350 +set g_balance_rocketlauncher_radius 130 +set g_balance_rocketlauncher_speed 1400 +set g_balance_rocketlauncher_speedaccel 1400 +set g_balance_rocketlauncher_speedstart 800 +set g_balance_rocketlauncher_lifetime 5 +set g_balance_rocketlauncher_refire 1 +set g_balance_rocketlauncher_animtime 0.3 +set g_balance_rocketlauncher_ammo 3 +set g_balance_rocketlauncher_health 0 +set g_balance_rocketlauncher_damageforcescale 0 +set g_balance_rocketlauncher_detonatedelay 0.05 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time +set g_balance_rocketlauncher_guiderate 42 // max degrees per second +set g_balance_rocketlauncher_guideratedelay 0.01 // immediate +set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic) +set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in +set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again +set g_balance_rocketlauncher_remote_damage 60 +set g_balance_rocketlauncher_remote_edgedamage 20 +set g_balance_rocketlauncher_remote_radius 120 +set g_balance_rocketlauncher_remote_force 350 +set g_balance_rocketlauncher_switchdelay_drop 0.15 +set g_balance_rocketlauncher_switchdelay_raise 0.15 +set g_balance_rocketlauncher_reload_ammo 0 //default: 25 +set g_balance_rocketlauncher_reload_time 2 +// }}} +// {{{ porto +set g_balance_porto_primary_refire 1.5 +set g_balance_porto_primary_animtime 0.2 +set g_balance_porto_primary_speed 2000 +set g_balance_porto_primary_lifetime 5 +set g_balance_porto_secondary 0 +set g_balance_porto_secondary_refire 1.5 +set g_balance_porto_secondary_animtime 0.2 +set g_balance_porto_secondary_speed 2000 +set g_balance_porto_secondary_lifetime 5 +set g_balance_porto_switchdelay_drop 0.15 +set g_balance_porto_switchdelay_raise 0.15 +set g_balance_portal_health 200 // these get recharged whenever the portal is used +set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used +// }}} +// {{{ hook +set g_balance_hook_primary_fuel 5 // hook monkeys set 0 +set g_balance_hook_primary_refire 0 // hook monkeys set 0 +set g_balance_hook_primary_animtime 0.2 // good shoot anim +set g_balance_hook_primary_hooked_time_max 0 // infinite +set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free +set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked +set g_balance_hook_secondary_damage 25 // not much +set g_balance_hook_secondary_edgedamage 5 // not much +set g_balance_hook_secondary_radius 500 // LOTS +set g_balance_hook_secondary_force -2000 // LOTS +set g_balance_hook_secondary_ammo 50 // a whole pack +set g_balance_hook_secondary_lifetime 5 // infinite +set g_balance_hook_secondary_speed 0 // not much throwing +set g_balance_hook_secondary_gravity 5 // fast falling +set g_balance_hook_secondary_refire 3 // don't drop too many bombs... +set g_balance_hook_secondary_animtime 0.2 // good shoot anim +set g_balance_hook_secondary_power 3 // effect behaves like a square function +set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds +set g_balance_hook_secondary_health 0 +set g_balance_hook_secondary_damageforcescale 0 +set g_balance_hook_switchdelay_drop 0.15 +set g_balance_hook_switchdelay_raise 0.15 +// }}} +// {{{ tuba +set g_balance_tuba_refire 0.05 +set g_balance_tuba_animtime 0.05 +set g_balance_tuba_attenuation 0.5 +set g_balance_tuba_volume 1 +set g_balance_tuba_fadetime 0.25 +set g_balance_tuba_damage 5 +set g_balance_tuba_edgedamage 0 +set g_balance_tuba_radius 200 +set g_balance_tuba_force 40 +set g_balance_tuba_pitchstep 6 +set g_balance_tuba_switchdelay_drop 0.15 +set g_balance_tuba_switchdelay_raise 0.15 +// }}} +// {{{ fireball +set g_balance_fireball_primary_animtime 0.2 +set g_balance_fireball_primary_bfgdamage 100 +set g_balance_fireball_primary_bfgforce 0 +set g_balance_fireball_primary_bfgradius 1000 +set g_balance_fireball_primary_damage 200 +set g_balance_fireball_primary_damageforcescale 4 +set g_balance_fireball_primary_edgedamage 0 +set g_balance_fireball_primary_force 700 +set g_balance_fireball_primary_health 50 +set g_balance_fireball_primary_laserburntime 0.5 +set g_balance_fireball_primary_laserdamage 80 +set g_balance_fireball_primary_laseredgedamage 20 +set g_balance_fireball_primary_laserradius 256 +set g_balance_fireball_primary_lifetime 15 +set g_balance_fireball_primary_radius 200 +set g_balance_fireball_primary_refire 5 +set g_balance_fireball_primary_refire2 0 +set g_balance_fireball_primary_speed 650 +set g_balance_fireball_primary_spread 0 +set g_balance_fireball_secondary_animtime 0.2 +set g_balance_fireball_secondary_damage 40 +set g_balance_fireball_secondary_damageforcescale 4 +set g_balance_fireball_secondary_damagetime 5 +set g_balance_fireball_secondary_force 100 +set g_balance_fireball_secondary_laserburntime 0.5 +set g_balance_fireball_secondary_laserdamage 50 +set g_balance_fireball_secondary_laseredgedamage 20 +set g_balance_fireball_secondary_laserradius 110 +set g_balance_fireball_secondary_lifetime 7 +set g_balance_fireball_secondary_refire 2 +set g_balance_fireball_secondary_speed 900 +set g_balance_fireball_secondary_speed_up 100 +set g_balance_fireball_secondary_speed_z 0 +set g_balance_fireball_secondary_spread 0 +set g_balance_fireball_switchdelay_drop 0.15 +set g_balance_fireball_switchdelay_raise 0.15 +// }}} diff --cc oldbalanceXDF.cfg index f408bf880,000000000..3e8f0d2c0 mode 100644,000000..100644 --- a/oldbalanceXDF.cfg +++ b/oldbalanceXDF.cfg @@@ -1,751 -1,0 +1,749 @@@ +g_mod_balance XDF + +// {{{ starting gear +set g_start_weapon_laser 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_shotgun 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_uzi 1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" // UNTIL IT CAN BE REMOVED FROM CODE +set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default" +set g_balance_health_start 100 +set g_balance_armor_start 0 +set g_start_ammo_shells 15 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_start_ammo_fuel 0 +set g_warmup_start_health 100 "starting values when being in warmup-stage" +set g_warmup_start_armor 100 "starting values when being in warmup-stage" +set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" +set g_warmup_start_ammo_nails 160 "starting values when being in warmup-stage" +set g_warmup_start_ammo_rockets 80 "starting values when being in warmup-stage" +set g_warmup_start_ammo_cells 90 "starting values when being in warmup-stage" +set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage" +set g_lms_start_health 200 +set g_lms_start_armor 200 +set g_lms_start_ammo_shells 60 +set g_lms_start_ammo_nails 320 +set g_lms_start_ammo_rockets 160 +set g_lms_start_ammo_cells 180 +set g_lms_start_ammo_fuel 0 +set g_balance_nix_roundtime 25 +set g_balance_nix_incrtime 1.6 +set g_balance_nix_ammo_shells 60 +set g_balance_nix_ammo_nails 320 +set g_balance_nix_ammo_rockets 160 +set g_balance_nix_ammo_cells 180 +set g_balance_nix_ammo_fuel 0 +set g_balance_nix_ammoincr_shells 2 // eh this will need figured out later I assume +set g_balance_nix_ammoincr_nails 6 +set g_balance_nix_ammoincr_rockets 2 +set g_balance_nix_ammoincr_cells 2 +set g_balance_nix_ammoincr_fuel 2 +// }}} + +// {{{ pickup items +set g_pickup_ammo_anyway 1 +set g_pickup_weapons_anyway 1 +set g_pickup_shells 15 +set g_pickup_shells_weapon 15 +set g_pickup_shells_max 60 +set g_pickup_nails 80 +set g_pickup_nails_weapon 80 +set g_pickup_nails_max 320 +set g_pickup_rockets 40 +set g_pickup_rockets_weapon 40 +set g_pickup_rockets_max 160 +set g_pickup_cells 30 +set g_pickup_cells_weapon 30 +set g_pickup_cells_max 180 +set g_pickup_fuel 50 +set g_pickup_fuel_weapon 50 +set g_pickup_fuel_jetpack 100 +set g_pickup_fuel_max 100 +set g_pickup_armorsmall 5 +set g_pickup_armorsmall_max 200 +set g_pickup_armorsmall_anyway 1 +set g_pickup_armormedium 25 +set g_pickup_armormedium_max 200 +set g_pickup_armormedium_anyway 1 +set g_pickup_armorbig 50 +set g_pickup_armorbig_max 200 +set g_pickup_armorbig_anyway 1 +set g_pickup_armorlarge 100 +set g_pickup_armorlarge_max 200 +set g_pickup_armorlarge_anyway 1 +set g_pickup_healthsmall 5 +set g_pickup_healthsmall_max 200 +set g_pickup_healthsmall_anyway 1 +set g_pickup_healthmedium 25 +set g_pickup_healthmedium_max 200 +set g_pickup_healthmedium_anyway 1 +set g_pickup_healthlarge 50 +set g_pickup_healthlarge_max 200 +set g_pickup_healthlarge_anyway 1 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 200 +set g_pickup_healthmega_anyway 1 +set g_pickup_respawntime_short 0.1 +set g_pickup_respawntime_medium 0.1 +set g_pickup_respawntime_long 0.1 +set g_pickup_respawntime_powerup 0.1 +set g_pickup_respawntime_weapon 0.1 +set g_pickup_respawntime_superweapon 0.1 +set g_pickup_respawntime_ammo 0.1 +set g_pickup_respawntimejitter_short 0 +set g_pickup_respawntimejitter_medium 0 +set g_pickup_respawntimejitter_long 0 +set g_pickup_respawntimejitter_powerup 30 +set g_pickup_respawntimejitter_weapon 0 +set g_pickup_respawntimejitter_superweapon 10 +set g_pickup_respawntimejitter_ammo 0 +// }}} + +// {{{ regen/rot +set g_balance_health_regen 0.08 +set g_balance_health_regenlinear 0.5 +set g_balance_pause_health_regen 5 +set g_balance_pause_health_regen_spawn 0 +set g_balance_health_rot 0.04 +set g_balance_health_rotlinear 0.75 +set g_balance_pause_health_rot 1 +set g_balance_pause_health_rot_spawn 5 +set g_balance_health_regenstable 100 +set g_balance_health_rotstable 100 +set g_balance_health_limit 999 +set g_balance_armor_regen 0 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rot 0.04 +set g_balance_armor_rotlinear 0.75 +set g_balance_pause_armor_rot 1 +set g_balance_pause_armor_rot_spawn 5 +set g_balance_armor_regenstable 100 +set g_balance_armor_rotstable 100 +set g_balance_armor_limit 999 +set g_balance_armor_blockpercent 0.6 +set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)" +set g_balance_fuel_regenlinear 0 +set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter +set g_balance_fuel_rot 0.05 +set g_balance_fuel_rotlinear 0 +set g_balance_pause_fuel_rot 5 +set g_balance_pause_fuel_rot_spawn 10 +set g_balance_fuel_regenstable 50 +set g_balance_fuel_rotstable 100 +set g_balance_fuel_limit 999 +// }}} + +// {{{ misc +set g_balance_selfdamagepercent 0 +set g_weaponspeedfactor 1 "weapon projectile speed multiplier" +set g_weaponratefactor 1 "weapon fire rate multiplier" +set g_weapondamagefactor 1 "weapon damage multiplier" +set g_weaponforcefactor 1 "weapon force multiplier" +set g_weaponspreadfactor 1 "weapon spread multiplier" +set g_balance_firetransfer_time 0.9 +set g_balance_firetransfer_damage 0.8 +set g_throughfloor_damage 0.4 +set g_throughfloor_force 0.7 +set g_projectiles_damage 2 +// possible values: +// -2: absolutely no damage to projectiles (no exceptions) +// -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines) +// 0: only damage from contents (lava/slime) or exceptions +// 1: only self damage or damage from contents or exceptions +// 2: allow all damage to projectiles normally +set g_projectiles_keep_owner 0 +set g_projectiles_newton_style 2 +// possible values: +// 0: absolute velocity projectiles (like Quake) +// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +set g_projectiles_newton_style_2_minfactor 0.8 +set g_projectiles_newton_style_2_maxfactor 1.5 +set g_projectiles_spread_style 7 +// possible values: +// 0: forward + solid sphere (like Quake) - varies velocity +// 1: forward + flattened solid sphere +// 2: forward + solid circle +// 3: forward + normal distribution 3D - varies velocity +// 4: forward + normal distribution on a plane +// 5: forward + circle with 1-r falloff +// 6: forward + circle with 1-r^2 falloff +// 7: forward + circle with (1-r)(2-r) falloff +set g_balance_falldamage_deadminspeed 250 +set g_balance_falldamage_minspeed 900 +set g_balance_falldamage_factor 0.20 +set g_balance_falldamage_maxdamage 40 +set g_balance_damagepush_speedfactor 2.5 +set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage +set g_balance_contents_drowndelay 10 // time under water before a player begins drowning +set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning +set g_balance_contents_playerdamage_lava 50 // damage per second for while player is inside lava +set g_balance_contents_playerdamage_slime 30 // damage per second for while player is inside slime +set g_balance_contents_projectiledamage 10000 // instantly kill projectiles upon touching lava/slime +set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone into a death trap" +// }}} + +// {{{ powerups +set g_balance_powerup_invincible_takedamage 0.25 // only 1/4th damage is taken +set g_balance_powerup_invincible_time 999 +set g_balance_powerup_strength_damage 3 +set g_balance_powerup_strength_force 3 +set g_balance_powerup_strength_time 999 +set g_balance_powerup_strength_selfdamage 1.5 +set g_balance_powerup_strength_selfforce 1.5 +set g_balance_superweapons_time 30 +// }}} + +// {{{ jetpack/hook +set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack" +set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction" +set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)" +set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction" +set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction" +set g_jetpack_fuel 8 "fuel per second for jetpack" +set g_jetpack_attenuation 2 "jetpack sound attenuation" + +set g_grappling_hook_tarzan 2 // 2: can also pull players +set g_balance_grapplehook_speed_fly 1800 +set g_balance_grapplehook_speed_pull 2000 +set g_balance_grapplehook_force_rubber 2000 +set g_balance_grapplehook_force_rubber_overstretch 1000 +set g_balance_grapplehook_length_min 50 +set g_balance_grapplehook_stretch 50 +set g_balance_grapplehook_airfriction 0.2 +set g_balance_grapplehook_health 130 +set g_balance_grapplehook_damagedbycontents 0 +// }}} + +// {{{ weapon properties +// {{{ laser +set g_balance_laser_melee_animtime 0.3 +set g_balance_laser_melee_damage 80 +set g_balance_laser_melee_delay 0.25 +set g_balance_laser_melee_force 200 +set g_balance_laser_melee_multihit 1 +set g_balance_laser_melee_no_doubleslap 1 +set g_balance_laser_melee_nonplayerdamage 40 +set g_balance_laser_melee_range 120 +set g_balance_laser_melee_refire 1.25 +set g_balance_laser_melee_swing_side 120 +set g_balance_laser_melee_swing_up 30 +set g_balance_laser_melee_time 0.15 +set g_balance_laser_melee_traces 10 + +set g_balance_laser_primary 1 // 0 = shockwave attack, 1 = projectile primary +set g_balance_laser_primary_damage 25 +set g_balance_laser_primary_edgedamage 12.5 +set g_balance_laser_primary_force 250 +set g_balance_laser_primary_radius 70 +set g_balance_laser_primary_speed 6000 +set g_balance_laser_primary_spread 0 +set g_balance_laser_primary_refire 0.7 +set g_balance_laser_primary_animtime 0.3 +set g_balance_laser_primary_lifetime 5 +set g_balance_laser_primary_shotangle 0 +set g_balance_laser_primary_delay 0 +set g_balance_laser_primary_force_zscale 1.5 +set g_balance_laser_primary_force_velocitybias 0 +set g_balance_laser_primary_force_other_scale 1 + +set g_balance_laser_secondary 0 // 0 = switch away to last used weapon, 1 = projectile secondary, 2 = melee secondary +set g_balance_laser_secondary_damage 25 +set g_balance_laser_secondary_edgedamage 12.5 +set g_balance_laser_secondary_force 400 +set g_balance_laser_secondary_radius 70 +set g_balance_laser_secondary_speed 12000 +set g_balance_laser_secondary_spread 0 +set g_balance_laser_secondary_refire 0.7 +set g_balance_laser_secondary_animtime 0.2 +set g_balance_laser_secondary_lifetime 5 +set g_balance_laser_secondary_shotangle -90 +set g_balance_laser_secondary_delay 0 +set g_balance_laser_secondary_force_zscale 1.25 +set g_balance_laser_secondary_force_velocitybias 0 +set g_balance_laser_secondary_force_other_scale 1 + +set g_balance_laser_shockwave_damage 20 +set g_balance_laser_shockwave_distance 2000 +set g_balance_laser_shockwave_edgedamage 0 +set g_balance_laser_shockwave_force 200 +set g_balance_laser_shockwave_force_forwardbias 50 +set g_balance_laser_shockwave_force_zscale 2 +set g_balance_laser_shockwave_jump_damage 20 +set g_balance_laser_shockwave_jump_edgedamage 0 +set g_balance_laser_shockwave_jump_force 300 +set g_balance_laser_shockwave_jump_force_velocitybias 0 +set g_balance_laser_shockwave_jump_force_zscale 1.25 +set g_balance_laser_shockwave_jump_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_jump_multiplier_distance 0.5 +set g_balance_laser_shockwave_jump_multiplier_min 0 +set g_balance_laser_shockwave_jump_radius 150 +set g_balance_laser_shockwave_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_multiplier_distance 0.5 +set g_balance_laser_shockwave_multiplier_min 0 +set g_balance_laser_shockwave_splash_damage 15 +set g_balance_laser_shockwave_splash_edgedamage 0 +set g_balance_laser_shockwave_splash_force 100 +set g_balance_laser_shockwave_splash_force_forwardbias 50 +set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_splash_multiplier_distance 0.5 +set g_balance_laser_shockwave_splash_multiplier_min 0 +set g_balance_laser_shockwave_splash_radius 70 +set g_balance_laser_shockwave_spread_max 120 +set g_balance_laser_shockwave_spread_min 25 + +set g_balance_laser_switchdelay_drop 0 +set g_balance_laser_switchdelay_raise 0 +set g_balance_laser_reload_ammo 0 //default: 6 +set g_balance_laser_reload_time 2 +// }}} +// {{{ shotgun +set g_balance_shotgun_primary_bullets 14 +set g_balance_shotgun_primary_damage 4 +set g_balance_shotgun_primary_force 15 +set g_balance_shotgun_primary_spread 0.12 +set g_balance_shotgun_primary_refire 0.75 +set g_balance_shotgun_primary_animtime 0.2 +set g_balance_shotgun_primary_ammo 1 - set g_balance_shotgun_primary_speed 8000 - set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu ++set g_balance_shotgun_primary_solidpenetration 3.8 +set g_balance_shotgun_secondary 1 +set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow +set g_balance_shotgun_secondary_melee_range 120 +set g_balance_shotgun_secondary_melee_swing_side 120 +set g_balance_shotgun_secondary_melee_swing_up 30 +set g_balance_shotgun_secondary_melee_time 0.15 +set g_balance_shotgun_secondary_melee_traces 10 +set g_balance_shotgun_secondary_melee_no_doubleslap 1 +set g_balance_shotgun_secondary_melee_nonplayerdamage 40 +set g_balance_shotgun_secondary_melee_multihit 1 +set g_balance_shotgun_secondary_damage 80 +set g_balance_shotgun_secondary_force 200 +set g_balance_shotgun_secondary_refire 1.25 +set g_balance_shotgun_secondary_animtime 1 +set g_balance_shotgun_switchdelay_drop 0 +set g_balance_shotgun_switchdelay_raise 0 +set g_balance_shotgun_reload_ammo 0 //default: 5 +set g_balance_shotgun_reload_time 2 +// }}} +// {{{ uzi +set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary +set g_balance_uzi_spread_min 0 +set g_balance_uzi_spread_max 0 +set g_balance_uzi_spread_add 0 + +set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more) +set g_balance_uzi_burst_animtime 0.3 +set g_balance_uzi_burst_refire 0.06 // refire between burst bullets +set g_balance_uzi_burst_refire2 0.45 // refire after burst +set g_balance_uzi_burst_spread 0.03 +set g_balance_uzi_burst_damage 25 +set g_balance_uzi_burst_force 20 +set g_balance_uzi_burst_ammo 3 + +set g_balance_uzi_first 1 +set g_balance_uzi_first_damage 14 +set g_balance_uzi_first_force 5 +set g_balance_uzi_first_spread 0.03 +set g_balance_uzi_first_refire 0.4 +set g_balance_uzi_first_ammo 1 + +set g_balance_uzi_sustained_damage 12 +set g_balance_uzi_sustained_force 5 +set g_balance_uzi_sustained_spread 0 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_ammo 1 + - set g_balance_uzi_speed 18000 - set g_balance_uzi_bulletconstant 115 // 13.1qu ++set g_balance_uzi_solidpenetration 13.1 + +set g_balance_uzi_switchdelay_drop 0 +set g_balance_uzi_switchdelay_raise 0 + +set g_balance_uzi_reload_ammo 0 //default: 30 +set g_balance_uzi_reload_time 2 +// }}} +// {{{ mortar +set g_balance_grenadelauncher_primary_type 0 +set g_balance_grenadelauncher_primary_damage 50 +set g_balance_grenadelauncher_primary_edgedamage 25 +set g_balance_grenadelauncher_primary_force 250 +set g_balance_grenadelauncher_primary_radius 100 +set g_balance_grenadelauncher_primary_speed 2000 +set g_balance_grenadelauncher_primary_speed_up 200 +set g_balance_grenadelauncher_primary_speed_z 0 +set g_balance_grenadelauncher_primary_spread 0 +set g_balance_grenadelauncher_primary_lifetime 5 +set g_balance_grenadelauncher_primary_lifetime2 1 +set g_balance_grenadelauncher_primary_refire 0.7 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_primary_health 0 +set g_balance_grenadelauncher_primary_damageforcescale 0 +set g_balance_grenadelauncher_primary_remote_minbouncecnt 0 + +set g_balance_grenadelauncher_secondary_type 1 +set g_balance_grenadelauncher_secondary_damage 60 +set g_balance_grenadelauncher_secondary_edgedamage 30 +set g_balance_grenadelauncher_secondary_force 300 +set g_balance_grenadelauncher_secondary_radius 200 +set g_balance_grenadelauncher_secondary_speed 800 +set g_balance_grenadelauncher_secondary_speed_up 0 +set g_balance_grenadelauncher_secondary_speed_z 200 +set g_balance_grenadelauncher_secondary_spread 0 +set g_balance_grenadelauncher_secondary_lifetime 8 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0.5 +set g_balance_grenadelauncher_secondary_lifetime_stick 0 +set g_balance_grenadelauncher_secondary_refire 0.7 +set g_balance_grenadelauncher_secondary_animtime 0.5 +set g_balance_grenadelauncher_secondary_ammo 2 +set g_balance_grenadelauncher_secondary_health 0 +set g_balance_grenadelauncher_secondary_damageforcescale 0 +set g_balance_grenadelauncher_secondary_remote_detonateprimary 0 + +set g_balance_grenadelauncher_bouncefactor 0.5 +set g_balance_grenadelauncher_bouncestop 0.075 + +set g_balance_grenadelauncher_switchdelay_drop 0 +set g_balance_grenadelauncher_switchdelay_raise 0 + +set g_balance_grenadelauncher_reload_ammo 0 //default: 12 +set g_balance_grenadelauncher_reload_time 2 +// }}} +// {{{ electro +set g_balance_electro_lightning 0 +set g_balance_electro_primary_damage 55 +set g_balance_electro_primary_edgedamage 27.5 +set g_balance_electro_primary_force 200 +set g_balance_electro_primary_force_up 0 +set g_balance_electro_primary_radius 100 +set g_balance_electro_primary_comboradius 150 +set g_balance_electro_primary_speed 2500 +set g_balance_electro_primary_spread 0 +set g_balance_electro_primary_lifetime 5 +set g_balance_electro_primary_refire 0.6 +set g_balance_electro_primary_animtime 0.1 +set g_balance_electro_primary_ammo 4 +set g_balance_electro_primary_range 0 +set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius +set g_balance_electro_primary_falloff_maxdist 850 +set g_balance_electro_primary_falloff_halflifedist 425 +set g_balance_electro_secondary_damage 40 +set g_balance_electro_secondary_edgedamage 20 +set g_balance_electro_secondary_force 200 +set g_balance_electro_secondary_radius 150 +set g_balance_electro_secondary_speed 900 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_speed_z 0 +set g_balance_electro_secondary_spread 0.05 +set g_balance_electro_secondary_lifetime 3 +set g_balance_electro_secondary_refire 0.2 +set g_balance_electro_secondary_refire2 1.5 +set g_balance_electro_secondary_animtime 0.2 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_secondary_health 5 +set g_balance_electro_secondary_damageforcescale 4 +set g_balance_electro_secondary_damagedbycontents 1 +set g_balance_electro_secondary_count 3 +set g_balance_electro_secondary_bouncefactor 0.4 +set g_balance_electro_secondary_bouncestop 0.05 +set g_balance_electro_combo_damage 40 +set g_balance_electro_combo_edgedamage 20 +set g_balance_electro_combo_force 120 +set g_balance_electro_combo_radius 175 +set g_balance_electro_combo_comboradius 275 +set g_balance_electro_combo_speed 2000 +set g_balance_electro_combo_safeammocheck 1 +set g_balance_electro_switchdelay_drop 0 +set g_balance_electro_switchdelay_raise 0 +set g_balance_electro_reload_ammo 0 //default: 20 +set g_balance_electro_reload_time 2 +// }}} +// {{{ crylink +set g_balance_crylink_primary_damage 12 +set g_balance_crylink_primary_edgedamage 6 +set g_balance_crylink_primary_force -50 +set g_balance_crylink_primary_radius 80 +set g_balance_crylink_primary_speed 2000 +set g_balance_crylink_primary_spread 0.08 +set g_balance_crylink_primary_shots 6 +set g_balance_crylink_primary_bounces 1 +set g_balance_crylink_primary_refire 0.7 +set g_balance_crylink_primary_animtime 0.3 +set g_balance_crylink_primary_ammo 3 +set g_balance_crylink_primary_bouncedamagefactor 0.5 +set g_balance_crylink_primary_joindelay 0.1 +set g_balance_crylink_primary_joinspread 0.2 +set g_balance_crylink_primary_joinexplode 1 +set g_balance_crylink_primary_joinexplode_damage 0 +set g_balance_crylink_primary_joinexplode_edgedamage 0 +set g_balance_crylink_primary_joinexplode_radius 0 +set g_balance_crylink_primary_joinexplode_force 0 +set g_balance_crylink_primary_linkexplode 1 + +set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000 +set g_balance_crylink_primary_middle_fadetime 5 +set g_balance_crylink_primary_other_lifetime 5 +set g_balance_crylink_primary_other_fadetime 5 + +set g_balance_crylink_secondary 1 +set g_balance_crylink_secondary_damage 10 +set g_balance_crylink_secondary_edgedamage 5 +set g_balance_crylink_secondary_force -150 +set g_balance_crylink_secondary_radius 100 +set g_balance_crylink_secondary_speed 3000 +set g_balance_crylink_secondary_spread 0.01 +set g_balance_crylink_secondary_spreadtype 1 +set g_balance_crylink_secondary_shots 5 +set g_balance_crylink_secondary_bounces 0 +set g_balance_crylink_secondary_refire 0.7 +set g_balance_crylink_secondary_animtime 0.2 +set g_balance_crylink_secondary_ammo 2 +set g_balance_crylink_secondary_bouncedamagefactor 0.5 +set g_balance_crylink_secondary_joindelay 0 +set g_balance_crylink_secondary_joinspread 0 +set g_balance_crylink_secondary_joinexplode 0 +set g_balance_crylink_secondary_joinexplode_damage 0 +set g_balance_crylink_secondary_joinexplode_edgedamage 0 +set g_balance_crylink_secondary_joinexplode_radius 0 +set g_balance_crylink_secondary_joinexplode_force 0 +set g_balance_crylink_secondary_linkexplode 1 + +set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000 +set g_balance_crylink_secondary_middle_fadetime 5 +set g_balance_crylink_secondary_line_lifetime 5 +set g_balance_crylink_secondary_line_fadetime 5 + +set g_balance_crylink_switchdelay_drop 0 +set g_balance_crylink_switchdelay_raise 0 + +set g_balance_crylink_reload_ammo 0 //default: 10 +set g_balance_crylink_reload_time 2 +// }}} +// {{{ nex +set g_balance_nex_primary_damage 90 +set g_balance_nex_primary_force 400 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_primary_animtime 0.4 +set g_balance_nex_primary_ammo 6 +set g_balance_nex_primary_damagefalloff_mindist 0 // 1000 For tZork ;3 +set g_balance_nex_primary_damagefalloff_maxdist 0 // 3000 +set g_balance_nex_primary_damagefalloff_halflife 0 // 1500 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 // 1500 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_charge 0 +set g_balance_nex_secondary_charge_rate 0.1 +set g_balance_nex_secondary_chargepool 0 +set g_balance_nex_secondary_chargepool_regen 0.15 +set g_balance_nex_secondary_chargepool_pause_regen 1 +set g_balance_nex_secondary_chargepool_pause_health_regen 1 +set g_balance_nex_secondary_damage 0 +set g_balance_nex_secondary_force 0 +set g_balance_nex_secondary_refire 0 +set g_balance_nex_secondary_animtime 0 +set g_balance_nex_secondary_ammo 2 +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 + +set g_balance_nex_charge 1 +set g_balance_nex_charge_mindmg 40 +set g_balance_nex_charge_start 0.5 +set g_balance_nex_charge_rate 0.4 +set g_balance_nex_charge_animlimit 0.5 +set g_balance_nex_charge_limit 1 +set g_balance_nex_charge_rot_rate 0 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button +set g_balance_nex_charge_shot_multiplier 0 +set g_balance_nex_charge_velocity_rate 0 +set g_balance_nex_charge_minspeed 400 +set g_balance_nex_charge_maxspeed 800 + +set g_balance_nex_switchdelay_drop 0 +set g_balance_nex_switchdelay_raise 0 + +set g_balance_nex_reload_ammo 0 //default: 25 +set g_balance_nex_reload_time 2 +// }}} +// {{{ minstanex +set g_balance_minstanex_refire 1 +set g_balance_minstanex_animtime 0.3 +set g_balance_minstanex_ammo 10 +set g_balance_minstanex_laser_ammo 0 +set g_balance_minstanex_laser_animtime 0.3 +set g_balance_minstanex_laser_refire 0.7 +set g_balance_minstanex_switchdelay_drop 0 +set g_balance_minstanex_switchdelay_raise 0 +set g_balance_minstanex_reload_ammo 0 //default: 50 +set g_balance_minstanex_reload_time 2 +// }}} +// {{{ hagar +set g_balance_hagar_primary_damage 25 +set g_balance_hagar_primary_edgedamage 12.5 +set g_balance_hagar_primary_force 92 +set g_balance_hagar_primary_health 15 +set g_balance_hagar_primary_damageforcescale 0 +set g_balance_hagar_primary_radius 25 +set g_balance_hagar_primary_spread 0.03 +set g_balance_hagar_primary_speed 2000 +set g_balance_hagar_primary_lifetime 5 +set g_balance_hagar_primary_refire 0.11 +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary 0 +set g_balance_hagar_secondary_load 1 +set g_balance_hagar_secondary_load_speed 0.5 +set g_balance_hagar_secondary_load_spread 0.075 +set g_balance_hagar_secondary_load_spread_bias 0.5 +set g_balance_hagar_secondary_load_max 4 +set g_balance_hagar_secondary_load_hold 4 +set g_balance_hagar_secondary_load_releasedeath 0 +set g_balance_hagar_secondary_load_abort 0 +set g_balance_hagar_secondary_load_linkexplode 0 +set g_balance_hagar_secondary_load_animtime 0.2 +set g_balance_hagar_secondary_damage 40 +set g_balance_hagar_secondary_edgedamage 20 +set g_balance_hagar_secondary_force 75 +set g_balance_hagar_secondary_health 15 +set g_balance_hagar_secondary_damageforcescale 0 +set g_balance_hagar_secondary_radius 80 +set g_balance_hagar_secondary_spread 0.05 +set g_balance_hagar_secondary_speed 2000 +set g_balance_hagar_secondary_lifetime_min 10 +set g_balance_hagar_secondary_lifetime_rand 0 +set g_balance_hagar_secondary_refire 0.5 +set g_balance_hagar_secondary_ammo 1 +set g_balance_hagar_switchdelay_drop 0 +set g_balance_hagar_switchdelay_raise 0 +set g_balance_hagar_reload_ammo 0 //default: 25 +set g_balance_hagar_reload_time 2 +// }}} +// {{{ rocketlauncher +set g_balance_rocketlauncher_damage 80 +set g_balance_rocketlauncher_edgedamage 40 +set g_balance_rocketlauncher_force 350 +set g_balance_rocketlauncher_radius 110 +set g_balance_rocketlauncher_speed 1000 +set g_balance_rocketlauncher_speedaccel 0 +set g_balance_rocketlauncher_speedstart 1000 +set g_balance_rocketlauncher_lifetime 100 +set g_balance_rocketlauncher_refire 0.9 +set g_balance_rocketlauncher_animtime 0.7 +set g_balance_rocketlauncher_ammo 4 +set g_balance_rocketlauncher_health 0 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time. +set g_balance_rocketlauncher_damageforcescale 0 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn +set g_balance_rocketlauncher_detonatedelay 999 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time +set g_balance_rocketlauncher_guiderate 0 // max degrees per second +set g_balance_rocketlauncher_guideratedelay 0.01 // immediate +set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic) +set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in +set g_balance_rocketlauncher_guidestop 1 // stop guiding when firing again +set g_balance_rocketlauncher_remote_damage 70 +set g_balance_rocketlauncher_remote_edgedamage 35 +set g_balance_rocketlauncher_remote_radius 110 +set g_balance_rocketlauncher_remote_force 350 +set g_balance_rocketlauncher_switchdelay_drop 0 +set g_balance_rocketlauncher_switchdelay_raise 0 +set g_balance_rocketlauncher_reload_ammo 0 //default: 25 +set g_balance_rocketlauncher_reload_time 2 +// }}} +// {{{ porto +set g_balance_porto_primary_refire 1.5 +set g_balance_porto_primary_animtime 0.3 +set g_balance_porto_primary_speed 5000 +set g_balance_porto_primary_lifetime 5 +set g_balance_porto_secondary 1 +set g_balance_porto_secondary_refire 1.5 +set g_balance_porto_secondary_animtime 0.3 +set g_balance_porto_secondary_speed 1000 +set g_balance_porto_secondary_lifetime 5 +set g_balance_porto_switchdelay_drop 0 +set g_balance_porto_switchdelay_raise 0 +set g_balance_portal_health 200 // these get recharged whenever the portal is used +set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used +// }}} +// {{{ hook +set g_balance_hook_primary_fuel 5 // hook monkeys set 0 +set g_balance_hook_primary_refire 0 // hook monkeys set 0 +set g_balance_hook_primary_animtime 0.3 // good shoot anim +set g_balance_hook_primary_hooked_time_max 0 // infinite +set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free +set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked +set g_balance_hook_secondary_damage 25 // not much +set g_balance_hook_secondary_edgedamage 5 // not much +set g_balance_hook_secondary_radius 500 // LOTS +set g_balance_hook_secondary_force -2000 // LOTS +set g_balance_hook_secondary_ammo 50 // a whole pack +set g_balance_hook_secondary_lifetime 5 // infinite +set g_balance_hook_secondary_speed 0 // not much throwing +set g_balance_hook_secondary_gravity 5 // fast falling +set g_balance_hook_secondary_refire 3 // don't drop too many bombs... +set g_balance_hook_secondary_animtime 0.3 // good shoot anim +set g_balance_hook_secondary_power 3 // effect behaves like a square function +set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds +set g_balance_hook_secondary_health 15 +set g_balance_hook_secondary_damageforcescale 0 +set g_balance_hook_switchdelay_drop 0 +set g_balance_hook_switchdelay_raise 0 +// }}} +// {{{ tuba +set g_balance_tuba_refire 0.05 +set g_balance_tuba_animtime 0.05 +set g_balance_tuba_attenuation 0.5 +set g_balance_tuba_volume 1 +set g_balance_tuba_fadetime 0.25 +set g_balance_tuba_damage 5 +set g_balance_tuba_edgedamage 0 +set g_balance_tuba_radius 200 +set g_balance_tuba_force 40 +set g_balance_tuba_pitchstep 6 +set g_balance_tuba_switchdelay_drop 0 +set g_balance_tuba_switchdelay_raise 0 +// }}} +// {{{ fireball // this is a superweapon -- lets make it behave as one. +set g_balance_fireball_primary_animtime 0.2 +set g_balance_fireball_primary_bfgdamage 100 +set g_balance_fireball_primary_bfgforce 0 +set g_balance_fireball_primary_bfgradius 1000 +set g_balance_fireball_primary_damage 200 +set g_balance_fireball_primary_damageforcescale 0 +set g_balance_fireball_primary_edgedamage 50 +set g_balance_fireball_primary_force 600 +set g_balance_fireball_primary_health 0 +set g_balance_fireball_primary_laserburntime 0.5 +set g_balance_fireball_primary_laserdamage 80 +set g_balance_fireball_primary_laseredgedamage 20 +set g_balance_fireball_primary_laserradius 256 +set g_balance_fireball_primary_lifetime 15 +set g_balance_fireball_primary_radius 200 +set g_balance_fireball_primary_refire 2 +set g_balance_fireball_primary_refire2 0 +set g_balance_fireball_primary_speed 1200 +set g_balance_fireball_primary_spread 0 +set g_balance_fireball_secondary_animtime 0.3 +set g_balance_fireball_secondary_damage 40 +set g_balance_fireball_secondary_damageforcescale 4 +set g_balance_fireball_secondary_damagetime 5 +set g_balance_fireball_secondary_force 100 +set g_balance_fireball_secondary_laserburntime 0.5 +set g_balance_fireball_secondary_laserdamage 50 +set g_balance_fireball_secondary_laseredgedamage 20 +set g_balance_fireball_secondary_laserradius 110 +set g_balance_fireball_secondary_lifetime 7 +set g_balance_fireball_secondary_refire 1.5 +set g_balance_fireball_secondary_speed 900 +set g_balance_fireball_secondary_speed_up 100 +set g_balance_fireball_secondary_speed_z 0 +set g_balance_fireball_secondary_spread 0 +set g_balance_fireball_switchdelay_drop 0 +set g_balance_fireball_switchdelay_raise 0 +// }}} diff --cc oldbalanceXPM.cfg index 9c90e04ac,000000000..65e3a7909 mode 100644,000000..100644 --- a/oldbalanceXPM.cfg +++ b/oldbalanceXPM.cfg @@@ -1,781 -1,0 +1,779 @@@ +g_mod_balance XPM + +// {{{ starting gear +set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_shotgun -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_uzi -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE +set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" +set g_balance_health_start 100 +set g_balance_armor_start 0 +set g_start_ammo_shells 15 +set g_start_ammo_nails 0 +set g_start_ammo_rockets 0 +set g_start_ammo_cells 0 +set g_start_ammo_fuel 0 +set g_warmup_start_health 100 "starting values when being in warmup-stage" +set g_warmup_start_armor 100 "starting values when being in warmup-stage" +set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage" +set g_warmup_start_ammo_nails 160 "starting values when being in warmup-stage" +set g_warmup_start_ammo_rockets 80 "starting values when being in warmup-stage" +set g_warmup_start_ammo_cells 90 "starting values when being in warmup-stage" +set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage" +set g_lms_start_health 200 +set g_lms_start_armor 200 +set g_lms_start_ammo_shells 60 +set g_lms_start_ammo_nails 320 +set g_lms_start_ammo_rockets 160 +set g_lms_start_ammo_cells 180 +set g_lms_start_ammo_fuel 0 +set g_balance_nix_roundtime 25 +set g_balance_nix_incrtime 1.6 +set g_balance_nix_ammo_shells 60 +set g_balance_nix_ammo_nails 320 +set g_balance_nix_ammo_rockets 160 +set g_balance_nix_ammo_cells 180 +set g_balance_nix_ammo_fuel 0 +set g_balance_nix_ammoincr_shells 2 // eh this will need figured out later I assume +set g_balance_nix_ammoincr_nails 6 +set g_balance_nix_ammoincr_rockets 2 +set g_balance_nix_ammoincr_cells 2 +set g_balance_nix_ammoincr_fuel 2 +// }}} + +// {{{ pickup items +set g_pickup_ammo_anyway 1 +set g_pickup_weapons_anyway 1 +set g_pickup_shells 15 +set g_pickup_shells_weapon 15 +set g_pickup_shells_max 60 +set g_pickup_nails 80 +set g_pickup_nails_weapon 80 +set g_pickup_nails_max 320 +set g_pickup_rockets 40 +set g_pickup_rockets_weapon 40 +set g_pickup_rockets_max 160 +set g_pickup_cells 30 +set g_pickup_cells_weapon 30 +set g_pickup_cells_max 180 +set g_pickup_fuel 50 +set g_pickup_fuel_weapon 50 +set g_pickup_fuel_jetpack 100 +set g_pickup_fuel_max 100 +set g_pickup_armorsmall 5 +set g_pickup_armorsmall_max 200 +set g_pickup_armorsmall_anyway 0 +set g_pickup_armormedium 25 +set g_pickup_armormedium_max 100 +set g_pickup_armormedium_anyway 0 +set g_pickup_armorbig 50 +set g_pickup_armorbig_max 100 +set g_pickup_armorbig_anyway 0 +set g_pickup_armorlarge 100 +set g_pickup_armorlarge_max 200 +set g_pickup_armorlarge_anyway 0 +set g_pickup_healthsmall 5 +set g_pickup_healthsmall_max 200 +set g_pickup_healthsmall_anyway 0 +set g_pickup_healthmedium 25 +set g_pickup_healthmedium_max 100 +set g_pickup_healthmedium_anyway 0 +set g_pickup_healthlarge 50 +set g_pickup_healthlarge_max 100 +set g_pickup_healthlarge_anyway 0 +set g_pickup_healthmega 100 +set g_pickup_healthmega_max 200 +set g_pickup_healthmega_anyway 0 +set g_pickup_respawntime_short 15 +set g_pickup_respawntime_medium 20 +set g_pickup_respawntime_long 30 +set g_pickup_respawntime_powerup 120 +set g_pickup_respawntime_weapon 10 +set g_pickup_respawntime_superweapon 120 +set g_pickup_respawntime_ammo 15 +set g_pickup_respawntimejitter_short 0 +set g_pickup_respawntimejitter_medium 0 +set g_pickup_respawntimejitter_long 0 +set g_pickup_respawntimejitter_powerup 30 +set g_pickup_respawntimejitter_weapon 0 +set g_pickup_respawntimejitter_superweapon 10 +set g_pickup_respawntimejitter_ammo 0 +// }}} + +// {{{ regen/rot +set g_balance_health_regen 0.08 +set g_balance_health_regenlinear 0.5 +set g_balance_pause_health_regen 5 +set g_balance_pause_health_regen_spawn 0 +set g_balance_health_rot 0.03 +set g_balance_health_rotlinear 0.75 +set g_balance_pause_health_rot 1 +set g_balance_pause_health_rot_spawn 5 +set g_balance_health_regenstable 100 +set g_balance_health_rotstable 100 +set g_balance_health_limit 999 +set g_balance_armor_regen 0 +set g_balance_armor_regenlinear 0 +set g_balance_armor_rot 0.03 +set g_balance_armor_rotlinear 0.75 +set g_balance_pause_armor_rot 1 +set g_balance_pause_armor_rot_spawn 5 +set g_balance_armor_regenstable 100 +set g_balance_armor_rotstable 100 +set g_balance_armor_limit 999 +set g_balance_armor_blockpercent 0.6 +set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)" +set g_balance_fuel_regenlinear 0 +set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter +set g_balance_fuel_rot 0.05 +set g_balance_fuel_rotlinear 0 +set g_balance_pause_fuel_rot 5 +set g_balance_pause_fuel_rot_spawn 10 +set g_balance_fuel_regenstable 50 +set g_balance_fuel_rotstable 100 +set g_balance_fuel_limit 999 +// }}} + +// {{{ misc +set g_balance_selfdamagepercent 0.65 +set g_weaponspeedfactor 1 "weapon projectile speed multiplier" +set g_weaponratefactor 1 "weapon fire rate multiplier" +set g_weapondamagefactor 1 "weapon damage multiplier" +set g_weaponforcefactor 1 "weapon force multiplier" +set g_weaponspreadfactor 1 "weapon spread multiplier" +set g_balance_firetransfer_time 0.9 +set g_balance_firetransfer_damage 0.8 +set g_throughfloor_damage 0.75 +set g_throughfloor_force 0.75 +set g_projectiles_damage 1 +// possible values: +// -2: absolutely no damage to projectiles (no exceptions) +// -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines) +// 0: only damage from contents (lava/slime) or exceptions +// 1: only self damage or damage from contents or exceptions +// 2: allow all damage to projectiles normally +set g_projectiles_keep_owner 0 +set g_projectiles_newton_style 0 +// possible values: +// 0: absolute velocity projectiles (like Quake) +// 1: relative velocity projectiles, "Newtonian" (like Tribes 2) +// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard) +set g_projectiles_newton_style_2_minfactor 0.8 +set g_projectiles_newton_style_2_maxfactor 1.5 +set g_projectiles_spread_style 7 +// possible values: +// 0: forward + solid sphere (like Quake) - varies velocity +// 1: forward + flattened solid sphere +// 2: forward + solid circle +// 3: forward + normal distribution 3D - varies velocity +// 4: forward + normal distribution on a plane +// 5: forward + circle with 1-r falloff +// 6: forward + circle with 1-r^2 falloff +// 7: forward + circle with (1-r)(2-r) falloff +set g_balance_falldamage_deadminspeed 250 +set g_balance_falldamage_minspeed 900 +set g_balance_falldamage_factor 0.20 +set g_balance_falldamage_maxdamage 40 +set g_balance_damagepush_speedfactor 2.5 +set g_balance_contents_damagerate 0.2 // ticrate interval for applying damage with playerdamage/projectiledamage +set g_balance_contents_drowndelay 10 // time under water before a player begins drowning +set g_balance_contents_playerdamage_drowning 20 // damage per second for while player is drowning +set g_balance_contents_playerdamage_lava 50 // damage per second for while player is inside lava +set g_balance_contents_playerdamage_slime 30 // damage per second for while player is inside slime +set g_balance_contents_projectiledamage 10000 // instantly kill projectiles upon touching lava/slime +set g_maxpushtime 8.0 "timeout for kill credit when your damage knocks someone into a death trap" +// }}} + +// {{{ powerups +set g_balance_powerup_invincible_takedamage 0.25 // only 1/4th damage is taken +set g_balance_powerup_invincible_time 30 +set g_balance_powerup_strength_damage 3 +set g_balance_powerup_strength_force 3 +set g_balance_powerup_strength_time 30 +set g_balance_powerup_strength_selfdamage 1.5 +set g_balance_powerup_strength_selfforce 1.5 +set g_balance_superweapons_time 30 +// }}} + +// {{{ jetpack/hook +set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack" +set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction" +set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)" +set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction" +set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction" +set g_jetpack_fuel 8 "fuel per second for jetpack" +set g_jetpack_attenuation 2 "jetpack sound attenuation" + +set g_grappling_hook_tarzan 2 // 2: can also pull players +set g_balance_grapplehook_speed_fly 1800 +set g_balance_grapplehook_speed_pull 2000 +set g_balance_grapplehook_force_rubber 2000 +set g_balance_grapplehook_force_rubber_overstretch 1000 +set g_balance_grapplehook_length_min 50 +set g_balance_grapplehook_stretch 50 +set g_balance_grapplehook_airfriction 0.2 +set g_balance_grapplehook_health 50 +set g_balance_grapplehook_damagedbycontents 1 +// }}} + +// {{{ weapon properties +// {{{ laser +set g_balance_laser_melee_animtime 0.3 +set g_balance_laser_melee_damage 80 +set g_balance_laser_melee_delay 0.25 +set g_balance_laser_melee_force 200 +set g_balance_laser_melee_multihit 1 +set g_balance_laser_melee_no_doubleslap 1 +set g_balance_laser_melee_nonplayerdamage 40 +set g_balance_laser_melee_range 120 +set g_balance_laser_melee_refire 1.25 +set g_balance_laser_melee_swing_side 120 +set g_balance_laser_melee_swing_up 30 +set g_balance_laser_melee_time 0.15 +set g_balance_laser_melee_traces 10 + +set g_balance_laser_primary 0 // 0 = shockwave attack, 1 = projectile primary +set g_balance_laser_primary_damage 25 +set g_balance_laser_primary_edgedamage 12.5 +set g_balance_laser_primary_force 300 +set g_balance_laser_primary_radius 70 +set g_balance_laser_primary_speed 6000 +set g_balance_laser_primary_spread 0 +set g_balance_laser_primary_refire 0.7 +set g_balance_laser_primary_animtime 0.2 +set g_balance_laser_primary_lifetime 5 +set g_balance_laser_primary_shotangle 0 +set g_balance_laser_primary_delay 0 +set g_balance_laser_primary_force_zscale 1.2 +set g_balance_laser_primary_force_velocitybias 0 +set g_balance_laser_primary_force_other_scale 1 + +set g_balance_laser_secondary 2 // 0 = switch away to last used weapon, 1 = projectile secondary, 2 = melee secondary +set g_balance_laser_secondary_damage 25 +set g_balance_laser_secondary_edgedamage 12.5 +set g_balance_laser_secondary_force 400 +set g_balance_laser_secondary_radius 70 +set g_balance_laser_secondary_speed 12000 +set g_balance_laser_secondary_spread 0 +set g_balance_laser_secondary_refire 0.7 +set g_balance_laser_secondary_animtime 0.2 +set g_balance_laser_secondary_lifetime 5 +set g_balance_laser_secondary_shotangle -90 +set g_balance_laser_secondary_delay 0 +set g_balance_laser_secondary_force_zscale 1.25 +set g_balance_laser_secondary_force_velocitybias 0 +set g_balance_laser_secondary_force_other_scale 1 + +set g_balance_laser_shockwave_damage 20 +set g_balance_laser_shockwave_distance 2000 +set g_balance_laser_shockwave_edgedamage 0 +set g_balance_laser_shockwave_force 200 +set g_balance_laser_shockwave_force_forwardbias 50 +set g_balance_laser_shockwave_force_zscale 2 +set g_balance_laser_shockwave_jump_damage 20 +set g_balance_laser_shockwave_jump_edgedamage 0 +set g_balance_laser_shockwave_jump_force 300 +set g_balance_laser_shockwave_jump_force_velocitybias 0 +set g_balance_laser_shockwave_jump_force_zscale 1.25 +set g_balance_laser_shockwave_jump_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_jump_multiplier_distance 0.5 +set g_balance_laser_shockwave_jump_multiplier_min 0 +set g_balance_laser_shockwave_jump_radius 150 +set g_balance_laser_shockwave_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_multiplier_distance 0.5 +set g_balance_laser_shockwave_multiplier_min 0 +set g_balance_laser_shockwave_splash_damage 15 +set g_balance_laser_shockwave_splash_edgedamage 0 +set g_balance_laser_shockwave_splash_force 100 +set g_balance_laser_shockwave_splash_force_forwardbias 50 +set g_balance_laser_shockwave_splash_multiplier_accuracy 0.5 +set g_balance_laser_shockwave_splash_multiplier_distance 0.5 +set g_balance_laser_shockwave_splash_multiplier_min 0 +set g_balance_laser_shockwave_splash_radius 70 +set g_balance_laser_shockwave_spread_max 120 +set g_balance_laser_shockwave_spread_min 25 + +set g_balance_laser_switchdelay_drop 0.15 +set g_balance_laser_switchdelay_raise 0.15 +set g_balance_laser_reload_ammo 0 //default: 6 +set g_balance_laser_reload_time 2 +// }}} +// {{{ shotgun +set g_balance_shotgun_primary_bullets 14 +set g_balance_shotgun_primary_damage 4 +set g_balance_shotgun_primary_force 15 +set g_balance_shotgun_primary_spread 0.12 +set g_balance_shotgun_primary_refire 0.75 +set g_balance_shotgun_primary_animtime 0.2 +set g_balance_shotgun_primary_ammo 1 - set g_balance_shotgun_primary_speed 8000 - set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu ++set g_balance_shotgun_primary_solidpenetration 3.8 +set g_balance_shotgun_secondary 1 +set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow +set g_balance_shotgun_secondary_melee_range 120 +set g_balance_shotgun_secondary_melee_swing_side 120 +set g_balance_shotgun_secondary_melee_swing_up 30 +set g_balance_shotgun_secondary_melee_time 0.15 +set g_balance_shotgun_secondary_melee_traces 10 +set g_balance_shotgun_secondary_melee_no_doubleslap 1 +set g_balance_shotgun_secondary_melee_nonplayerdamage 40 +set g_balance_shotgun_secondary_melee_multihit 1 +set g_balance_shotgun_secondary_damage 80 +set g_balance_shotgun_secondary_force 200 +set g_balance_shotgun_secondary_refire 1.25 +set g_balance_shotgun_secondary_animtime 1 +set g_balance_shotgun_switchdelay_drop 0.2 +set g_balance_shotgun_switchdelay_raise 0.2 +set g_balance_shotgun_reload_ammo 0 //default: 5 +set g_balance_shotgun_reload_time 2 +// }}} +// {{{ uzi +set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary +set g_balance_uzi_spread_min 0.02 +set g_balance_uzi_spread_max 0.05 +set g_balance_uzi_spread_add 0.012 + +set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more) +set g_balance_uzi_burst_animtime 0.3 +set g_balance_uzi_burst_refire 0.06 // refire between burst bullets +set g_balance_uzi_burst_refire2 0.45 // refire after burst +set g_balance_uzi_burst_spread 0.02 +set g_balance_uzi_burst_damage 25 +set g_balance_uzi_burst_force 20 +set g_balance_uzi_burst_ammo 3 + +set g_balance_uzi_first 1 +set g_balance_uzi_first_damage 14 +set g_balance_uzi_first_force 5 +set g_balance_uzi_first_spread 0.03 +set g_balance_uzi_first_refire 0.125 +set g_balance_uzi_first_ammo 1 + +set g_balance_uzi_sustained_damage 10 // 100 dps +set g_balance_uzi_sustained_force 5 +set g_balance_uzi_sustained_spread 0.03 +set g_balance_uzi_sustained_refire 0.1 +set g_balance_uzi_sustained_ammo 1 + - set g_balance_uzi_speed 18000 - set g_balance_uzi_bulletconstant 115 // 13.1qu ++set g_balance_uzi_solidpenetration 13.1 + +set g_balance_uzi_switchdelay_drop 0.2 +set g_balance_uzi_switchdelay_raise 0.2 + +set g_balance_uzi_reload_ammo 60 //default: 30 +set g_balance_uzi_reload_time 2 +// }}} +// {{{ mortar +set g_balance_grenadelauncher_primary_type 0 +set g_balance_grenadelauncher_primary_damage 50 +set g_balance_grenadelauncher_primary_edgedamage 25 +set g_balance_grenadelauncher_primary_force 250 +set g_balance_grenadelauncher_primary_radius 120 +set g_balance_grenadelauncher_primary_speed 1900 +set g_balance_grenadelauncher_primary_speed_up 225 +set g_balance_grenadelauncher_primary_speed_z 0 +set g_balance_grenadelauncher_primary_spread 0 +set g_balance_grenadelauncher_primary_lifetime 5 +set g_balance_grenadelauncher_primary_lifetime2 1 +set g_balance_grenadelauncher_primary_refire 0.8 +set g_balance_grenadelauncher_primary_animtime 0.3 +set g_balance_grenadelauncher_primary_ammo 2 +set g_balance_grenadelauncher_primary_health 15 +set g_balance_grenadelauncher_primary_damageforcescale 0 +set g_balance_grenadelauncher_primary_remote_minbouncecnt 0 + +set g_balance_grenadelauncher_secondary_type 1 +set g_balance_grenadelauncher_secondary_damage 60 +set g_balance_grenadelauncher_secondary_edgedamage 30 +set g_balance_grenadelauncher_secondary_force 250 +set g_balance_grenadelauncher_secondary_radius 120 +set g_balance_grenadelauncher_secondary_speed 1400 +set g_balance_grenadelauncher_secondary_speed_up 150 +set g_balance_grenadelauncher_secondary_speed_z 0 +set g_balance_grenadelauncher_secondary_spread 0 +set g_balance_grenadelauncher_secondary_lifetime 5 +set g_balance_grenadelauncher_secondary_lifetime_bounce 0.5 +set g_balance_grenadelauncher_secondary_lifetime_stick 0 +set g_balance_grenadelauncher_secondary_refire 0.7 +set g_balance_grenadelauncher_secondary_animtime 0.3 +set g_balance_grenadelauncher_secondary_ammo 2 +set g_balance_grenadelauncher_secondary_health 30 +set g_balance_grenadelauncher_secondary_damageforcescale 4 +set g_balance_grenadelauncher_secondary_remote_detonateprimary 0 + +set g_balance_grenadelauncher_bouncefactor 0.5 +set g_balance_grenadelauncher_bouncestop 0.075 + +set g_balance_grenadelauncher_switchdelay_drop 0.2 +set g_balance_grenadelauncher_switchdelay_raise 0.2 + +set g_balance_grenadelauncher_reload_ammo 0 //default: 12 +set g_balance_grenadelauncher_reload_time 2 +// }}} +// {{{ electro +set g_balance_electro_lightning 0 +set g_balance_electro_primary_damage 40 +set g_balance_electro_primary_edgedamage 20 +set g_balance_electro_primary_force 200 +set g_balance_electro_primary_force_up 0 +set g_balance_electro_primary_radius 100 +set g_balance_electro_primary_comboradius 300 +set g_balance_electro_primary_speed 2500 +set g_balance_electro_primary_spread 0 +set g_balance_electro_primary_lifetime 5 +set g_balance_electro_primary_refire 0.6 +set g_balance_electro_primary_animtime 0.3 +set g_balance_electro_primary_ammo 4 +set g_balance_electro_primary_range 0 +set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius +set g_balance_electro_primary_falloff_maxdist 850 +set g_balance_electro_primary_falloff_halflifedist 425 +set g_balance_electro_secondary_damage 40 +set g_balance_electro_secondary_edgedamage 20 +set g_balance_electro_secondary_force 50 +set g_balance_electro_secondary_radius 150 +set g_balance_electro_secondary_speed 1000 +set g_balance_electro_secondary_speed_up 200 +set g_balance_electro_secondary_speed_z 0 +set g_balance_electro_secondary_spread 0.04 +set g_balance_electro_secondary_lifetime 4 +set g_balance_electro_secondary_refire 0.2 +set g_balance_electro_secondary_refire2 1.6 +set g_balance_electro_secondary_animtime 0.2 +set g_balance_electro_secondary_ammo 2 +set g_balance_electro_secondary_health 5 +set g_balance_electro_secondary_damageforcescale 4 +set g_balance_electro_secondary_damagedbycontents 1 +set g_balance_electro_secondary_count 3 +set g_balance_electro_secondary_bouncefactor 0.3 +set g_balance_electro_secondary_bouncestop 0.05 +set g_balance_electro_combo_damage 50 +set g_balance_electro_combo_edgedamage 25 +set g_balance_electro_combo_force 120 +set g_balance_electro_combo_radius 150 +set g_balance_electro_combo_comboradius 300 +set g_balance_electro_combo_speed 2000 +set g_balance_electro_combo_safeammocheck 1 +set g_balance_electro_switchdelay_drop 0.2 +set g_balance_electro_switchdelay_raise 0.2 +set g_balance_electro_reload_ammo 0 //default: 20 +set g_balance_electro_reload_time 2 +// }}} +// {{{ lightning +set g_balance_lightning_primary_ammo 5 +set g_balance_lightning_primary_animtime 0.2 +set g_balance_lightning_primary_damage 100 +set g_balance_lightning_primary_edgedamage 0 +set g_balance_lightning_primary_falloff_mindist 0 +set g_balance_lightning_primary_falloff_maxdist 0 +set g_balance_lightning_primary_falloff_halflifedist 0 +set g_balance_lightning_primary_force 425 +set g_balance_lightning_primary_lifetime 0 +set g_balance_lightning_primary_radius 850 +set g_balance_lightning_primary_range 800 +set g_balance_lightning_primary_refire 0.4 +set g_balance_lightning_primary_speed 0 +set g_balance_lightning_primary_spread 0 +set g_balance_lightning_secondary_ammo 5 +set g_balance_lightning_secondary_animtime 0.5 +set g_balance_lightning_secondary_damage 100 +set g_balance_lightning_secondary_damageforcescale 4 +set g_balance_lightning_secondary_edgedamage 80 +set g_balance_lightning_secondary_flyingdamage 1 +set g_balance_lightning_secondary_flyingforce -80 +set g_balance_lightning_secondary_flyingradius 200 +set g_balance_lightning_secondary_force -200 +set g_balance_lightning_secondary_health 1 +set g_balance_lightning_secondary_lifetime 30 +set g_balance_lightning_secondary_radius 300 +set g_balance_lightning_secondary_refire 5 +set g_balance_lightning_secondary_speed 600 +// }}} +// {{{ crylink +set g_balance_crylink_primary_damage 12 +set g_balance_crylink_primary_edgedamage 6 +set g_balance_crylink_primary_force -50 +set g_balance_crylink_primary_radius 80 +set g_balance_crylink_primary_speed 2000 +set g_balance_crylink_primary_spread 0.08 +set g_balance_crylink_primary_shots 6 +set g_balance_crylink_primary_bounces 1 +set g_balance_crylink_primary_refire 0.7 +set g_balance_crylink_primary_animtime 0.3 +set g_balance_crylink_primary_ammo 3 +set g_balance_crylink_primary_bouncedamagefactor 0.5 +set g_balance_crylink_primary_joindelay 0.1 +set g_balance_crylink_primary_joinspread 0.2 +set g_balance_crylink_primary_joinexplode 1 +set g_balance_crylink_primary_joinexplode_damage 0 +set g_balance_crylink_primary_joinexplode_edgedamage 0 +set g_balance_crylink_primary_joinexplode_radius 0 +set g_balance_crylink_primary_joinexplode_force 0 +set g_balance_crylink_primary_linkexplode 1 + +set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000 +set g_balance_crylink_primary_middle_fadetime 5 +set g_balance_crylink_primary_other_lifetime 5 +set g_balance_crylink_primary_other_fadetime 5 + +set g_balance_crylink_secondary 1 +set g_balance_crylink_secondary_damage 10 +set g_balance_crylink_secondary_edgedamage 5 +set g_balance_crylink_secondary_force -250 +set g_balance_crylink_secondary_radius 100 +set g_balance_crylink_secondary_speed 3000 +set g_balance_crylink_secondary_spread 0.01 +set g_balance_crylink_secondary_spreadtype 1 +set g_balance_crylink_secondary_shots 5 +set g_balance_crylink_secondary_bounces 0 +set g_balance_crylink_secondary_refire 0.7 +set g_balance_crylink_secondary_animtime 0.2 +set g_balance_crylink_secondary_ammo 2 +set g_balance_crylink_secondary_bouncedamagefactor 0.5 +set g_balance_crylink_secondary_joindelay 0 +set g_balance_crylink_secondary_joinspread 0 +set g_balance_crylink_secondary_joinexplode 0 +set g_balance_crylink_secondary_joinexplode_damage 0 +set g_balance_crylink_secondary_joinexplode_edgedamage 0 +set g_balance_crylink_secondary_joinexplode_radius 0 +set g_balance_crylink_secondary_joinexplode_force 0 +set g_balance_crylink_secondary_linkexplode 1 + +set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000 +set g_balance_crylink_secondary_middle_fadetime 5 +set g_balance_crylink_secondary_line_lifetime 5 +set g_balance_crylink_secondary_line_fadetime 5 + +set g_balance_crylink_switchdelay_drop 0.2 +set g_balance_crylink_switchdelay_raise 0.2 + +set g_balance_crylink_reload_ammo 0 //default: 10 +set g_balance_crylink_reload_time 2 +// }}} +// {{{ nex +set g_balance_nex_primary_damage 80 +set g_balance_nex_primary_force 400 +set g_balance_nex_primary_refire 1.5 +set g_balance_nex_primary_animtime 0.6 +set g_balance_nex_primary_ammo 6 +set g_balance_nex_primary_damagefalloff_mindist 0 // 1000 For tZork ;3 +set g_balance_nex_primary_damagefalloff_maxdist 0 // 3000 +set g_balance_nex_primary_damagefalloff_halflife 0 // 1500 +set g_balance_nex_primary_damagefalloff_forcehalflife 0 // 1500 + +set g_balance_nex_secondary 0 +set g_balance_nex_secondary_charge 0 +set g_balance_nex_secondary_charge_rate 0.1 +set g_balance_nex_secondary_chargepool 0 +set g_balance_nex_secondary_chargepool_regen 0.15 +set g_balance_nex_secondary_chargepool_pause_regen 1 +set g_balance_nex_secondary_chargepool_pause_health_regen 1 +set g_balance_nex_secondary_damage 0 +set g_balance_nex_secondary_force 0 +set g_balance_nex_secondary_refire 0 +set g_balance_nex_secondary_animtime 0 +set g_balance_nex_secondary_ammo 2 +set g_balance_nex_secondary_damagefalloff_mindist 0 +set g_balance_nex_secondary_damagefalloff_maxdist 0 +set g_balance_nex_secondary_damagefalloff_halflife 0 +set g_balance_nex_secondary_damagefalloff_forcehalflife 0 + +set g_balance_nex_charge 1 +set g_balance_nex_charge_mindmg 40 +set g_balance_nex_charge_start 0.5 +set g_balance_nex_charge_rate 0.4 +set g_balance_nex_charge_animlimit 0.5 +set g_balance_nex_charge_limit 1 +set g_balance_nex_charge_rot_rate 0 +set g_balance_nex_charge_rot_pause 0 // Dont rot down until this long after release of charge button +set g_balance_nex_charge_shot_multiplier 0 +set g_balance_nex_charge_velocity_rate 0 +set g_balance_nex_charge_minspeed 400 +set g_balance_nex_charge_maxspeed 800 + +set g_balance_nex_switchdelay_drop 0.3 +set g_balance_nex_switchdelay_raise 0.25 + +set g_balance_nex_reload_ammo 0 //default: 25 +set g_balance_nex_reload_time 2 +// }}} +// {{{ minstanex +set g_balance_minstanex_refire 1 +set g_balance_minstanex_animtime 0.3 +set g_balance_minstanex_ammo 10 +set g_balance_minstanex_laser_ammo 0 +set g_balance_minstanex_laser_animtime 0.3 +set g_balance_minstanex_laser_refire 0.7 +set g_balance_minstanex_switchdelay_drop 0.2 +set g_balance_minstanex_switchdelay_raise 0.2 +set g_balance_minstanex_reload_ammo 0 //default: 50 +set g_balance_minstanex_reload_time 2 +// }}} +// {{{ hagar +set g_balance_hagar_primary_damage 25 +set g_balance_hagar_primary_edgedamage 12.5 +set g_balance_hagar_primary_force 100 +set g_balance_hagar_primary_health 15 +set g_balance_hagar_primary_damageforcescale 0 +set g_balance_hagar_primary_radius 65 +set g_balance_hagar_primary_spread 0.03 +set g_balance_hagar_primary_speed 2500 +set g_balance_hagar_primary_lifetime 5 +set g_balance_hagar_primary_refire 0.16667 // 6 rockets per second +set g_balance_hagar_primary_ammo 1 +set g_balance_hagar_secondary 1 +set g_balance_hagar_secondary_load 1 +set g_balance_hagar_secondary_load_speed 0.5 +set g_balance_hagar_secondary_load_spread 0.075 +set g_balance_hagar_secondary_load_spread_bias 0.5 +set g_balance_hagar_secondary_load_max 4 +set g_balance_hagar_secondary_load_hold 4 +set g_balance_hagar_secondary_load_releasedeath 0 +set g_balance_hagar_secondary_load_abort 0 +set g_balance_hagar_secondary_load_linkexplode 0 +set g_balance_hagar_secondary_load_animtime 0.2 +set g_balance_hagar_secondary_damage 40 +set g_balance_hagar_secondary_edgedamage 20 +set g_balance_hagar_secondary_force 75 +set g_balance_hagar_secondary_health 15 +set g_balance_hagar_secondary_damageforcescale 0 +set g_balance_hagar_secondary_radius 80 +set g_balance_hagar_secondary_spread 0.05 +set g_balance_hagar_secondary_speed 2000 +set g_balance_hagar_secondary_lifetime_min 10 +set g_balance_hagar_secondary_lifetime_rand 0 +set g_balance_hagar_secondary_refire 0.5 +set g_balance_hagar_secondary_ammo 1 +set g_balance_hagar_switchdelay_drop 0.2 +set g_balance_hagar_switchdelay_raise 0.2 +set g_balance_hagar_reload_ammo 0 //default: 25 +set g_balance_hagar_reload_time 2 +// }}} +// {{{ rocketlauncher +set g_balance_rocketlauncher_damage 70 +set g_balance_rocketlauncher_edgedamage 35 +set g_balance_rocketlauncher_force 450 +set g_balance_rocketlauncher_radius 110 +set g_balance_rocketlauncher_speed 1300 +set g_balance_rocketlauncher_speedaccel 1300 +set g_balance_rocketlauncher_speedstart 1000 +set g_balance_rocketlauncher_lifetime 10 +set g_balance_rocketlauncher_refire 1.2 +set g_balance_rocketlauncher_animtime 0.4 +set g_balance_rocketlauncher_ammo 4 +set g_balance_rocketlauncher_health 30 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time. +set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn +set g_balance_rocketlauncher_detonatedelay 0.02 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time +set g_balance_rocketlauncher_guiderate 70 // max degrees per second +set g_balance_rocketlauncher_guideratedelay 0.01 // immediate +set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic) +set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in +set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again +set g_balance_rocketlauncher_remote_damage 70 +set g_balance_rocketlauncher_remote_edgedamage 35 +set g_balance_rocketlauncher_remote_radius 110 +set g_balance_rocketlauncher_remote_force 400 +set g_balance_rocketlauncher_switchdelay_drop 0.3 +set g_balance_rocketlauncher_switchdelay_raise 0.2 +set g_balance_rocketlauncher_reload_ammo 0 //default: 25 +set g_balance_rocketlauncher_reload_time 2 +// }}} +// {{{ porto +set g_balance_porto_primary_refire 1.5 +set g_balance_porto_primary_animtime 0.3 +set g_balance_porto_primary_speed 1000 +set g_balance_porto_primary_lifetime 5 +set g_balance_porto_secondary 1 +set g_balance_porto_secondary_refire 1.5 +set g_balance_porto_secondary_animtime 0.3 +set g_balance_porto_secondary_speed 1000 +set g_balance_porto_secondary_lifetime 5 +set g_balance_porto_switchdelay_drop 0.2 +set g_balance_porto_switchdelay_raise 0.2 +set g_balance_portal_health 200 // these get recharged whenever the portal is used +set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used +// }}} +// {{{ hook +set g_balance_hook_primary_fuel 5 // hook monkeys set 0 +set g_balance_hook_primary_refire 0 // hook monkeys set 0 +set g_balance_hook_primary_animtime 0.3 // good shoot anim +set g_balance_hook_primary_hooked_time_max 0 // infinite +set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free +set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked +set g_balance_hook_secondary_damage 25 // not much +set g_balance_hook_secondary_edgedamage 5 // not much +set g_balance_hook_secondary_radius 500 // LOTS +set g_balance_hook_secondary_force -2000 // LOTS +set g_balance_hook_secondary_ammo 30 // a whole pack +set g_balance_hook_secondary_lifetime 5 // infinite +set g_balance_hook_secondary_speed 0 // not much throwing +set g_balance_hook_secondary_gravity 5 // fast falling +set g_balance_hook_secondary_refire 3 // don't drop too many bombs... +set g_balance_hook_secondary_animtime 0.3 // good shoot anim +set g_balance_hook_secondary_power 3 // effect behaves like a square function +set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds +set g_balance_hook_secondary_health 15 +set g_balance_hook_secondary_damageforcescale 0 +set g_balance_hook_switchdelay_drop 0.2 +set g_balance_hook_switchdelay_raise 0.2 +// }}} +// {{{ tuba +set g_balance_tuba_refire 0.05 +set g_balance_tuba_animtime 0.05 +set g_balance_tuba_attenuation 0.5 +set g_balance_tuba_volume 1 +set g_balance_tuba_fadetime 0.25 +set g_balance_tuba_damage 5 +set g_balance_tuba_edgedamage 0 +set g_balance_tuba_radius 200 +set g_balance_tuba_force 40 +set g_balance_tuba_pitchstep 6 +set g_balance_tuba_switchdelay_drop 0.2 +set g_balance_tuba_switchdelay_raise 0.2 +// }}} +// {{{ fireball // this is a superweapon -- lets make it behave as one. +set g_balance_fireball_primary_animtime 0.2 +set g_balance_fireball_primary_bfgdamage 100 +set g_balance_fireball_primary_bfgforce 0 +set g_balance_fireball_primary_bfgradius 1000 +set g_balance_fireball_primary_damage 200 +set g_balance_fireball_primary_damageforcescale 0 +set g_balance_fireball_primary_edgedamage 50 +set g_balance_fireball_primary_force 600 +set g_balance_fireball_primary_health 0 +set g_balance_fireball_primary_laserburntime 0.5 +set g_balance_fireball_primary_laserdamage 80 +set g_balance_fireball_primary_laseredgedamage 20 +set g_balance_fireball_primary_laserradius 256 +set g_balance_fireball_primary_lifetime 15 +set g_balance_fireball_primary_radius 200 +set g_balance_fireball_primary_refire 2 +set g_balance_fireball_primary_refire2 0 +set g_balance_fireball_primary_speed 1200 +set g_balance_fireball_primary_spread 0 +set g_balance_fireball_secondary_animtime 0.3 +set g_balance_fireball_secondary_damage 40 +set g_balance_fireball_secondary_damageforcescale 4 +set g_balance_fireball_secondary_damagetime 5 +set g_balance_fireball_secondary_force 100 +set g_balance_fireball_secondary_laserburntime 0.5 +set g_balance_fireball_secondary_laserdamage 50 +set g_balance_fireball_secondary_laseredgedamage 20 +set g_balance_fireball_secondary_laserradius 110 +set g_balance_fireball_secondary_lifetime 7 +set g_balance_fireball_secondary_refire 1.5 +set g_balance_fireball_secondary_speed 900 +set g_balance_fireball_secondary_speed_up 100 +set g_balance_fireball_secondary_speed_z 0 +set g_balance_fireball_secondary_spread 0 +set g_balance_fireball_switchdelay_drop 0.2 +set g_balance_fireball_switchdelay_raise 0.2 +// }}} diff --cc qcsrc/common/constants.qh index 19abacb26,8ae465e54..41a9520dd --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@@ -30,9 -30,8 +30,8 @@@ const float AS_FLOAT = 8 const float TE_CSQC_PICTURE = 100; const float TE_CSQC_RACE = 101; - const float TE_CSQC_ZCURVEPARTICLES = 102; const float TE_CSQC_NEXGUNBEAMPARTICLE = 103; -const float TE_CSQC_LIGHTNINGARC = 104; +const float TE_CSQC_ARC = 104; const float TE_CSQC_TEAMNAGGER = 105; const float TE_CSQC_PINGPLREPORT = 106; const float TE_CSQC_TARGET_MUSIC = 107; diff --cc qcsrc/common/weapons/w_machinegun.qc index d1dacd5b9,000000000..4ac5fe368 mode 100644,000000..100644 --- a/qcsrc/common/weapons/w_machinegun.qc +++ b/qcsrc/common/weapons/w_machinegun.qc @@@ -1,402 -1,0 +1,397 @@@ +#ifdef REGISTER_WEAPON +REGISTER_WEAPON( +/* WEP_##id */ UZI, +/* function */ w_uzi, +/* ammotype */ ammo_nails, +/* impulse */ 3, +/* flags */ WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN, +/* rating */ BOT_PICKUP_RATING_MID, +/* model */ "uzi", +/* netname */ "uzi", +/* fullname */ _("Machine Gun") +); + +#define UZI_SETTINGS(w_cvar,w_prop) UZI_SETTINGS_LIST(w_cvar, w_prop, UZI, uzi) +#define UZI_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ - w_cvar(id, sn, NONE, speed) \ + w_cvar(id, sn, NONE, spread_min) \ + w_cvar(id, sn, NONE, spread_max) \ + w_cvar(id, sn, NONE, spread_add) \ + w_cvar(id, sn, NONE, mode) \ - w_cvar(id, sn, NONE, bulletconstant) \ + w_cvar(id, sn, NONE, first) \ + w_cvar(id, sn, NONE, first_damage) \ + w_cvar(id, sn, NONE, first_force) \ + w_cvar(id, sn, NONE, first_refire) \ + w_cvar(id, sn, NONE, first_spread) \ + w_cvar(id, sn, NONE, first_ammo) \ ++ w_cvar(id, sn, NONE, solidpenetration) \ + w_cvar(id, sn, NONE, sustained_damage) \ + w_cvar(id, sn, NONE, sustained_force) \ + w_cvar(id, sn, NONE, sustained_refire) \ + w_cvar(id, sn, NONE, sustained_spread) \ + w_cvar(id, sn, NONE, sustained_ammo) \ + w_cvar(id, sn, NONE, burst) \ + w_cvar(id, sn, NONE, burst_refire) \ + w_cvar(id, sn, NONE, burst_refire2) \ + w_cvar(id, sn, NONE, burst_animtime) \ + w_cvar(id, sn, NONE, burst_speed) \ + w_cvar(id, sn, NONE, burst_ammo) \ + w_prop(id, sn, float, reloading_ammo, reload_ammo) \ + w_prop(id, sn, float, reloading_time, reload_time) \ + w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \ + w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \ + w_prop(id, sn, string, weaponreplace, weaponreplace) \ + w_prop(id, sn, float, weaponstart, weaponstart) \ + w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) + +#ifdef SVQC +UZI_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) +#endif +#else +#ifdef SVQC + +void spawnfunc_weapon_uzi() +{ + if(autocvar_sv_q3acompat_machineshotgunswap) + if(self.classname != "droppedweapon") + { + weapon_defaultspawnfunc(WEP_SHOCKWAVE); + return; + } + weapon_defaultspawnfunc(WEP_UZI); +} + +// leilei's fancy muzzleflash stuff +void UZI_Flash_Go() +{ + self.frame = self.frame + 2; + self.scale = self.scale * 0.5; + self.alpha = self.alpha - 0.25; + self.nextthink = time + 0.05; + + if (self.alpha <= 0) + { + self.think = SUB_Remove; + self.nextthink = time; + self.realowner.muzzle_flash = world; + return; + } + +} + +void UziFlash() +{ + if (self.muzzle_flash == world) + self.muzzle_flash = spawn(); + + // muzzle flash for 1st person view + setmodel(self.muzzle_flash, "models/uziflash.md3"); // precision set below + + self.muzzle_flash.scale = 0.75; + self.muzzle_flash.think = UZI_Flash_Go; + self.muzzle_flash.nextthink = time + 0.02; + self.muzzle_flash.frame = 2; + self.muzzle_flash.alpha = 0.75; + self.muzzle_flash.angles_z = random() * 180; + self.muzzle_flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; + self.muzzle_flash.owner = self.muzzle_flash.realowner = self; +} + +void W_UZI_Attack (float deathtype) +{ + W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(uzi, first_damage) : WEP_CVAR(uzi, sustained_damage))); + if (!autocvar_g_norecoil) + { + self.punchangle_x = random () - 0.5; + self.punchangle_y = random () - 0.5; + } + + // this attack_finished just enforces a cooldown at the end of a burst + ATTACK_FINISHED(self) = time + WEP_CVAR(uzi, first_refire) * W_WeaponRateFactor(); + + if (self.misc_bulletcounter == 1) - fireBallisticBullet(w_shotorg, w_shotdir, WEP_CVAR(uzi, first_spread), WEP_CVAR(uzi, speed), 5, WEP_CVAR(uzi, first_damage), WEP_CVAR(uzi, first_force), deathtype, 0, WEP_CVAR(uzi, bulletconstant)); ++ fireBullet(w_shotorg, w_shotdir, WEP_CVAR(uzi, first_spread), WEP_CVAR(uzi, solidpenetration), WEP_CVAR(uzi, first_damage), WEP_CVAR(uzi, first_force), deathtype, 0); + else - fireBallisticBullet(w_shotorg, w_shotdir, WEP_CVAR(uzi, sustained_spread), WEP_CVAR(uzi, speed), 5, WEP_CVAR(uzi, sustained_damage), WEP_CVAR(uzi, sustained_force), deathtype, 0, WEP_CVAR(uzi, bulletconstant)); - endFireBallisticBullet(); ++ fireBullet(w_shotorg, w_shotdir, WEP_CVAR(uzi, sustained_spread), WEP_CVAR(uzi, solidpenetration), WEP_CVAR(uzi, sustained_damage), WEP_CVAR(uzi, sustained_force), deathtype, 0); + + pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); + + UziFlash(); + W_AttachToShotorg(self.muzzle_flash, '5 0 0'); + + // casing code + if (autocvar_g_casings >= 2) + SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self); + + if (self.misc_bulletcounter == 1) + W_DecreaseAmmo(WEP_CVAR(uzi, first_ammo)); + else + W_DecreaseAmmo(WEP_CVAR(uzi, sustained_ammo)); +} + +// weapon frames +void uzi_fire1_02() +{ + if(self.weapon != self.switchweapon) // abort immediately if switching + { + w_ready(); + return; + } + if (self.BUTTON_ATCK) + { + if (!WEP_ACTION(self.weapon, WR_CHECKAMMO2)) + if (!(self.items & IT_UNLIMITED_WEAPON_AMMO)) + { + W_SwitchWeapon_Force(self, w_getbestweapon(self)); + w_ready(); + return; + } + self.misc_bulletcounter = self.misc_bulletcounter + 1; + W_UZI_Attack(WEP_UZI); + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(uzi, sustained_refire), uzi_fire1_02); + } + else + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(uzi, sustained_refire), w_ready); +} + + +void uzi_mode1_fire_auto() +{ + float uzi_spread; + + if (!self.BUTTON_ATCK) + { + w_ready(); + return; + } + + if (!WEP_ACTION(self.weapon, WR_CHECKAMMO1)) + if (!(self.items & IT_UNLIMITED_WEAPON_AMMO)) + { + W_SwitchWeapon_Force(self, w_getbestweapon(self)); + w_ready(); + return; + } + + W_DecreaseAmmo(WEP_CVAR(uzi, sustained_ammo)); + + W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(uzi, sustained_damage)); + if (!autocvar_g_norecoil) + { + self.punchangle_x = random () - 0.5; + self.punchangle_y = random () - 0.5; + } + + uzi_spread = bound(WEP_CVAR(uzi, spread_min), WEP_CVAR(uzi, spread_min) + (WEP_CVAR(uzi, spread_add) * self.misc_bulletcounter), WEP_CVAR(uzi, spread_max)); - fireBallisticBullet(w_shotorg, w_shotdir, uzi_spread, WEP_CVAR(uzi, speed), 5, WEP_CVAR(uzi, sustained_damage), WEP_CVAR(uzi, sustained_force), WEP_UZI, 0, WEP_CVAR(uzi, bulletconstant)); - endFireBallisticBullet(); ++ fireBullet(w_shotorg, w_shotdir, uzi_spread, WEP_CVAR(uzi, solidpenetration), WEP_CVAR(uzi, sustained_damage), WEP_CVAR(uzi, sustained_force), WEP_UZI, 0); + + self.misc_bulletcounter = self.misc_bulletcounter + 1; + + pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); + + UziFlash(); + W_AttachToShotorg(self.muzzle_flash, '5 0 0'); + + if (autocvar_g_casings >= 2) // casing code + SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self); + + ATTACK_FINISHED(self) = time + WEP_CVAR(uzi, first_refire) * W_WeaponRateFactor(); + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(uzi, sustained_refire), uzi_mode1_fire_auto); +} + +void uzi_mode1_fire_burst() +{ + W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, WEP_CVAR(uzi, sustained_damage)); + if (!autocvar_g_norecoil) + { + self.punchangle_x = random () - 0.5; + self.punchangle_y = random () - 0.5; + } + - fireBallisticBullet(w_shotorg, w_shotdir, WEP_CVAR(uzi, burst_speed), WEP_CVAR(uzi, speed), 5, WEP_CVAR(uzi, sustained_damage), WEP_CVAR(uzi, sustained_force), WEP_UZI, 0, WEP_CVAR(uzi, bulletconstant)); - endFireBallisticBullet(); - ++ fireBullet(w_shotorg, w_shotdir, WEP_CVAR(uzi, burst_speed), WEP_CVAR(uzi, solidpenetration), WEP_CVAR(uzi, sustained_damage), WEP_CVAR(uzi, sustained_force), WEP_UZI, 0); + + pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); + + UziFlash(); + W_AttachToShotorg(self.muzzle_flash, '5 0 0'); + + if (autocvar_g_casings >= 2) // casing code + SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self); + + self.misc_bulletcounter = self.misc_bulletcounter + 1; + if (self.misc_bulletcounter == 0) + { + ATTACK_FINISHED(self) = time + WEP_CVAR(uzi, burst_refire2) * W_WeaponRateFactor(); + weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(uzi, burst_animtime), w_ready); + } + else + { + weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(uzi, burst_refire), uzi_mode1_fire_burst); + } + +} + +float w_uzi(float req) +{ + float ammo_amount; + switch(req) + { + case WR_AIM: + { + if(vlen(self.origin-self.enemy.origin) < 3000 - bound(0, skill, 10) * 200) + self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE); + else + self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE); + + return TRUE; + } + case WR_THINK: + { + if(autocvar_g_balance_uzi_reload_ammo && self.clip_load < min(max(WEP_CVAR(uzi, sustained_ammo), WEP_CVAR(uzi, first_ammo)), WEP_CVAR(uzi, burst_ammo))) // forced reload + WEP_ACTION(self.weapon, WR_RELOAD); + else if(WEP_CVAR(uzi, mode) == 1) + { + if (self.BUTTON_ATCK) + if (weapon_prepareattack(0, 0)) + { + self.misc_bulletcounter = 0; + uzi_mode1_fire_auto(); + } + + if(self.BUTTON_ATCK2) + if(weapon_prepareattack(1, 0)) + { + if (!WEP_ACTION(self.weapon, WR_CHECKAMMO2)) + if (!(self.items & IT_UNLIMITED_WEAPON_AMMO)) + { + W_SwitchWeapon_Force(self, w_getbestweapon(self)); + w_ready(); + return FALSE; + } + + W_DecreaseAmmo(WEP_CVAR(uzi, burst_ammo)); + + self.misc_bulletcounter = WEP_CVAR(uzi, burst) * -1; + uzi_mode1_fire_burst(); + } + } + else + { + + if (self.BUTTON_ATCK) + if (weapon_prepareattack(0, 0)) + { + self.misc_bulletcounter = 1; + W_UZI_Attack(WEP_UZI); // sets attack_finished + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(uzi, sustained_refire), uzi_fire1_02); + } + + if (self.BUTTON_ATCK2 && WEP_CVAR(uzi, first)) + if (weapon_prepareattack(1, 0)) + { + self.misc_bulletcounter = 1; + W_UZI_Attack(WEP_UZI | HITTYPE_SECONDARY); // sets attack_finished + weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(uzi, first_refire), w_ready); + } + } + + return TRUE; + } + case WR_INIT: + { + precache_model ("models/uziflash.md3"); + precache_model ("models/weapons/g_uzi.md3"); + precache_model ("models/weapons/v_uzi.md3"); + precache_model ("models/weapons/h_uzi.iqm"); + precache_sound ("weapons/uzi_fire.wav"); + UZI_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP) + return TRUE; + } + case WR_CHECKAMMO1: + { + if(WEP_CVAR(uzi, mode) == 1) + ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, sustained_ammo); + else + ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, first_ammo); + + if(autocvar_g_balance_uzi_reload_ammo) + { + if(WEP_CVAR(uzi, mode) == 1) + ammo_amount += self.(weapon_load[WEP_UZI]) >= WEP_CVAR(uzi, sustained_ammo); + else + ammo_amount += self.(weapon_load[WEP_UZI]) >= WEP_CVAR(uzi, first_ammo); + } + return ammo_amount; + } + case WR_CHECKAMMO2: + { + if(WEP_CVAR(uzi, mode) == 1) + ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, burst_ammo); + else + ammo_amount = self.AMMO_VAL(WEP_UZI) >= WEP_CVAR(uzi, first_ammo); + + if(autocvar_g_balance_uzi_reload_ammo) + { + if(WEP_CVAR(uzi, mode) == 1) + ammo_amount += self.(weapon_load[WEP_UZI]) >= WEP_CVAR(uzi, burst_ammo); + else + ammo_amount += self.(weapon_load[WEP_UZI]) >= WEP_CVAR(uzi, first_ammo); + } + return ammo_amount; + } + case WR_CONFIG: + { + UZI_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) + return TRUE; + } + case WR_RELOAD: + { + W_Reload(min(max(WEP_CVAR(uzi, sustained_ammo), WEP_CVAR(uzi, first_ammo)), WEP_CVAR(uzi, burst_ammo)), "weapons/reload.wav"); + return TRUE; + } + case WR_SUICIDEMESSAGE: + { + return WEAPON_THINKING_WITH_PORTALS; + } + case WR_KILLMESSAGE: + { + if(w_deathtype & HITTYPE_SECONDARY) + return WEAPON_UZI_MURDER_SNIPE; + else + return WEAPON_UZI_MURDER_SPRAY; + } + } + return TRUE; +} +#endif +#ifdef CSQC +float w_uzi(float req) +{ + switch(req) + { + case WR_IMPACTEFFECT: + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + if(w_random < 0.05) + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.1) + sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.2) + sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + + return TRUE; + } + case WR_INIT: + { + precache_sound("weapons/ric1.wav"); + precache_sound("weapons/ric2.wav"); + precache_sound("weapons/ric3.wav"); + return TRUE; + } + } + return TRUE; +} +#endif +#endif diff --cc qcsrc/common/weapons/w_rifle.qc index 3f8ee0278,000000000..e8d7ee393 mode 100644,000000..100644 --- a/qcsrc/common/weapons/w_rifle.qc +++ b/qcsrc/common/weapons/w_rifle.qc @@@ -1,298 -1,0 +1,295 @@@ +#ifdef REGISTER_WEAPON +REGISTER_WEAPON( +/* WEP_##id */ RIFLE, +/* function */ W_Rifle, +/* ammotype */ ammo_nails, +/* impulse */ 7, +/* flags */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN, +/* rating */ BOT_PICKUP_RATING_MID, +/* model */ "campingrifle", +/* netname */ "rifle", +/* fullname */ _("Rifle") +); + +#define RIFLE_SETTINGS(w_cvar,w_prop) RIFLE_SETTINGS_LIST(w_cvar, w_prop, RIFLE, rifle) +#define RIFLE_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ + w_cvar(id, sn, BOTH, ammo) \ + w_cvar(id, sn, BOTH, animtime) \ - w_cvar(id, sn, BOTH, bulletconstant) \ + w_cvar(id, sn, BOTH, bullethail) \ + w_cvar(id, sn, BOTH, burstcost) \ + w_cvar(id, sn, BOTH, damage) \ + w_cvar(id, sn, BOTH, force) \ - w_cvar(id, sn, BOTH, lifetime) \ + w_cvar(id, sn, BOTH, refire) \ + w_cvar(id, sn, BOTH, shots) \ - w_cvar(id, sn, BOTH, speed) \ ++ w_cvar(id, sn, BOTH, solidpenetration) \ + w_cvar(id, sn, BOTH, spread) \ + w_cvar(id, sn, BOTH, tracer) \ + w_cvar(id, sn, NONE, bursttime) \ + w_cvar(id, sn, NONE, secondary) \ + w_cvar(id, sn, SEC, reload) \ + w_prop(id, sn, float, reloading_ammo, reload_ammo) \ + w_prop(id, sn, float, reloading_time, reload_time) \ + w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \ + w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \ + w_prop(id, sn, string, weaponreplace, weaponreplace) \ + w_prop(id, sn, float, weaponstart, weaponstart) \ + w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) + +#ifdef SVQC +RIFLE_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) +.float rifle_accumulator; +#endif +#else +#ifdef SVQC +void spawnfunc_weapon_rifle (void) { weapon_defaultspawnfunc(WEP_RIFLE); } +void spawnfunc_weapon_campingrifle (void) { spawnfunc_weapon_rifle(); } +void spawnfunc_weapon_sniperrifle (void) { spawnfunc_weapon_rifle(); } + - void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSpeed, float pLifetime, float pAmmo, float deathtype, float pBulletConstant, float pTracer, float pShots, string pSound) ++void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSolidPenetration, float pAmmo, float deathtype, float pTracer, float pShots, string pSound) +{ + float i; + + W_DecreaseAmmo(pAmmo); + + W_SetupShot (self, TRUE, 2, pSound, CH_WEAPON_A, pDamage * pShots); + + pointparticles(particleeffectnum("rifle_muzzleflash"), w_shotorg, w_shotdir * 2000, 1); + + if(self.BUTTON_ZOOM | self.BUTTON_ZOOMSCRIPT) // if zoomed, shoot from the eye + { + w_shotdir = v_forward; + w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward; + } + + for(i = 0; i < pShots; ++i) - fireBallisticBullet(w_shotorg, w_shotdir, pSpread, pSpeed, pLifetime, pDamage, pForce, deathtype, (pTracer ? EF_RED : EF_BLUE), pBulletConstant); - endFireBallisticBullet(); ++ fireBullet(w_shotorg, w_shotdir, pSpread, pSolidPenetration, pDamage, pForce, deathtype, (pTracer ? EF_RED : EF_BLUE)); + + if (autocvar_g_casings >= 2) + SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self); +} + +void W_Rifle_Attack() +{ - W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, speed), WEP_CVAR_PRI(rifle, lifetime), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE, WEP_CVAR_PRI(rifle, bulletconstant), WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), "weapons/campingrifle_fire.wav"); ++ W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), "weapons/campingrifle_fire.wav"); +} + +void W_Rifle_Attack2() +{ - W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, speed), WEP_CVAR_SEC(rifle, lifetime), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, bulletconstant), WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), "weapons/campingrifle_fire2.wav"); ++ W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), "weapons/campingrifle_fire2.wav"); +} + +.void(void) rifle_bullethail_attackfunc; +.float rifle_bullethail_frame; +.float rifle_bullethail_animtime; +.float rifle_bullethail_refire; +void W_Rifle_BulletHail_Continue() +{ + float r, sw, af; + + sw = self.switchweapon; // make it not detect weapon changes as reason to abort firing + af = ATTACK_FINISHED(self); + self.switchweapon = self.weapon; + ATTACK_FINISHED(self) = time; + print(ftos(self.AMMO_VAL(WEP_RIFLE)), "\n"); + r = weapon_prepareattack(self.rifle_bullethail_frame == WFRAME_FIRE2, self.rifle_bullethail_refire); + if(self.switchweapon == self.weapon) + self.switchweapon = sw; + if(r) + { + self.rifle_bullethail_attackfunc(); + weapon_thinkf(self.rifle_bullethail_frame, self.rifle_bullethail_animtime, W_Rifle_BulletHail_Continue); + print("thinkf set\n"); + } + else + { + ATTACK_FINISHED(self) = af; // reset attack_finished if we didn't fire, so the last shot enforces the refire time + print("out of ammo... ", ftos(self.weaponentity.state), "\n"); + } +} + +void W_Rifle_BulletHail(float mode, void(void) AttackFunc, float fr, float animtime, float refire) +{ + // if we get here, we have at least one bullet to fire + AttackFunc(); + if(mode) + { + // continue hail + self.rifle_bullethail_attackfunc = AttackFunc; + self.rifle_bullethail_frame = fr; + self.rifle_bullethail_animtime = animtime; + self.rifle_bullethail_refire = refire; + weapon_thinkf(fr, animtime, W_Rifle_BulletHail_Continue); + } + else + { + // just one shot + weapon_thinkf(fr, animtime, w_ready); + } +} + +.float bot_secondary_riflemooth; +float W_Rifle(float req) +{ + float ammo_amount; + + switch(req) + { + case WR_AIM: + { + self.BUTTON_ATCK=FALSE; + self.BUTTON_ATCK2=FALSE; + if(vlen(self.origin-self.enemy.origin) > 1000) + self.bot_secondary_riflemooth = 0; + if(self.bot_secondary_riflemooth == 0) + { - if(bot_aim(WEP_CVAR_PRI(rifle, speed), 0, WEP_CVAR_PRI(rifle, lifetime), FALSE)) ++ if(bot_aim(1000000, 0, 0.001, FALSE)) + { + self.BUTTON_ATCK = TRUE; + if(random() < 0.01) self.bot_secondary_riflemooth = 1; + } + } + else + { - if(bot_aim(WEP_CVAR_SEC(rifle, speed), 0, WEP_CVAR_SEC(rifle, lifetime), FALSE)) ++ if(bot_aim(1000000, 0, 0.001, FALSE)) + { + self.BUTTON_ATCK2 = TRUE; + if(random() < 0.03) self.bot_secondary_riflemooth = 0; + } + } + + return TRUE; + } + case WR_THINK: + { + if(autocvar_g_balance_rifle_reload_ammo && self.clip_load < min(WEP_CVAR_PRI(rifle, ammo), WEP_CVAR_SEC(rifle, ammo))) // forced reload + WEP_ACTION(self.weapon, WR_RELOAD); + else + { + self.rifle_accumulator = bound(time - WEP_CVAR(rifle, bursttime), self.rifle_accumulator, time); + if (self.BUTTON_ATCK) + if (weapon_prepareattack_check(0, WEP_CVAR_PRI(rifle, refire))) + if (time >= self.rifle_accumulator + WEP_CVAR_PRI(rifle, burstcost)) + { + weapon_prepareattack_do(0, WEP_CVAR_PRI(rifle, refire)); + W_Rifle_BulletHail(WEP_CVAR_PRI(rifle, bullethail), W_Rifle_Attack, WFRAME_FIRE1, WEP_CVAR_PRI(rifle, animtime), WEP_CVAR_PRI(rifle, refire)); + self.rifle_accumulator += WEP_CVAR_PRI(rifle, burstcost); + } + if (self.BUTTON_ATCK2) + { + if (WEP_CVAR(rifle, secondary)) + { + if(WEP_CVAR_SEC(rifle, reload)) + WEP_ACTION(self.weapon, WR_RELOAD); + else + { + if (weapon_prepareattack_check(1, WEP_CVAR_SEC(rifle, refire))) + if (time >= self.rifle_accumulator + WEP_CVAR_SEC(rifle, burstcost)) + { + weapon_prepareattack_do(1, WEP_CVAR_SEC(rifle, refire)); + W_Rifle_BulletHail(WEP_CVAR_SEC(rifle, bullethail), W_Rifle_Attack2, WFRAME_FIRE2, WEP_CVAR_SEC(rifle, animtime), WEP_CVAR_PRI(rifle, refire)); + self.rifle_accumulator += WEP_CVAR_SEC(rifle, burstcost); + } + } + } + } + } + + return TRUE; + } + case WR_INIT: + { + precache_model ("models/weapons/g_campingrifle.md3"); + precache_model ("models/weapons/v_campingrifle.md3"); + precache_model ("models/weapons/h_campingrifle.iqm"); + precache_sound ("weapons/campingrifle_fire.wav"); + precache_sound ("weapons/campingrifle_fire2.wav"); + RIFLE_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP) + return TRUE; + } + case WR_CHECKAMMO1: + { + ammo_amount = self.AMMO_VAL(WEP_RIFLE) >= WEP_CVAR_PRI(rifle, ammo); + ammo_amount += self.(weapon_load[WEP_RIFLE]) >= WEP_CVAR_PRI(rifle, ammo); + return ammo_amount; + } + case WR_CHECKAMMO2: + { + ammo_amount = self.AMMO_VAL(WEP_RIFLE) >= WEP_CVAR_SEC(rifle, ammo); + ammo_amount += self.(weapon_load[WEP_RIFLE]) >= WEP_CVAR_SEC(rifle, ammo); + return ammo_amount; + } + case WR_CONFIG: + { + RIFLE_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) + return TRUE; + } + case WR_RESETPLAYER: + { + self.rifle_accumulator = time - WEP_CVAR(rifle, bursttime); + return TRUE; + } + case WR_RELOAD: + { + W_Reload(min(WEP_CVAR_PRI(rifle, ammo), WEP_CVAR_SEC(rifle, ammo)), "weapons/reload.wav"); + return TRUE; + } + case WR_SUICIDEMESSAGE: + { + return WEAPON_THINKING_WITH_PORTALS; + } + case WR_KILLMESSAGE: + { + if(w_deathtype & HITTYPE_SECONDARY) + { + if(w_deathtype & HITTYPE_BOUNCE) + return WEAPON_RIFLE_MURDER_HAIL_PIERCING; + else + return WEAPON_RIFLE_MURDER_HAIL; + } + else + { + if(w_deathtype & HITTYPE_BOUNCE) + return WEAPON_RIFLE_MURDER_PIERCING; + else + return WEAPON_RIFLE_MURDER; + } + } + } + return TRUE; +} +#endif +#ifdef CSQC +float W_Rifle(float req) +{ + switch(req) + { + case WR_IMPACTEFFECT: + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent) + { + if(w_random < 0.2) + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.4) + sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM); + else if(w_random < 0.5) + sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM); + } + + return TRUE; + } + case WR_INIT: + { + precache_sound("weapons/ric1.wav"); + precache_sound("weapons/ric2.wav"); + precache_sound("weapons/ric3.wav"); + return TRUE; + } + } + + return TRUE; +} +#endif +#endif diff --cc qcsrc/common/weapons/w_shotgun.qc index a142aa4d0,000000000..c00d678ec mode 100644,000000..100644 --- a/qcsrc/common/weapons/w_shotgun.qc +++ b/qcsrc/common/weapons/w_shotgun.qc @@@ -1,323 -1,0 +1,321 @@@ +#ifdef REGISTER_WEAPON +REGISTER_WEAPON( +/* WEP_##id */ SHOTGUN, +/* function */ w_shotgun, +/* ammotype */ ammo_none, +/* impulse */ 2, +/* flags */ WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN | WEP_FLAG_MUTATORBLOCKED, +/* rating */ BOT_PICKUP_RATING_LOW, +/* model */ "shotgun", +/* shortname */ "shotgun", +/* fullname */ _("Shotgun") +); + +#define SHOTGUN_SETTINGS(w_cvar,w_prop) SHOTGUN_SETTINGS_LIST(w_cvar, w_prop, SHOTGUN, shotgun) +#define SHOTGUN_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ + w_cvar(id, sn, PRI, ammo) \ + w_cvar(id, sn, BOTH, animtime) \ + w_cvar(id, sn, BOTH, refire) \ + w_cvar(id, sn, PRI, bullets) \ - w_cvar(id, sn, PRI, bulletconstant) \ + w_cvar(id, sn, BOTH, damage) \ + w_cvar(id, sn, BOTH, force) \ ++ w_cvar(id, sn, PRI, solidpenetration) \ + w_cvar(id, sn, PRI, spread) \ - w_cvar(id, sn, PRI, speed) \ + w_cvar(id, sn, NONE, secondary) \ + w_cvar(id, sn, SEC, melee_time) \ + w_cvar(id, sn, SEC, melee_no_doubleslap) \ + w_cvar(id, sn, SEC, melee_traces) \ + w_cvar(id, sn, SEC, melee_swing_up) \ + w_cvar(id, sn, SEC, melee_swing_side) \ + w_cvar(id, sn, SEC, melee_nonplayerdamage) \ + w_cvar(id, sn, SEC, melee_multihit) \ + w_cvar(id, sn, SEC, melee_delay) \ + w_cvar(id, sn, SEC, melee_range) \ + w_prop(id, sn, float, reloading_ammo, reload_ammo) \ + w_prop(id, sn, float, reloading_time, reload_time) \ + w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \ + w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \ + w_prop(id, sn, string, weaponreplace, weaponreplace) \ + w_prop(id, sn, float, weaponstart, weaponstart) \ + w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) + +#ifdef SVQC +SHOTGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) +#endif +#else +#ifdef SVQC + +void W_Shotgun_Attack (void) +{ + float sc; + entity flash; + + W_DecreaseAmmo(WEP_CVAR_PRI(shotgun, ammo)); + + W_SetupShot (self, TRUE, 5, "weapons/shotgun_fire.wav", CH_WEAPON_A, WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets)); + for (sc = 0;sc < WEP_CVAR_PRI(shotgun, bullets);sc = sc + 1) - fireBallisticBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, speed), 5, WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN, 0, WEP_CVAR_PRI(shotgun, bulletconstant)); - endFireBallisticBullet(); ++ fireBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, solidpenetration), WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN, 0); + + pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, WEP_CVAR_PRI(shotgun, ammo)); + + // casing code + if (autocvar_g_casings >= 1) + for (sc = 0;sc < WEP_CVAR_PRI(shotgun, ammo);sc = sc + 1) + SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 30) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 1, self); + + // muzzle flash for 1st person view + flash = spawn(); + setmodel(flash, "models/uziflash.md3"); // precision set below + flash.think = SUB_Remove; + flash.nextthink = time + 0.06; + flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; + W_AttachToShotorg(flash, '5 0 0'); +} + +.float swing_prev; +.entity swing_alreadyhit; +void shotgun_meleethink (void) +{ + // declarations + float i, f, swing, swing_factor, swing_damage, meleetime, is_player; + entity target_victim; + vector targpos; + + if(!self.cnt) // set start time of melee + { + self.cnt = time; + W_PlayStrengthSound(self.realowner); + } + + makevectors(self.realowner.v_angle); // update values for v_* vectors + + // calculate swing percentage based on time + meleetime = WEP_CVAR_SEC(shotgun, melee_time) * W_WeaponRateFactor(); + swing = bound(0, (self.cnt + meleetime - time) / meleetime, 10); + f = ((1 - swing) * WEP_CVAR_SEC(shotgun, melee_traces)); + + // check to see if we can still continue, otherwise give up now + if((self.realowner.deadflag != DEAD_NO) && WEP_CVAR_SEC(shotgun, melee_no_doubleslap)) + { + remove(self); + return; + } + + // if okay, perform the traces needed for this frame + for(i=self.swing_prev; i < f; ++i) + { + swing_factor = ((1 - (i / WEP_CVAR_SEC(shotgun, melee_traces))) * 2 - 1); + + targpos = (self.realowner.origin + self.realowner.view_ofs + + (v_forward * WEP_CVAR_SEC(shotgun, melee_range)) + + (v_up * swing_factor * WEP_CVAR_SEC(shotgun, melee_swing_up)) + + (v_right * swing_factor * WEP_CVAR_SEC(shotgun, melee_swing_side))); + + WarpZone_traceline_antilag(self, self.realowner.origin + self.realowner.view_ofs, targpos, FALSE, self, ANTILAG_LATENCY(self.realowner)); + + // draw lightning beams for debugging + //te_lightning2(world, targpos, self.realowner.origin + self.realowner.view_ofs + v_forward * 5 - v_up * 5); + //te_customflash(targpos, 40, 2, '1 1 1'); + + is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body"); + + if((trace_fraction < 1) // if trace is good, apply the damage and remove self + && (trace_ent.takedamage == DAMAGE_AIM) + && (trace_ent != self.swing_alreadyhit) + && (is_player || WEP_CVAR_SEC(shotgun, 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_SEC(shotgun, damage) * min(1, swing_factor + 1)); + else + swing_damage = (WEP_CVAR_SEC(shotgun, melee_nonplayerdamage) * min(1, swing_factor + 1)); + + //print(strcat(self.realowner.netname, " hitting ", target_victim.netname, " with ", strcat(ftos(swing_damage), " damage (factor: ", ftos(swing_factor), ") at "), ftos(time), " seconds.\n")); + + Damage(target_victim, self.realowner, self.realowner, + swing_damage, WEP_SHOTGUN | HITTYPE_SECONDARY, + self.realowner.origin + self.realowner.view_ofs, + v_forward * WEP_CVAR_SEC(shotgun, force)); + + if(accuracy_isgooddamage(self.realowner, target_victim)) { accuracy_add(self.realowner, WEP_SHOTGUN, 0, swing_damage); } + + // draw large red flash for debugging + //te_customflash(targpos, 200, 2, '15 0 0'); + + if(WEP_CVAR_SEC(shotgun, melee_multihit)) // allow multiple hits with one swing, but not against the same player twice. + { + self.swing_alreadyhit = target_victim; + continue; // move along to next trace + } + else + { + remove(self); + return; + } + } + } + + if(time >= self.cnt + meleetime) + { + // melee is finished + remove(self); + return; + } + else + { + // set up next frame + self.swing_prev = i; + self.nextthink = time; + } +} + +void W_Shotgun_Attack2 (void) +{ + sound (self, CH_WEAPON_A, "weapons/shotgun_melee.wav", VOL_BASE, ATTEN_NORM); + weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(shotgun, animtime), w_ready); + + entity meleetemp; + meleetemp = spawn(); + meleetemp.realowner = self; + meleetemp.think = shotgun_meleethink; + meleetemp.nextthink = time + WEP_CVAR_SEC(shotgun, melee_delay) * W_WeaponRateFactor(); + W_SetupShot_Range(self, TRUE, 0, "", 0, WEP_CVAR_SEC(shotgun, damage), WEP_CVAR_SEC(shotgun, melee_range)); +} + +void spawnfunc_weapon_shotgun(); // defined in t_items.qc + +.float shotgun_primarytime; + +float w_shotgun(float req) +{ + switch(req) + { + case WR_AIM: + { + if(vlen(self.origin-self.enemy.origin) <= WEP_CVAR_SEC(shotgun, melee_range)) + self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE); + else + self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE); + + return TRUE; + } + case WR_THINK: + { + if(WEP_CVAR(shotgun, reload_ammo) && self.clip_load < WEP_CVAR_PRI(shotgun, ammo)) // forced reload + { + // don't force reload an empty shotgun if its melee attack is active + if (!(WEP_CVAR(shotgun, secondary) && self.ammo_shells < WEP_CVAR_PRI(shotgun, ammo))) + WEP_ACTION(self.weapon, WR_RELOAD); + } + else + { + if (self.BUTTON_ATCK) + { + if (time >= self.shotgun_primarytime) // handle refire separately so the secondary can be fired straight after a primary + { + if(weapon_prepareattack(0, WEP_CVAR_PRI(shotgun, animtime))) + { + W_Shotgun_Attack(); + self.shotgun_primarytime = time + WEP_CVAR_PRI(shotgun, refire) * W_WeaponRateFactor(); + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(shotgun, animtime), w_ready); + } + } + } + } + if (self.clip_load >= 0) // we are not currently reloading + if (!self.crouch) // no crouchmelee please + if (self.BUTTON_ATCK2 && WEP_CVAR(shotgun, secondary)) + if (weapon_prepareattack(1, WEP_CVAR_SEC(shotgun, refire))) + { + // attempt forcing playback of the anim by switching to another anim (that we never play) here... + weapon_thinkf(WFRAME_FIRE1, 0, W_Shotgun_Attack2); + } + + return TRUE; + } + case WR_INIT: + { + precache_model ("models/uziflash.md3"); + precache_model ("models/weapons/g_shotgun.md3"); + precache_model ("models/weapons/v_shotgun.md3"); + precache_model ("models/weapons/h_shotgun.iqm"); + precache_sound ("misc/itempickup.wav"); + precache_sound ("weapons/shotgun_fire.wav"); + precache_sound ("weapons/shotgun_melee.wav"); + SHOTGUN_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP) + return TRUE; + } + case WR_SETUP: + { + self.current_ammo = ammo_none; + return TRUE; + } + case WR_CHECKAMMO1: + case WR_CHECKAMMO2: + { + // shotgun has infinite ammo + return TRUE; + } + case WR_CONFIG: + { + SHOTGUN_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) + return TRUE; + } + case WR_RELOAD: + { + W_Reload(WEP_CVAR_PRI(shotgun, ammo), "weapons/reload.wav"); // WEAPONTODO + return TRUE; + } + case WR_SUICIDEMESSAGE: + { + return WEAPON_THINKING_WITH_PORTALS; + } + case WR_KILLMESSAGE: + { + if(w_deathtype & HITTYPE_SECONDARY) + return WEAPON_SHOTGUN_MURDER_SLAP; + else + return WEAPON_SHOTGUN_MURDER; + } + } + + return TRUE; +} +#endif +#ifdef CSQC +.float prevric; +float w_shotgun(float req) +{ + switch(req) + { + case WR_IMPACTEFFECT: + { + vector org2; + org2 = w_org + w_backoff * 2; + pointparticles(particleeffectnum("shotgun_impact"), org2, w_backoff * 1000, 1); + if(!w_issilent && time - self.prevric > 0.25) + { + if(w_random < 0.0165) + sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTEN_NORM); + else if(w_random < 0.033) + sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTEN_NORM); + else if(w_random < 0.05) + sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTEN_NORM); + self.prevric = time; + } + + return TRUE; + } + case WR_INIT: + { + precache_sound("weapons/ric1.wav"); + precache_sound("weapons/ric2.wav"); + precache_sound("weapons/ric3.wav"); + return TRUE; + } + } + return TRUE; +} +#endif +#endif diff --cc qcsrc/server/autocvars.qh index 4b1c7d880,ada0d4bda..1dc2d08b3 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@@ -178,9 -618,63 +178,8 @@@ float autocvar_g_balance_selfdamageperc float autocvar_g_balance_teams; float autocvar_g_balance_teams_prevent_imbalance; float autocvar_g_balance_teams_scorefactor; -float autocvar_g_balance_tuba_animtime; -float autocvar_g_balance_tuba_attenuation; -float autocvar_g_balance_tuba_damage; -float autocvar_g_balance_tuba_edgedamage; -float autocvar_g_balance_tuba_force; -float autocvar_g_balance_tuba_radius; -float autocvar_g_balance_tuba_refire; -float autocvar_g_balance_uzi_burst; -float autocvar_g_balance_uzi_burst_ammo; -float autocvar_g_balance_uzi_burst_animtime; -float autocvar_g_balance_uzi_burst_refire; -float autocvar_g_balance_uzi_burst_refire2; -float autocvar_g_balance_uzi_burst_spread; -float autocvar_g_balance_uzi_first; -float autocvar_g_balance_uzi_first_ammo; -float autocvar_g_balance_uzi_first_damage; -float autocvar_g_balance_uzi_first_force; -float autocvar_g_balance_uzi_first_refire; -float autocvar_g_balance_uzi_first_spread; -float autocvar_g_balance_uzi_mode; -float autocvar_g_balance_uzi_solidpenetration; -float autocvar_g_balance_uzi_spread_add; -float autocvar_g_balance_uzi_spread_max; -float autocvar_g_balance_uzi_spread_min; -float autocvar_g_balance_uzi_sustained_ammo; -float autocvar_g_balance_uzi_sustained_damage; -float autocvar_g_balance_uzi_sustained_force; -float autocvar_g_balance_uzi_sustained_refire; -float autocvar_g_balance_uzi_sustained_spread; -float autocvar_g_balance_uzi_reload_ammo; -float autocvar_g_balance_uzi_reload_time; float autocvar_g_ballistics_density_corpse; float autocvar_g_ballistics_density_player; - float autocvar_g_ballistics_materialconstant; float autocvar_g_ballistics_mindistance; float autocvar_g_ban_default_bantime; float autocvar_g_ban_default_masksize; diff --cc qcsrc/server/weapons/tracing.qc index b70988945,000000000..961335de4 mode 100644,000000..100644 --- a/qcsrc/server/weapons/tracing.qc +++ b/qcsrc/server/weapons/tracing.qc @@@ -1,697 -1,0 +1,463 @@@ +// 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, string snd, float chan, float maxdamage, float range) +{ + float nudge = 1; // added to traceline target and subtracted from result + float oldsolid; + vector vecs, dv; + oldsolid = ent.dphitcontentsmask; + if(ent.weapon == WEP_RIFLE) + ent.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_CORPSE; + else + ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; + if(antilag) + WarpZone_traceline_antilag(world, ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + s_forward * range, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent)); + // passing world, because we do NOT want it to touch dphitcontentsmask + else + WarpZone_TraceLine(ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + s_forward * range, MOVE_NOMONSTERS, ent); + ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; + + vector vf, vr, vu; + vf = v_forward; + vr = v_right; + vu = v_up; + w_shotend = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); // warpzone support + v_forward = vf; + v_right = vr; + v_up = vu; + + // un-adjust trueaim if shotend is too close + if(vlen(w_shotend - (ent.origin + ent.view_ofs)) < autocvar_g_trueaim_minrange) + w_shotend = ent.origin + ent.view_ofs + s_forward * autocvar_g_trueaim_minrange; + + // track max damage + if(accuracy_canbegooddamage(ent)) + accuracy_add(ent, ent.weapon, maxdamage, 0); + + W_HitPlotAnalysis(ent, v_forward, v_right, v_up); + + if(ent.weaponentity.movedir_x > 0) + vecs = ent.weaponentity.movedir; + else + vecs = '0 0 0'; + + dv = v_right * -vecs_y + v_up * vecs_z; + w_shotorg = ent.origin + ent.view_ofs + dv; + + // now move the shotorg forward as much as requested if possible + if(antilag) + { + if(ent.antilag_debug) + tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, ent, ent.antilag_debug); + else + tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, ent, ANTILAG_LATENCY(ent)); + } + else + tracebox(w_shotorg, mi, ma, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, ent); + w_shotorg = trace_endpos - v_forward * nudge; + // calculate the shotdir from the chosen shotorg + w_shotdir = normalize(w_shotend - w_shotorg); + + if (antilag) + if (!ent.cvar_cl_noantilag) + { + if (autocvar_g_antilag == 1) // switch to "ghost" if not hitting original + { + traceline(w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent); + if (!trace_ent.takedamage) + { + traceline_antilag_force (ent, w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent, ANTILAG_LATENCY(ent)); + if (trace_ent.takedamage && IS_PLAYER(trace_ent)) + { + entity e; + e = trace_ent; + traceline(w_shotorg, e.origin, MOVE_NORMAL, ent); + if(trace_ent == e) + w_shotdir = normalize(trace_ent.origin - w_shotorg); + } + } + } + else if(autocvar_g_antilag == 3) // client side hitscan + { + // this part MUST use prydon cursor + if (ent.cursor_trace_ent) // client was aiming at someone + if (ent.cursor_trace_ent != ent) // just to make sure + if (ent.cursor_trace_ent.takedamage) // and that person is killable + if (IS_PLAYER(ent.cursor_trace_ent)) // and actually a player + { + // verify that the shot would miss without antilag + // (avoids an issue where guns would always shoot at their origin) + traceline(w_shotorg, w_shotorg + w_shotdir * range, MOVE_NORMAL, ent); + if (!trace_ent.takedamage) + { + // verify that the shot would hit if altered + traceline(w_shotorg, ent.cursor_trace_ent.origin, MOVE_NORMAL, ent); + if (trace_ent == ent.cursor_trace_ent) + w_shotdir = normalize(ent.cursor_trace_ent.origin - w_shotorg); + else + print("antilag fail\n"); + } + } + } + } + + ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX) + + if (!autocvar_g_norecoil) + ent.punchangle_x = recoil * -1; + + if (snd != "") + { + sound (ent, chan, snd, VOL_BASE, ATTN_NORM); + W_PlayStrengthSound(ent); + } + + // nudge w_shotend so a trace to w_shotend hits + w_shotend = w_shotend + normalize(w_shotend - w_shotorg) * nudge; +} + +vector W_CalculateProjectileVelocity(vector pvelocity, vector mvelocity, float forceAbsolute) +{ + vector mdirection; + float mspeed; + vector outvelocity; + + mvelocity = mvelocity * g_weaponspeedfactor; + + mdirection = normalize(mvelocity); + mspeed = vlen(mvelocity); + + outvelocity = get_shotvelocity(pvelocity, mdirection, mspeed, (forceAbsolute ? 0 : autocvar_g_projectiles_newton_style), autocvar_g_projectiles_newton_style_2_minfactor, autocvar_g_projectiles_newton_style_2_maxfactor); + + return outvelocity; +} + +#if 0 +float mspercallsum; +float mspercallsstyle; +float mspercallcount; +#endif +void W_SetupProjectileVelocityEx(entity missile, vector dir, vector upDir, float pSpeed, float pUpSpeed, float pZSpeed, float spread, float forceAbsolute) +{ + if(missile.owner == world) + error("Unowned missile"); + + dir = dir + upDir * (pUpSpeed / pSpeed); + dir_z += pZSpeed / pSpeed; + pSpeed *= vlen(dir); + dir = normalize(dir); + +#if 0 + if(autocvar_g_projectiles_spread_style != mspercallsstyle) + { + mspercallsum = mspercallcount = 0; + mspercallsstyle = autocvar_g_projectiles_spread_style; + } + mspercallsum -= gettime(GETTIME_HIRES); +#endif + dir = W_CalculateSpread(dir, spread, g_weaponspreadfactor, autocvar_g_projectiles_spread_style); +#if 0 + mspercallsum += gettime(GETTIME_HIRES); + mspercallcount += 1; + print("avg: ", ftos(mspercallcount / mspercallsum), " per sec\n"); +#endif + + missile.velocity = W_CalculateProjectileVelocity(missile.owner.velocity, pSpeed * dir, forceAbsolute); +} + +void W_SetupProjectileVelocity(entity missile, float pSpeed, float spread) // WEAPONTODO +{ + W_SetupProjectileVelocityEx(missile, w_shotdir, v_up, pSpeed, 0, 0, spread, FALSE); +} + + +// ==================== +// Ballistics Tracing +// ==================== + +void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, float deathtype) +{ + vector hitloc, force, endpoint, dir; + entity ent, endent; + float endq3surfaceflags; + float totaldmg; + entity o; + + float length; + vector beampos; + string snd; + entity pseudoprojectile; + float f, ffs; + + pseudoprojectile = world; + - railgun_start = start; - railgun_end = end; - + dir = normalize(end - start); + length = vlen(end - start); + force = dir * bforce; + + // go a little bit into the wall because we need to hit this wall later + end = end + dir; + + totaldmg = 0; + + // trace multiple times until we hit a wall, each obstacle will be made + // non-solid so we can hit the next, while doing this we spawn effects and + // note down which entities were hit so we can damage them later + o = self; + while (1) + { + if(self.antilag_debug) + WarpZone_traceline_antilag (self, start, end, FALSE, o, self.antilag_debug); + else + WarpZone_traceline_antilag (self, start, end, FALSE, o, ANTILAG_LATENCY(self)); + if(o && WarpZone_trace_firstzone) + { + o = world; + continue; + } + + if(trace_ent.solid == SOLID_BSP || trace_ent.solid == SOLID_SLIDEBOX) + Damage_DamageInfo(trace_endpos, bdamage, 0, 0, force, deathtype, trace_ent.species, self); + + // if it is world we can't hurt it so stop now + if (trace_ent == world || trace_fraction == 1) + break; + + // make the entity non-solid so we can hit the next one + trace_ent.railgunhit = TRUE; + trace_ent.railgunhitloc = end; + trace_ent.railgunhitsolidbackup = trace_ent.solid; + trace_ent.railgundistance = vlen(WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos) - start); + trace_ent.railgunforce = WarpZone_TransformVelocity(WarpZone_trace_transform, force); + + // stop if this is a wall + if (trace_ent.solid == SOLID_BSP) + break; + + // make the entity non-solid + trace_ent.solid = SOLID_NOT; + } + + endpoint = trace_endpos; + endent = trace_ent; + endq3surfaceflags = trace_dphitq3surfaceflags; + + // find all the entities the railgun hit and restore their solid state + ent = findfloat(world, railgunhit, TRUE); + while (ent) + { + // restore their solid type + ent.solid = ent.railgunhitsolidbackup; + ent = findfloat(ent, railgunhit, TRUE); + } + + // spawn a temporary explosion entity for RadiusDamage calls + //explosion = spawn(); + + // Find all non-hit players the beam passed close by + if(deathtype == WEP_MINSTANEX || deathtype == WEP_NEX) + { + FOR_EACH_REALCLIENT(msg_entity) + if(msg_entity != self) + if(!msg_entity.railgunhit) + if(!(IS_SPEC(msg_entity) && msg_entity.enemy == self)) // we use realclient, so spectators can hear the whoosh too + { + // nearest point on the beam + beampos = start + dir * bound(0, (msg_entity.origin - start) * dir, length); + + f = bound(0, 1 - vlen(beampos - msg_entity.origin) / 512, 1); + if(f <= 0) + continue; + + snd = strcat("weapons/nexwhoosh", ftos(floor(random() * 3) + 1), ".wav"); + + if(!pseudoprojectile) + pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume + soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, snd, VOL_BASE * f, ATTEN_NONE); + } + + if(pseudoprojectile) + remove(pseudoprojectile); + } + + // find all the entities the railgun hit and hurt them + ent = findfloat(world, railgunhit, TRUE); + while (ent) + { + // get the details we need to call the damage function + hitloc = ent.railgunhitloc; + + f = ExponentialFalloff(mindist, maxdist, halflifedist, ent.railgundistance); + ffs = ExponentialFalloff(mindist, maxdist, forcehalflifedist, ent.railgundistance); + + if(accuracy_isgooddamage(self.realowner, ent)) + totaldmg += bdamage * f; + + // apply the damage + if (ent.takedamage) + Damage (ent, self, self, bdamage * f, deathtype, hitloc, ent.railgunforce * ffs); + + // create a small explosion to throw gibs around (if applicable) + //setorigin (explosion, hitloc); + //RadiusDamage (explosion, self, 10, 0, 50, world, world, 300, deathtype); + + ent.railgunhitloc = '0 0 0'; + ent.railgunhitsolidbackup = SOLID_NOT; + ent.railgunhit = FALSE; + ent.railgundistance = 0; + + // advance to the next entity + ent = findfloat(ent, railgunhit, TRUE); + } + + // calculate hits and fired shots for hitscan + accuracy_add(self, self.weapon, 0, min(bdamage, totaldmg)); + + trace_endpos = endpoint; + trace_ent = endent; + trace_dphitq3surfaceflags = endq3surfaceflags; +} + - void W_BallisticBullet_Hit (void) - { - float f, q, g; - - f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier - q = 1 + self.dmg_edge / self.dmg; - - if(other.solid == SOLID_BSP || other.solid == SOLID_SLIDEBOX) - Damage_DamageInfo(self.origin, self.dmg * f, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * f, self.projectiledeathtype, other.species, self); - - if(other && other != self.enemy) - { - endzcurveparticles(); - - yoda = 0; - railgun_start = self.origin - 2 * frametime * self.velocity; - railgun_end = self.origin + 2 * frametime * self.velocity; - g = accuracy_isgooddamage(self.realowner, other); - Damage(other, self, self.realowner, self.dmg * f, self.projectiledeathtype, self.origin, self.dmg_force * normalize(self.velocity) * f); - - /*if(yoda && (time > (self.last_yoda + 5))) - { - Send_Notification(NOTIF_ONE, self.realowner, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA); - self.last_yoda = time; - }*/ - - // calculate hits for ballistic weapons - if(g) - { - // do not exceed 100% - q = min(self.dmg * q, self.dmg_total + f * self.dmg) - self.dmg_total; - self.dmg_total += f * self.dmg; - accuracy_add(self.realowner, self.realowner.weapon, 0, q); - } - } - - self.enemy = other; // don't hit the same player twice with the same bullet - } - - void W_BallisticBullet_LeaveSolid_think() - { - setorigin(self, self.W_BallisticBullet_LeaveSolid_origin); - self.velocity = self.W_BallisticBullet_LeaveSolid_velocity; - - self.think = self.W_BallisticBullet_LeaveSolid_think_save; - self.nextthink = max(time, self.W_BallisticBullet_LeaveSolid_nextthink_save); - self.W_BallisticBullet_LeaveSolid_think_save = func_null; - - self.flags &= ~FL_ONGROUND; - - if(self.enemy.solid == SOLID_BSP) - { - float f; - f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier - Damage_DamageInfo(self.origin, 0, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * -f, self.projectiledeathtype, 0, self); - } - - UpdateCSQCProjectile(self); - } - - float W_BallisticBullet_LeaveSolid(float eff) - { - // move the entity along its velocity until it's out of solid, then let it resume - vector vel = self.velocity; - float dt, dst, velfactor, v0, vs; - float maxdist; - float E0_m, Es_m; - float constant = self.dmg_radius * (other.ballistics_density ? other.ballistics_density : 1); - - // outside the world? forget it - if(self.origin_x > world.maxs_x || self.origin_y > world.maxs_y || self.origin_z > world.maxs_z || self.origin_x < world.mins_x || self.origin_y < world.mins_y || self.origin_z < world.mins_z) - return 0; - - // special case for zero density and zero bullet constant: - - if(self.dmg_radius == 0) - { - if(other.ballistics_density < 0) - constant = 0; // infinite travel distance - else - return 0; // no penetration - } - else - { - if(other.ballistics_density < 0) - constant = 0; // infinite travel distance - else if(other.ballistics_density == 0) - constant = self.dmg_radius; - else - constant = self.dmg_radius * other.ballistics_density; - } - - // E(s) = E0 - constant * s, constant = area of bullet circle * material constant / mass - v0 = vlen(vel); - - E0_m = 0.5 * v0 * v0; - - if(constant) - { - maxdist = E0_m / constant; - // maxdist = 0.5 * v0 * v0 / constant - // dprint("max dist = ", ftos(maxdist), "\n"); - - if(maxdist <= autocvar_g_ballistics_mindistance) - return 0; - } - else - { - maxdist = vlen(other.maxs - other.mins) + 1; // any distance, as long as we leave the entity - } - - traceline_inverted (self.origin, self.origin + normalize(vel) * maxdist, MOVE_NORMAL, self, TRUE); - if(trace_fraction == 1) // 1: we never got out of solid - return 0; - - self.W_BallisticBullet_LeaveSolid_origin = trace_endpos; - - dst = max(autocvar_g_ballistics_mindistance, vlen(trace_endpos - self.origin)); - // E(s) = E0 - constant * s, constant = area of bullet circle * material constant / mass - Es_m = E0_m - constant * dst; - if(Es_m <= 0) - { - // roundoff errors got us - return 0; - } - vs = sqrt(2 * Es_m); - velfactor = vs / v0; - - dt = dst / (0.5 * (v0 + vs)); - // this is not correct, but the differential equations have no analytic - // solution - and these times are very small anyway - //print("dt = ", ftos(dt), "\n"); - - self.W_BallisticBullet_LeaveSolid_think_save = self.think; - self.W_BallisticBullet_LeaveSolid_nextthink_save = self.nextthink; - self.think = W_BallisticBullet_LeaveSolid_think; - self.nextthink = time + dt; - - vel = vel * velfactor; - - self.velocity = '0 0 0'; - self.flags |= FL_ONGROUND; // prevent moving - self.W_BallisticBullet_LeaveSolid_velocity = vel; - - if(eff >= 0) - if(vlen(trace_endpos - self.origin) > 4) - { - endzcurveparticles(); - trailparticles(self, eff, self.origin, trace_endpos); - } - - return 1; - } - - void W_BallisticBullet_Touch (void) - { - //float density; - - if(self.think == W_BallisticBullet_LeaveSolid_think) // skip this! - return; - - PROJECTILE_TOUCH; - W_BallisticBullet_Hit (); - - if(self.dmg_radius < 0) // these NEVER penetrate solid - { - remove(self); - return; - } - - // if we hit "weapclip", bail out - // - // rationale of this check: - // - // any shader that is solid, nodraw AND trans is meant to clip weapon - // shots and players, but has no other effect! - // - // if it is not trans, it is caulk and should not have this side effect - // - // matching shaders: - // common/weapclip (intended) - // common/noimpact (is supposed to eat projectiles, but is erased farther above) - if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW) - if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID)) - if (!(trace_dphitcontents & DPCONTENTS_OPAQUE)) - { - remove(self); - return; - } - - // go through solid! - if(!W_BallisticBullet_LeaveSolid(-1)) - { - remove(self); - return; - } - - self.projectiledeathtype |= HITTYPE_BOUNCE; - } - - void endFireBallisticBullet() // WEAPONTODO ++void fireBullet_trace_callback(vector start, vector hit, vector end) +{ - endzcurveparticles(); - } - - void fireBallisticBullet_trace_callback(vector start, vector hit, vector end) - { - if(vlen(trace_endpos - fireBallisticBullet_trace_callback_ent.origin) > 16) - zcurveparticles_from_tracetoss(fireBallisticBullet_trace_callback_eff, fireBallisticBullet_trace_callback_ent.origin, trace_endpos, fireBallisticBullet_trace_callback_ent.velocity); ++ if(vlen(hit - start) > 16) ++ trailparticles(world, fireBullet_trace_callback_eff, start, hit); + WarpZone_trace_forent = world; - self.owner = world; ++ fireBullet_last_hit = world; +} + - void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, float lifetime, float damage, float force, float dtype, float tracereffects, float bulletconstant) ++void fireBullet(vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, float tracereffects) +{ - float lag, dt, savetime; //, density; - entity pl, oldself; - - entity proj; - proj = spawn(); - proj.classname = "bullet"; - proj.owner = proj.realowner = self; - PROJECTILE_MAKETRIGGER(proj); - proj.movetype = MOVETYPE_FLY; - proj.think = SUB_Remove; - proj.nextthink = time + lifetime; // min(pLifetime, vlen(world.maxs - world.mins) / pSpeed); - W_SetupProjectileVelocityEx(proj, dir, v_up, pSpeed, 0, 0, spread, TRUE); - proj.angles = vectoangles(proj.velocity); - if(bulletconstant > 0) - proj.dmg_radius = autocvar_g_ballistics_materialconstant / bulletconstant; - else if(bulletconstant == 0) - proj.dmg_radius = 0; - else - proj.dmg_radius = -1; - // so: bulletconstant = bullet mass / area of bullet circle - setorigin(proj, start); - proj.flags = FL_PROJECTILE; - - proj.touch = W_BallisticBullet_Touch; - proj.dmg = damage; - proj.dmg_force = force; - proj.projectiledeathtype = dtype; - - proj.oldvelocity = proj.velocity; ++ vector end; + - other = proj; MUTATOR_CALLHOOK(EditProjectile); ++ dir = normalize(dir + randomvec() * spread); ++ end = start + dir * MAX_SHOT_DISTANCE; + - float eff; ++ entity pl; ++ fireBullet_last_hit = world; ++ float solid_penetration_left = 1; ++ float total_damage = 0; + + if(tracereffects & EF_RED) - eff = particleeffectnum("tr_rifle"); ++ fireBullet_trace_callback_eff = particleeffectnum("tr_rifle"); + else if(tracereffects & EF_BLUE) - eff = particleeffectnum("tr_rifle_weak"); ++ fireBullet_trace_callback_eff = particleeffectnum("tr_rifle_weak"); + else - eff = particleeffectnum("tr_bullet"); ++ fireBullet_trace_callback_eff = particleeffectnum("tr_bullet"); + - // NOTE: this may severely throw off weapon balance - lag = ANTILAG_LATENCY(self); ++ float lag = ANTILAG_LATENCY(self); + if(lag < 0.001) + lag = 0; + if (!IS_REAL_CLIENT(self)) + lag = 0; + if(autocvar_g_antilag == 0 || self.cvar_cl_noantilag) + lag = 0; // only do hitscan, but no antilag - + if(lag) + FOR_EACH_PLAYER(pl) + if(pl != self) + antilag_takeback(pl, time - lag); + - oldself = self; - self = proj; ++ WarpZone_trace_forent = self; + - savetime = frametime; - frametime = 0.05; - - for(;;) ++ for (;;) + { - // DP tracetoss is stupid and always traces in 0.05s - // ticks. This makes it trace in 0.05*0.125s ticks - // instead. - vector v0; - v0 = self.velocity; - self.velocity = self.velocity * 0.125; - trace_fraction = 0; - fireBallisticBullet_trace_callback_ent = self; - fireBallisticBullet_trace_callback_eff = eff; - WarpZone_TraceToss_ThroughZone(self, self.owner, world, fireBallisticBullet_trace_callback); - self.velocity = v0; - - if(trace_fraction == 1) ++ // TODO also show effect while tracing ++ WarpZone_TraceBox_ThroughZone(start, '0 0 0', '0 0 0', end, FALSE, WarpZone_trace_forent, world, fireBullet_trace_callback); ++ dir = WarpZone_TransformVelocity(WarpZone_trace_transform, dir); ++ end = WarpZone_TransformOrigin(WarpZone_trace_transform, end); ++ start = trace_endpos; ++ entity hit = trace_ent; ++ ++ // When hitting sky, stop. ++ if (pointcontents(start) == CONTENT_SKY) + break; - // won't hit anything anytime soon (DP's - // tracetoss does 200 tics of, here, - // 0.05*0.125s, that is, 1.25 seconds - - other = trace_ent; - dt = WarpZone_tracetoss_time * 0.125; // this is only approximate! - setorigin(self, trace_endpos); - self.velocity = WarpZone_tracetoss_velocity * (1 / 0.125); - - if(!SUB_OwnerCheck()) - { - if(SUB_NoImpactCheck()) - break; + - // hit the player - W_BallisticBullet_Hit(); - } - - if(proj.dmg_radius < 0) // these NEVER penetrate solid ++ if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) + break; + + // if we hit "weapclip", bail out + // + // rationale of this check: + // + // any shader that is solid, nodraw AND trans is meant to clip weapon + // shots and players, but has no other effect! + // + // if it is not trans, it is caulk and should not have this side effect + // + // matching shaders: + // common/weapclip (intended) - // common/noimpact (is supposed to eat projectiles, but is erased farther above) ++ // common/noimpact (is supposed to eat projectiles, but is erased anyway) ++ float is_weapclip = 0; + if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW) + if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID)) + if (!(trace_dphitcontents & DPCONTENTS_OPAQUE)) - break; ++ is_weapclip = 1; + - // go through solid! - if(!W_BallisticBullet_LeaveSolid((other && (other.solid != SOLID_BSP)) ? eff : -1)) - break; ++ if(!hit || hit.solid == SOLID_BSP || hit.solid == SOLID_SLIDEBOX) ++ Damage_DamageInfo(start, damage * solid_penetration_left, 0, 0, max(1, force) * dir * solid_penetration_left, dtype, hit.species, self); + - W_BallisticBullet_LeaveSolid_think(); ++ if (hit && hit != WarpZone_trace_forent && hit != fireBullet_last_hit) // Avoid self-damage (except after going through a warp); avoid hitting the same entity twice (engine bug). ++ { ++ fireBullet_last_hit = hit; ++ yoda = 0; ++ float g = accuracy_isgooddamage(self, hit); ++ Damage(hit, self, self, damage * solid_penetration_left, dtype, start, force * dir * solid_penetration_left); ++ // calculate hits for ballistic weapons ++ if(g) ++ { ++ // do not exceed 100% ++ float added_damage = min(damage - total_damage, damage * solid_penetration_left); ++ total_damage += damage * solid_penetration_left; ++ accuracy_add(self, self.weapon, 0, added_damage); ++ } ++ } + - self.projectiledeathtype |= HITTYPE_BOUNCE; - } - frametime = savetime; - self = oldself; ++ if (is_weapclip) ++ break; + - if(lag) - FOR_EACH_PLAYER(pl) - if(pl != self) - antilag_restore(pl); ++ // go through solid! ++ // outside the world? forget it ++ if(start_x > world.maxs_x || start_y > world.maxs_y || start_z > world.maxs_z || start_x < world.mins_x || start_y < world.mins_y || start_z < world.mins_z) ++ break; + - remove(proj); ++ float maxdist; ++ if(max_solid_penetration < 0) ++ break; ++ else if(hit.ballistics_density < -1) ++ break; // -2: no solid penetration, ever ++ else if(hit.ballistics_density < 0) ++ maxdist = vlen(hit.maxs - hit.mins) + 1; // -1: infinite travel distance ++ else if(hit.ballistics_density == 0) ++ maxdist = max_solid_penetration * solid_penetration_left; ++ else ++ maxdist = max_solid_penetration * solid_penetration_left * hit.ballistics_density; + - return; - } ++ if(maxdist <= autocvar_g_ballistics_mindistance) ++ break; + - void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer) - { - vector end; ++ // move the entity along its velocity until it's out of solid, then let it resume ++ // The previously hit entity is ignored here! ++ traceline_inverted (start, start + dir * maxdist, MOVE_NORMAL, WarpZone_trace_forent, TRUE, hit); ++ if(trace_fraction == 1) // 1: we never got out of solid ++ break; + - dir = normalize(dir + randomvec() * spread); - end = start + dir * MAX_SHOT_DISTANCE; - if(self.antilag_debug) - traceline_antilag (self, start, end, FALSE, self, self.antilag_debug); - else - traceline_antilag (self, start, end, FALSE, self, ANTILAG_LATENCY(self)); ++ float dist_taken = max(autocvar_g_ballistics_mindistance, vlen(trace_endpos - start)); ++ solid_penetration_left *= (dist_taken / maxdist); + - end = trace_endpos; ++ // Only show effect when going through a player (invisible otherwise) ++ if (hit && (hit.solid != SOLID_BSP)) ++ if(vlen(trace_endpos - start) > 4) ++ trailparticles(self, fireBullet_trace_callback_eff, start, trace_endpos); + - if (pointcontents (trace_endpos) != CONTENT_SKY) - { - if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) - Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, trace_ent.species, self); ++ start = trace_endpos; + - Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force); ++ if(hit.solid == SOLID_BSP) ++ Damage_DamageInfo(start, 0, 0, 0, max(1, force) * normalize(dir) * -solid_penetration_left, dtype, 0, self); + } - trace_endpos = end; ++ ++ if(lag) ++ FOR_EACH_PLAYER(pl) ++ if(pl != self) ++ antilag_restore(pl); +} diff --cc qcsrc/server/weapons/tracing.qh index 26fe295a8,000000000..6565ece04 mode 100644,000000..100644 --- a/qcsrc/server/weapons/tracing.qh +++ b/qcsrc/server/weapons/tracing.qh @@@ -1,73 -1,0 +1,48 @@@ +.float antilag_debug; + +vector w_shotorg; +vector w_shotdir; +vector w_shotend; + +// 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, string snd, float chan, float maxdamage, float range); + +#define W_SetupShot_Dir_ProjectileSize(ent,s_forward,mi,ma,antilag,recoil,snd,chan,maxdamage) W_SetupShot_Dir_ProjectileSize_Range(ent, s_forward, mi, ma, antilag, recoil, snd, chan, maxdamage, MAX_SHOT_DISTANCE) +#define W_SetupShot_ProjectileSize(ent,mi,ma,antilag,recoil,snd,chan,maxdamage) W_SetupShot_Dir_ProjectileSize(ent, v_forward, mi, ma, antilag, recoil, snd, chan, maxdamage) +#define W_SetupShot_Dir(ent,s_forward,antilag,recoil,snd,chan,maxdamage) W_SetupShot_Dir_ProjectileSize(ent, s_forward, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage) +#define W_SetupShot(ent,antilag,recoil,snd,chan,maxdamage) W_SetupShot_ProjectileSize(ent, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage) +#define W_SetupShot_Range(ent,antilag,recoil,snd,chan,maxdamage,range) W_SetupShot_Dir_ProjectileSize_Range(ent, v_forward, '0 0 0', '0 0 0', antilag, recoil, snd, chan, maxdamage, range) + +vector W_CalculateProjectileVelocity(vector pvelocity, vector mvelocity, float forceAbsolute); + +#if 0 +float mspercallsum; +float mspercallsstyle; +float mspercallcount; +#endif +void W_SetupProjectileVelocityEx(entity missile, vector dir, vector upDir, float pSpeed, float pUpSpeed, float pZSpeed, float spread, float forceAbsolute); + +#define WEP_SETUPPROJVELOCITY_UP_NONE(ent,wepname,prefix) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR(wepname, prefix##speed), WEP_CVAR(wepname, prefix##speed_up), WEP_CVAR(wepname, prefix##speed_z), WEP_CVAR(wepname, prefix##spread), FALSE) +#define WEP_SETUPPROJVELOCITY_UP_PRI(ent,wepname) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR_PRI(wepname, speed), WEP_CVAR_PRI(wepname, speed_up), WEP_CVAR_PRI(wepname, speed_z), WEP_CVAR_PRI(wepname, spread), FALSE) +#define WEP_SETUPPROJVELOCITY_UP_SEC(ent,wepname) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR_SEC(wepname, speed), WEP_CVAR_SEC(wepname, speed_up), WEP_CVAR_SEC(wepname, speed_z), WEP_CVAR_SEC(wepname, spread), FALSE) +#define WEP_SETUPPROJVELOCITY_UP_BOTH(ent,wepname,isprimary) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR_BOTH(wepname, isprimary, speed), WEP_CVAR_BOTH(wepname, isprimary, speed_up), WEP_CVAR_BOTH(wepname, isprimary, speed_z), WEP_CVAR_BOTH(wepname, isprimary, spread), FALSE) + +#define WEP_SETUPPROJVELOCITY_NONE(ent,wepname,prefix) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR(wepname, prefix##speed), 0, 0, WEP_CVAR(wepname, prefix##spread), FALSE) +#define WEP_SETUPPROJVELOCITY_PRI(ent,wepname) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR_PRI(wepname, speed), 0, 0, WEP_CVAR_PRI(wepname, spread), FALSE) +#define WEP_SETUPPROJVELOCITY_SEC(ent,wepname) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR_SEC(wepname, speed), 0, 0, WEP_CVAR_SEC(wepname, spread), FALSE) +#define WEP_SETUPPROJVELOCITY_BOTH(ent,wepname,isprimary) W_SetupProjectileVelocityEx(ent, w_shotdir, v_up, WEP_CVAR_BOTH(wepname, isprimary, speed), 0, 0, WEP_CVAR_BOTH(wepname, isprimary, spread), FALSE) + +// ==================== +// Ballistics Tracing +// ==================== + +.float railgundistance; +.vector railgunforce; +void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, float deathtype); + - .float dmg_force; - .float dmg_radius; - .float dmg_total; - //.float last_yoda; - void W_BallisticBullet_Hit (void); - - .void(void) W_BallisticBullet_LeaveSolid_think_save; - .float W_BallisticBullet_LeaveSolid_nextthink_save; - .vector W_BallisticBullet_LeaveSolid_origin; - .vector W_BallisticBullet_LeaveSolid_velocity; - - void W_BallisticBullet_LeaveSolid_think(); - - float W_BallisticBullet_LeaveSolid(float eff); - - void W_BallisticBullet_Touch (void); - - void endFireBallisticBullet(); /* WEAPONTODO - { - endzcurveparticles(); - }*/ - - entity fireBallisticBullet_trace_callback_ent; - float fireBallisticBullet_trace_callback_eff; - void fireBallisticBullet_trace_callback(vector start, vector hit, vector end); - - void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, float lifetime, float damage, float force, float dtype, float tracereffects, float bulletconstant); - - void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer); ++float fireBullet_trace_callback_eff; ++entity fireBullet_last_hit; ++void fireBullet_trace_callback(vector start, vector hit, vector end); ++void fireBullet(vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, float tracereffects);