// {{{ #1: Blaster
set g_balance_blaster_primary_animtime 0.2
-set g_balance_blaster_primary_damage 25
+set g_balance_blaster_primary_damage 20
set g_balance_blaster_primary_delay 0
-set g_balance_blaster_primary_edgedamage 12.5
+set g_balance_blaster_primary_edgedamage 10
set g_balance_blaster_primary_force 300
set g_balance_blaster_primary_force_zscale 1.25
set g_balance_blaster_primary_lifetime 5
set g_balance_shotgun_reload_ammo 50
set g_balance_shotgun_reload_time 2
set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_alt_animtime 0.2
-set g_balance_shotgun_secondary_alt_refire 1.2
set g_balance_shotgun_secondary_animtime 1.15
set g_balance_shotgun_secondary_damage 70
set g_balance_shotgun_secondary_force 200
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_secondary_alt_animtime 0.2
+set g_balance_shotgun_secondary_alt_refire 1.2
set g_balance_shotgun_switchdelay_drop 0.2
set g_balance_shotgun_switchdelay_raise 0.2
set g_balance_shotgun_weaponreplace ""
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 150
+set g_balance_electro_primary_midaircombo_radius 0
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_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_spread 0
set g_balance_electro_secondary_stick 0
-set g_balance_electro_secondary_touchexplode 0
+set g_balance_electro_secondary_touchexplode 1
set g_balance_electro_switchdelay_drop 0.2
set g_balance_electro_switchdelay_raise 0.2
set g_balance_electro_weaponreplace ""
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_damage 10
+set g_balance_crylink_primary_edgedamage 5
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_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_linkexplode 0
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_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_damage 8
+set g_balance_crylink_secondary_edgedamage 4
+set g_balance_crylink_secondary_force -200
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_hagar_primary_radius 65
set g_balance_hagar_primary_refire 0.16667
set g_balance_hagar_primary_speed 2200
-set g_balance_hagar_primary_spread 0.03
+set g_balance_hagar_primary_spread 0
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_radius 80
set g_balance_hagar_secondary_refire 0.5
set g_balance_hagar_secondary_speed 2000
-set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_spread 0
set g_balance_hagar_switchdelay_drop 0.2
set g_balance_hagar_switchdelay_raise 0.2
set g_balance_hagar_weaponreplace ""
set g_balance_devastator_remote_edgedamage 35
set g_balance_devastator_remote_force 300
set g_balance_devastator_remote_jump_damage 70
-set g_balance_devastator_remote_jump_force 0
+set g_balance_devastator_remote_jump_force 450
set g_balance_devastator_remote_jump_radius 0
-set g_balance_devastator_remote_jump_velocity_z_add 400
+set g_balance_devastator_remote_jump_velocity_z_add 0
set g_balance_devastator_remote_jump_velocity_z_max 1500
set g_balance_devastator_remote_jump_velocity_z_min 400
set g_balance_devastator_remote_radius 110
// {{{ #12: Vaporizer
set g_balance_vaporizer_primary_ammo 10
set g_balance_vaporizer_primary_animtime 0.3
+set g_balance_vaporizer_primary_damage 150
set g_balance_vaporizer_primary_refire 1
set g_balance_vaporizer_reload_ammo 0
set g_balance_vaporizer_reload_time 0
set g_balance_vaporizer_weaponreplace ""
set g_balance_vaporizer_weaponstart 0
set g_balance_vaporizer_weaponstartoverride -1
-set g_balance_vaporizer_weaponthrowable 0
+set g_balance_vaporizer_weaponthrowable 1
// }}}
// {{{ #13: Grappling Hook
set g_balance_hook_primary_ammo 5
// }}}
// {{{ #19: Shockwave (MUTATOR WEAPON)
set g_balance_shockwave_blast_animtime 0.3
-set g_balance_shockwave_blast_damage 20
+set g_balance_shockwave_blast_damage 40
set g_balance_shockwave_blast_distance 1000
set g_balance_shockwave_blast_edgedamage 0
-set g_balance_shockwave_blast_force 200
+set g_balance_shockwave_blast_force 15
set g_balance_shockwave_blast_force_forwardbias 50
-set g_balance_shockwave_blast_force_zscale 2
+set g_balance_shockwave_blast_force_zscale 1
set g_balance_shockwave_blast_jump_damage 20
set g_balance_shockwave_blast_jump_edgedamage 0
-set g_balance_shockwave_blast_jump_force 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_force 100
+set g_balance_shockwave_blast_jump_force_velocitybias 1
+set g_balance_shockwave_blast_jump_force_zscale 1
set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5
set g_balance_shockwave_blast_jump_multiplier_distance 0.5
set g_balance_shockwave_blast_jump_multiplier_min 0
set g_balance_shockwave_blast_jump_radius 150
-set g_balance_shockwave_blast_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_multiplier_distance 0.5
+set g_balance_shockwave_blast_multiplier_accuracy 0.45
+set g_balance_shockwave_blast_multiplier_distance 0.2
set g_balance_shockwave_blast_multiplier_min 0
set g_balance_shockwave_blast_refire 0.75
set g_balance_shockwave_blast_splash_damage 15
set g_balance_shockwave_weaponthrowable 0
// }}}
// {{{ #20: Arc
-set g_balance_arc_beam_ammo 4
-set g_balance_arc_beam_animtime 0.2
+set g_balance_arc_beam_ammo 6
+set g_balance_arc_beam_animtime 0.1
set g_balance_arc_beam_botaimlifetime 0
set g_balance_arc_beam_botaimspeed 0
-set g_balance_arc_beam_damage 115
+set g_balance_arc_beam_damage 100
set g_balance_arc_beam_degreespersegment 1
set g_balance_arc_beam_distancepersegment 0
set g_balance_arc_beam_falloff_halflifedist 0
set g_balance_arc_beam_falloff_maxdist 0
set g_balance_arc_beam_falloff_mindist 0
-set g_balance_arc_beam_force 900
-set g_balance_arc_beam_healing_amax 100
+set g_balance_arc_beam_force 600
+set g_balance_arc_beam_healing_amax 0
set g_balance_arc_beam_healing_aps 50
set g_balance_arc_beam_healing_hmax 150
set g_balance_arc_beam_healing_hps 50
-set g_balance_arc_beam_heat 1
+set g_balance_arc_cooldown 2.5
+set g_balance_arc_cooldown_release 0
+set g_balance_arc_overheat_max 5
+set g_balance_arc_overheat_min 3
+set g_balance_arc_beam_heat 0
+set g_balance_arc_burst_heat 5
set g_balance_arc_beam_maxangle 10
set g_balance_arc_beam_nonplayerdamage 80
set g_balance_arc_beam_range 1000
-set g_balance_arc_beam_refire 0.5
+set g_balance_arc_beam_refire 0.25
set g_balance_arc_beam_returnspeed 8
set g_balance_arc_beam_tightness 0.5
set g_balance_arc_bolt 0
set g_balance_arc_bolt_damage 25
set g_balance_arc_bolt_damageforcescale 0
set g_balance_arc_bolt_edgedamage 12.5
-set g_balance_arc_bolt_force 100
+set g_balance_arc_bolt_force 120
set g_balance_arc_bolt_health 15
set g_balance_arc_bolt_lifetime 5
set g_balance_arc_bolt_radius 65
set g_balance_arc_bolt_refire 0.16667
-set g_balance_arc_bolt_speed 2200
-set g_balance_arc_bolt_spread 0.03
+set g_balance_arc_bolt_speed 2300
+set g_balance_arc_bolt_spread 0
set g_balance_arc_burst_ammo 15
set g_balance_arc_burst_damage 250
set g_balance_arc_burst_healing_aps 100
set g_balance_arc_burst_healing_hps 100
-set g_balance_arc_burst_heat 4
-set g_balance_arc_cooldown 2.5
-set g_balance_arc_cooldown_release 1
-set g_balance_arc_overheat_max 5
-set g_balance_arc_overheat_min 3
-set g_balance_arc_switchdelay_drop 0.3
-set g_balance_arc_switchdelay_raise 0.3
+set g_balance_arc_switchdelay_drop 0.2
+set g_balance_arc_switchdelay_raise 0.2
set g_balance_arc_weaponreplace ""
set g_balance_arc_weaponstart 0
set g_balance_arc_weaponstartoverride -1
set g_balance_rpc_refire 1
set g_balance_rpc_reload_ammo 10
set g_balance_rpc_reload_time 1
-set g_balance_rpc_speed 1250
+set g_balance_rpc_speed 2500
set g_balance_rpc_speedaccel 5000
set g_balance_rpc_switchdelay_drop 0.2
set g_balance_rpc_switchdelay_raise 0.2
// {{{ #1: Blaster
-set g_balance_blaster_primary_animtime 0.3
-set g_balance_blaster_primary_damage 25
+set g_balance_blaster_primary_animtime 0.2
+set g_balance_blaster_primary_damage 20
set g_balance_blaster_primary_delay 0
-set g_balance_blaster_primary_edgedamage 12.5
-set g_balance_blaster_primary_force 250
-set g_balance_blaster_primary_force_zscale 1.5
+set g_balance_blaster_primary_edgedamage 10
+set g_balance_blaster_primary_force 300
+set g_balance_blaster_primary_force_zscale 1.25
set g_balance_blaster_primary_lifetime 5
set g_balance_blaster_primary_radius 60
set g_balance_blaster_primary_refire 0.7
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.3
+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
// {{{ #2: Shotgun
set g_balance_shotgun_primary_ammo 1
set g_balance_shotgun_primary_animtime 0.2
-set g_balance_shotgun_primary_bullets 14
+set g_balance_shotgun_primary_bullets 12
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_reload_time 2
set g_balance_shotgun_secondary 1
set g_balance_shotgun_secondary_animtime 1.15
-set g_balance_shotgun_secondary_damage 80
+set g_balance_shotgun_secondary_damage 70
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_switchdelay_drop 0
set g_balance_shotgun_switchdelay_raise 0
set g_balance_shotgun_weaponreplace ""
-set g_balance_shotgun_weaponstart 0
+set g_balance_shotgun_weaponstart 1
set g_balance_shotgun_weaponstartoverride -1
set g_balance_shotgun_weaponthrowable 1
// }}}
set g_balance_machinegun_first 1
set g_balance_machinegun_first_ammo 1
set g_balance_machinegun_first_damage 14
-set g_balance_machinegun_first_force 5
-set g_balance_machinegun_first_refire 0.4
+set g_balance_machinegun_first_force 3
+set g_balance_machinegun_first_refire 0.125
set g_balance_machinegun_first_spread 0.03
set g_balance_machinegun_mode 1
set g_balance_machinegun_reload_ammo 0
set g_balance_machinegun_spread_max 0
set g_balance_machinegun_spread_min 0
set g_balance_machinegun_sustained_ammo 1
-set g_balance_machinegun_sustained_damage 12
-set g_balance_machinegun_sustained_force 5
+set g_balance_machinegun_sustained_damage 10
+set g_balance_machinegun_sustained_force 3
set g_balance_machinegun_sustained_refire 0.1
set g_balance_machinegun_sustained_spread 0
set g_balance_machinegun_switchdelay_drop 0
set g_balance_machinegun_switchdelay_raise 0
set g_balance_machinegun_weaponreplace ""
-set g_balance_machinegun_weaponstart 1
+set g_balance_machinegun_weaponstart 0
set g_balance_machinegun_weaponstartoverride -1
set g_balance_machinegun_weaponthrowable 1
// }}}
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_damage 55
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 0
+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 100
set g_balance_mortar_secondary_damageforcescale 0
set g_balance_mortar_secondary_edgedamage 30
set g_balance_mortar_secondary_force 300
-set g_balance_mortar_secondary_health 0
+set g_balance_mortar_secondary_health 30
set g_balance_mortar_secondary_lifetime 8
set g_balance_mortar_secondary_lifetime_bounce 0.5
set g_balance_mortar_secondary_lifetime_stick 0
// {{{ #6: Electro
set g_balance_electro_combo_comboradius 275
set g_balance_electro_combo_comboradius_thruwall 200
-set g_balance_electro_combo_damage 40
-set g_balance_electro_combo_edgedamage 20
+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 175
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.1
+set g_balance_electro_primary_animtime 0.3
set g_balance_electro_primary_comboradius 150
-set g_balance_electro_primary_damage 55
-set g_balance_electro_primary_edgedamage 27.5
+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_secondary_bouncefactor 0.4
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_damage 30
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_edgedamage 15
set g_balance_electro_secondary_force 200
set g_balance_electro_secondary_health 5
set g_balance_electro_secondary_lifetime 3
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_spread 0
set g_balance_electro_secondary_stick 0
set g_balance_electro_secondary_touchexplode 0
set g_balance_electro_switchdelay_drop 0
set g_balance_electro_switchdelay_raise 0
-set g_balance_electro_weaponreplace ""
+set g_balance_electro_weaponreplace "arc"
set g_balance_electro_weaponstart 0
set g_balance_electro_weaponstartoverride -1
set g_balance_electro_weaponthrowable 1
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 -60
+set g_balance_crylink_primary_damage 10
+set g_balance_crylink_primary_edgedamage 5
+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_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_bouncedamagefactor 0
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 -150
+set g_balance_crylink_secondary_damage 8
+set g_balance_crylink_secondary_edgedamage 4
+set g_balance_crylink_secondary_force 480
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_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_radius 120
+set g_balance_crylink_secondary_refire 0.1
+set g_balance_crylink_secondary_shots 1
+set g_balance_crylink_secondary_speed 2000
+set g_balance_crylink_secondary_spread 0
set g_balance_crylink_secondary_spreadtype 1
set g_balance_crylink_switchdelay_drop 0
set g_balance_crylink_switchdelay_raise 0
set g_balance_crylink_weaponthrowable 1
// }}}
// {{{ #8: Vortex
-set g_balance_vortex_charge 1
+set g_balance_vortex_charge 0
set g_balance_vortex_charge_animlimit 0.5
set g_balance_vortex_charge_limit 1
set g_balance_vortex_charge_maxspeed 800
set g_balance_vortex_charge_mindmg 40
set g_balance_vortex_charge_minspeed 400
-set g_balance_vortex_charge_rate 0.4
+set g_balance_vortex_charge_rate 0.6
set g_balance_vortex_charge_rot_pause 0
set g_balance_vortex_charge_rot_rate 0
set g_balance_vortex_charge_shot_multiplier 0
set g_balance_vortex_charge_velocity_rate 0
set g_balance_vortex_primary_ammo 6
set g_balance_vortex_primary_animtime 0.4
-set g_balance_vortex_primary_damage 90
+set g_balance_vortex_primary_damage 80
set g_balance_vortex_primary_damagefalloff_forcehalflife 0
set g_balance_vortex_primary_damagefalloff_halflife 0
set g_balance_vortex_primary_damagefalloff_maxdist 0
set g_balance_hagar_primary_radius 25
set g_balance_hagar_primary_refire 0.11
set g_balance_hagar_primary_speed 2000
-set g_balance_hagar_primary_spread 0.03
+set g_balance_hagar_primary_spread 0
set g_balance_hagar_reload_ammo 0
set g_balance_hagar_reload_time 2
set g_balance_hagar_secondary 0
set g_balance_hagar_secondary_ammo 1
-set g_balance_hagar_secondary_damage 40
+set g_balance_hagar_secondary_damage 35
set g_balance_hagar_secondary_damageforcescale 0
-set g_balance_hagar_secondary_edgedamage 20
+set g_balance_hagar_secondary_edgedamage 17.5
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_radius 80
set g_balance_hagar_secondary_refire 0.5
set g_balance_hagar_secondary_speed 2000
-set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_spread 0
set g_balance_hagar_switchdelay_drop 0
set g_balance_hagar_switchdelay_raise 0
set g_balance_hagar_weaponreplace ""
set g_balance_devastator_animtime 0.7
set g_balance_devastator_damage 80
set g_balance_devastator_damageforcescale 0
-set g_balance_devastator_detonatedelay 0.02
+set g_balance_devastator_detonatedelay 999
set g_balance_devastator_edgedamage 40
set g_balance_devastator_force 350
set g_balance_devastator_guidedelay 0.2
set g_balance_devastator_guiderate 0
set g_balance_devastator_guideratedelay 999
set g_balance_devastator_guidestop 1
-set g_balance_devastator_health 0
+set g_balance_devastator_health 30
set g_balance_devastator_lifetime 100
set g_balance_devastator_radius 110
set g_balance_devastator_refire 0.9
set g_balance_devastator_remote_edgedamage 35
set g_balance_devastator_remote_force 350
set g_balance_devastator_remote_jump_damage 70
-set g_balance_devastator_remote_jump_force 0
+set g_balance_devastator_remote_jump_force 450
set g_balance_devastator_remote_jump_radius 0
-set g_balance_devastator_remote_jump_velocity_z_add 400
+set g_balance_devastator_remote_jump_velocity_z_add 0
set g_balance_devastator_remote_jump_velocity_z_max 1500
set g_balance_devastator_remote_jump_velocity_z_min 400
set g_balance_devastator_remote_radius 110
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 5000
+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
// {{{ #12: Vaporizer
set g_balance_vaporizer_primary_ammo 10
set g_balance_vaporizer_primary_animtime 0.3
-set g_balance_vaporizer_primary_damage -1
+set g_balance_vaporizer_primary_damage 150
set g_balance_vaporizer_primary_refire 1
set g_balance_vaporizer_reload_ammo 0
set g_balance_vaporizer_reload_time 0
set g_balance_vaporizer_weaponreplace ""
set g_balance_vaporizer_weaponstart 0
set g_balance_vaporizer_weaponstartoverride -1
-set g_balance_vaporizer_weaponthrowable 0
+set g_balance_vaporizer_weaponthrowable 1
// }}}
// {{{ #13: Grappling Hook
set g_balance_hook_primary_ammo 5
// }}}
// {{{ #19: Shockwave (MUTATOR WEAPON)
set g_balance_shockwave_blast_animtime 0.3
-set g_balance_shockwave_blast_damage 20
+set g_balance_shockwave_blast_damage 40
set g_balance_shockwave_blast_distance 1000
set g_balance_shockwave_blast_edgedamage 0
-set g_balance_shockwave_blast_force 200
+set g_balance_shockwave_blast_force 15
set g_balance_shockwave_blast_force_forwardbias 50
-set g_balance_shockwave_blast_force_zscale 2
+set g_balance_shockwave_blast_force_zscale 1
set g_balance_shockwave_blast_jump_damage 20
set g_balance_shockwave_blast_jump_edgedamage 0
-set g_balance_shockwave_blast_jump_force 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_force 100
+set g_balance_shockwave_blast_jump_force_velocitybias 1
+set g_balance_shockwave_blast_jump_force_zscale 1
set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5
set g_balance_shockwave_blast_jump_multiplier_distance 0.5
set g_balance_shockwave_blast_jump_multiplier_min 0
set g_balance_shockwave_blast_jump_radius 150
-set g_balance_shockwave_blast_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_multiplier_distance 0.5
+set g_balance_shockwave_blast_multiplier_accuracy 0.45
+set g_balance_shockwave_blast_multiplier_distance 0.2
set g_balance_shockwave_blast_multiplier_min 0
set g_balance_shockwave_blast_refire 0.75
set g_balance_shockwave_blast_splash_damage 15
set g_balance_shockwave_weaponthrowable 0
// }}}
// {{{ #20: Arc
-set g_balance_arc_beam_ammo 4
-set g_balance_arc_beam_animtime 0.2
+set g_balance_arc_beam_ammo 6
+set g_balance_arc_beam_animtime 0.1
set g_balance_arc_beam_botaimlifetime 0
set g_balance_arc_beam_botaimspeed 0
-set g_balance_arc_beam_damage 115
+set g_balance_arc_beam_damage 100
set g_balance_arc_beam_degreespersegment 1
set g_balance_arc_beam_distancepersegment 0
set g_balance_arc_beam_falloff_halflifedist 0
set g_balance_arc_beam_falloff_maxdist 0
set g_balance_arc_beam_falloff_mindist 0
-set g_balance_arc_beam_force 900
-set g_balance_arc_beam_healing_amax 100
+set g_balance_arc_beam_force 600
+set g_balance_arc_beam_healing_amax 0
set g_balance_arc_beam_healing_aps 50
set g_balance_arc_beam_healing_hmax 150
set g_balance_arc_beam_healing_hps 50
set g_balance_arc_cooldown 2.5
-set g_balance_arc_cooldown_release 1
+set g_balance_arc_cooldown_release 0
set g_balance_arc_overheat_max 5
set g_balance_arc_overheat_min 3
-set g_balance_arc_beam_heat 1
+set g_balance_arc_beam_heat 0
set g_balance_arc_burst_heat 5
set g_balance_arc_beam_maxangle 10
set g_balance_arc_beam_nonplayerdamage 80
set g_balance_arc_beam_range 1000
-set g_balance_arc_beam_refire 0.5
+set g_balance_arc_beam_refire 0.25
set g_balance_arc_beam_returnspeed 8
set g_balance_arc_beam_tightness 0.5
-set g_balance_arc_bolt 0
+set g_balance_arc_bolt 1
set g_balance_arc_bolt_ammo 1
set g_balance_arc_bolt_damage 25
set g_balance_arc_bolt_damageforcescale 0
set g_balance_arc_bolt_edgedamage 12.5
-set g_balance_arc_bolt_force 100
+set g_balance_arc_bolt_force 120
set g_balance_arc_bolt_health 15
set g_balance_arc_bolt_lifetime 5
set g_balance_arc_bolt_radius 65
set g_balance_arc_bolt_refire 0.16667
-set g_balance_arc_bolt_speed 2200
-set g_balance_arc_bolt_spread 0.03
+set g_balance_arc_bolt_speed 2300
+set g_balance_arc_bolt_spread 0
set g_balance_arc_burst_ammo 15
set g_balance_arc_burst_damage 250
set g_balance_arc_burst_healing_aps 100
set g_balance_arc_burst_healing_hps 100
-set g_balance_arc_switchdelay_drop 0.3
-set g_balance_arc_switchdelay_raise 0.3
+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
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_powerup 0
set g_pickup_respawntimejitter_weapon 0
set g_pickup_respawntimejitter_superweapon 10
set g_pickup_respawntimejitter_ammo 0
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_health_rot 0.02
+set g_balance_health_rotlinear 1
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_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_armor_rot 0.02
+set g_balance_armor_rotlinear 1
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_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_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
+set g_throughfloor_damage 0.75
+set g_throughfloor_force 0.75
+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)
// 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
+set g_projectiles_newton_style 0
// possible values:
// 0: absolute velocity projectiles (like Quake)
// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
// }}}
// {{{ 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_invincible_takedamage 0.33 // only 1/3rd 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 999
+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
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
+set g_balance_grapplehook_health 50
+set g_balance_grapplehook_damagedbycontents 1
set g_balance_grapplehook_refire 0.2
set g_balance_grapplehook_nade_time 0.7
set g_balance_grapplehook_crouchslide 0
--- /dev/null
+// ================
+// Overkill Mode
+// ================
+
+exec defaultXonotic.cfg
+exec balance-overkill.cfg
+exec physicsOverkill.cfg
+
+// general gameplay
+set g_overkill 1
+set g_nades 1
+set g_dodging 1
+set sv_dodging_wall_dodging 1
+set g_spawn_near_teammate 1
+set g_spawn_near_teammate_ignore_spawnpoint 1
set g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no shooteye because it's really ugly)
set g_balance_kill_antispam 0
set g_forced_respawn 1
-set g_jump_grunt 1
// g_playerclip_collisions 0 // do not check playerclips
set g_powerups 0 // set to -1 or patch xonotic
set g_spawnpoints_auto_move_out_of_solid 1
set g_monsters 0
set g_turrets 0
set g_vehicles 0
+set sv_showspectators 0
set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_stay > 0"
set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"
-set sv_showspectators 0 "Show who's spectating who in the player info panel. Shouldn't be used on competitive servers, also disable when watching a suspected cheater"
-seta cl_showspectators 1
+set sv_showspectators 1 "Show who's spectating who in the player info panel when client has cl_showspectators on. Shouldn't be used on competitive servers, also disable when watching a suspected cheater"
+seta cl_showspectators 0 "Show who's spectating you if server has sv_showspectators enabled"
// Facility for config.cfg use ONLY.
// Interpreted in post-config.cfg.
set sv_dodging_air_dodging 0
set sv_dodging_wall_dodging 0 "allow dodging off walls"
-set sv_dodging_delay 0.7 "determines how long a player has to wait to be able to dodge again after dodging"
+set sv_dodging_delay 0.5 "determines how long a player has to wait to be able to dodge again after dodging"
set sv_dodging_up_speed 200 "the jump velocity of the dodge"
set sv_dodging_horiz_speed 400 "the horizontal velocity of the dodge"
set sv_dodging_horiz_speed_frozen 200 "the horizontal velocity of the dodge while frozen"
set sv_dodging_sound 1 "if 1 dodging makes a sound. if 0 dodging is silent"
set sv_dodging_frozen 0 "allow dodging while frozen"
set sv_dodging_frozen_doubletap 0
+set sv_dodging_maxspeed 450 "maximum speed a player can be moving at before they dodge again"
// ===========
--- /dev/null
+g_mod_physics Overkill
+
+sv_gravity 800
+sv_maxspeed 400
+sv_maxairspeed 360
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
+sv_stepheight 31
+// Q1: 16+2
+// Nex: 32+2
+// Xon 0.7: 24+2
+// Samual: 31 (just below 32, keeping things smooth without allowing 32qu steps)
+
+// jump duration == 2*sv_jumpvelocity / sv_gravity
+// in this case: 0.65 (thus either 19 or 20 frames)
+// jump height == sv_jumpvelocity^2 / (2*sv_gravity)
+// in this case: 42.25
+// player: 24+45 qu
+// total: 111.25qu
+// this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
+// the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
+sv_jumpvelocity 260
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 2
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 125
+sv_aircontrol_penalty 180
+sv_aircontrol_power 2
+sv_aircontrol_backwards 0
+sv_airspeedlimit_nonqw 900
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_friction_slick 0.5
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
sound(NULL, CH_INFO, SND_TYPEHIT, VOL_BASE, ATTN_NONE);
typehit_time_prev = typehit_time;
}
+
+ static float kill_time_prev = 0;
+ float kill_time = STAT(KILL_TIME);
+ if (COMPARE_INCREASING(kill_time, kill_time_prev) > autocvar_cl_hitsound_antispam_time)
+ {
+ sound(NULL, CH_INFO, SND_KILL, VOL_BASE, ATTN_NONE);
+ kill_time_prev = kill_time;
+ }
}
vector crosshair_getcolor(entity this, float health_stat)
#include <common/t_items.qh>
#include <common/util.qh>
#include <common/viewloc.qh>
+#include <common/wepent.qh>
#include <common/monsters/all.qc>
#ifdef SVQC
#include <common/monsters/sv_monsters.qc>
+ #include <common/monsters/sv_spawner.qc>
#endif
#ifdef SVQC
#include <common/monsters/sv_spawn.qc>
- #include <common/monsters/spawner.qc>
#endif
#include <common/monsters/monster/_mod.inc>
+++ /dev/null
-#include "sv_spawn.qh"
-
-void spawner_use(entity this, entity actor, entity trigger)
-{
- int moncount = 0;
- IL_EACH(g_monsters, it.realowner == this,
- {
- ++moncount;
- });
-
- if(moncount >= this.count)
- return;
-
- entity e = spawn();
- e.noalign = this.noalign;
- e.angles = this.angles;
- e.monster_skill = this.monster_skill;
- e = spawnmonster(e, this.spawnmob, 0, this, this, this.origin, false, true, this.monster_moveflags);
-}
-
-spawnfunc(monster_spawner)
-{
- if(!autocvar_g_monsters || !this.spawnmob || this.spawnmob == "") { delete(this); return; }
-
- this.use = spawner_use;
-}
--- /dev/null
+#include "sv_spawn.qh"
+
+void spawner_use(entity this, entity actor, entity trigger)
+{
+ int moncount = 0;
+ IL_EACH(g_monsters, it.realowner == this,
+ {
+ ++moncount;
+ });
+
+ if(moncount >= this.count)
+ return;
+
+ entity e = spawn();
+ e.noalign = this.noalign;
+ e.angles = this.angles;
+ e.monster_skill = this.monster_skill;
+ e = spawnmonster(e, this.spawnmob, 0, this, this, this.origin, false, true, this.monster_moveflags);
+}
+
+spawnfunc(monster_spawner)
+{
+ if(!autocvar_g_monsters || !this.spawnmob || this.spawnmob == "") { delete(this); return; }
+
+ this.use = spawner_use;
+}
{
case "ammoregen": return "ammo";
case "haste": case "scout": return "speed";
- case "doubler": return "medic";
+ case "guard": case "revival": case "regen": return "medic";
case "invis": return "invisible";
+ case "jumper": return "jump";
default: return buffname;
}
}
this.m_color = '1 0.12 0';
}
BUFF_SPAWNFUNCS(medic, BUFF_MEDIC)
-BUFF_SPAWNFUNC_Q3TA_COMPAT(doubler, BUFF_MEDIC)
-BUFF_SPAWNFUNC_Q3TA_COMPAT(medic, BUFF_MEDIC)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(guard, BUFF_MEDIC)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(regen, BUFF_MEDIC)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(revival, BUFF_MEDIC)
REGISTER_BUFF(BASH) {
this.m_prettyName = _("Bash");
this.m_color = '0.24 0.78 1';
}
BUFF_SPAWNFUNCS(jump, BUFF_JUMP)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(jumper, BUFF_JUMP)
REGISTER_BUFF(INVISIBLE) {
this.m_prettyName = _("Invisible");
this.m_color = '0.23 0.44 1';
}
BUFF_SPAWNFUNCS(flight, BUFF_FLIGHT)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(flight, BUFF_FLIGHT)
FOREACH(Buffs, buff_Available(it),
{
// if it's already been chosen, give it a lower priority
- RandomSelection_AddEnt(it, 1, max(0.2, 1 / it.buff_seencount));
+ RandomSelection_AddEnt(it, max(0.2, 1 / it.buff_seencount), 1);
});
entity newbuff = RandomSelection_chosen_ent;
newbuff.buff_seencount += 1; // lower chances of seeing this buff again soon
#include "sv_dodging.qh"
+#define PHYS_DODGING g_dodging
+#define PHYS_DODGING_DELAY autocvar_sv_dodging_delay
+#define PHYS_DODGING_DISTANCE_THRESHOLD autocvar_sv_dodging_wall_distance_threshold
+#define PHYS_DODGING_FROZEN_NODOUBLETAP autocvar_sv_dodging_frozen_doubletap
+#define PHYS_DODGING_HEIGHT_THRESHOLD autocvar_sv_dodging_height_threshold
+#define PHYS_DODGING_HORIZ_SPEED autocvar_sv_dodging_horiz_speed
+#define PHYS_DODGING_HORIZ_SPEED_FROZEN autocvar_sv_dodging_horiz_speed_frozen
+#define PHYS_DODGING_RAMP_TIME autocvar_sv_dodging_ramp_time
+#define PHYS_DODGING_UP_SPEED autocvar_sv_dodging_up_speed
+#define PHYS_DODGING_WALL autocvar_sv_dodging_wall_dodging
+#define PHYS_DODGING_AIR autocvar_sv_dodging_air_dodging
+#define PHYS_DODGING_MAXSPEED autocvar_sv_dodging_maxspeed
+#define PHYS_DODGING_PRESSED_KEYS(s) (s).pressedkeys
+
+// we ran out of stats slots! TODO: re-enable this when prediction is available for dodging
+#if 0
#define PHYS_DODGING STAT(DODGING, this)
#define PHYS_DODGING_DELAY STAT(DODGING_DELAY, this)
#define PHYS_DODGING_DISTANCE_THRESHOLD STAT(DODGING_DISTANCE_THRESHOLD, this)
#define PHYS_DODGING_UP_SPEED STAT(DODGING_UP_SPEED, this)
#define PHYS_DODGING_WALL STAT(DODGING_WALL, this)
#define PHYS_DODGING_AIR STAT(DODGING_AIR, this)
-#define PHYS_DODGING_PRESSED_KEYS(s) (s).pressedkeys
+#define PHYS_DODGING_MAXSPEED STAT(DODGING_MAXSPEED, this)
+#endif
#ifdef CSQC
#define PHYS_DODGING_FRAMETIME (1 / (frametime <= 0 ? 60 : frametime))
makevectors(this.angles);
+ bool wall_dodge = false;
+
if(!PHYS_DODGING_AIR)
- if (check_close_to_ground(this, PHYS_DODGING_HEIGHT_THRESHOLD) != 1
- && check_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD) != 1)
- return true;
+ if(!check_close_to_ground(this, PHYS_DODGING_HEIGHT_THRESHOLD))
+ {
+ wall_dodge = check_close_to_wall(this, PHYS_DODGING_DISTANCE_THRESHOLD);
+ if(!wall_dodge) // we're not on the ground, and wall dodging isn't allowed, end it!
+ return true;
+ }
+
+ if(!wall_dodge && PHYS_DODGING_MAXSPEED && vdist(this.velocity, >, PHYS_DODGING_MAXSPEED))
+ return false;
float tap_direction_x = 0;
float tap_direction_y = 0;
drawpic_aspect_skin(picpos, item_icon, '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * picalpha, DRAWFLAG_NORMAL);
}
+float Item_ItemsTime_GetTime(int item)
+{
+ if(autocvar__hud_configure)
+ {
+ switch(item)
+ {
+ case ITEM_ArmorMega.m_id: return time + 0;
+ case ITEM_HealthMega.m_id: return time + 8;
+ case ITEM_Strength.m_id: return time + 0;
+ case ITEM_Shield.m_id: return time + 4;
+ }
+
+ return -1; // don't show others
+ }
+ else
+ return ItemsTime_time[item];
+}
+
void HUD_ItemsTime()
{
if (!autocvar__hud_configure)
|| (autocvar_hud_panel_itemstime == 2 && (spectatee_status != 0 || warmup_stage || STAT(ITEMSTIME) == 2))
)) { return; }
}
- else
- {
- ItemsTime_time[ITEM_ArmorMega.m_id] = time + 0;
- ItemsTime_time[ITEM_HealthMega.m_id] = time + 8;
- ItemsTime_time[ITEM_Strength.m_id] = time + 0;
- ItemsTime_time[ITEM_Shield.m_id] = time + 4;
- }
int count = 0;
if (autocvar_hud_panel_itemstime_hidespawned == 1)
{
FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
- count += (ItemsTime_time[it.m_id] > time || -ItemsTime_time[it.m_id] > time);
+ count += (Item_ItemsTime_GetTime(it.m_id) > time || -Item_ItemsTime_GetTime(it.m_id) > time);
));
- count += (ItemsTime_time[Items_MAX] > time || -ItemsTime_time[Items_MAX] > time);
+ count += (Item_ItemsTime_GetTime(Items_MAX) > time || -Item_ItemsTime_GetTime(Items_MAX) > time);
}
else if (autocvar_hud_panel_itemstime_hidespawned == 2)
{
FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
- count += (ItemsTime_time[it.m_id] > time);
+ count += (Item_ItemsTime_GetTime(it.m_id) > time);
));
- count += (ItemsTime_time[Items_MAX] > time);
+ count += (Item_ItemsTime_GetTime(Items_MAX) > time);
}
else
{
FOREACH(Items, Item_ItemsTime_Allow(it), LAMBDA(
- count += (ItemsTime_time[it.m_id] != -1);
+ count += (Item_ItemsTime_GetTime(it.m_id) != -1);
));
- count += (ItemsTime_time[Items_MAX] != -1);
+ count += (Item_ItemsTime_GetTime(Items_MAX) != -1);
}
if (count == 0)
return;
bool item_available;
int id = 0;
string icon = "";
- FOREACH(Items, Item_ItemsTime_Allow(it) && ItemsTime_time[it.m_id] != -1, LAMBDA(
+ FOREACH(Items, Item_ItemsTime_Allow(it) && Item_ItemsTime_GetTime(it.m_id) != -1, LAMBDA(
id = it.m_id;
icon = it.m_icon;
LABEL(iteration)
- float item_time = ItemsTime_time[id];
+ float item_time = Item_ItemsTime_GetTime(id);
if (item_time < -1)
{
item_available = true;
else
item_available = (item_time <= time);
- if (ItemsTime_time[id] >= 0)
+ if (Item_ItemsTime_GetTime(id) >= 0)
{
- if (time <= ItemsTime_time[id])
+ if (time <= Item_ItemsTime_GetTime(id))
ItemsTime_availableTime[id] = 0;
else if (ItemsTime_availableTime[id] == 0)
ItemsTime_availableTime[id] = time;
f = (f > 1) ? 0 : bound(0, f, 1);
if (autocvar_hud_panel_itemstime_hidespawned == 1)
- if (!(ItemsTime_time[id] > time || -ItemsTime_time[id] > time))
+ if (!(Item_ItemsTime_GetTime(id) > time || -Item_ItemsTime_GetTime(id) > time))
continue;
if (autocvar_hud_panel_itemstime_hidespawned == 2)
- if (!(ItemsTime_time[id] > time))
+ if (!(Item_ItemsTime_GetTime(id) > time))
continue;
DrawItemsTimeItem(pos + eX * column * (itemstime_size.x + offset.x) + eY * row * (itemstime_size.y + offset.y), itemstime_size, ar, icon, item_time, item_available, f);
break;
));
// add another fake iteration for superweapons time
- if(id < Items_MAX && ItemsTime_time[Items_MAX] != -1)
+ if(id < Items_MAX && Item_ItemsTime_GetTime(Items_MAX) != -1)
{
id = Items_MAX;
icon = "superweapons";
// generated file; do not modify
-#ifdef GAMEQC
- #include <common/mutators/mutator/walljump/walljump.qc>
-#endif
+#include <common/mutators/mutator/walljump/walljump.qc>
// generated file; do not modify
-#ifdef GAMEQC
- #include <common/mutators/mutator/walljump/walljump.qh>
-#endif
+#include <common/mutators/mutator/walljump/walljump.qh>
#include "walljump.qh"
+#ifdef GAMEQC
#ifdef CSQC
REGISTER_MUTATOR(walljump, true);
#elif defined(SVQC)
}
}
}
+
+#endif
SOUND(HIT, "misc/hit");
SOUND(TYPEHIT, "misc/typehit");
+SOUND(KILL, "misc/kill");
SOUND(SPAWN, "misc/spawn");
REGISTER_STAT(ENTRAP_ORB, float)
REGISTER_STAT(ENTRAP_ORB_ALPHA, float)
REGISTER_STAT(ITEMSTIME, int, autocvar_sv_itemstime)
+REGISTER_STAT(KILL_TIME, float)
#ifdef SVQC
bool autocvar_g_ctf_leaderboard;
float autocvar_sv_dodging_up_speed;
bool autocvar_sv_dodging_wall_dodging;
bool autocvar_sv_dodging_air_dodging;
+float autocvar_sv_dodging_maxspeed = 450;
#endif
+#if 0
REGISTER_STAT(DODGING, int, g_dodging)
REGISTER_STAT(DODGING_DELAY, float, autocvar_sv_dodging_delay)
REGISTER_STAT(DODGING_DISTANCE_THRESHOLD, float, autocvar_sv_dodging_wall_distance_threshold)
-REGISTER_STAT(DODGING_FROZEN, int, autocvar_sv_dodging_frozen)
REGISTER_STAT(DODGING_FROZEN_NO_DOUBLETAP, int, autocvar_sv_dodging_frozen_doubletap)
REGISTER_STAT(DODGING_HEIGHT_THRESHOLD, float, autocvar_sv_dodging_height_threshold)
REGISTER_STAT(DODGING_HORIZ_SPEED, float, autocvar_sv_dodging_horiz_speed)
REGISTER_STAT(DODGING_HORIZ_SPEED_FROZEN, float, autocvar_sv_dodging_horiz_speed_frozen)
REGISTER_STAT(DODGING_RAMP_TIME, float, autocvar_sv_dodging_ramp_time)
-/** cvar loopback */
-REGISTER_STAT(DODGING_TIMEOUT, float)
REGISTER_STAT(DODGING_UP_SPEED, float, autocvar_sv_dodging_up_speed)
REGISTER_STAT(DODGING_WALL, bool, autocvar_sv_dodging_wall_dodging)
REGISTER_STAT(DODGING_AIR, bool, autocvar_sv_dodging_air_dodging)
+REGISTER_STAT(DODGING_MAXSPEED, float, autocvar_sv_dodging_maxspeed)
+#endif
+/** cvar loopback */
+REGISTER_STAT(DODGING_FROZEN, int, autocvar_sv_dodging_frozen)
+REGISTER_STAT(DODGING_TIMEOUT, float)
REGISTER_STAT(JETPACK_ACCEL_SIDE, float, autocvar_g_jetpack_acceleration_side)
REGISTER_STAT(JETPACK_ACCEL_UP, float, autocvar_g_jetpack_acceleration_up)
dropmark = spawn();
dropmark.owner = player;
dropmark.gravity = 1;
+ dropmark.dphitcontentsmask = DPCONTENTS_SOLID;
+ dropmark.solid = SOLID_CORPSE;
+ set_movetype(dropmark, MOVETYPE_BOUNCE);
}
float reload2 = STAT(VEHICLESTAT_RELOAD2) * 0.01;
// generated file; do not modify
-#if XONOTIC
- #include <lib/matrix/command.qc>
-#endif
+#include <lib/matrix/command.qc>
#include <lib/matrix/matrix.qc>
// generated file; do not modify
-#if XONOTIC
- #include <lib/matrix/command.qh>
-#endif
+#include <lib/matrix/command.qh>
#include <lib/matrix/matrix.qh>
#include "dialog_settings_effects.qh"
#include "slider_picmip.qh"
-#include "slider_particles.qh"
#include "slider_sbfadetime.qh"
#include "weaponslist.qh"
#include "keybinder.qh"
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Quality:")));
setDependent(e, "cl_particles", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticParticlesSlider());
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 3.0, 0.25, "cl_particles_quality",
+ _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1.0)")));
setDependent(e, "cl_particles", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_particles", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawparticles_drawdistance",
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 3000, 200, "r_drawparticles_drawdistance",
_("Particles further away than this will not be drawn (default: 1000)")));
setDependent(e, "cl_particles", 1, 1);
{
me.configureXonoticTextSlider(me, "cl_particles_quality",
_("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"));
- if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")), "0.4 250 0"); }
- me.addValue(me, ZCTX(_("PART^Low")), "0.4 500 0");
- me.addValue(me, ZCTX(_("PART^Medium")), "0.8 750 0");
+ if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")), "0.25 250 0"); }
+ me.addValue(me, ZCTX(_("PART^Low")), "0.5 500 0");
+ me.addValue(me, ZCTX(_("PART^Medium")), "0.75 750 0");
me.addValue(me, ZCTX(_("PART^Normal")), "1.0 1000 1");
- me.addValue(me, ZCTX(_("PART^High")), "1.0 1500 1");
- me.addValue(me, ZCTX(_("PART^Ultra")), "1.0 2000 2");
- if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^Ultimate")), "1.0 3000 2"); }
+ me.addValue(me, ZCTX(_("PART^High")), "1.5 1500 1");
+ me.addValue(me, ZCTX(_("PART^Ultra")), "2.0 2000 2");
+ if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^Ultimate")), "3.0 3000 2"); }
me.configureXonoticTextSliderValues(me);
}
void XonoticParticlesSlider_loadCvars(entity me)
return;
}
- else if(this.health>WEP_CVAR(devastator, damage)*0.5)
+ else if(this.health > WEP_CVAR(devastator, damage) * 0.5 * ((this.strength_finished < time) ? autocvar_g_balance_powerup_strength_selfdamage : 1))
{
if(this.velocity.z < 0)
{
evadeobstacle = '0 0 0';
evadelava = '0 0 0';
+ this.aistatus &= ~AI_STATUS_DANGER_AHEAD;
makevectors(this.v_angle.y * '0 1 0');
if (this.waterlevel)
{
// Check for water/slime/lava and dangerous edges
// (only when the bot is on the ground or jumping intentionally)
- this.aistatus &= ~AI_STATUS_DANGER_AHEAD;
vector dst_ahead = this.origin + this.view_ofs + offset;
vector dst_down = dst_ahead - '0 0 3000';
float dist;
float totaldist;
float stepdist;
- float yaw;
float ignorehazards;
float swimming;
}
// Movement loop
- yaw = vectoyaw(move);
move = end - org;
for (;;)
{
if(autocvar_bot_debug_tracewalk)
debugnodestatus(trace_endpos, DEBUG_NODE_WARNING);
- // check for doors
+ FOREACH_ENTITY_CLASS("func_ladder", true,
+ { it.solid = SOLID_BSP; });
+
traceline( org, move, movemode, e);
+
+ FOREACH_ENTITY_CLASS("func_ladder", true,
+ { it.solid = SOLID_TRIGGER; });
+
if ( trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
{
vector nextmove;
move = nextmove;
}
}
+ else if (trace_ent.classname == "func_ladder")
+ {
+ vector ladder_bottom = trace_endpos - dir * m2.x;
+ vector ladder_top = ladder_bottom;
+ ladder_top.z = trace_ent.absmax.z + (-m1.z + 1);
+ tracebox(ladder_bottom, m1, m2, ladder_top, movemode, e);
+ if (trace_fraction < 1 || trace_startsolid)
+ {
+ if(autocvar_bot_debug_tracewalk)
+ debugnodestatus(trace_endpos, DEBUG_NODE_FAIL);
+
+ return false; // failed
+ }
+ org = ladder_top + dir * m2.x;
+ move = org + dir * stepdist;
+ continue;
+ }
else
{
if(autocvar_bot_debug_tracewalk)
{
waypoint_schedulerelink(it);
});
+ waypoint_load_links_hardwired();
}
// Load waypoint links from file
return w;
}
+void waypoint_showlink(entity wp1, entity wp2, int display_type)
+{
+ if (!(wp1 && wp2))
+ return;
+
+ if (wp1.wphardwired && wp2.wphardwired)
+ te_beam(NULL, wp1.origin, wp2.origin);
+ else if (display_type == 1)
+ te_lightning2(NULL, wp1.origin, wp2.origin);
+}
+
void botframe_showwaypointlinks()
{
if (time < botframe_waypointeditorlightningtime)
botframe_waypointeditorlightningtime = time + 0.5;
FOREACH_CLIENT(IS_PLAYER(it) && !it.isbot,
{
- if(IS_ONGROUND(it) || it.waterlevel > WATERLEVEL_NONE)
+ int display_type = 0;
+ entity head = navigation_findnearestwaypoint(it, false);
+ if (IS_ONGROUND(it) || it.waterlevel > WATERLEVEL_NONE)
+ display_type = 1; // default
+ else if(head && (head.wphardwired))
+ display_type = 2; // only hardwired
+
+ if (display_type)
{
//navigation_testtracewalk = true;
- entity head = navigation_findnearestwaypoint(it, false);
- // print("currently selected WP is ", etos(head), "\n");
+ //print("currently selected WP is ", etos(head), "\n");
//navigation_testtracewalk = false;
if (head)
{
- entity w;
- w = head ;if (w) te_lightning2(NULL, w.origin, it.origin);
- w = head.wp00;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp01;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp02;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp03;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp04;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp05;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp06;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp07;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp08;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp09;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp10;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp11;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp12;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp13;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp14;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp15;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp16;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp17;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp18;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp19;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp20;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp21;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp22;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp23;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp24;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp25;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp26;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp27;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp28;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp29;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp30;if (w) te_lightning2(NULL, w.origin, head.origin);
- w = head.wp31;if (w) te_lightning2(NULL, w.origin, head.origin);
+ te_lightning2(NULL, head.origin, it.origin);
+ waypoint_showlink(head.wp00, head, display_type);
+ waypoint_showlink(head.wp01, head, display_type);
+ waypoint_showlink(head.wp02, head, display_type);
+ waypoint_showlink(head.wp03, head, display_type);
+ waypoint_showlink(head.wp04, head, display_type);
+ waypoint_showlink(head.wp05, head, display_type);
+ waypoint_showlink(head.wp06, head, display_type);
+ waypoint_showlink(head.wp07, head, display_type);
+ waypoint_showlink(head.wp08, head, display_type);
+ waypoint_showlink(head.wp09, head, display_type);
+ waypoint_showlink(head.wp10, head, display_type);
+ waypoint_showlink(head.wp11, head, display_type);
+ waypoint_showlink(head.wp12, head, display_type);
+ waypoint_showlink(head.wp13, head, display_type);
+ waypoint_showlink(head.wp14, head, display_type);
+ waypoint_showlink(head.wp15, head, display_type);
+ waypoint_showlink(head.wp16, head, display_type);
+ waypoint_showlink(head.wp17, head, display_type);
+ waypoint_showlink(head.wp18, head, display_type);
+ waypoint_showlink(head.wp19, head, display_type);
+ waypoint_showlink(head.wp20, head, display_type);
+ waypoint_showlink(head.wp21, head, display_type);
+ waypoint_showlink(head.wp22, head, display_type);
+ waypoint_showlink(head.wp23, head, display_type);
+ waypoint_showlink(head.wp24, head, display_type);
+ waypoint_showlink(head.wp25, head, display_type);
+ waypoint_showlink(head.wp26, head, display_type);
+ waypoint_showlink(head.wp27, head, display_type);
+ waypoint_showlink(head.wp28, head, display_type);
+ waypoint_showlink(head.wp29, head, display_type);
+ waypoint_showlink(head.wp30, head, display_type);
+ waypoint_showlink(head.wp31, head, display_type);
}
}
});
spawnfunc(weapon_hagar);
spawnfunc(weapon_machinegun);
spawnfunc(weapon_vortex);
+spawnfunc(weapon_minelayer);
spawnfunc(target_items);
spawnfunc(item_rockets);
spawnfunc(item_shells);
-spawnfunc(item_jetpack);
+spawnfunc(item_strength);
spawnfunc(item_armor_big);
spawnfunc(item_armor_mega);
// GL -> Mortar
spawnfunc(ammo_grenades) { spawnfunc_item_rockets(this); }
+// Mines -> Rockets
+spawnfunc(weapon_prox_launcher) { spawnfunc_weapon_minelayer(this); }
+spawnfunc(ammo_mines) { spawnfunc_item_rockets(this); }
+
// LG -> Lightning
spawnfunc(weapon_lightning) { spawnfunc_weapon_electro(this); }
spawnfunc(ammo_lightning) { spawnfunc_item_cells(this); }
spawnfunc(ammo_cells) { spawnfunc_item_rockets(this); }
// Rail -> Vortex
-spawnfunc(weapon_railgun) { spawnfunc_weapon_vortex(this); }
+spawnfunc(weapon_railgun) { spawnfunc_weapon_vortex(this); }
spawnfunc(ammo_slugs) { spawnfunc_item_cells(this); }
// BFG -> Crylink
spawnfunc(ammo_rockets) { spawnfunc_item_rockets(this); }
// Armor
-spawnfunc(item_armor_body) { spawnfunc_item_armor_mega(this); }
+spawnfunc(item_armor_body) { spawnfunc_item_armor_mega(this); }
spawnfunc(item_armor_combat) { spawnfunc_item_armor_big(this); }
spawnfunc(item_armor_shard) { spawnfunc_item_armor_small(this); }
spawnfunc(item_enviro) { spawnfunc_item_invincible(this); }
// medkit -> armor (we have no holdables)
-spawnfunc(holdable_medkit) { spawnfunc_item_armor_mega(this); }
+spawnfunc(holdable_medkit) { spawnfunc_item_armor_mega(this); }
+
+// doubler -> strength
+spawnfunc(item_doubler) { spawnfunc_item_strength(this); }
.float wait;
.float delay;
InitializeEntity(this, target_give_init, INITPRIO_FINDTARGET);
}
-//spawnfunc(item_flight) /* handled by jetpack */
+//spawnfunc(item_flight) /* handled by buffs mutator */
//spawnfunc(item_haste) /* handled by buffs mutator */
//spawnfunc(item_health) /* handled in t_quake.qc */
//spawnfunc(item_health_large) /* handled in t_items.qc */
// CTF spawnfuncs handled in mutators/gamemode_ctf.qc now
-spawnfunc(item_flight)
-{
- spawnfunc_item_jetpack(this);
-}
-
.float notteam;
.float notsingle;
.float notfree;
spawnfunc(item_health_medium);
spawnfunc(item_health_mega);
spawnfunc(item_invis);
-spawnfunc(item_medic);
//***********************
//WORD OF PADMAN ENTITIES - So people can play wop maps with the xonotic weapons
//***********************
+//spawnfunc(item_revival) /* handled by buffs mutator */
+//spawnfunc(item_jumper) /* handled by buffs mutator */
+
spawnfunc(weapon_punchy) { spawnfunc_weapon_arc(this); }
spawnfunc(weapon_nipper) { spawnfunc_weapon_machinegun(this); }
spawnfunc(weapon_pumper) { spawnfunc_weapon_shotgun(this); }
spawnfunc(item_padpower) { spawnfunc_item_quad(this); }
spawnfunc(item_climber) { spawnfunc_item_invincible(this); }
spawnfunc(item_speedy) { spawnfunc_item_haste(this); }
-spawnfunc(item_jump) { spawnfunc_item_jetpack(this); }
spawnfunc(item_visionless) { spawnfunc_item_invis(this); }
-spawnfunc(item_revival) { spawnfunc_item_medic(this); }
spawnfunc(item_armor_padshield) { spawnfunc_item_armor_mega(this); }
+
+spawnfunc(holdable_floater) { spawnfunc_item_jetpack(this); }
.float dmgtime;
.float killcount;
-.float damage_dealt, typehitsound;
+.float damage_dealt, typehitsound, killsound;
.float watersound_finished;
.float iscreature;
.float hit_time = _STAT(HIT_TIME);
.float typehit_time = _STAT(TYPEHIT_TIME);
+.float kill_time = _STAT(KILL_TIME);
.float damage_dealt_total = _STAT(DAMAGE_DEALT_TOTAL);
attacker.taunt_soundtime = time + 1;
attacker.killcount = attacker.killcount + 1;
+ attacker.killsound += 1;
+
#define SPREE_ITEM(counta,countb,center,normal,gentle) \
case counta: \
{ \
damage_attacker = attacker;
attacker_save = attacker;
- if(IS_PLAYER(targ))
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(targ.(weaponentity).hook && targ.(weaponentity).hook.aiment == attacker)
- RemoveHook(targ.(weaponentity).hook);
- }
- }
-
// special rule: gravity bomb does not hit team mates (other than for disconnecting the hook)
if(DEATH_ISWEAPON(deathtype, WEP_HOOK) || DEATH_ISWEAPON(deathtype, WEP_TUBA))
{
mirrordamage = M_ARGV(5, float);
force = M_ARGV(6, vector);
+ if(IS_PLAYER(targ) && damage > 0 && attacker)
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(targ.(weaponentity).hook && targ.(weaponentity).hook.aiment == attacker)
+ RemoveHook(targ.(weaponentity).hook);
+ }
+ }
+
if(STAT(FROZEN, targ))
if(deathtype != DEATH_HURTTRIGGER.m_id && deathtype != DEATH_TEAMCHANGE.m_id && deathtype != DEATH_AUTOTEAMCHANGE.m_id)
{
// mapinfo
BADCVAR("fraglimit");
+ BADCVAR("g_arena");
BADCVAR("g_assault");
BADCVAR("g_ca");
BADCVAR("g_ca_teams");
+ BADCVAR("g_conquest");
BADCVAR("g_ctf");
BADCVAR("g_cts");
+ BADCVAR("g_dotc");
BADCVAR("g_dm");
BADCVAR("g_domination");
BADCVAR("g_domination_default_teams");
BADCVAR("g_freezetag");
BADCVAR("g_freezetag_teams");
BADCVAR("g_invasion_teams");
+ BADCVAR("g_jailbreak");
+ BADCVAR("g_jailbreak_teams");
BADCVAR("g_keepaway");
BADCVAR("g_keyhunt");
BADCVAR("g_keyhunt_teams");
BADCVAR("g_race_laps_limit");
BADCVAR("g_race_qualifying_timelimit");
BADCVAR("g_race_qualifying_timelimit_override");
+ BADCVAR("g_snafu");
BADCVAR("g_tdm");
BADCVAR("g_tdm_teams");
+ BADCVAR("g_vip");
BADCVAR("leadlimit");
BADCVAR("nextmap");
BADCVAR("teamplay");
BADCVAR("gameversion");
BADCVAR("g_allow_oldvortexbeam");
BADCVAR("g_balance_kill_delay");
+ BADCVAR("g_buffs_pickup_anyway");
+ BADCVAR("g_buffs_randomize");
BADCVAR("g_campcheck_distance");
BADCVAR("g_ca_point_leadlimit");
BADCVAR("g_ca_point_limit");
BADCVAR("g_freezetag_point_limit");
BADCVAR("g_hats");
BADCVAR("g_invasion_point_limit");
+ BADCVAR("g_jump_grunt");
BADCVAR("g_keyhunt_point_leadlimit");
+ BADCVAR("g_maplist_selectrandom");
BADCVAR("g_nexball_goalleadlimit");
BADCVAR("g_new_toys_use_pickupsound");
BADCVAR("g_physics_predictall");
BADCVAR("g_piggyback");
+ BADCVAR("g_playerclip_collisions");
BADCVAR("g_tdm_point_leadlimit");
BADCVAR("g_tdm_point_limit");
BADCVAR("leadlimit_and_fraglimit");
BADCVAR("sv_precacheplayermodels");
BADCVAR("sv_stepheight");
BADCVAR("sv_timeout");
+ BADCVAR("sv_weapons_modeloverride");
BADPREFIX("crypto_");
BADPREFIX("gameversion_");
BADPREFIX("g_chat_");
entity e = IS_SPEC(it) ? it.enemy : it;
if (e.typehitsound) {
it.typehit_time = time;
+ } else if (e.killsound) {
+ it.kill_time = time;
} else if (e.damage_dealt) {
it.hit_time = time;
it.damage_dealt_total += ceil(e.damage_dealt);
FOREACH_CLIENT(true, {
it.typehitsound = false;
it.damage_dealt = 0;
+ it.killsound = false;
antilag_record(it, CS(it), altime);
});
IL_EACH(g_monsters, true,
#include "../lib/warpzone/common.qh"
#include "../common/mutators/mutator/waypoints/waypointsprites.qh"
+IntrusiveList g_race_targets;
+STATIC_INIT(g_race_targets) { g_race_targets = IL_NEW(); }
+
void race_InitSpectator()
{
if(g_race_qualifying)
bool race_waypointsprite_visible_for_player(entity this, entity player, entity view)
{
- if(view.race_checkpoint == -1 || this.owner.race_checkpoint == -2)
+ entity own = this.owner;
+ if(this.realowner)
+ own = this.realowner; // target support
+
+ if(view.race_checkpoint == -1 || own.race_checkpoint == -2)
return true;
- else if(view.race_checkpoint == this.owner.race_checkpoint)
+ else if(view.race_checkpoint == own.race_checkpoint)
return true;
else
return false;
g_race_qualifying = qual;
+ IL_EACH(g_race_targets, true,
+ {
+ entity cpt = it;
+ FOREACH_ENTITY_STRING(target, cpt.targetname,
+ {
+ vector org = (it.absmin + it.absmax) * 0.5;
+ if(cpt.race_checkpoint == 0)
+ WaypointSprite_SpawnFixed(WP_RaceStart, org, it, sprite, RADARICON_NONE);
+ else
+ WaypointSprite_SpawnFixed(WP_RaceCheckpoint, org, it, sprite, RADARICON_NONE);
+
+ it.sprite.realowner = cpt;
+ it.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
+ });
+ });
+
if (race_timed_checkpoint) {
if (defrag_ents) {
- for (entity cp = NULL; (cp = find(cp, classname, "target_startTimer"));) {
- WaypointSprite_UpdateSprites(cp.sprite, WP_RaceStart, WP_Null, WP_Null);
- }
- for (entity cp = NULL; (cp = find(cp, classname, "target_stopTimer"));) {
- WaypointSprite_UpdateSprites(cp.sprite, WP_RaceFinish, WP_Null, WP_Null);
- }
- for (entity cp = NULL; (cp = find(cp, classname, "target_checkpoint"));) {
- if (cp.race_checkpoint == -2) { // something's wrong with the defrag cp file or it has not been written yet, set defragcpexists to -1 so that it will be rewritten when someone finishes
- defragcpexists = -1;
- }
- }
+ IL_EACH(g_race_targets, true,
+ {
+ entity cpt = it;
+ if(it.classname == "target_startTimer" || it.classname == "target_stopTimer") {
+ FOREACH_ENTITY_STRING(target, cpt.targetname, {
+ WaypointSprite_UpdateSprites(it.sprite, ((cpt.classname == "target_startTimer") ? WP_RaceStart : WP_RaceFinish), WP_Null, WP_Null);
+ });
+ }
+ if(it.classname == "target_checkpoint") {
+ if(it.race_checkpoint == -2)
+ defragcpexists = -1; // something's wrong with the defrag cp file or it has not been written yet, set defragcpexists to -1 so that it will be rewritten when someone finishes
+ }
+ });
if (defragcpexists != -1) {
float largest_cp_id = 0;
for (entity cp = NULL; (cp = find(cp, classname, "target_checkpoint"));) {
race_timed_checkpoint = 1;
- if(this.race_checkpoint == 0)
- WaypointSprite_SpawnFixed(WP_RaceStart, org, this, sprite, RADARICON_NONE);
- else
- WaypointSprite_SpawnFixed(WP_RaceCheckpoint, org, this, sprite, RADARICON_NONE);
-
- this.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
+ IL_PUSH(g_race_targets, this);
InitializeEntity(this, trigger_race_checkpoint_verify, INITPRIO_FINDTARGET);
}