-Thu Sep 12 07:24:50 CEST 2019
+Sat Dec 28 07:24:50 CET 2019
// {{{ #1: Blaster
-set g_balance_blaster_primary_animtime 0.2
+set g_balance_blaster_primary_animtime 0.1
set g_balance_blaster_primary_damage 20
set g_balance_blaster_primary_delay 0
set g_balance_blaster_primary_edgedamage 10
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.2
-set g_balance_blaster_switchdelay_raise 0.2
+set g_balance_blaster_switchdelay_drop 0.1
+set g_balance_blaster_switchdelay_raise 0.1
set g_balance_blaster_weaponreplace ""
set g_balance_blaster_weaponstart 1
set g_balance_blaster_weaponstartoverride -1
set g_balance_machinegun_mode 1
set g_balance_machinegun_reload_ammo 60
set g_balance_machinegun_reload_time 2
-set g_balance_machinegun_solidpenetration 63
+set g_balance_machinegun_solidpenetration 13.1
set g_balance_machinegun_spread_add 0.012
set g_balance_machinegun_spread_max 0.05
set g_balance_machinegun_spread_min 0.02
+++ /dev/null
-// {{{ #1: Blaster
-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 10
-set g_balance_blaster_primary_force 375
-set g_balance_blaster_primary_force_zscale 1
-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_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 360
-set g_balance_blaster_secondary_force_zscale 1
-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.2
-set g_balance_blaster_switchdelay_raise 0.2
-set g_balance_blaster_weaponreplace ""
-set g_balance_blaster_weaponstart 1
-set g_balance_blaster_weaponstartoverride -1
-set g_balance_blaster_weaponthrowable 0
-// }}}
-// {{{ #2: Shotgun
-set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_animtime 0.2
-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_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_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_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 1
-set g_balance_shotgun_weaponstartoverride -1
-set g_balance_shotgun_weaponthrowable 1
-// }}}
-// {{{ #3: MachineGun
-set g_balance_machinegun_burst 3
-set g_balance_machinegun_burst_ammo 3
-set g_balance_machinegun_burst_animtime 0.3
-set g_balance_machinegun_burst_refire 0.06
-set g_balance_machinegun_burst_refire2 0.45
-set g_balance_machinegun_burst_spread 0
-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 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 60
-set g_balance_machinegun_reload_time 2
-set g_balance_machinegun_solidpenetration 63
-set g_balance_machinegun_spread_add 0.012
-set g_balance_machinegun_spread_max 0.05
-set g_balance_machinegun_spread_min 0.02
-set g_balance_machinegun_sustained_ammo 1
-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.03
-set g_balance_machinegun_switchdelay_drop 0.2
-set g_balance_machinegun_switchdelay_raise 0.2
-set g_balance_machinegun_weaponreplace ""
-set g_balance_machinegun_weaponstart 0
-set g_balance_machinegun_weaponstartoverride -1
-set g_balance_machinegun_weaponthrowable 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 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 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 55
-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
-set g_balance_mortar_weaponthrowable 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
-set g_balance_minelayer_weaponthrowable 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 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_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 30
-set g_balance_electro_secondary_damagedbycontents 1
-set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_edgedamage 15
-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
-set g_balance_electro_secondary_stick 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_electro_weaponstart 0
-set g_balance_electro_weaponstartoverride -1
-set g_balance_electro_weaponthrowable 1
-// }}}
-// {{{ #7: 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 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_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 3
-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 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_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 0
-set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_middle_lifetime 5
-set g_balance_crylink_secondary_other_fadetime 2
-set g_balance_crylink_secondary_other_lifetime 2
-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 4000
-set g_balance_crylink_secondary_spread 0.08
-set g_balance_crylink_secondary_spreadtype 0
-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
-set g_balance_crylink_weaponthrowable 1
-// }}}
-// {{{ #8: Vortex
-set g_balance_vortex_charge 0
-set g_balance_vortex_charge_always 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.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_start 0.5
-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_armorpierce 0
-set g_balance_vortex_primary_damage 65
-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_vortex_primary_damagefalloff_mindist 0
-set g_balance_vortex_primary_force 400
-set g_balance_vortex_primary_refire 1.5
-set g_balance_vortex_reload_ammo 0
-set g_balance_vortex_reload_time 2
-set g_balance_vortex_secondary 0
-set g_balance_vortex_secondary_ammo 2
-set g_balance_vortex_secondary_animtime 0
-set g_balance_vortex_secondary_armorpierce 0
-set g_balance_vortex_secondary_chargepool 0
-set g_balance_vortex_secondary_chargepool_pause_regen 1
-set g_balance_vortex_secondary_chargepool_regen 0.15
-set g_balance_vortex_secondary_damage 0
-set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
-set g_balance_vortex_secondary_damagefalloff_halflife 0
-set g_balance_vortex_secondary_damagefalloff_maxdist 0
-set g_balance_vortex_secondary_damagefalloff_mindist 0
-set g_balance_vortex_secondary_force 0
-set g_balance_vortex_secondary_refire 0
-set g_balance_vortex_switchdelay_drop 0.2
-set g_balance_vortex_switchdelay_raise 0.2
-set g_balance_vortex_weaponreplace ""
-set g_balance_vortex_weaponstart 0
-set g_balance_vortex_weaponstartoverride -1
-set g_balance_vortex_weaponthrowable 1
-// }}}
-// {{{ #9: 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 2200
-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_ammo 1
-set g_balance_hagar_secondary_damage 35
-set g_balance_hagar_secondary_damageforcescale 0
-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_lifetime_rand 0
-set g_balance_hagar_secondary_load 1
-set g_balance_hagar_secondary_load_abort 1
-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 2000
-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_hagar_weaponstart 0
-set g_balance_hagar_weaponstartoverride -1
-set g_balance_hagar_weaponthrowable 1
-// }}}
-// {{{ #10: Devastator
-set g_balance_devastator_ammo 4
-set g_balance_devastator_animtime 0.4
-set g_balance_devastator_damage 80
-set g_balance_devastator_damageforcescale 1
-set g_balance_devastator_detonatedelay 0.02
-set g_balance_devastator_edgedamage 40
-set g_balance_devastator_force 400
-set g_balance_devastator_guidedelay 0.2
-set g_balance_devastator_guidegoal 512
-set g_balance_devastator_guiderate 90
-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.1
-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 300
-set g_balance_devastator_remote_jump 1
-set g_balance_devastator_remote_jump_damage 70
-set g_balance_devastator_remote_jump_force 450
-set g_balance_devastator_remote_jump_radius 100
-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_devastator_speed 1300
-set g_balance_devastator_speedaccel 1300
-set g_balance_devastator_speedstart 1000
-set g_balance_devastator_switchdelay_drop 0.2
-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
-set g_balance_devastator_weaponthrowable 1
-// }}}
-// {{{ #11: 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
-set g_balance_porto_weaponthrowable 1
-// }}}
-// {{{ #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_force 800
-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_secondary_ammo 0
-set g_balance_vaporizer_secondary_animtime 0.2
-set g_balance_vaporizer_secondary_damage 25
-set g_balance_vaporizer_secondary_delay 0
-set g_balance_vaporizer_secondary_edgedamage 12.5
-set g_balance_vaporizer_secondary_force 480
-set g_balance_vaporizer_secondary_force_zscale 1
-set g_balance_vaporizer_secondary_lifetime 5
-set g_balance_vaporizer_secondary_radius 70
-set g_balance_vaporizer_secondary_refire 0.7
-set g_balance_vaporizer_secondary_shotangle 0
-set g_balance_vaporizer_secondary_speed 6000
-set g_balance_vaporizer_secondary_spread 0
-set g_balance_vaporizer_switchdelay_drop 0.2
-set g_balance_vaporizer_switchdelay_raise 0.2
-set g_balance_vaporizer_weaponreplace ""
-set g_balance_vaporizer_weaponstart 0
-set g_balance_vaporizer_weaponstartoverride -1
-set g_balance_vaporizer_weaponthrowable 1
-// }}}
-// {{{ #13: 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.2
-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
-set g_balance_hook_weaponthrowable 1
-// }}}
-// {{{ #14: 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
-set g_balance_hlac_weaponthrowable 1
-// }}}
-// {{{ #15: @!#%'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_fadetime 0.25
-set g_balance_tuba_force 40
-set g_balance_tuba_pitchstep 6
-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_volume 1
-set g_balance_tuba_weaponreplace ""
-set g_balance_tuba_weaponstart 0
-set g_balance_tuba_weaponstartoverride -1
-set g_balance_tuba_weaponthrowable 1
-// }}}
-// {{{ #16: 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_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_refire 1.2
-set g_balance_rifle_primary_shots 1
-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_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_refire 0.9
-set g_balance_rifle_secondary_reload 0
-set g_balance_rifle_secondary_shots 4
-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
-set g_balance_rifle_weaponthrowable 1
-// }}}
-// {{{ #17: Fireball
-set g_balance_fireball_primary_animtime 0.4
-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
-set g_balance_fireball_weaponthrowable 0
-// }}}
-// {{{ #18: 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
-set g_balance_seeker_weaponthrowable 1
-// }}}
-// {{{ #19: Shockwave
-set g_balance_shockwave_blast_animtime 0.3
-set g_balance_shockwave_blast_damage 40
-set g_balance_shockwave_blast_distance 1000
-set g_balance_shockwave_blast_edgedamage 0
-set g_balance_shockwave_blast_force 15
-set g_balance_shockwave_blast_force_forwardbias 50
-set g_balance_shockwave_blast_force_zscale 1
-set g_balance_shockwave_blast_jump_damage 20
-set g_balance_shockwave_blast_jump_edgedamage 0
-set g_balance_shockwave_blast_jump_force 100
-set g_balance_shockwave_blast_jump_force_velocitybias 1
-set g_balance_shockwave_blast_jump_force_zscale 1
-set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_jump_multiplier_distance 0.5
-set g_balance_shockwave_blast_jump_multiplier_min 0
-set g_balance_shockwave_blast_jump_radius 150
-set g_balance_shockwave_blast_multiplier_accuracy 0.45
-set g_balance_shockwave_blast_multiplier_distance 0.2
-set g_balance_shockwave_blast_multiplier_min 0
-set g_balance_shockwave_blast_refire 0.75
-set g_balance_shockwave_blast_splash_damage 15
-set g_balance_shockwave_blast_splash_edgedamage 0
-set g_balance_shockwave_blast_splash_force 100
-set g_balance_shockwave_blast_splash_force_forwardbias 50
-set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_splash_multiplier_distance 0.5
-set g_balance_shockwave_blast_splash_multiplier_min 0
-set g_balance_shockwave_blast_splash_radius 70
-set g_balance_shockwave_blast_spread_max 120
-set g_balance_shockwave_blast_spread_min 25
-set g_balance_shockwave_melee_animtime 1.3
-set g_balance_shockwave_melee_damage 80
-set g_balance_shockwave_melee_delay 0.25
-set g_balance_shockwave_melee_force 200
-set g_balance_shockwave_melee_multihit 1
-set g_balance_shockwave_melee_no_doubleslap 1
-set g_balance_shockwave_melee_nonplayerdamage 40
-set g_balance_shockwave_melee_range 120
-set g_balance_shockwave_melee_refire 1.25
-set g_balance_shockwave_melee_swing_side 120
-set g_balance_shockwave_melee_swing_up 30
-set g_balance_shockwave_melee_time 0.15
-set g_balance_shockwave_melee_traces 10
-set g_balance_shockwave_switchdelay_drop 0.2
-set g_balance_shockwave_switchdelay_raise 0.2
-set g_balance_shockwave_weaponreplace ""
-set g_balance_shockwave_weaponstart 0
-set g_balance_shockwave_weaponstartoverride -1
-set g_balance_shockwave_weaponthrowable 0
-// }}}
-// {{{ #20: Arc
-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 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 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 0
-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.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_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 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 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 5
-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_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_arc_weaponthrowable 1
-// }}}
-// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON)
-set g_balance_okhmg_primary_ammo 1
-set g_balance_okhmg_primary_damage 30
-set g_balance_okhmg_primary_force 10
-set g_balance_okhmg_primary_refire 0.05
-set g_balance_okhmg_primary_solidpenetration 127
-set g_balance_okhmg_primary_spread_add 0.005
-set g_balance_okhmg_primary_spread_max 0.06
-set g_balance_okhmg_primary_spread_min 0.01
-set g_balance_okhmg_reload_ammo 120
-set g_balance_okhmg_reload_time 1
-set g_balance_okhmg_secondary_ammo 0
-set g_balance_okhmg_secondary_animtime 0.2
-set g_balance_okhmg_secondary_damage 25
-set g_balance_okhmg_secondary_delay 0
-set g_balance_okhmg_secondary_edgedamage 12.5
-set g_balance_okhmg_secondary_force 360
-set g_balance_okhmg_secondary_force_zscale 1
-set g_balance_okhmg_secondary_lifetime 5
-set g_balance_okhmg_secondary_radius 70
-set g_balance_okhmg_secondary_refire 0.7
-set g_balance_okhmg_secondary_refire_type 1
-set g_balance_okhmg_secondary_shotangle 0
-set g_balance_okhmg_secondary_speed 6000
-set g_balance_okhmg_secondary_spread 0
-set g_balance_okhmg_switchdelay_drop 0.2
-set g_balance_okhmg_switchdelay_raise 0.2
-set g_balance_okhmg_weaponreplace ""
-set g_balance_okhmg_weaponstart 0
-set g_balance_okhmg_weaponstartoverride 0
-set g_balance_okhmg_weaponthrowable 0
-// }}}
-// {{{ #22: Overkill MachineGun (MUTATOR WEAPON)
-set g_balance_okmachinegun_primary_ammo 1
-set g_balance_okmachinegun_primary_damage 25
-set g_balance_okmachinegun_primary_force 5
-set g_balance_okmachinegun_primary_refire 0.1
-set g_balance_okmachinegun_primary_solidpenetration 100
-set g_balance_okmachinegun_primary_spread_add 0.012
-set g_balance_okmachinegun_primary_spread_max 0.05
-set g_balance_okmachinegun_primary_spread_min 0
-set g_balance_okmachinegun_reload_ammo 30
-set g_balance_okmachinegun_reload_time 1.5
-set g_balance_okmachinegun_secondary_animtime 0.2
-set g_balance_okmachinegun_secondary_damage 25
-set g_balance_okmachinegun_secondary_delay 0
-set g_balance_okmachinegun_secondary_edgedamage 12.5
-set g_balance_okmachinegun_secondary_force 360
-set g_balance_okmachinegun_secondary_force_zscale 1
-set g_balance_okmachinegun_secondary_lifetime 5
-set g_balance_okmachinegun_secondary_radius 70
-set g_balance_okmachinegun_secondary_refire 0.7
-set g_balance_okmachinegun_secondary_refire_type 1
-set g_balance_okmachinegun_secondary_shotangle 0
-set g_balance_okmachinegun_secondary_speed 6000
-set g_balance_okmachinegun_secondary_spread 0
-set g_balance_okmachinegun_switchdelay_drop 0.2
-set g_balance_okmachinegun_switchdelay_raise 0.2
-set g_balance_okmachinegun_weaponreplace ""
-set g_balance_okmachinegun_weaponstart 0
-set g_balance_okmachinegun_weaponstartoverride -1
-set g_balance_okmachinegun_weaponthrowable 1
-// }}}
-// {{{ #23: Overkill Nex (MUTATOR WEAPON)
-set g_balance_oknex_charge 0
-set g_balance_oknex_charge_animlimit 0.5
-set g_balance_oknex_charge_limit 1
-set g_balance_oknex_charge_maxspeed 800
-set g_balance_oknex_charge_mindmg 40
-set g_balance_oknex_charge_minspeed 400
-set g_balance_oknex_charge_rate 0.6
-set g_balance_oknex_charge_rot_pause 0
-set g_balance_oknex_charge_rot_rate 0
-set g_balance_oknex_charge_shot_multiplier 0
-set g_balance_oknex_charge_start 0.5
-set g_balance_oknex_charge_velocity_rate 0
-set g_balance_oknex_primary_ammo 10
-set g_balance_oknex_primary_animtime 0.65
-set g_balance_oknex_primary_damage 100
-set g_balance_oknex_primary_damagefalloff_forcehalflife 0
-set g_balance_oknex_primary_damagefalloff_halflife 0
-set g_balance_oknex_primary_damagefalloff_maxdist 0
-set g_balance_oknex_primary_damagefalloff_mindist 0
-set g_balance_oknex_primary_force 500
-set g_balance_oknex_primary_refire 1
-set g_balance_oknex_reload_ammo 50
-set g_balance_oknex_reload_time 2
-set g_balance_oknex_secondary 2
-set g_balance_oknex_secondary_ammo 0
-set g_balance_oknex_secondary_animtime 0.2
-set g_balance_oknex_secondary_chargepool 0
-set g_balance_oknex_secondary_chargepool_pause_regen 1
-set g_balance_oknex_secondary_chargepool_regen 0.15
-set g_balance_oknex_secondary_damage 25
-set g_balance_oknex_secondary_damagefalloff_forcehalflife 0
-set g_balance_oknex_secondary_damagefalloff_halflife 0
-set g_balance_oknex_secondary_damagefalloff_maxdist 0
-set g_balance_oknex_secondary_damagefalloff_mindist 0
-set g_balance_oknex_secondary_delay 0
-set g_balance_oknex_secondary_edgedamage 12.5
-set g_balance_oknex_secondary_force 360
-set g_balance_oknex_secondary_force_zscale 1
-set g_balance_oknex_secondary_lifetime 5
-set g_balance_oknex_secondary_radius 70
-set g_balance_oknex_secondary_refire 0.7
-set g_balance_oknex_secondary_refire_type 1
-set g_balance_oknex_secondary_shotangle 0
-set g_balance_oknex_secondary_speed 6000
-set g_balance_oknex_secondary_spread 0
-set g_balance_oknex_switchdelay_drop 0.2
-set g_balance_oknex_switchdelay_raise 0.2
-set g_balance_oknex_weaponreplace ""
-set g_balance_oknex_weaponstart 0
-set g_balance_oknex_weaponstartoverride -1
-set g_balance_oknex_weaponthrowable 1
-// }}}
-// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON)
-set g_balance_okrpc_primary_ammo 10
-set g_balance_okrpc_primary_animtime 1
-set g_balance_okrpc_primary_damage 150
-set g_balance_okrpc_primary_damage2 500
-set g_balance_okrpc_primary_damageforcescale 2
-set g_balance_okrpc_primary_edgedamage 50
-set g_balance_okrpc_primary_force 400
-set g_balance_okrpc_primary_health 25
-set g_balance_okrpc_primary_lifetime 30
-set g_balance_okrpc_primary_radius 300
-set g_balance_okrpc_primary_refire 1
-set g_balance_okrpc_primary_speed 2500
-set g_balance_okrpc_primary_speedaccel 5000
-set g_balance_okrpc_reload_ammo 10
-set g_balance_okrpc_reload_time 1
-set g_balance_okrpc_secondary_ammo 0
-set g_balance_okrpc_secondary_animtime 0.2
-set g_balance_okrpc_secondary_damage 25
-set g_balance_okrpc_secondary_delay 0
-set g_balance_okrpc_secondary_edgedamage 12.5
-set g_balance_okrpc_secondary_force 360
-set g_balance_okrpc_secondary_force_zscale 1
-set g_balance_okrpc_secondary_lifetime 5
-set g_balance_okrpc_secondary_radius 70
-set g_balance_okrpc_secondary_refire 0.7
-set g_balance_okrpc_secondary_refire_type 1
-set g_balance_okrpc_secondary_shotangle 0
-set g_balance_okrpc_secondary_speed 6000
-set g_balance_okrpc_secondary_spread 0
-set g_balance_okrpc_switchdelay_drop 0.2
-set g_balance_okrpc_switchdelay_raise 0.2
-set g_balance_okrpc_weaponreplace ""
-set g_balance_okrpc_weaponstart 0
-set g_balance_okrpc_weaponstartoverride 0
-set g_balance_okrpc_weaponthrowable 0
-// }}}
-// {{{ #25: Overkill Shotgun (MUTATOR WEAPON)
-set g_balance_okshotgun_primary_ammo 3
-set g_balance_okshotgun_primary_animtime 0.65
-set g_balance_okshotgun_primary_bot_range 512
-set g_balance_okshotgun_primary_bullets 10
-set g_balance_okshotgun_primary_damage 17
-set g_balance_okshotgun_primary_force 80
-set g_balance_okshotgun_primary_refire 0.75
-set g_balance_okshotgun_primary_solidpenetration 3.8
-set g_balance_okshotgun_primary_spread 0.07
-set g_balance_okshotgun_reload_ammo 24
-set g_balance_okshotgun_reload_time 2
-set g_balance_okshotgun_secondary_animtime 0.2
-set g_balance_okshotgun_secondary_damage 25
-set g_balance_okshotgun_secondary_delay 0
-set g_balance_okshotgun_secondary_edgedamage 12.5
-set g_balance_okshotgun_secondary_force 360
-set g_balance_okshotgun_secondary_force_zscale 1
-set g_balance_okshotgun_secondary_lifetime 5
-set g_balance_okshotgun_secondary_radius 70
-set g_balance_okshotgun_secondary_refire 0.7
-set g_balance_okshotgun_secondary_refire_type 1
-set g_balance_okshotgun_secondary_shotangle 0
-set g_balance_okshotgun_secondary_speed 6000
-set g_balance_okshotgun_secondary_spread 0
-set g_balance_okshotgun_switchdelay_drop 0.2
-set g_balance_okshotgun_switchdelay_raise 0.2
-set g_balance_okshotgun_weaponreplace ""
-set g_balance_okshotgun_weaponstart 0
-set g_balance_okshotgun_weaponstartoverride -1
-set g_balance_okshotgun_weaponthrowable 1
-// }}}
+++ /dev/null
-// {{{ #1: Blaster
-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 10
-set g_balance_blaster_primary_force 375
-set g_balance_blaster_primary_force_zscale 1
-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_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 360
-set g_balance_blaster_secondary_force_zscale 1
-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.2
-set g_balance_blaster_switchdelay_raise 0.2
-set g_balance_blaster_weaponreplace ""
-set g_balance_blaster_weaponstart 1
-set g_balance_blaster_weaponstartoverride -1
-set g_balance_blaster_weaponthrowable 0
-// }}}
-// {{{ #2: Shotgun
-set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_animtime 0.2
-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_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_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_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 1
-set g_balance_shotgun_weaponstartoverride -1
-set g_balance_shotgun_weaponthrowable 1
-// }}}
-// {{{ #3: MachineGun
-set g_balance_machinegun_burst 3
-set g_balance_machinegun_burst_ammo 3
-set g_balance_machinegun_burst_animtime 0.3
-set g_balance_machinegun_burst_refire 0.06
-set g_balance_machinegun_burst_refire2 0.45
-set g_balance_machinegun_burst_spread 0
-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 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 60
-set g_balance_machinegun_reload_time 2
-set g_balance_machinegun_solidpenetration 13.1
-set g_balance_machinegun_spread_add 0.012
-set g_balance_machinegun_spread_max 0.05
-set g_balance_machinegun_spread_min 0.02
-set g_balance_machinegun_sustained_ammo 1
-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.03
-set g_balance_machinegun_switchdelay_drop 0.2
-set g_balance_machinegun_switchdelay_raise 0.2
-set g_balance_machinegun_weaponreplace ""
-set g_balance_machinegun_weaponstart 0
-set g_balance_machinegun_weaponstartoverride -1
-set g_balance_machinegun_weaponthrowable 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 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 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 55
-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
-set g_balance_mortar_weaponthrowable 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
-set g_balance_minelayer_weaponthrowable 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 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_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 30
-set g_balance_electro_secondary_damagedbycontents 1
-set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_edgedamage 15
-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
-set g_balance_electro_secondary_stick 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_electro_weaponstart 0
-set g_balance_electro_weaponstartoverride -1
-set g_balance_electro_weaponthrowable 1
-// }}}
-// {{{ #7: 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 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_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 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_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 3
-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 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_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
-set g_balance_crylink_weaponthrowable 1
-// }}}
-// {{{ #8: Vortex
-set g_balance_vortex_charge 1
-set g_balance_vortex_charge_always 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.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_start 0.5
-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_armorpierce 0
-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_vortex_primary_damagefalloff_mindist 0
-set g_balance_vortex_primary_force 400
-set g_balance_vortex_primary_refire 1.5
-set g_balance_vortex_reload_ammo 0
-set g_balance_vortex_reload_time 2
-set g_balance_vortex_secondary 0
-set g_balance_vortex_secondary_ammo 2
-set g_balance_vortex_secondary_animtime 0
-set g_balance_vortex_secondary_armorpierce 0
-set g_balance_vortex_secondary_chargepool 0
-set g_balance_vortex_secondary_chargepool_pause_regen 1
-set g_balance_vortex_secondary_chargepool_regen 0.15
-set g_balance_vortex_secondary_damage 0
-set g_balance_vortex_secondary_damagefalloff_forcehalflife 0
-set g_balance_vortex_secondary_damagefalloff_halflife 0
-set g_balance_vortex_secondary_damagefalloff_maxdist 0
-set g_balance_vortex_secondary_damagefalloff_mindist 0
-set g_balance_vortex_secondary_force 0
-set g_balance_vortex_secondary_refire 0
-set g_balance_vortex_switchdelay_drop 0.2
-set g_balance_vortex_switchdelay_raise 0.2
-set g_balance_vortex_weaponreplace ""
-set g_balance_vortex_weaponstart 0
-set g_balance_vortex_weaponstartoverride -1
-set g_balance_vortex_weaponthrowable 1
-// }}}
-// {{{ #9: 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 2200
-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_ammo 1
-set g_balance_hagar_secondary_damage 35
-set g_balance_hagar_secondary_damageforcescale 0
-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_lifetime_rand 0
-set g_balance_hagar_secondary_load 1
-set g_balance_hagar_secondary_load_abort 1
-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 2000
-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_hagar_weaponstart 0
-set g_balance_hagar_weaponstartoverride -1
-set g_balance_hagar_weaponthrowable 1
-// }}}
-// {{{ #10: Devastator
-set g_balance_devastator_ammo 4
-set g_balance_devastator_animtime 0.4
-set g_balance_devastator_damage 80
-set g_balance_devastator_damageforcescale 1
-set g_balance_devastator_detonatedelay 0.02
-set g_balance_devastator_edgedamage 40
-set g_balance_devastator_force 400
-set g_balance_devastator_guidedelay 0.2
-set g_balance_devastator_guidegoal 512
-set g_balance_devastator_guiderate 90
-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.1
-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 300
-set g_balance_devastator_remote_jump 0
-set g_balance_devastator_remote_jump_damage 70
-set g_balance_devastator_remote_jump_force 450
-set g_balance_devastator_remote_jump_radius 100
-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_devastator_speed 1300
-set g_balance_devastator_speedaccel 1300
-set g_balance_devastator_speedstart 1000
-set g_balance_devastator_switchdelay_drop 0.2
-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
-set g_balance_devastator_weaponthrowable 1
-// }}}
-// {{{ #11: 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
-set g_balance_porto_weaponthrowable 1
-// }}}
-// {{{ #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_force 800
-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_secondary_ammo 0
-set g_balance_vaporizer_secondary_animtime 0.2
-set g_balance_vaporizer_secondary_damage 25
-set g_balance_vaporizer_secondary_delay 0
-set g_balance_vaporizer_secondary_edgedamage 12.5
-set g_balance_vaporizer_secondary_force 480
-set g_balance_vaporizer_secondary_force_zscale 1
-set g_balance_vaporizer_secondary_lifetime 5
-set g_balance_vaporizer_secondary_radius 70
-set g_balance_vaporizer_secondary_refire 0.7
-set g_balance_vaporizer_secondary_shotangle 0
-set g_balance_vaporizer_secondary_speed 6000
-set g_balance_vaporizer_secondary_spread 0
-set g_balance_vaporizer_switchdelay_drop 0.2
-set g_balance_vaporizer_switchdelay_raise 0.2
-set g_balance_vaporizer_weaponreplace ""
-set g_balance_vaporizer_weaponstart 0
-set g_balance_vaporizer_weaponstartoverride -1
-set g_balance_vaporizer_weaponthrowable 1
-// }}}
-// {{{ #13: 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.2
-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
-set g_balance_hook_weaponthrowable 1
-// }}}
-// {{{ #14: 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
-set g_balance_hlac_weaponthrowable 1
-// }}}
-// {{{ #15: @!#%'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_fadetime 0.25
-set g_balance_tuba_force 40
-set g_balance_tuba_pitchstep 6
-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_volume 1
-set g_balance_tuba_weaponreplace ""
-set g_balance_tuba_weaponstart 0
-set g_balance_tuba_weaponstartoverride -1
-set g_balance_tuba_weaponthrowable 1
-// }}}
-// {{{ #16: 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_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_refire 1.2
-set g_balance_rifle_primary_shots 1
-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_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_refire 0.9
-set g_balance_rifle_secondary_reload 0
-set g_balance_rifle_secondary_shots 4
-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
-set g_balance_rifle_weaponthrowable 1
-// }}}
-// {{{ #17: Fireball
-set g_balance_fireball_primary_animtime 0.4
-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
-set g_balance_fireball_weaponthrowable 0
-// }}}
-// {{{ #18: 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
-set g_balance_seeker_weaponthrowable 1
-// }}}
-// {{{ #19: Shockwave
-set g_balance_shockwave_blast_animtime 0.3
-set g_balance_shockwave_blast_damage 40
-set g_balance_shockwave_blast_distance 1000
-set g_balance_shockwave_blast_edgedamage 0
-set g_balance_shockwave_blast_force 15
-set g_balance_shockwave_blast_force_forwardbias 50
-set g_balance_shockwave_blast_force_zscale 1
-set g_balance_shockwave_blast_jump_damage 20
-set g_balance_shockwave_blast_jump_edgedamage 0
-set g_balance_shockwave_blast_jump_force 100
-set g_balance_shockwave_blast_jump_force_velocitybias 1
-set g_balance_shockwave_blast_jump_force_zscale 1
-set g_balance_shockwave_blast_jump_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_jump_multiplier_distance 0.5
-set g_balance_shockwave_blast_jump_multiplier_min 0
-set g_balance_shockwave_blast_jump_radius 150
-set g_balance_shockwave_blast_multiplier_accuracy 0.45
-set g_balance_shockwave_blast_multiplier_distance 0.2
-set g_balance_shockwave_blast_multiplier_min 0
-set g_balance_shockwave_blast_refire 0.75
-set g_balance_shockwave_blast_splash_damage 15
-set g_balance_shockwave_blast_splash_edgedamage 0
-set g_balance_shockwave_blast_splash_force 100
-set g_balance_shockwave_blast_splash_force_forwardbias 50
-set g_balance_shockwave_blast_splash_multiplier_accuracy 0.5
-set g_balance_shockwave_blast_splash_multiplier_distance 0.5
-set g_balance_shockwave_blast_splash_multiplier_min 0
-set g_balance_shockwave_blast_splash_radius 70
-set g_balance_shockwave_blast_spread_max 120
-set g_balance_shockwave_blast_spread_min 25
-set g_balance_shockwave_melee_animtime 1.3
-set g_balance_shockwave_melee_damage 80
-set g_balance_shockwave_melee_delay 0.25
-set g_balance_shockwave_melee_force 200
-set g_balance_shockwave_melee_multihit 1
-set g_balance_shockwave_melee_no_doubleslap 1
-set g_balance_shockwave_melee_nonplayerdamage 40
-set g_balance_shockwave_melee_range 120
-set g_balance_shockwave_melee_refire 1.25
-set g_balance_shockwave_melee_swing_side 120
-set g_balance_shockwave_melee_swing_up 30
-set g_balance_shockwave_melee_time 0.15
-set g_balance_shockwave_melee_traces 10
-set g_balance_shockwave_switchdelay_drop 0.2
-set g_balance_shockwave_switchdelay_raise 0.2
-set g_balance_shockwave_weaponreplace ""
-set g_balance_shockwave_weaponstart 0
-set g_balance_shockwave_weaponstartoverride -1
-set g_balance_shockwave_weaponthrowable 0
-// }}}
-// {{{ #20: Arc
-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 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 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 0
-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.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_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 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 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 5
-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_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_arc_weaponthrowable 1
-// }}}
-// {{{ #21: Overkill Heavy Machine Gun (MUTATOR WEAPON)
-set g_balance_okhmg_primary_ammo 1
-set g_balance_okhmg_primary_damage 30
-set g_balance_okhmg_primary_force 10
-set g_balance_okhmg_primary_refire 0.05
-set g_balance_okhmg_primary_solidpenetration 127
-set g_balance_okhmg_primary_spread_add 0.005
-set g_balance_okhmg_primary_spread_max 0.06
-set g_balance_okhmg_primary_spread_min 0.01
-set g_balance_okhmg_reload_ammo 120
-set g_balance_okhmg_reload_time 1
-set g_balance_okhmg_secondary_ammo 0
-set g_balance_okhmg_secondary_animtime 0.2
-set g_balance_okhmg_secondary_damage 25
-set g_balance_okhmg_secondary_delay 0
-set g_balance_okhmg_secondary_edgedamage 12.5
-set g_balance_okhmg_secondary_force 360
-set g_balance_okhmg_secondary_force_zscale 1
-set g_balance_okhmg_secondary_lifetime 5
-set g_balance_okhmg_secondary_radius 70
-set g_balance_okhmg_secondary_refire 0.7
-set g_balance_okhmg_secondary_refire_type 1
-set g_balance_okhmg_secondary_shotangle 0
-set g_balance_okhmg_secondary_speed 6000
-set g_balance_okhmg_secondary_spread 0
-set g_balance_okhmg_switchdelay_drop 0.2
-set g_balance_okhmg_switchdelay_raise 0.2
-set g_balance_okhmg_weaponreplace ""
-set g_balance_okhmg_weaponstart 0
-set g_balance_okhmg_weaponstartoverride 0
-set g_balance_okhmg_weaponthrowable 0
-// }}}
-// {{{ #22: Overkill MachineGun (MUTATOR WEAPON)
-set g_balance_okmachinegun_primary_ammo 1
-set g_balance_okmachinegun_primary_damage 25
-set g_balance_okmachinegun_primary_force 5
-set g_balance_okmachinegun_primary_refire 0.1
-set g_balance_okmachinegun_primary_solidpenetration 100
-set g_balance_okmachinegun_primary_spread_add 0.012
-set g_balance_okmachinegun_primary_spread_max 0.05
-set g_balance_okmachinegun_primary_spread_min 0
-set g_balance_okmachinegun_reload_ammo 30
-set g_balance_okmachinegun_reload_time 1.5
-set g_balance_okmachinegun_secondary_animtime 0.2
-set g_balance_okmachinegun_secondary_damage 25
-set g_balance_okmachinegun_secondary_delay 0
-set g_balance_okmachinegun_secondary_edgedamage 12.5
-set g_balance_okmachinegun_secondary_force 360
-set g_balance_okmachinegun_secondary_force_zscale 1
-set g_balance_okmachinegun_secondary_lifetime 5
-set g_balance_okmachinegun_secondary_radius 70
-set g_balance_okmachinegun_secondary_refire 0.7
-set g_balance_okmachinegun_secondary_refire_type 1
-set g_balance_okmachinegun_secondary_shotangle 0
-set g_balance_okmachinegun_secondary_speed 6000
-set g_balance_okmachinegun_secondary_spread 0
-set g_balance_okmachinegun_switchdelay_drop 0.2
-set g_balance_okmachinegun_switchdelay_raise 0.2
-set g_balance_okmachinegun_weaponreplace ""
-set g_balance_okmachinegun_weaponstart 0
-set g_balance_okmachinegun_weaponstartoverride -1
-set g_balance_okmachinegun_weaponthrowable 1
-// }}}
-// {{{ #23: Overkill Nex (MUTATOR WEAPON)
-set g_balance_oknex_charge 0
-set g_balance_oknex_charge_animlimit 0.5
-set g_balance_oknex_charge_limit 1
-set g_balance_oknex_charge_maxspeed 800
-set g_balance_oknex_charge_mindmg 40
-set g_balance_oknex_charge_minspeed 400
-set g_balance_oknex_charge_rate 0.6
-set g_balance_oknex_charge_rot_pause 0
-set g_balance_oknex_charge_rot_rate 0
-set g_balance_oknex_charge_shot_multiplier 0
-set g_balance_oknex_charge_start 0.5
-set g_balance_oknex_charge_velocity_rate 0
-set g_balance_oknex_primary_ammo 10
-set g_balance_oknex_primary_animtime 0.65
-set g_balance_oknex_primary_damage 100
-set g_balance_oknex_primary_damagefalloff_forcehalflife 0
-set g_balance_oknex_primary_damagefalloff_halflife 0
-set g_balance_oknex_primary_damagefalloff_maxdist 0
-set g_balance_oknex_primary_damagefalloff_mindist 0
-set g_balance_oknex_primary_force 500
-set g_balance_oknex_primary_refire 1
-set g_balance_oknex_reload_ammo 50
-set g_balance_oknex_reload_time 2
-set g_balance_oknex_secondary 2
-set g_balance_oknex_secondary_ammo 0
-set g_balance_oknex_secondary_animtime 0.2
-set g_balance_oknex_secondary_chargepool 0
-set g_balance_oknex_secondary_chargepool_pause_regen 1
-set g_balance_oknex_secondary_chargepool_regen 0.15
-set g_balance_oknex_secondary_damage 25
-set g_balance_oknex_secondary_damagefalloff_forcehalflife 0
-set g_balance_oknex_secondary_damagefalloff_halflife 0
-set g_balance_oknex_secondary_damagefalloff_maxdist 0
-set g_balance_oknex_secondary_damagefalloff_mindist 0
-set g_balance_oknex_secondary_delay 0
-set g_balance_oknex_secondary_edgedamage 12.5
-set g_balance_oknex_secondary_force 360
-set g_balance_oknex_secondary_force_zscale 1
-set g_balance_oknex_secondary_lifetime 5
-set g_balance_oknex_secondary_radius 70
-set g_balance_oknex_secondary_refire 0.7
-set g_balance_oknex_secondary_refire_type 1
-set g_balance_oknex_secondary_shotangle 0
-set g_balance_oknex_secondary_speed 6000
-set g_balance_oknex_secondary_spread 0
-set g_balance_oknex_switchdelay_drop 0.2
-set g_balance_oknex_switchdelay_raise 0.2
-set g_balance_oknex_weaponreplace ""
-set g_balance_oknex_weaponstart 0
-set g_balance_oknex_weaponstartoverride -1
-set g_balance_oknex_weaponthrowable 1
-// }}}
-// {{{ #24: Overkill Rocket Propelled Chainsaw (MUTATOR WEAPON)
-set g_balance_okrpc_primary_ammo 10
-set g_balance_okrpc_primary_animtime 1
-set g_balance_okrpc_primary_damage 150
-set g_balance_okrpc_primary_damage2 500
-set g_balance_okrpc_primary_damageforcescale 2
-set g_balance_okrpc_primary_edgedamage 50
-set g_balance_okrpc_primary_force 400
-set g_balance_okrpc_primary_health 25
-set g_balance_okrpc_primary_lifetime 30
-set g_balance_okrpc_primary_radius 300
-set g_balance_okrpc_primary_refire 1
-set g_balance_okrpc_primary_speed 2500
-set g_balance_okrpc_primary_speedaccel 5000
-set g_balance_okrpc_reload_ammo 10
-set g_balance_okrpc_reload_time 1
-set g_balance_okrpc_secondary_ammo 0
-set g_balance_okrpc_secondary_animtime 0.2
-set g_balance_okrpc_secondary_damage 25
-set g_balance_okrpc_secondary_delay 0
-set g_balance_okrpc_secondary_edgedamage 12.5
-set g_balance_okrpc_secondary_force 360
-set g_balance_okrpc_secondary_force_zscale 1
-set g_balance_okrpc_secondary_lifetime 5
-set g_balance_okrpc_secondary_radius 70
-set g_balance_okrpc_secondary_refire 0.7
-set g_balance_okrpc_secondary_refire_type 1
-set g_balance_okrpc_secondary_shotangle 0
-set g_balance_okrpc_secondary_speed 6000
-set g_balance_okrpc_secondary_spread 0
-set g_balance_okrpc_switchdelay_drop 0.2
-set g_balance_okrpc_switchdelay_raise 0.2
-set g_balance_okrpc_weaponreplace ""
-set g_balance_okrpc_weaponstart 0
-set g_balance_okrpc_weaponstartoverride 0
-set g_balance_okrpc_weaponthrowable 0
-// }}}
-// {{{ #25: Overkill Shotgun (MUTATOR WEAPON)
-set g_balance_okshotgun_primary_ammo 3
-set g_balance_okshotgun_primary_animtime 0.65
-set g_balance_okshotgun_primary_bot_range 512
-set g_balance_okshotgun_primary_bullets 10
-set g_balance_okshotgun_primary_damage 17
-set g_balance_okshotgun_primary_force 80
-set g_balance_okshotgun_primary_refire 0.75
-set g_balance_okshotgun_primary_solidpenetration 3.8
-set g_balance_okshotgun_primary_spread 0.07
-set g_balance_okshotgun_reload_ammo 24
-set g_balance_okshotgun_reload_time 2
-set g_balance_okshotgun_secondary_animtime 0.2
-set g_balance_okshotgun_secondary_damage 25
-set g_balance_okshotgun_secondary_delay 0
-set g_balance_okshotgun_secondary_edgedamage 12.5
-set g_balance_okshotgun_secondary_force 360
-set g_balance_okshotgun_secondary_force_zscale 1
-set g_balance_okshotgun_secondary_lifetime 5
-set g_balance_okshotgun_secondary_radius 70
-set g_balance_okshotgun_secondary_refire 0.7
-set g_balance_okshotgun_secondary_refire_type 1
-set g_balance_okshotgun_secondary_shotangle 0
-set g_balance_okshotgun_secondary_speed 6000
-set g_balance_okshotgun_secondary_spread 0
-set g_balance_okshotgun_switchdelay_drop 0.2
-set g_balance_okshotgun_switchdelay_raise 0.2
-set g_balance_okshotgun_weaponreplace ""
-set g_balance_okshotgun_weaponstart 0
-set g_balance_okshotgun_weaponstartoverride -1
-set g_balance_okshotgun_weaponthrowable 1
-// }}}
set g_balance_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 1400
set g_balance_falldamage_factor 0.15
set g_balance_falldamage_maxdamage 25
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_portal_lifetime 15 // these get recharged whenever the portal is used
// }}}
-exec bal-wep-testingxpm.cfg
+exec bal-wep-testing.cfg
set g_balance_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
set g_balance_falldamage_maxdamage 40
+set g_balance_falldamage_onlyvertical 0
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_portal_lifetime 15 // these get recharged whenever the portal is used
// }}}
-exec bal-wep-xpm.cfg
+exec bal-wep-xonotic.cfg
bind F3 spec
// usercommands. These can be edited and bound by the menu.
-seta "userbind1_press" "say_team quad soon"; seta "userbind1_release" ""; seta "userbind1_description" "team: quad soon"
+seta "userbind1_press" "say_team strength soon"; seta "userbind1_release" ""; seta "userbind1_description" "team: strength soon"
seta "userbind2_press" "say_team free item %x^7 (l:%y^7); g_waypointsprite_team_here_p"; seta "userbind2_release" ""; seta "userbind2_description" "team: free item, icon"
seta "userbind3_press" "say_team took item (l:%l^7); g_waypointsprite_team_here"; seta "userbind3_release" ""; seta "userbind3_description" "team: took item, icon"
seta "userbind4_press" "say_team negative"; seta "userbind4_release" ""; seta "userbind4_description" "team: negative"
alias g_maplist_add "qc_cmd_svmenu maplist add ${* ?}"
alias g_maplist_remove "qc_cmd_svmenu maplist remove ${* ?}"
-alias g_maplist_putfirst "qc_cmd_svmenu maplist remove ${* ?} ; qc_cmd maplist add ${* ?}"
+alias g_maplist_putfirst "qc_cmd_svmenu maplist remove ${* ?} ; qc_cmd_svmenu maplist add ${* ?}"
alias g_maplist_shufflenow "qc_cmd_svmenu maplist shuffle"
alias g_maplist_cleanup "qc_cmd_svmenu maplist cleanup" // removes maps that don't exist from the map list
#
# Translators:
# Martin Taibr <taibr.martin@gmail.com>, 2017
+# GamingasCZ <gamingforyou875@gmail.com>, 2019
+# Jan Kocka <kockahonza@gmail.com>, 2019
# Martin Taibr <taibr.martin@gmail.com>, 2017
# NONE <nechtom@gmail.com>, 2015
# Tomáš Volavka <czheron@gmail.com>, 2015,2018
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-05-19 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2019-12-11 18:36+0000\n"
+"Last-Translator: GamingasCZ <gamingforyou875@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/team-xonotic/xonotic/language/"
"cs/)\n"
"Language: cs\n"
#: qcsrc/client/hud/hud_config.qc:243
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
-msgstr ""
+msgstr "^2Úspěšně exportováno do %s! (Poznámka: Uloženo v data/data/)"
#: qcsrc/client/hud/hud_config.qc:247
#, c-format
msgid "^1Couldn't write to %s"
-msgstr ""
+msgstr "^1Nešlo zapsat do 1%s"
#: qcsrc/client/hud/panel/centerprint.qc:140
#, c-format
"^1Multiline message at time %s that\n"
"^1lasts longer than normal"
msgstr ""
+"^1Víceřádková zpráva v čase %s že\n"
+"^1trvá déle než normálně"
#: qcsrc/client/hud/panel/centerprint.qc:144
#, c-format
msgid "Message at time %s"
-msgstr ""
+msgstr "Zpráva v čase %s"
#: qcsrc/client/hud/panel/centerprint.qc:149
msgid "Generic message"
-msgstr ""
+msgstr "Obecná zpráva"
#: qcsrc/client/hud/panel/chat.qc:84
msgid "^3Player^7: This is the chat area."
#: qcsrc/client/hud/panel/infomessages.qc:113
#: qcsrc/menu/xonotic/keybinder.qc:105
msgid "server info"
-msgstr ""
+msgstr "info o serveru"
#: qcsrc/client/hud/panel/infomessages.qc:126
msgid "^1Match has already begun"
#: qcsrc/client/hud/panel/infomessages.qc:147
msgid "^2Currently in ^1warmup^2 stage!"
-msgstr ""
+msgstr "^2Momentálně v ^1zahřívací^2 fázi!"
#: qcsrc/client/hud/panel/infomessages.qc:162
#, c-format
msgid "%sPress ^3%s%s to end warmup"
-msgstr ""
+msgstr "%sZmáčkni ^3%s%s pro ukončení zahřívací fáze"
#: qcsrc/client/hud/panel/infomessages.qc:162
#: qcsrc/client/hud/panel/infomessages.qc:164
#: qcsrc/client/hud/panel/infomessages.qc:177
#: qcsrc/menu/xonotic/keybinder.qc:101
msgid "ready"
-msgstr ""
+msgstr "připraven"
#: qcsrc/client/hud/panel/infomessages.qc:164
#, c-format
msgid "%sPress ^3%s%s once you are ready"
-msgstr ""
+msgstr "%sZmáčkni ^3%s%s až budeš připravený"
#: qcsrc/client/hud/panel/infomessages.qc:169
msgid "^2Waiting for others to ready up to end warmup..."
-msgstr ""
+msgstr "^2Čeká se než ostatní hráči ukončí zahřívací fázi..."
#: qcsrc/client/hud/panel/infomessages.qc:171
msgid "^2Waiting for others to ready up..."
-msgstr ""
+msgstr "^2Čeká se než budou ostatní hráči připraveni..."
#: qcsrc/client/hud/panel/infomessages.qc:177
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
-msgstr ""
+msgstr "^2Zmáčkni ^3%s^2 pro ukončení zahřívací fáze"
#: qcsrc/client/hud/panel/infomessages.qc:198
msgid "Teamnumbers are unbalanced!"
#: qcsrc/client/hud/panel/infomessages.qc:201
#, c-format
msgid " Press ^3%s%s to adjust"
-msgstr ""
+msgstr " Zmáčkni ^3%s%s pro upravení"
#: qcsrc/client/hud/panel/infomessages.qc:201
#: qcsrc/menu/xonotic/keybinder.qc:117
msgid "team menu"
-msgstr ""
+msgstr "týmové menu"
#: qcsrc/client/hud/panel/infomessages.qc:211
msgid "^1Spectating this player:"
-msgstr ""
+msgstr "^1Sleduješ tohoto hráče:"
#: qcsrc/client/hud/panel/infomessages.qc:211
msgid "^1Spectating you:"
-msgstr ""
+msgstr "^1Sledují tě:"
#: qcsrc/client/hud/panel/infomessages.qc:227
msgid "^7Press ^3ESC ^7to show HUD options."
-msgstr ""
+msgstr "^7Zmáčkni ^3ESC ^7pro zobrazení nastavení HUD."
#: qcsrc/client/hud/panel/infomessages.qc:228
msgid "^3Doubleclick ^7a panel for panel-specific options."
#: qcsrc/client/hud/panel/quickmenu.qc:598
#, c-format
msgid "Command%d"
-msgstr ""
+msgstr "Příkaz%d"
#: qcsrc/client/hud/panel/quickmenu.qc:624
msgid "Continue..."
-msgstr ""
+msgstr "Pokračovat..."
#: qcsrc/client/hud/panel/quickmenu.qc:781
#: qcsrc/client/hud/panel/quickmenu.qc:788
msgid "Chat"
-msgstr ""
+msgstr "Chat"
#: qcsrc/client/hud/panel/quickmenu.qc:782
msgid "QMCMD^Send public message to"
-msgstr ""
+msgstr "QMCMD^Poslat veřejnou zprávu do"
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^:-) / nice one"
-msgstr ""
+msgstr "QMCMD^:-) / hezký"
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^nice one"
-msgstr ""
+msgstr "QMCMD^hezký"
#: qcsrc/client/hud/panel/quickmenu.qc:784
msgid "QMCMD^good game"
-msgstr ""
+msgstr "QMCMD^dobrá hra"
#: qcsrc/client/hud/panel/quickmenu.qc:785
msgid "QMCMD^hi / good luck"
-msgstr ""
+msgstr "QMCMD^ahoj/hodně štěstí"
#: qcsrc/client/hud/panel/quickmenu.qc:785
msgid "QMCMD^hi / good luck and have fun"
-msgstr ""
+msgstr "QMCMD^ahoj/hodně štěstí a užijte si hru"
#: qcsrc/client/hud/panel/quickmenu.qc:787
msgid "QMCMD^Send in English"
-msgstr ""
+msgstr "QMCMD^Pošli v angličtině"
#: qcsrc/client/hud/panel/quickmenu.qc:792
#: qcsrc/client/hud/panel/quickmenu.qc:808
msgid "QMCMD^Team chat"
-msgstr ""
+msgstr "QMCMD^Týmový chat"
#: qcsrc/client/hud/panel/quickmenu.qc:793
msgid "QMCMD^quad soon"
#: qcsrc/client/hud/panel/quickmenu.qc:796
msgid "QMCMD^negative"
-msgstr ""
+msgstr "QMCMD^negativní"
#: qcsrc/client/hud/panel/quickmenu.qc:797
msgid "QMCMD^positive"
-msgstr ""
+msgstr "QMCMD^pozitivní"
#: qcsrc/client/hud/panel/quickmenu.qc:798
msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:819
msgid "QMCMD^FPS"
-msgstr ""
+msgstr "QMCMD^FPS"
#: qcsrc/client/hud/panel/quickmenu.qc:820
msgid "QMCMD^Net graph"
#: qcsrc/client/hud/panel/quickmenu.qc:823
#: qcsrc/client/hud/panel/quickmenu.qc:826
msgid "QMCMD^Sound settings"
-msgstr ""
+msgstr "QMCMD^Nastavení zvuku"
#: qcsrc/client/hud/panel/quickmenu.qc:824
msgid "QMCMD^Hit sound"
-msgstr ""
+msgstr "QMCMD^Zvuk zásahu"
#: qcsrc/client/hud/panel/quickmenu.qc:825
msgid "QMCMD^Chat sound"
-msgstr ""
+msgstr "QMCMD^Zvuk chatu"
#: qcsrc/client/hud/panel/quickmenu.qc:830
#: qcsrc/client/hud/panel/quickmenu.qc:834
#: qcsrc/client/hud/panel/scoreboard.qc:91
msgid "Number of deaths"
-msgstr ""
+msgstr "Počet smrtí"
#: qcsrc/client/hud/panel/scoreboard.qc:91
msgid "SCO^deaths"
#: qcsrc/client/hud/panel/scoreboard.qc:92
msgid "SCO^destroyed"
-msgstr ""
+msgstr "SCO^zničen"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "SCO^damage"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "The total damage done"
-msgstr ""
+msgstr "Celkový udělený damage"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "SCO^dmgtaken"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "SCO^fastest"
-msgstr ""
+msgstr "SCO^nejrychlejší"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "Time of fastest lap (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "FPS"
-msgstr ""
+msgstr "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "SCO^fps"
-msgstr ""
+msgstr "SCO^fps"
#: qcsrc/client/hud/panel/scoreboard.qc:101
msgid "Number of kills minus suicides"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "SCO^laps"
-msgstr ""
+msgstr "SCO^kola"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "Number of lives (LMS)"
-msgstr ""
+msgstr "Počet životů (LMS)"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "SCO^lives"
-msgstr ""
+msgstr "SCO^životy"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "Number of times a key was lost"
-msgstr ""
+msgstr "Kolikrát byl ztracen klíč"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "SCO^losses"
-msgstr ""
+msgstr "SCO^prohry"
#: qcsrc/client/hud/panel/scoreboard.qc:111
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "Player name"
-msgstr ""
+msgstr "Jméno hráče"
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "SCO^name"
-msgstr ""
+msgstr "SCO^jméno"
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "SCO^nick"
-msgstr ""
+msgstr "SCO^přezdívka"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "Number of objectives destroyed"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "Ping time"
-msgstr ""
+msgstr "Čas pingu"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "SCO^ping"
-msgstr ""
+msgstr "SCO^ping"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "Packet loss"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "Number of rounds won"
-msgstr ""
+msgstr "Počet vyhraných kol"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "SCO^rounds won"
-msgstr ""
+msgstr "SCO^vyhraných kol"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "SCO^score"
-msgstr ""
+msgstr "SCO^skóre"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "Total score"
-msgstr ""
+msgstr "Celkové skóre"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "Number of suicides"
-msgstr ""
+msgstr "Počet sebevražd"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "SCO^suicides"
-msgstr ""
+msgstr "SCO^sebevraždy"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "Number of kills minus deaths"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "SCO^sum"
-msgstr ""
+msgstr "SCO^součet"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "Number of domination points taken (Domination)"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^time"
-msgstr ""
+msgstr "SCO^čas"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "Total time raced (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:313
msgid "Usage:"
-msgstr ""
+msgstr "Použití:"
#: qcsrc/client/hud/panel/scoreboard.qc:315
msgid "^2scoreboard_columns_set ^3field1 field2 ..."
#: qcsrc/client/hud/panel/scoreboard.qc:1336
msgid "Map stats:"
-msgstr ""
+msgstr "Statistiky mapy:"
#: qcsrc/client/hud/panel/scoreboard.qc:1366
msgid "Monsters killed:"
-msgstr ""
+msgstr "Zabitých monster:"
#: qcsrc/client/hud/panel/scoreboard.qc:1373
msgid "Secrets found:"
#: qcsrc/client/hud/panel/scoreboard.qc:1613
#, c-format
msgid "^3%1.0f minutes"
-msgstr ""
+msgstr "^3%1.0f minuty"
#: qcsrc/client/hud/panel/scoreboard.qc:1622
#: qcsrc/client/hud/panel/scoreboard.qc:1629
#, c-format
msgid "^5%s %s"
-msgstr ""
+msgstr "^5%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1623
#: qcsrc/client/hud/panel/scoreboard.qc:1630
#: qcsrc/client/hud/panel/scoreboard.qc:1642
#: qcsrc/client/hud/panel/scoreboard.qc:1649
msgid "SCO^points"
-msgstr ""
+msgstr "SCO^body"
#: qcsrc/client/hud/panel/scoreboard.qc:1624
#: qcsrc/client/hud/panel/scoreboard.qc:1631
#: qcsrc/client/hud/panel/scoreboard.qc:1643
#: qcsrc/client/hud/panel/scoreboard.qc:1650
msgid "SCO^is beaten"
-msgstr ""
+msgstr "SCO^je poražen"
#: qcsrc/client/hud/panel/scoreboard.qc:1641
#: qcsrc/client/hud/panel/scoreboard.qc:1648
#, c-format
msgid "^2+%s %s"
-msgstr ""
+msgstr "^2+%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1659
#, c-format
msgid "^7Map: ^2%s"
-msgstr ""
+msgstr "^7Mapa: ^2%s"
#: qcsrc/client/hud/panel/scoreboard.qc:1798
#, c-format
#: qcsrc/client/hud/panel/scoreboard.qc:1864
#, c-format
msgid "You are dead, press ^2%s^7 to respawn"
-msgstr ""
+msgstr "Jsi mrtvý, zmáčkni ^2%s^7 pro respawnutí"
#: qcsrc/client/hud/panel/timer.qc:67
msgid "WARMUP"
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:16
#: qcsrc/menu/xonotic/dialog_uid2name.qc:15
msgid "Yes"
-msgstr ""
+msgstr "Ano"
#: qcsrc/client/hud/panel/vote.qc:128 qcsrc/menu/xonotic/dialog_firstrun.qc:83
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:21
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:17
#: qcsrc/menu/xonotic/dialog_uid2name.qc:17
msgid "No"
-msgstr ""
+msgstr "Ne"
#: qcsrc/client/hud/panel/weapons.qc:546
msgid "Out of ammo"
#: qcsrc/client/main.qc:1029
msgid " m/s"
-msgstr ""
+msgstr " m/s"
#: qcsrc/client/main.qc:1031
msgid " km/h"
-msgstr ""
+msgstr " km/h"
#: qcsrc/client/main.qc:1033
msgid " mph"
-msgstr ""
+msgstr " mph"
#: qcsrc/client/main.qc:1035
msgid " knots"
#: qcsrc/client/mapvoting.qc:52
msgid " (1 vote)"
-msgstr ""
+msgstr "(1 hlas)"
#: qcsrc/client/mapvoting.qc:54
#, c-format
msgid " (%d votes)"
-msgstr ""
+msgstr " (%d hlasů)"
#: qcsrc/client/mapvoting.qc:274
msgid "Don't care"
#: qcsrc/client/mapvoting.qc:375
msgid "Vote for a map"
-msgstr ""
+msgstr "Hlasovat pro mapu"
#: qcsrc/client/mapvoting.qc:392
#, c-format
msgid "%d seconds left"
-msgstr ""
+msgstr "zbývá%d sekund"
#: qcsrc/client/mapvoting.qc:505
msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!"
#: qcsrc/common/items/item/ammo.qh:66
msgid "bullets"
-msgstr ""
+msgstr "náboje"
#: qcsrc/common/items/item/ammo.qh:96
msgid "cells"
#: qcsrc/common/items/item/ammo.qh:126
msgid "plasma"
-msgstr ""
+msgstr "plazma"
#: qcsrc/common/items/item/ammo.qh:156
msgid "rockets"
-msgstr ""
+msgstr "rakety"
#: qcsrc/common/items/item/ammo.qh:190
msgid "shells"
#: qcsrc/common/items/item/armor.qh:42
msgid "Small armor"
-msgstr ""
+msgstr "malé brnění"
#: qcsrc/common/items/item/armor.qh:80
msgid "Medium armor"
#: qcsrc/common/util.qc:1584
#, c-format
msgid "UP"
-msgstr ""
+msgstr "NAHORU"
#: qcsrc/common/util.qc:1585
#, c-format
msgid "DOWN"
-msgstr ""
+msgstr "DOLŮ"
#: qcsrc/common/util.qc:1586
#, c-format
msgid "LEFT"
-msgstr ""
+msgstr "DOLEVA"
#: qcsrc/common/util.qc:1587
#, c-format
msgid "RIGHT"
-msgstr ""
+msgstr "DOPRAVA"
#: qcsrc/common/util.qc:1593
#, c-format
msgid "MIDINOTE%d"
-msgstr ""
+msgstr "MIDI NOTA%d"
#: qcsrc/common/vehicles/cl_vehicles.qc:190
#, c-format
msgid "Press %s"
-msgstr ""
+msgstr "Zmáčkni %s"
#: qcsrc/common/vehicles/vehicle/bumblebee.qc:947
msgid "No right gunner!"
#: qcsrc/common/weapons/weapon/fireball.qh:18
msgid "Fireball"
-msgstr ""
+msgstr "Ohnivá koule"
#: qcsrc/common/weapons/weapon/hagar.qh:18
msgid "Hagar"
-msgstr ""
+msgstr "Hagar"
#: qcsrc/common/weapons/weapon/hlac.qh:18
msgid "Heavy Laser Assault Cannon"
#: qcsrc/lib/counting.qh:79
#, c-format
msgid "%dst"
-msgstr ""
+msgstr "%d."
#: qcsrc/lib/counting.qh:80
#, c-format
msgid "%dnd"
-msgstr ""
+msgstr "%d."
#: qcsrc/lib/counting.qh:81
#, c-format
msgid "%drd"
-msgstr ""
+msgstr "%d."
#: qcsrc/lib/counting.qh:82 qcsrc/lib/counting.qh:85
#, c-format
msgid "%dth"
-msgstr ""
+msgstr "%d."
#: qcsrc/lib/oo.qh:330
msgid "No description"
-msgstr ""
+msgstr "Bez popisu"
#: qcsrc/lib/spawnfunc.qh:240
#, c-format
#: qcsrc/menu/command/menu_cmd.qc:81
msgid "Available options:"
-msgstr ""
+msgstr "Dostupné možnosti:"
#: qcsrc/menu/command/menu_cmd.qc:130
msgid "Invalid command. For a list of supported commands, try menu_cmd help."
#: qcsrc/menu/item/listbox.qc:413
#, c-format
msgid "Item %d"
-msgstr ""
+msgstr "Item %d"
#: qcsrc/menu/item/textslider.qc:11 qcsrc/menu/item/textslider.qc:12
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:37
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:68
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:115
msgid "Custom"
-msgstr ""
+msgstr "Vlastní"
#: qcsrc/menu/xonotic/campaign.qc:235
#, c-format
msgid "Level %d: %s"
-msgstr ""
+msgstr "Level %d: %s"
#: qcsrc/menu/xonotic/credits.qc:4
msgid "Core Team"
#: qcsrc/menu/xonotic/credits.qc:48
msgid "Website"
-msgstr ""
+msgstr "Stránka"
#: qcsrc/menu/xonotic/credits.qc:53
msgid "Stats"
-msgstr ""
+msgstr "Statistiky"
#: qcsrc/menu/xonotic/credits.qc:57
msgid "Art"
#: qcsrc/menu/xonotic/credits.qc:65
msgid "Animation"
-msgstr ""
+msgstr "Animace"
#: qcsrc/menu/xonotic/credits.qc:69
msgid "Level Design"
-msgstr ""
+msgstr "Design levelů"
#: qcsrc/menu/xonotic/credits.qc:92
msgid "Music / Sound FX"
-msgstr ""
+msgstr "Hudba / Zvuky FX"
#: qcsrc/menu/xonotic/credits.qc:108
msgid "Game Code"
-msgstr ""
+msgstr "Kód hry"
#: qcsrc/menu/xonotic/credits.qc:116
msgid "Marketing / PR"
#: qcsrc/menu/xonotic/cvarlist.qc:79 qcsrc/menu/xonotic/cvarlist.qc:89
msgid "will not be saved"
-msgstr ""
+msgstr "nebude uloženo"
#: qcsrc/menu/xonotic/cvarlist.qc:84
msgid "will be saved to config.cfg"
-msgstr ""
+msgstr "bude uloženo do config.cfg"
#: qcsrc/menu/xonotic/cvarlist.qc:93
msgid "private"
-msgstr ""
+msgstr "soukromé"
#: qcsrc/menu/xonotic/cvarlist.qc:95
msgid "engine setting"
-msgstr ""
+msgstr "nastavení enginu"
#: qcsrc/menu/xonotic/cvarlist.qc:97
msgid "read only"
-msgstr ""
+msgstr "jen ke čtení"
#: qcsrc/menu/xonotic/dialog_credits.qc:13
#: qcsrc/menu/xonotic/dialog_monstertools.qc:38
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:75
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qc:14
msgid "OK"
-msgstr ""
+msgstr "OK"
#: qcsrc/menu/xonotic/dialog_credits.qh:7
msgid "Credits"
"player name to get started. You can change these options later through the "
"menu system."
msgstr ""
+"Vítej v Xonotic, abys mohl začít, vyber si prosím svůj jazyk a zvol si "
+"jméno. Tyto možnosti si potom můžeš změnit v nastavení."
#: qcsrc/menu/xonotic/dialog_firstrun.qc:45
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:28
msgid "Name:"
-msgstr ""
+msgstr "Jméno:"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:53
#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:64
msgid "Name under which you will appear in the game"
-msgstr ""
+msgstr "Jméno pod kterým budeš vystupovat ve hře"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:69
msgid "Text language:"
-msgstr ""
+msgstr "Jazyk textu:"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:78
msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:84
msgid "Undecided"
-msgstr ""
+msgstr "Nerozhodnutý"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:88
msgid "Save settings"
-msgstr ""
+msgstr "Uložit nastavení"
#: qcsrc/menu/xonotic/dialog_firstrun.qh:6
msgid "Welcome"
-msgstr ""
+msgstr "Vítej"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:18
msgid "Ammunition display:"
#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:21
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:57
msgid "Left"
-msgstr ""
+msgstr "Levý"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:34
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:34
#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:23
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:59
msgid "Right"
-msgstr ""
+msgstr "Pravý"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qh:6
msgid "Ammo Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:22
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:71
msgid "Center"
-msgstr ""
+msgstr "Střed"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:37
msgid "Font scale:"
-msgstr ""
+msgstr "Škála písma"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qh:6
msgid "Centerprint Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:20
msgid "Chat size:"
-msgstr ""
+msgstr "Velikost chatu:"
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:24
msgid "Chat lifetime:"
-msgstr ""
+msgstr "Životnost chatu:"
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:28
msgid "Chat beep sound"
-msgstr ""
+msgstr "Zvuk pípnutí chatu"
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qh:6
msgid "Chat Panel"
-msgstr ""
+msgstr "Panel chatu"
#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:16
msgid "Engine info:"
-msgstr ""
+msgstr "Info o enginu:"
#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:19
msgid "Use an averaging algorithm for fps"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:17
msgid "Combine health and armor"
-msgstr ""
+msgstr "Kombinovat životy a brnění"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:19
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:28
#: qcsrc/menu/xonotic/util.qc:778 qcsrc/menu/xonotic/util.qc:794
#: qcsrc/menu/xonotic/util.qc:811
msgid "Disable"
-msgstr ""
+msgstr "Zákázat"
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:17
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:15
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
msgid "Text/icon ratio:"
-msgstr ""
+msgstr "Poměr textu/ikon:"
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
msgid "Hide spawned items"
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
msgid "Dynamic size"
-msgstr ""
+msgstr "Dynamická velikost"
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qh:6
msgid "Items Time Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:17
msgid "Notifications:"
-msgstr ""
+msgstr "Notifikace:"
#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:20
msgid "Also print notifications to the console"
#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qh:6
msgid "Notification Panel"
-msgstr ""
+msgstr "Panel notifikací"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:16
#: qcsrc/menu/xonotic/util.qc:766
msgid "Enable"
-msgstr ""
+msgstr "Povolit"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:17
msgid "Enable even observing"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:37
msgid "Speed:"
-msgstr ""
+msgstr "Rychlost:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:38
msgid "Include vertical speed"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:51
msgid "qu/s"
-msgstr ""
+msgstr "qu/s"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:52
msgid "m/s"
-msgstr ""
+msgstr "m/s"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:53
msgid "km/h"
-msgstr ""
+msgstr "km/h"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:54
msgid "mph"
-msgstr ""
+msgstr "mph"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:55
msgid "knots"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:57
msgid "Show"
-msgstr ""
+msgstr "Ukázat"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:60
msgid "Top speed"
-msgstr ""
+msgstr "Nejvyšší rychlost"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:66
msgid "Acceleration:"
-msgstr ""
+msgstr "Zrychlování:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:67
msgid "Include vertical acceleration"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qh:6
msgid "Physics Panel"
-msgstr ""
+msgstr "Panel fyziky"
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qh:6
msgid "Powerups Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:16
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:17
msgid "Always enable"
-msgstr ""
+msgstr "Vždy povolit"
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:23
msgid "Forced aspect:"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:23
msgid "Radar:"
-msgstr ""
+msgstr "Radar:"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:26
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:68
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:32
msgid "Forward"
-msgstr ""
+msgstr "Vpřed"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:33
msgid "West"
-msgstr ""
+msgstr "Západ"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:34
msgid "South"
-msgstr ""
+msgstr "Jih"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:35
msgid "East"
-msgstr ""
+msgstr "Východ"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:36
msgid "North"
-msgstr ""
+msgstr "Sever"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:40
msgid "Scale:"
-msgstr ""
+msgstr "Škála:"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:44
msgid "Zoom mode:"
-msgstr ""
+msgstr "Režim přibližování:"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
msgid "Zoomed in"
-msgstr ""
+msgstr "Přiblížen"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
msgid "Zoomed out"
-msgstr ""
+msgstr "Oddálený"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
msgid "Always zoomed"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:40
msgid "Up"
-msgstr ""
+msgstr "Nahoru"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:44
msgid "Down"
-msgstr ""
+msgstr "Dolů"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:50
msgid "Use priority list for weapon cycling"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:53
msgid "Cycle through only usable weapon selections"
-msgstr ""
+msgstr "Cyklovat jen mezi použitelnými výběry zbraní"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:57
msgid "Auto switch weapons on pickup"
-msgstr ""
+msgstr "Automaticky měnit zbraň po sebrání"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:58
msgid ""
"Automatically switch to newly picked up weapons if they are better than what "
"you are carrying"
msgstr ""
+"Automaticky změnit na právě sebranou zbraň, jestli je novější lepší než "
+"starší"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:61
msgid "Release attack buttons when you switch weapons"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:34
msgid "Key Bindings"
-msgstr ""
+msgstr "Klávesové zkratky"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:38
msgid "Change key..."
-msgstr ""
+msgstr "Změnit klávesu"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:42
msgid "Edit..."
-msgstr ""
+msgstr "Upravit"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:48
msgid "Clear"
-msgstr ""
+msgstr "Vymazat"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:53
msgid "Reset all"
-msgstr ""
+msgstr "Resetovat vše"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:58
msgid "Mouse"
-msgstr ""
+msgstr "Myš"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:60
msgid "Sensitivity:"
-msgstr ""
+msgstr "Sensitivita:"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:62
msgid "Mouse speed multiplier"
-msgstr ""
+msgstr "Násobič rychlosti myši"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:64
msgid "Smooth aiming"
-msgstr ""
+msgstr "Jemné míření"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:65
msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:67
msgid "Invert aiming"
-msgstr ""
+msgstr "Invertovat míření"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:68
msgid "Invert mouse movement on the Y-axis"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:75
msgid "Enable built in mouse acceleration"
-msgstr ""
+msgstr "Použít zabudované zrychlení myši"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:79
#: qcsrc/menu/xonotic/dialog_settings_input.qc:83
#: qcsrc/menu/xonotic/dialog_settings_input.qc:86
msgid "Disable system mouse acceleration"
-msgstr ""
+msgstr "Zakázat systémové zrychlení myši"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:80
msgid "Make use of DGA mouse input"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
msgid "Air only"
-msgstr ""
+msgstr "Jen vzduch"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:104
msgid "JPJUMP^All"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:115
#: qcsrc/menu/xonotic/dialog_settings_input.qc:120
msgid "Use joystick input"
-msgstr ""
+msgstr "Použít vstup joysticku"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:31
msgid "Command when pressed:"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:40
msgid "Cancel"
-msgstr ""
+msgstr "Zrušit"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qh:7
msgid "User defined key bind"
-msgstr ""
+msgstr "Uživatelem definovaná kláv. zkratka"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:11
#, c-format
msgid "%d fps"
-msgstr ""
+msgstr "%d fps"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:12
#, c-format
msgid "%d KB/s"
-msgstr ""
+msgstr "%d KB/s"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:13
#, c-format
msgid "%d MB/s"
-msgstr ""
+msgstr "%d MB/s"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:27
msgid "Network"
-msgstr ""
+msgstr "Síť"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:29
msgid "Client UDP port:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:36
msgid "Specify your network speed"
-msgstr ""
+msgstr "Upřesní svou rychlost internetu"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
msgid "56k"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:38
msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
msgid "Slow ADSL"
-msgstr ""
+msgstr "Pomalé ADSL"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:40
msgid "Fast ADSL"
-msgstr ""
+msgstr "Rychlé ADSL"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:41
msgid "Broadband"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:52
msgid "Downloads:"
-msgstr ""
+msgstr "Stahování:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:54
msgid "Maximum number of concurrent HTTP/FTP downloads"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:56
msgid "Download speed:"
-msgstr ""
+msgstr "Rychlost stahování:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:69
msgid "Local latency:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:87
msgid "Maximum:"
-msgstr ""
+msgstr "Maximum:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:99
msgid "MAXFPS^Unlimited"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:102
msgid "Target:"
-msgstr ""
+msgstr "Cíl:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:104
msgid "TRGT^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:129
msgid "Show frames per second"
-msgstr ""
+msgstr "Ukázat snímky za sekundu"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:130
msgid "Show your rendered frames per second"
-msgstr ""
+msgstr "Ukáže tvé vyrenderované snímky za sekundu"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:135
msgid "Menu tooltips:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:143
msgid "Show current date and time"
-msgstr ""
+msgstr "Ukázat aktuální datum a čas"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:144
msgid "Show current date and time of day, useful on screenshots"
-msgstr ""
+msgstr "Ukázat aktuální datum a čas, užitečné na snímcích obrazovky"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:147
msgid "Enable developer mode"
-msgstr ""
+msgstr "Povolit vývojářský režim"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:151
msgid "Advanced settings..."
-msgstr ""
+msgstr "Pokročilé nastavení..."
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:152
msgid "Advanced settings where you can tweak every single variable of the game"
-msgstr ""
+msgstr "Pokročilé nastavení, kde můžeš měnit každou proměnou ve hře"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:157
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qh:6
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
msgid "Cvar filter:"
-msgstr ""
+msgstr "Filtr cvar:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:38
msgid "Modified cvars only"
-msgstr ""
+msgstr "Jen modifikované cvary"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:45
msgid "Setting:"
-msgstr ""
+msgstr "Nastavení:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:49
msgid "Type:"
-msgstr ""
+msgstr "Typ:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:53
msgid "Value:"
-msgstr ""
+msgstr "Hodnota:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:70
msgid "Description:"
-msgstr ""
+msgstr "Popis:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qh:7
msgid "Advanced settings"
-msgstr ""
+msgstr "Pokročilé nastavení"
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:11
msgid "Are you sure you want to reset all settings?"
-msgstr ""
+msgstr "Jsi si jistý, že chceš resetovat všechna nastavení?"
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:13
msgid "This will create a backup config in your data directory"
-msgstr ""
+msgstr "Tohle vytvoří zálohu configu v tvé data složce"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:25
msgid "Menu Skins"
-msgstr ""
+msgstr "Skiny menu"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:64
msgid "Text Language"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:69
msgid "Set language"
-msgstr ""
+msgstr "Nastavit jazyk"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:74
msgid "Disable gore effects and harsh language"
-msgstr ""
+msgstr "Zakázat násilí a sprostý jazyk"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:75
msgid "Replace blood and gibs with content that does not have any gore effects"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
msgid "Disconnect now"
-msgstr ""
+msgstr "Odpojit teď"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
msgid "Switch language"
-msgstr ""
+msgstr "Změnit jazyk"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qh:6
msgid "Warning"
-msgstr ""
+msgstr "Varování"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:33
msgid "Resolution:"
-msgstr ""
+msgstr "Rozlišení:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:37
msgid "Font/UI size:"
-msgstr ""
+msgstr "Velikost písma/UI"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:39
msgid "SZ^Unreadable"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:51
msgid "Color depth:"
-msgstr ""
+msgstr "Hloubka barev:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:53
msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:54
msgid "16bit"
-msgstr ""
+msgstr "16bitový"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:55
msgid "32bit"
-msgstr ""
+msgstr "32bitový"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:59
msgid "Full screen"
-msgstr ""
+msgstr "Celá obrazovka"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:61
msgid "Vertical Synchronization"
-msgstr ""
+msgstr "Vertikální synchronizace"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:62
msgid ""
#: qcsrc/menu/xonotic/dialog_settings_video.qc:73
msgid "Anisotropic filtering quality"
-msgstr ""
+msgstr "Kvalita anizotropního filtrování"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:74
msgid "ANISO^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:75
#: qcsrc/menu/xonotic/dialog_settings_video.qc:86
msgid "2x"
-msgstr ""
+msgstr "2x"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:76
#: qcsrc/menu/xonotic/dialog_settings_video.qc:87
msgid "4x"
-msgstr ""
+msgstr "4x"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:77
msgid "8x"
-msgstr ""
+msgstr "8x"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:78
msgid "16x"
-msgstr ""
+msgstr "16x"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:81
msgid "Antialiasing:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:97
msgid "Depth first:"
-msgstr ""
+msgstr "Hloubka prvně:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:99
msgid ""
#: qcsrc/menu/xonotic/dialog_settings_video.qc:119
msgid "Brightness:"
-msgstr ""
+msgstr "Jas:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:121
msgid "Brightness of black"
-msgstr ""
+msgstr "Jas černé"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:123
msgid "Contrast:"
-msgstr ""
+msgstr "Kontrast:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:125
msgid "Brightness of white"
-msgstr ""
+msgstr "Jas bílé"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:127
msgid "Gamma:"
-msgstr ""
+msgstr "Gamma:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:130
msgid ""
#: qcsrc/menu/xonotic/dialog_settings_video.qc:136
msgid "By how much to multiply the contrast in dark areas"
-msgstr ""
+msgstr "Kolikati násobit kontrast v tmavých oblastech"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:139
msgid "Saturation:"
-msgstr ""
+msgstr "Sytost:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:142
msgid ""
"Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), "
"requires GLSL color control"
msgstr ""
+"Upravení sytosti (0 = černobílé, 1 = normální, 2 = přesycené), potřebuje "
+"kontrolování barev GLSL "
#: qcsrc/menu/xonotic/dialog_settings_video.qc:146
msgid "LIT^Ambient:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:150
msgid "Intensity:"
-msgstr ""
+msgstr "Intenzita:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:152
msgid "Global rendering brightness"
-msgstr ""
+msgstr "Globální jas renderování"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:155
msgid "Wait for GPU to finish each frame"
-msgstr ""
+msgstr "Počkat než GPU dokončí každý snímek"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:156
msgid ""
#: qcsrc/menu/xonotic/dialog_settings_video.qc:158
msgid "Use OpenGL 2.0 shaders (GLSL)"
-msgstr ""
+msgstr "Použít OpenGL 2.0 shadery (GLSL)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:162
msgid "Use GLSL to handle color control"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:110
msgid "Instant action! (random map with bots)"
-msgstr ""
+msgstr "Instantní akce! (náhodná mapa s boty)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:117
msgid "???"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:135
msgid "Start Singleplayer!"
-msgstr ""
+msgstr "Začít hru jednoho hráče"
#: qcsrc/menu/xonotic/dialog_singleplayer.qh:6
msgid "Singleplayer"
-msgstr ""
+msgstr "Hra jednoho hráče"
#: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
msgid "Play the singleplayer campaign or instant action matches against bots"
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qh:7
msgid "Winner"
-msgstr ""
+msgstr "Vítěz"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:32
msgid "join 'best' team (auto-select)"
-msgstr ""
+msgstr "připojit se k 'nejlepšímu' týmu (automatický výběr)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:33
msgid "Autoselect team (recommended)"
-msgstr ""
+msgstr "Automaticky vybrat tým (doporučeno)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:37
msgid "red"
-msgstr ""
+msgstr "červená"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:38
msgid "blue"
-msgstr ""
+msgstr "modrá"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:39
msgid "yellow"
-msgstr ""
+msgstr "žlutá"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:40
msgid "pink"
-msgstr ""
+msgstr "růžová"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:43
msgid "spectate"
#: qcsrc/menu/xonotic/dialog_teamselect.qh:7
msgid "Team Selection"
-msgstr ""
+msgstr "Vybírání týmů"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:10
msgid "Allow player statistics to use your nickname?"
-msgstr ""
+msgstr "Povolit používání Vaší přezdívky v hráčské statistice?"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
msgid "Answering \"No\" you will appear as \"Anonymous player\""
-msgstr ""
+msgstr "Pokud odpovíš \"ne\", objevíš se jako \"Anonymní hráč\""
#: qcsrc/menu/xonotic/gametypelist.qc:87
msgid "teamplay"
#: qcsrc/menu/xonotic/keybinder.qc:36
msgid "forward"
-msgstr ""
+msgstr "dopředu"
#: qcsrc/menu/xonotic/keybinder.qc:37
msgid "backpedal"
#: qcsrc/menu/xonotic/keybinder.qc:43
msgid "jetpack"
-msgstr ""
+msgstr "jetpack"
#: qcsrc/menu/xonotic/keybinder.qc:46
msgid "Attacking"
-msgstr ""
+msgstr "Útočení"
#: qcsrc/menu/xonotic/keybinder.qc:52
msgid "WEAPON^previous"
#: qcsrc/menu/xonotic/keybinder.qc:88
msgid "show scores"
-msgstr ""
+msgstr "ukázat skóre"
#: qcsrc/menu/xonotic/keybinder.qc:89
msgid "screen shot"
-msgstr ""
+msgstr "snímek obrazovky"
#: qcsrc/menu/xonotic/keybinder.qc:90
msgid "maximize radar"
-msgstr ""
+msgstr "maximalizovat radar"
#: qcsrc/menu/xonotic/keybinder.qc:91
msgid "3rd person view"
-msgstr ""
+msgstr "pohled 3. osoby"
#: qcsrc/menu/xonotic/keybinder.qc:92
msgid "enter spectator mode"
#: qcsrc/menu/xonotic/keybinder.qc:95
msgid "Communicate"
-msgstr ""
+msgstr "Komunikovat"
#: qcsrc/menu/xonotic/keybinder.qc:96
msgid "public chat"
-msgstr ""
+msgstr "veřejný chat"
#: qcsrc/menu/xonotic/keybinder.qc:97 qcsrc/menu/xonotic/keybinder.qc:115
msgid "team chat"
-msgstr ""
+msgstr "týmový chat"
#: qcsrc/menu/xonotic/keybinder.qc:98
msgid "show chat history"
-msgstr ""
+msgstr "ukázat historii chatu"
#: qcsrc/menu/xonotic/keybinder.qc:99
msgid "vote YES"
-msgstr ""
+msgstr "volit ANO"
#: qcsrc/menu/xonotic/keybinder.qc:100
msgid "vote NO"
-msgstr ""
+msgstr "volit NE"
#: qcsrc/menu/xonotic/keybinder.qc:104
msgid "Client"
-msgstr ""
+msgstr "Klient"
#: qcsrc/menu/xonotic/keybinder.qc:108
msgid "enter console"
-msgstr ""
+msgstr "vstoupit do konzole"
#: qcsrc/menu/xonotic/keybinder.qc:110
msgid "disconnect"
-msgstr ""
+msgstr "odpojit"
#: qcsrc/menu/xonotic/keybinder.qc:111
msgid "quit"
-msgstr ""
+msgstr "opustit"
#: qcsrc/menu/xonotic/keybinder.qc:116
msgid "auto-join team"
#: qcsrc/menu/xonotic/mainwindow.qc:65 qcsrc/menu/xonotic/mainwindow.qc:68
msgid "Do not press this button again!"
-msgstr ""
+msgstr "Neklikej znova na tohle tlačítko!"
#: qcsrc/menu/xonotic/maplist.qc:288
msgid ""
#: qcsrc/menu/xonotic/playermodel.qc:161
msgid "<no model found>"
-msgstr ""
+msgstr "<no model found>"
#: qcsrc/menu/xonotic/serverlist.qc:267
msgid "Favorite"
-msgstr ""
+msgstr "Oblíbené"
#: qcsrc/menu/xonotic/serverlist.qc:268
msgid ""
"Bookmark the currently highlighted server so that it's faster to find in the "
"future"
msgstr ""
+"Přidat označený server do záložek, aby byl jednodušší najít v budoucnosti."
#: qcsrc/menu/xonotic/serverlist.qc:747
msgid "Ping"
-msgstr ""
+msgstr "Odezva"
#: qcsrc/menu/xonotic/serverlist.qc:748
msgid "Hostname"
#: qcsrc/menu/xonotic/serverlist.qc:749
msgid "Map"
-msgstr ""
+msgstr "Mapa"
#: qcsrc/menu/xonotic/serverlist.qc:750
msgid "Type"
-msgstr ""
+msgstr "Typ"
#: qcsrc/menu/xonotic/serverlist.qc:1043
#, c-format
#: qcsrc/menu/xonotic/serverlist.qc:1043
msgid "encryption:"
-msgstr ""
+msgstr "šifrování:"
#: qcsrc/menu/xonotic/serverlist.qc:1044
#, c-format
#: qcsrc/menu/xonotic/serverlist.qc:1046
#, c-format
msgid "modified settings"
-msgstr ""
+msgstr "modifikované nastavení"
#: qcsrc/menu/xonotic/serverlist.qc:1046
#, c-format
msgid "official settings"
-msgstr ""
+msgstr "oficiální nastavení"
#: qcsrc/menu/xonotic/serverlist.qc:1048
msgid "stats disabled"
-msgstr ""
+msgstr "statistiky zakázány"
#: qcsrc/menu/xonotic/serverlist.qc:1048
msgid "stats enabled"
-msgstr ""
+msgstr "statistiky povoleny"
#: qcsrc/menu/xonotic/serverlist.qh:152
msgid "SLCAT^Favorites"
#: qcsrc/menu/xonotic/skinlist.qc:70
msgid "<TITLE>"
-msgstr ""
+msgstr "<TITLE>"
#: qcsrc/menu/xonotic/skinlist.qc:71
msgid "<AUTHOR>"
-msgstr ""
+msgstr "<AUTHOR>"
#: qcsrc/menu/xonotic/slider_decibels.qc:72
msgid "VOL^MAX"
#: qcsrc/menu/xonotic/slider_decibels.qc:82
#, c-format
msgid "%s dB"
-msgstr ""
+msgstr "%s db"
#: qcsrc/menu/xonotic/slider_particles.qc:14
msgid "PART^OMG"
#: qcsrc/menu/xonotic/slider_resolution.qc:115
msgid "Screen resolution"
-msgstr ""
+msgstr "Rozlišení obrazovky"
#: qcsrc/menu/xonotic/slider_sbfadetime.qc:13
msgid "PART^Slow"
#: qcsrc/menu/xonotic/statslist.qc:29
msgid "January"
-msgstr ""
+msgstr "Leden"
#: qcsrc/menu/xonotic/statslist.qc:30
msgid "February"
-msgstr ""
+msgstr "Únor"
#: qcsrc/menu/xonotic/statslist.qc:31
msgid "March"
-msgstr ""
+msgstr "Březen"
#: qcsrc/menu/xonotic/statslist.qc:32
msgid "April"
-msgstr ""
+msgstr "Duben"
#: qcsrc/menu/xonotic/statslist.qc:33
msgid "May"
-msgstr ""
+msgstr "Květen"
#: qcsrc/menu/xonotic/statslist.qc:34
msgid "June"
-msgstr ""
+msgstr "Červen"
#: qcsrc/menu/xonotic/statslist.qc:35
msgid "July"
-msgstr ""
+msgstr "Červenec"
#: qcsrc/menu/xonotic/statslist.qc:36
msgid "August"
-msgstr ""
+msgstr "Srpen"
#: qcsrc/menu/xonotic/statslist.qc:37
msgid "September"
-msgstr ""
+msgstr "Září"
#: qcsrc/menu/xonotic/statslist.qc:38
msgid "October"
-msgstr ""
+msgstr "Říjen"
#: qcsrc/menu/xonotic/statslist.qc:39
msgid "November"
-msgstr ""
+msgstr "Listopad"
#: qcsrc/menu/xonotic/statslist.qc:40
msgid "December"
-msgstr ""
+msgstr "Prosinec"
#: qcsrc/menu/xonotic/statslist.qc:96
msgid "Joined:"
#: qcsrc/menu/xonotic/statslist.qc:103
msgid "Last match:"
-msgstr ""
+msgstr "Poslední zápas:"
#: qcsrc/menu/xonotic/statslist.qc:110
msgid "Time played:"
-msgstr ""
+msgstr "Odehraný čas:"
#: qcsrc/menu/xonotic/statslist.qc:117 qcsrc/menu/xonotic/statslist.qc:230
msgid "Favorite map:"
-msgstr ""
+msgstr "Oblíbená mapa:"
#: qcsrc/menu/xonotic/statslist.qc:149 qcsrc/menu/xonotic/statslist.qc:201
#: qcsrc/menu/xonotic/statslist.qc:244
#, c-format
msgid "Matches:"
-msgstr ""
+msgstr "Zápasy:"
#: qcsrc/menu/xonotic/statslist.qc:154
#, c-format
msgid "Wins/Losses:"
-msgstr ""
+msgstr "Výhry/Prohry:"
#: qcsrc/menu/xonotic/statslist.qc:155
#, c-format
#: qcsrc/menu/xonotic/util.qc:417
msgid "Update can be downloaded at:"
-msgstr ""
+msgstr "Update je ke stažení na:"
#: qcsrc/menu/xonotic/util.qc:525
msgid "Autogenerating mapinfo for newly added maps..."
#: qcsrc/menu/xonotic/util.qc:574
#, c-format
msgid "Update to %s now!"
-msgstr ""
+msgstr "Updatuj na 1%s teď!"
#: qcsrc/menu/xonotic/util.qc:658
msgid ""
#: qcsrc/menu/xonotic/util.qc:788
msgid "Use default"
-msgstr ""
+msgstr "Použít výchozí"
#: qcsrc/menu/xonotic/util.qc:808
msgid "Team Color:"
-msgstr ""
+msgstr "Barva týmu:"
# Translators:
# afba88cf42cbdff57149d4a6d53a94f9, 2018
# Wuzzy <almikes@aol.com>, 2016-2018
-# Brot Brot <noah.schluessel@gmail.com>, 2015
+# TheTrueBrot <noah.schluessel@gmail.com>, 2015
# cvcxc <hans.andersen72@yahoo.com>, 2013
# divVerent <divVerent@xonotic.org>, 2011,2013
# divVerent <divVerent@xonotic.org>, 2013-2015
# divVerent <divVerent@xonotic.org>, 2011
# Sless <sless@gmx.net>, 2014
# Sless <sless@gmx.net>, 2014
+# TheTrueBrot <noah.schluessel@gmail.com>, 2015
# Wuzzy <almikes@aol.com>, 2016
# Yepoleb <huberg18@gmail.com>, 2013
msgid ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-05-23 12:22+0000\n"
-"Last-Translator: Mirio <opivy@hotmail.de>\n"
+"PO-Revision-Date: 2019-11-09 23:02+0000\n"
+"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: German (http://www.transifex.com/team-xonotic/xonotic/"
"language/de/)\n"
"Language: de\n"
#: qcsrc/client/hud/panel/infomessages.qc:164
#, c-format
msgid "%sPress ^3%s%s once you are ready"
-msgstr "%sDrücke ^3%s%s, sobald Du bereit bist"
+msgstr "%sDrücke ^3%s%s, sobald du bereit bist"
#: qcsrc/client/hud/panel/infomessages.qc:169
msgid "^2Waiting for others to ready up to end warmup..."
#: qcsrc/client/hud/panel/infomessages.qc:229
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
-msgstr "^3CTRL^7, um Kollisionstests zu deaktivieren, ^3SHIFT ^7und"
+msgstr "^3STRG^7, um Kollisionstests zu deaktivieren, ^3UMSCHALT ^7und"
#: qcsrc/client/hud/panel/infomessages.qc:230
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^:-) / nice one"
-msgstr ":-) / gut gemacht"
+msgstr "QMCMD^:-) / gut gemacht"
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^nice one"
-msgstr "gut gemacht"
+msgstr "QMCMD^Gut gemacht"
#: qcsrc/client/hud/panel/quickmenu.qc:784
msgid "QMCMD^good game"
-msgstr "gutes Spiel"
+msgstr "QMCMD^Gut gespielt"
#: qcsrc/client/hud/panel/quickmenu.qc:785
msgid "QMCMD^hi / good luck"
-msgstr "Hallo / Viel Glück"
+msgstr "QMCMD^Hallo / Viel Glück"
#: qcsrc/client/hud/panel/quickmenu.qc:785
msgid "QMCMD^hi / good luck and have fun"
-msgstr "Hallo / Viel Glück und habt Spaß"
+msgstr "QMCMD^Hallo / Viel Glück und habt Spaß"
#: qcsrc/client/hud/panel/quickmenu.qc:787
msgid "QMCMD^Send in English"
-msgstr "QMCMD^Sende in Englisch"
+msgstr "QMCMD^Auf Englisch senden"
#: qcsrc/client/hud/panel/quickmenu.qc:792
#: qcsrc/client/hud/panel/quickmenu.qc:808
msgid "QMCMD^Team chat"
-msgstr "Teamchat"
+msgstr "QMCMD^Teamchat"
#: qcsrc/client/hud/panel/quickmenu.qc:793
msgid "QMCMD^quad soon"
-msgstr "Quad kommt bald"
+msgstr "QMCMD^Quad kommt bald"
#: qcsrc/client/hud/panel/quickmenu.qc:794
msgid "QMCMD^free item %x^7 (l:%y^7)"
-msgstr "freier Gegenstand %x^7 (l:%y^7)"
+msgstr "QMCMD^Freier Gegenstand %x^7 (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:794
msgid "QMCMD^free item, icon"
-msgstr "freier Gegenstand, Icon"
+msgstr "QMCMD^Freier Gegenstand, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:795
msgid "QMCMD^took item (l:%l^7)"
-msgstr "Gegenstand genommen (l:%l^7)"
+msgstr "QMCMD^Gegenstand genommen (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:795
msgid "QMCMD^took item, icon"
-msgstr "Gegenstand genommen, Icon"
+msgstr "QMCMD^Gegenstand genommen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:796
msgid "QMCMD^negative"
-msgstr "Negativ"
+msgstr "QMCMD^Negativ"
#: qcsrc/client/hud/panel/quickmenu.qc:797
msgid "QMCMD^positive"
-msgstr "Positiv"
+msgstr "QMCMD^Positiv"
#: qcsrc/client/hud/panel/quickmenu.qc:798
msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "brauche Hilfe (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Brauche Hilfe (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:798
msgid "QMCMD^need help, icon"
-msgstr "brauche Hilfe, Icon"
+msgstr "QMCMD^Brauche Hilfe, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:799
msgid "QMCMD^enemy seen (l:%y^7)"
-msgstr "Gegner gesehen (l:%y^7)"
+msgstr "QMCMD^Gegner gesehen (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:799
msgid "QMCMD^enemy seen, icon"
-msgstr "Gegner gesehen, icon"
+msgstr "QMCMD^Gegner gesehen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:800
msgid "QMCMD^flag seen (l:%y^7)"
-msgstr "Flagge gesehen (l:%y^7)"
+msgstr "QMCMD^Flagge gesehen (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:800
msgid "QMCMD^flag seen, icon"
-msgstr "Flagge gesehen, Icon"
+msgstr "QMCMD^Flagge gesehen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:801
msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "verteidigen (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Verteidigend (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:801
msgid "QMCMD^defending, icon"
-msgstr "verteidigen, Icon"
+msgstr "QMCMD^Verteidigend, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:802
msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "wandernd (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Wandernd (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:802
msgid "QMCMD^roaming, icon"
-msgstr "wandernd, Icon"
+msgstr "QMCMD^Wandernd, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:803
msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "angreifen (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Angreifend (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:803
msgid "QMCMD^attacking, icon"
-msgstr "angreifen, Icon"
+msgstr "QMCMD^Angreifend, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^killed flagcarrier (l:%y^7)"
-msgstr "Flaggenträger getötet (l:%y^7)"
+msgstr "QMCMD^Flaggenträger getötet (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^killed flagcarrier, icon"
-msgstr "Flaggenträger getötet, Icon"
+msgstr "QMCMD^Flaggenträger getötet, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:805
#, c-format
msgid "QMCMD^dropped flag (l:%d^7)"
-msgstr "Flagge fallen gelassen (l:%d^7)"
+msgstr "QMCMD^Flagge weggeworfen (l:%d^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:805
msgid "QMCMD^dropped flag, icon"
-msgstr "Flagge fallen gelassen, Icon"
+msgstr "QMCMD^Flagge weggeworfen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^drop weapon, icon"
-msgstr "Waffe wegwerfen, Icon"
+msgstr "QMCMD^Waffe weggeworfen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^dropped weapon %w^7 (l:%l^7)"
-msgstr "Waffe fallen gelassen %w^7 (l:%l^7)"
+msgstr "QMCMD^Waffe weggeworfen %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^drop flag/key, icon"
-msgstr "Flagge/Schlüssel fallen gelassen, Icon"
+msgstr "QMCMD^Flagge/Schlüssel weggeworfen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
-msgstr "Flagge/Schlüssel fallen gelassen %w^7 (l:%l^7)"
+msgstr "QMCMD^Flagge/Schlüssel weggeworfen %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:811
msgid "QMCMD^Send private message to"
-msgstr "Sende private Nachricht an"
+msgstr "QMCMD^Sende private Nachricht an"
#: qcsrc/client/hud/panel/quickmenu.qc:813
#: qcsrc/client/hud/panel/quickmenu.qc:848
msgid "QMCMD^Settings"
-msgstr "Einstellungen"
+msgstr "QMCMD^Einstellungen"
#: qcsrc/client/hud/panel/quickmenu.qc:814
#: qcsrc/client/hud/panel/quickmenu.qc:821
msgid "QMCMD^View/HUD settings"
-msgstr "Ansicht/HUD-Einstellungen"
+msgstr "QMCMD^Ansicht/HUD-Einstellungen"
#: qcsrc/client/hud/panel/quickmenu.qc:815
msgid "QMCMD^3rd person view"
-msgstr "Dritte-Person-Ansicht"
+msgstr "QMCMD^Dritte-Person-Ansicht"
#: qcsrc/client/hud/panel/quickmenu.qc:816
msgid "QMCMD^Player models like mine"
-msgstr "Spielermodelle wie meins"
+msgstr "QMCMD^Spielermodelle wie meins"
#: qcsrc/client/hud/panel/quickmenu.qc:817
msgid "QMCMD^Names above players"
-msgstr "Namen über Spieler"
+msgstr "QMCMD^Namen über Spieler"
#: qcsrc/client/hud/panel/quickmenu.qc:818
msgid "QMCMD^Crosshair per weapon"
-msgstr "Fadenkreuz je nach Waffe"
+msgstr "QMCMD^Fadenkreuz je nach Waffe"
#: qcsrc/client/hud/panel/quickmenu.qc:819
msgid "QMCMD^FPS"
-msgstr "FPS"
+msgstr "QMCMD^FPS"
#: qcsrc/client/hud/panel/quickmenu.qc:820
msgid "QMCMD^Net graph"
-msgstr "Netzwerkgraph"
+msgstr "QMCMD^Netzwerkgraph"
#: qcsrc/client/hud/panel/quickmenu.qc:823
#: qcsrc/client/hud/panel/quickmenu.qc:826
msgid "QMCMD^Sound settings"
-msgstr "Ton-Einstellungen"
+msgstr "QMCMD^Ton-Einstellungen"
#: qcsrc/client/hud/panel/quickmenu.qc:824
msgid "QMCMD^Hit sound"
-msgstr "Ton bei Treffer"
+msgstr "QMCMD^Ton bei Treffer"
#: qcsrc/client/hud/panel/quickmenu.qc:825
msgid "QMCMD^Chat sound"
-msgstr "Chat-Ton"
+msgstr "QMCMD^Chat-Ton"
#: qcsrc/client/hud/panel/quickmenu.qc:830
#: qcsrc/client/hud/panel/quickmenu.qc:834
msgid "QMCMD^Spectator camera"
-msgstr "Zuschauerkamera"
+msgstr "QMCMD^Zuschauerkamera"
#: qcsrc/client/hud/panel/quickmenu.qc:831
msgid "QMCMD^1st person"
-msgstr "Ego-Perspektive"
+msgstr "QMCMD^Ego-Perspektive"
#: qcsrc/client/hud/panel/quickmenu.qc:832
msgid "QMCMD^3rd person around player"
-msgstr "Dritte-Person-Ansicht um Spieler"
+msgstr "QMCMD^Dritte-Person-Ansicht um Spieler"
#: qcsrc/client/hud/panel/quickmenu.qc:833
msgid "QMCMD^3rd person behind"
-msgstr "Dritte-Person-Ansicht (hinter)"
+msgstr "QMCMD^Dritte-Person-Ansicht (hinter)"
#: qcsrc/client/hud/panel/quickmenu.qc:839
#: qcsrc/client/hud/panel/quickmenu.qc:844
msgid "QMCMD^Observer camera"
-msgstr "Beobachterkamera"
+msgstr "QMCMD^Beobachterkamera"
#: qcsrc/client/hud/panel/quickmenu.qc:840
msgid "QMCMD^Increase speed"
-msgstr "Tempo erhöhen"
+msgstr "QMCMD^Tempo erhöhen"
#: qcsrc/client/hud/panel/quickmenu.qc:841
msgid "QMCMD^Decrease speed"
-msgstr "Tempo verringern"
+msgstr "QMCMD^Tempo verringern"
#: qcsrc/client/hud/panel/quickmenu.qc:842
msgid "QMCMD^Wall collision off"
-msgstr "Wandkollision aus"
+msgstr "QMCMD^Wandkollision aus"
#: qcsrc/client/hud/panel/quickmenu.qc:843
msgid "QMCMD^Wall collision on"
-msgstr "Wandkollision an"
+msgstr "QMCMD^Wandkollision an"
#: qcsrc/client/hud/panel/quickmenu.qc:847
msgid "QMCMD^Fullscreen"
-msgstr "Vollbild"
+msgstr "QMCMD^Vollbild"
#: qcsrc/client/hud/panel/quickmenu.qc:850
#: qcsrc/client/hud/panel/quickmenu.qc:860
msgid "QMCMD^Call a vote"
-msgstr "Abstimmung starten"
+msgstr "QMCMD^Abstimmung starten"
#: qcsrc/client/hud/panel/quickmenu.qc:851
msgid "QMCMD^Restart the map"
-msgstr "Karte neustarten"
+msgstr "QMCMD^Karte neustarten"
#: qcsrc/client/hud/panel/quickmenu.qc:852
msgid "QMCMD^End match"
-msgstr "Spiel beenden"
+msgstr "QMCMD^Spiel beenden"
#: qcsrc/client/hud/panel/quickmenu.qc:855
msgid "QMCMD^Reduce match time"
-msgstr "Spielzeit verringern"
+msgstr "QMCMD^Spielzeit verringern"
#: qcsrc/client/hud/panel/quickmenu.qc:856
msgid "QMCMD^Extend match time"
-msgstr "Spielzeit erhöhen"
+msgstr "QMCMD^Spielzeit erhöhen"
#: qcsrc/client/hud/panel/quickmenu.qc:859
msgid "QMCMD^Shuffle teams"
-msgstr "Teams mischen"
+msgstr "QMCMD^Teams mischen"
#: qcsrc/client/hud/panel/racetimer.qc:54
#, c-format
#: qcsrc/client/hud/panel/racetimer.qc:154 qcsrc/client/main.qc:1129
msgid "missing a checkpoint"
-msgstr "einen Checkpoint verpasst"
+msgstr "einen Kontrollpunkt verpasst"
#: qcsrc/client/hud/panel/radar.qc:373
msgid "Click to select teleport destination"
#: qcsrc/client/hud/panel/scoreboard.qc:87
msgid "SCO^bckills"
-msgstr "bbkills"
+msgstr "Bbkills"
#: qcsrc/client/hud/panel/scoreboard.qc:88
msgid "SCO^bctime"
-msgstr "bbzeit"
+msgstr "Bbzeit"
#: qcsrc/client/hud/panel/scoreboard.qc:88
msgid "Total amount of time holding the ball in Keepaway"
#: qcsrc/client/hud/panel/scoreboard.qc:89
msgid "SCO^caps"
-msgstr "caps"
+msgstr "Caps"
#: qcsrc/client/hud/panel/scoreboard.qc:90
msgid "SCO^captime"
-msgstr "capzeit"
+msgstr "Capzeit"
#: qcsrc/client/hud/panel/scoreboard.qc:90
msgid "Time of fastest capture (CTF)"
#: qcsrc/client/hud/panel/scoreboard.qc:91
msgid "SCO^deaths"
-msgstr "tode"
+msgstr "Tode"
#: qcsrc/client/hud/panel/scoreboard.qc:92
msgid "Number of keys destroyed by pushing them into void"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "SCO^damage"
-msgstr "schaden"
+msgstr "Schaden"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "The total damage done"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "SCO^dmgtaken"
-msgstr "scherhal"
+msgstr "Scherhal"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "The total damage taken"
-msgstr "Erhaltenen Gesamtschaden"
+msgstr "Erhaltener Gesamtschaden"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "Number of flag drops"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "SCO^drops"
-msgstr "fallen"
+msgstr "Falleng"
#: qcsrc/client/hud/panel/scoreboard.qc:96
msgid "Player ELO"
-msgstr "Spieler-ELO"
+msgstr "Spieler-Elo"
#: qcsrc/client/hud/panel/scoreboard.qc:96
msgid "SCO^elo"
-msgstr "elo"
+msgstr "Elo"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "SCO^fastest"
-msgstr "schnellste"
+msgstr "Schnellste"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "Time of fastest lap (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:99
msgid "SCO^fckills"
-msgstr "fckills"
+msgstr "Ftkills"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "SCO^fps"
-msgstr "fps"
+msgstr "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:101
msgid "Number of kills minus suicides"
#: qcsrc/client/hud/panel/scoreboard.qc:101
msgid "SCO^frags"
-msgstr "frags"
+msgstr "Frags"
#: qcsrc/client/hud/panel/scoreboard.qc:102
msgid "Number of goals scored"
#: qcsrc/client/hud/panel/scoreboard.qc:102
msgid "SCO^goals"
-msgstr "tore"
+msgstr "Tore"
#: qcsrc/client/hud/panel/scoreboard.qc:103
msgid "Number of keys carrier kills"
#: qcsrc/client/hud/panel/scoreboard.qc:103
msgid "SCO^kckills"
-msgstr "kckills"
+msgstr "Stkills"
#: qcsrc/client/hud/panel/scoreboard.qc:104
msgid "SCO^k/d"
-msgstr "k/d"
+msgstr "K/T"
#: qcsrc/client/hud/panel/scoreboard.qc:104
#: qcsrc/client/hud/panel/scoreboard.qc:105
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "SCO^kdr"
-msgstr "kdr"
+msgstr "KTV"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "SCO^kdratio"
-msgstr "kdratio"
+msgstr "KT-Verh."
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "Number of kills"
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "SCO^kills"
-msgstr "kills"
+msgstr "Kills"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "Number of laps finished (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "SCO^laps"
-msgstr "runden"
+msgstr "Runden"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "Number of lives (LMS)"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "SCO^lives"
-msgstr "leben"
+msgstr "Leben"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "Number of times a key was lost"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "SCO^losses"
-msgstr "verloren"
+msgstr "Verlor"
#: qcsrc/client/hud/panel/scoreboard.qc:111
#: qcsrc/client/hud/panel/scoreboard.qc:112
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "SCO^name"
-msgstr "name"
+msgstr "Name"
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "SCO^nick"
-msgstr "nick"
+msgstr "Nick"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "Number of objectives destroyed"
-msgstr "Anzahl an zerstörten Zielen"
+msgstr "Anzahl an zerstörten Angriffszielen"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "SCO^objectives"
-msgstr "ziele"
+msgstr "Ziele"
#: qcsrc/client/hud/panel/scoreboard.qc:114
msgid ""
#: qcsrc/client/hud/panel/scoreboard.qc:114
msgid "SCO^pickups"
-msgstr "aufheb"
+msgstr "Aufheb"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "Ping time"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "SCO^ping"
-msgstr "ping"
+msgstr "Ping"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "Packet loss"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "SCO^pl"
-msgstr "pl"
+msgstr "Pv"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "Number of players pushed into void"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "SCO^pushes"
-msgstr "schubser"
+msgstr "Schubser"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "Player rank"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "SCO^rank"
-msgstr "rang"
+msgstr "Rang"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "Number of flag returns"
#: qcsrc/client/hud/panel/scoreboard.qc:120
msgid "SCO^revivals"
-msgstr "wiederbelebungen"
+msgstr "Wiederbe"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "Number of rounds won"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "SCO^rounds won"
-msgstr "gewonnene Runden"
+msgstr "Rundensiege"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "SCO^score"
-msgstr "punkte"
+msgstr "Punkte"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "Total score"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "SCO^suicides"
-msgstr "suizide"
+msgstr "Suizide"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "Number of kills minus deaths"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "SCO^sum"
-msgstr "summe"
+msgstr "Summe"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "Number of domination points taken (Domination)"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "SCO^takes"
-msgstr "takes"
+msgstr "erobert"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "Number of teamkills"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "SCO^teamkills"
-msgstr "teamkills"
+msgstr "Teamkills"
#: qcsrc/client/hud/panel/scoreboard.qc:127
msgid "Number of ticks (Domination)"
-msgstr "Anzahl Ticks (Domination)"
+msgstr "Anzahl der Ticks/Zeiteinheiten (Domination)"
#: qcsrc/client/hud/panel/scoreboard.qc:127
msgid "SCO^ticks"
-msgstr "ticks"
+msgstr "Ticks"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^time"
-msgstr "zeit"
+msgstr "Zeit"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "Total time raced (Race/CTS)"
"it into the cvar scoreboard_columns so you can edit it"
msgstr ""
"^2scoreboard_columns_set ^3expand_default ^7lädt das Standard-Layout und "
-"expandiert es in die cvar scoreboard_columns, damit Du sie bearbeiten kannst"
+"expandiert es in die cvar scoreboard_columns, damit du sie bearbeiten kannst"
#: qcsrc/client/hud/panel/scoreboard.qc:319
msgid "You can use a ^3|^7 to start the right-aligned fields."
"or in all but these game types. You can also specify 'all' as a\n"
"field to show all fields available for the current game mode."
msgstr ""
-"Vor einem Feld kannst Du ein Plus- oder Minuszeichen setzen, dann\n"
+"Vor einem Feld kannst du ein Plus- oder Minuszeichen setzen, dann\n"
"eine kommagetrennte Liste an Spieltypen, dann ein Schrägstrich,\n"
"um das Feld nur in diesen oder in allen außer diesen Spieltypen\n"
"anzuzeigen. Du kannst außerdem „all“ als ein Feld angeben, um\n"
#: qcsrc/client/hud/panel/scoreboard.qc:1188
#, c-format
msgid "Accuracy stats (average %d%%)"
-msgstr "Genauigkeit (Durchschn.: %d%%)"
+msgstr "Genauigkeitsstatistik (Durchschnitt: %d%%)"
#: qcsrc/client/hud/panel/scoreboard.qc:1336
msgid "Map stats:"
#: qcsrc/client/hud/panel/scoreboard.qc:1629
#, c-format
msgid "^5%s %s"
-msgstr "^5%s%s"
+msgstr "^5%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1623
#: qcsrc/client/hud/panel/scoreboard.qc:1630
#: qcsrc/client/hud/panel/scoreboard.qc:1643
#: qcsrc/client/hud/panel/scoreboard.qc:1650
msgid "SCO^is beaten"
-msgstr "wurde geschlagen"
+msgstr "geschlagen"
#: qcsrc/client/hud/panel/scoreboard.qc:1641
#: qcsrc/client/hud/panel/scoreboard.qc:1648
#, c-format
msgid "^2+%s %s"
-msgstr "^2+%s%s"
+msgstr "^2+%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1659
#, c-format
#: qcsrc/client/hud/panel/scoreboard.qc:1802
#, c-format
msgid "All-time fastest: %d%s ^7(%s^7)"
-msgstr "Rekordzeit: %d%s ^7(%s^7)"
+msgstr "Rekordtempo: %d%s ^7(%s^7)"
#: qcsrc/client/hud/panel/scoreboard.qc:1818
#, c-format
#: qcsrc/client/hud/panel/vote.qc:27
msgid "^1You must answer before entering hud configure mode"
-msgstr "^1Du musst antworten, bevor Du den HUD-Konfigurationsmodus betrittst"
+msgstr "^1Du musst antworten, bevor du den HUD-Konfigurationsmodus betrittst"
#: qcsrc/client/hud/panel/vote.qc:30
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
#: qcsrc/common/gamemodes/gamemode/nexball/weapon.qh:7
msgid "Ball Stealer"
-msgstr "Ball-Dieb"
+msgstr "Balldieb"
#: qcsrc/common/items/item/ammo.qh:66
msgid "bullets"
#: qcsrc/common/minigames/minigame/bd.qc:1095
msgid "Well done! Click 'Next Level' to continue"
-msgstr "Gut gemacht! Klicke 'Nächstes Level' um fortzufahren"
+msgstr "Gut gemacht! Klicke „Nächstes Level“, um fortzufahren"
#: qcsrc/common/minigames/minigame/bd.qc:1162
msgid "Better luck next time!"
#: qcsrc/common/minigames/minigame/pp.qc:2
msgid "Push-Pull"
-msgstr "Drücken-Ziehen"
+msgstr "Schiebezieh"
#: qcsrc/common/minigames/minigame/pp.qc:443
#: qcsrc/common/minigames/minigame/ttt.qc:324
msgid "Select \"^1Next Match^7\" on the menu for a rematch!"
-msgstr "Wähle im Menü \"^1Nächstes Spiel^7\" für eine Revanche!"
+msgstr "Wähle im Menü „^1Nächstes Spiel^7“ für eine Revanche!"
#: qcsrc/common/minigames/minigame/pp.qc:444
#: qcsrc/common/minigames/minigame/pp.qc:450
#: qcsrc/common/minigames/minigame/ps.qc:414
msgid "All pieces cleared!"
-msgstr "Alle Teile abgeräumt!"
+msgstr "Alle Figuren abgeräumt!"
#: qcsrc/common/minigames/minigame/ps.qc:416
msgid "Remaining pieces:"
-msgstr "Übrige Teile:"
+msgstr "Verbleibende Figuren:"
#: qcsrc/common/minigames/minigame/ps.qc:481
#, c-format
#: qcsrc/common/minigames/minigame/ps.qc:494
msgid "Well done, you win!"
-msgstr "Gut gemacht, Du gewinnst!"
+msgstr "Gut gemacht, du gewinnst!"
#: qcsrc/common/minigames/minigame/ps.qc:497
msgid "Jump a piece over another to capture it"
-msgstr "Spring mit einer Spielfigur über einer anderen, um sie zu stehlen"
+msgstr "Spring mit einer Spielfigur über einer anderen, um sie zu schnappen"
#: qcsrc/common/minigames/minigame/ttt.qc:2
msgid "Tic Tac Toe"
#: qcsrc/common/mutators/mutator/buffs/all.inc:43
msgid "Medic"
-msgstr "Medizin"
+msgstr "Sanitäter"
#: qcsrc/common/mutators/mutator/buffs/all.inc:54
msgid "Bash"
#: qcsrc/common/mutators/mutator/nades/nades.inc:50
msgid "Heal grenade"
-msgstr "Heilgranate"
+msgstr "Medizingranate"
#: qcsrc/common/mutators/mutator/nades/nades.inc:58
msgid "Monster grenade"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:12
msgid "Checkpoint"
-msgstr "Checkpoint"
+msgstr "Kontrollpunkt"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:13
#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:240
"%s^BG's previous record of ^F2%s^BG seconds"
msgstr ""
"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit ^BG"
-"%s^BGs Rekord von ^F2%s^BG Sekunden gebrochen"
+"%s^BGs Rekord von ^F2%s^BG Sekunden geschlagen"
#: qcsrc/common/notifications/all.inc:243
#, c-format
"^BG%s^BG's previous record of ^F1%s^BG seconds"
msgstr ""
"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, konnte "
-"jedoch nicht ^BG%s^BGs Rekord von ^F2%s^BG Sekunden brechen"
+"jedoch nicht ^BG%s^BGs Rekord von ^F2%s^BG Sekunden schlagen"
#: qcsrc/common/notifications/all.inc:246
msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
"base"
msgstr ""
-"^BGDie ^TC^TT^BG Flagge fiel an einen unerreichbaren Ort und ist daher aus "
-"Langeweile heimgeflogen"
+"^BGDie ^TC^TT^BG Flagge fiel an einen unerreichbaren Ort und ist daher "
+"heimgeflogen"
#: qcsrc/common/notifications/all.inc:253
msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
#: qcsrc/common/notifications/all.inc:271
msgid "^F1Round already started, you will join the game in the next round"
msgstr ""
-"^F1Die Runde hat bereits begonnen, daher musst Du auf die nächste Runde "
+"^F1Die Runde hat bereits begonnen, daher musst du auf die nächste Runde "
"warten"
#: qcsrc/common/notifications/all.inc:272
#: qcsrc/common/notifications/all.inc:274
#, c-format
msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
-msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1 Bonus getötet ^K1%s%s"
+msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus getötet ^K1%s%s"
#: qcsrc/common/notifications/all.inc:274
#, c-format
msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
-"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1 Bonus zu Punkten verarbeitet ^K1%s"
+"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus zu Punkten verarbeitet ^K1%s"
"%s"
#: qcsrc/common/notifications/all.inc:275
#: qcsrc/common/notifications/all.inc:282
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
-msgstr "^BG%s%s^K1 trat einer Napalm-Explosion ein wenig zu nahe%s%s"
+msgstr "^BG%s%s^K1 trat einer Napalmexplosion ein wenig zu nahe%s%s"
#: qcsrc/common/notifications/all.inc:282
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
-msgstr "^BG%s%s^K1 wurde von ^BG%s^K1s Napalm-Granate abgefackelt%s%s"
+msgstr "^BG%s%s^K1 wurde von ^BG%s^K1s Napalmgranate abgefackelt%s%s"
#: qcsrc/common/notifications/all.inc:283
#, c-format
#, c-format
msgid ""
"^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
-msgstr "^BG%s^K1 wollte sich so eine Napalm-Explosion mal genauer ansehen%s%s"
+msgstr "^BG%s^K1 wollte sich so eine Napalmexplosion mal genauer ansehen%s%s"
#: qcsrc/common/notifications/all.inc:324
#, c-format
msgid "^BG%s^K1 was burned to death by their own Napalm Nade%s%s"
-msgstr "^BG%s^K1 wurde von der eigenen Napalm-Granate verbrannt%s%s"
+msgstr "^BG%s^K1 wurde von der eigenen Napalmgranate verbrannt%s%s"
#: qcsrc/common/notifications/all.inc:326
#, c-format
#: qcsrc/common/notifications/all.inc:327
#, c-format
msgid "^BG%s^K1's Healing Nade didn't quite heal them%s%s"
-msgstr "^BG%s^K1s Medizin-Granate war nicht sehr heilsam%s%s"
+msgstr "^BG%s^K1s Medizingranate war nicht sehr heilsam%s%s"
#: qcsrc/common/notifications/all.inc:328
#, c-format
#: qcsrc/common/notifications/all.inc:359
#, c-format
msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
-msgstr "^BG%s^K1 wurde von ^BG%s^K1 betrogen%s%s"
+msgstr "^BG%s^K1 wurde von ^BG%s^K1 verraten%s%s"
#: qcsrc/common/notifications/all.inc:361
#, c-format
#: qcsrc/common/notifications/all.inc:363
#, c-format
msgid "^BG%s^K1 was frozen by ^BG%s"
-msgstr "^BG%s^K1 wurde von ^BG vereist%s"
+msgstr "^BG%s^K1 wurde von ^BG%s^K1 vereist"
#: qcsrc/common/notifications/all.inc:364
#, c-format
msgid "^BG%s^K3 was revived by ^BG%s"
-msgstr "^BG%s^K3 wurde von ^BG wiederbelebt%s"
+msgstr "^BG%s^K3 wurde von ^BG%s^K3 wiederbelebt"
#: qcsrc/common/notifications/all.inc:365
#, c-format
#: qcsrc/common/notifications/all.inc:375
#, c-format
msgid "^BGGodmode saved you %s units of damage, cheater!"
-msgstr "^BGGodmode ersparte Dir %s Schaden, Du Cheater!"
+msgstr "^BGGodmode ersparte dir %s Schaden, du Cheater!"
#: qcsrc/common/notifications/all.inc:377
#, c-format
#: qcsrc/common/notifications/all.inc:411
#, c-format
msgid "^BG%s^BG captured %s^BG control point"
-msgstr "^BG%s^BG hat einen Kontrollpunkt erobert: %s^BG"
+msgstr "^BG%s^BG hat Kontrollpunkt „%s^BG“ erobert"
#: qcsrc/common/notifications/all.inc:412
#, c-format
msgid "^TC^TT^BG team %s^BG control point has been destroyed by %s"
-msgstr "^TC^TT^BGEin Kontrollpunkt vom Team %s^BG wurde von %s zerstört"
+msgstr "Team ^TC^TT^BG ihr Kontrollpunkt „%s^BG“ wurde von %s zerstört"
#: qcsrc/common/notifications/all.inc:413
msgid "^TC^TT^BG generator has been destroyed"
"^F2You were kicked from the server because you are a spectator and "
"spectators aren't allowed at the moment."
msgstr ""
-"^F2Du wurdest vom Server gekickt, weil Du Zuschauer bist, und Beobachter "
+"^F2Du wurdest vom Server gekickt, weil du Zuschauer bist, und Beobachter "
"sind im Moment nicht erlaubt."
#: qcsrc/common/notifications/all.inc:424
#: qcsrc/common/notifications/all.inc:428
#, c-format
msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
-msgstr "^BG%s^BG konnte seinen %s%s^BG Platz nicht brechen von %s%s %s"
+msgstr ""
+"^BG%s^BG konnte den eigenen Rekord auf dem %s%s^BG Platz von %s%s %s nicht "
+"schlagen"
#: qcsrc/common/notifications/all.inc:429
#, c-format
msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
-msgstr "^BG%s^BG konnte den %s%s^BG Platz von %s%s nicht brechen%s"
+msgstr ""
+"^BG%s^BG konnte den Rekord auf dem %s%s^BG Platz von %s%s %s nicht schlagen"
#: qcsrc/common/notifications/all.inc:430
#, c-format
#: qcsrc/common/notifications/all.inc:432
#, c-format
msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
-msgstr "^BG%s^BG verbesserte seinen %s%s^BG Rekord mit %s%s %s"
+msgstr ""
+"^BG%s^BG verbesserte den eigenen Rekord auf dem %s%s^BG Platz mit %s%s %s"
#: qcsrc/common/notifications/all.inc:433
#, c-format
"^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
"and will be lost."
msgstr ""
-"^BG%s^BG hat einen neuen Rekord ^F2%s^BG erziehlt, aber unglücklicherweise "
-"hat er keine UID und der Rekord wird verloren gehen."
+"^BG%s^BG hat einen neuen Rekord ^F2%s^BG erzielt, aber unglücklicherweise "
+"ist keine UID vorhanden und der Rekord wird verloren gehen."
#: qcsrc/common/notifications/all.inc:434
#, c-format
"^BG%s^BG scored a new record with ^F2%s^BG, but is anonymous and will be "
"lost."
msgstr ""
-"^BG%s^BG hat einen neuen Rekord mit ^F2%s^BG erziehlt, aber er ist "
-"anonymisiert und wird verloren gehen."
+"^BG%s^BG hat einen neuen Rekord mit ^F2%s^BG erzielt, aber er ist anonym und "
+"wird verloren gehen."
#: qcsrc/common/notifications/all.inc:435
#, c-format
"^F2You have to become a player within the next %s, otherwise you will be "
"kicked, because spectating isn't allowed at this time!"
msgstr ""
-"^F2Du musst in den nächsten %s Spieler werden, oder Du wirst gekickt, denn "
+"^F2Du musst in den nächsten %s Spieler werden, oder du wirst gekickt, denn "
"zuschauen ist momentan nicht erlaubt."
#: qcsrc/common/notifications/all.inc:443
"^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
"^F2Xonotic %s"
msgstr ""
-"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s (beta)^BG, Du hast "
+"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s (beta)^BG, du hast "
"^F2Xonotic %s"
#: qcsrc/common/notifications/all.inc:449
msgid ""
"^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
msgstr ""
-"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s^BG, Du hast^F2Xonotic "
+"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s^BG, du hast^F2Xonotic "
"%s"
#: qcsrc/common/notifications/all.inc:450
"^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
"the update from ^F3http://www.xonotic.org/^BG!"
msgstr ""
-"^F4Anmerkung: ^F1Xonotic %s^BG ist raus und Du hast noch ^F2Xonotic %s^BG - "
-"hol Dir das Update von ^F3http://www.xonotic.org/^BG!"
+"^F4Anmerkung: ^F1Xonotic %s^BG ist raus und du hast noch ^F2Xonotic %s^BG - "
+"hol dir das Update von ^F3http://www.xonotic.org/^BG!"
#: qcsrc/common/notifications/all.inc:452
#, c-format
#: qcsrc/common/notifications/all.inc:794
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
-msgstr "^BGMehr als ^F2%s^BG Minen kannst Du nicht auf einmal legen"
+msgstr "^BGMehr als ^F2%s^BG Minen kannst du nicht auf einmal legen"
#: qcsrc/common/notifications/all.inc:485
#, c-format
msgstr ""
"^BGDu bist jetzt frei.\n"
"^BGDu kannst ^F2versuchen^BG, die Flage noch einmal\n"
-"^BGzu erobern, wenn Du glaubst, es zu schaffen."
+"^BGzu erobern, wenn du glaubst, es zu schaffen."
#: qcsrc/common/notifications/all.inc:560
msgid "^BGThis flag is currently inactive"
"^BGDu bist jetzt von der Flagge ^F1abgeschirmt\n"
"^BGaufgrund ^F2zu vieler fehlgeschlagenen Versuchen^BG,\n"
"^BGdie Flagge zu erobern. Gewinne Punkte in der Verteidigung,\n"
-"^BGbevor Du es noch einmal versuchst."
+"^BGbevor du es noch einmal versuchst."
#: qcsrc/common/notifications/all.inc:562
msgid "^BGYou captured the ^TC^TT^BG flag!"
#: qcsrc/common/notifications/all.inc:563
msgid "^BGYou captured the flag!"
-msgstr "^BGDu hast die Flagge erobert"
+msgstr "^BGDu hast die Flagge erobert!"
#: qcsrc/common/notifications/all.inc:564
#, c-format
#: qcsrc/common/notifications/all.inc:570
#, c-format
msgid "^BGRequesting %s^BG to pass you the flag"
-msgstr "^BG%s^BG wird darum gebeten, Dir die Flagge zu passen"
+msgstr "^BG%s^BG wird darum gebeten, dir die Flagge zu passen"
#: qcsrc/common/notifications/all.inc:571
#, c-format
#: qcsrc/common/notifications/all.inc:581
#, c-format
msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
-msgstr "^BGDer %sFeind^BG hat seine Flagge! Hole sie!"
+msgstr "^BGDer %sFeind^BG hat seine Flagge! Hol sie!"
#: qcsrc/common/notifications/all.inc:582
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
-msgstr "^BGDer %sFeind (^BG%s%s)^BG hat seine Flagge! Hole sie!"
+msgstr "^BGDer %sFeind (^BG%s%s)^BG hat seine Flagge! Hol sie!"
#: qcsrc/common/notifications/all.inc:583
#, c-format
#: qcsrc/common/notifications/all.inc:641
msgid "^K1You killed your own dumb self!"
-msgstr "^K1Du hast dich selbst umgebracht, Du Trottel!"
+msgstr "^K1Du hast dich selbst umgebracht, du Trottel!"
#: qcsrc/common/notifications/all.inc:641
msgid "^K1You need to be more careful!"
#: qcsrc/common/notifications/all.inc:645
msgid "^K1Hanging around a napalm explosion is bad!"
-msgstr "^K1Bei einer Napalm-Explosion herumzuhängen ist schlecht!"
+msgstr "^K1Es ist schlecht, bei einer Napalmexplosion herumzuhängen!"
#: qcsrc/common/notifications/all.inc:646
msgid "^K1You felt a little chilly!"
#: qcsrc/common/notifications/all.inc:647
msgid "^K1Your Healing Nade is a bit defective"
-msgstr "^K1Deine Medizin-Granate ist ein wenig defekt"
+msgstr "^K1Deine Medizingranate ist ein wenig defekt"
#: qcsrc/common/notifications/all.inc:648
msgid "^K1You are respawning for running out of ammo..."
-msgstr "^K1Du wirst wiederbelebt, weil Du keine Munition mehr hast …"
+msgstr "^K1Du wirst wiederbelebt, weil du keine Munition mehr hast …"
#: qcsrc/common/notifications/all.inc:648
msgid "^K1You were killed for running out of ammo..."
-msgstr "^K1Du wurdest getötet, weil Du keine Munition mehr hast…"
+msgstr "^K1Du wurdest getötet, weil du keine Munition mehr hast …"
#: qcsrc/common/notifications/all.inc:649
msgid "^K1You grew too old without taking your medicine"
-msgstr "^K1Du wurdest zu alt, und hast deine Medizin nicht genommen"
+msgstr "^K1Du wurdest zu alt, denn du hast deine Medizin nicht genommen"
#: qcsrc/common/notifications/all.inc:649
msgid "^K1You need to preserve your health"
#: qcsrc/common/notifications/all.inc:667
msgid "^K1Watch your step!"
-msgstr "^K1Achte darauf, wo Du hintrittst!"
+msgstr "^K1Achte darauf, wo du hintrittst!"
#: qcsrc/common/notifications/all.inc:669
#, c-format
msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
-msgstr "^K1Idiot! Du hast ^BG%s^K1 getötet, einen Teamkollegen von Dir!"
+msgstr "^K1Idiot! Du hast ^BG%s^K1 getötet, einen Teamkollegen von dir!"
#: qcsrc/common/notifications/all.inc:669
#, c-format
msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
-msgstr "^K1Idiot! Du hast ^BG%s^K1 getroffen, einen Teamkollegen von Dir!"
+msgstr "^K1Idiot! Du hast ^BG%s^K1 getroffen, einen Teamkollegen von dir!"
#: qcsrc/common/notifications/all.inc:670
#, c-format
#: qcsrc/common/notifications/all.inc:692
msgid "^K1Round already started, you spawn as frozen"
-msgstr "^K1Die Runde hat bereits begonnen, Du spawnst eingefroren"
+msgstr "^K1Die Runde hat bereits begonnen, du spawnst eingefroren"
#: qcsrc/common/notifications/all.inc:694
#, c-format
#: qcsrc/common/notifications/all.inc:713
msgid "^BGKilling people while you don't have the ball gives no points!"
msgstr ""
-"^BGSpieler zu töten, während Du den Ball nicht hast, bringt Dir keine Punkte!"
+"^BGSpieler zu töten, während du den Ball nicht hast, bringt dir keine Punkte!"
#: qcsrc/common/notifications/all.inc:715
msgid ""
"^BGAll keys are in your team's hands!\n"
"Help the key carriers to meet!"
msgstr ""
-"^BGAlle Schlüssel sind in der Hand deines Teams!\n"
+"^BGDein Team hat alle Schlüssel!\n"
"Hilf den Schlüsselträgern, sich zu treffen!"
#: qcsrc/common/notifications/all.inc:716
"^BGAll keys are in ^TC^TT team^BG's hands!\n"
"Interfere ^F4NOW^BG!"
msgstr ""
-"^BGAlle Schlüssel sind in der Hand von Team ^TC^TT^BG!\n"
+"^BGTeam ^TC^TT^BG hat alle Schlüssel!\n"
"^F4SOFORT^BG eingreifen!"
#: qcsrc/common/notifications/all.inc:717
"^BGAll keys are in your team's hands!\n"
"Meet the other key carriers ^F4NOW^BG!"
msgstr ""
-"^BGAlle Schlüssel sind in der Hand deines Teams!\n"
-"Triff dich ^F4SOFORT^BG mit den anderen Schlüsselträgern!"
+"^BGDein Team hat alle Schlüssel!\n"
+"Triff ^F4SOFORT^BG die anderen Schlüsselträger!"
#: qcsrc/common/notifications/all.inc:718
msgid "^F4Round will start in ^COUNT"
#: qcsrc/common/notifications/all.inc:727
msgid "^BGYour weapon has been downgraded until you find some ammo!"
-msgstr "^BGDeine Waffe wurde verschlechtert, bis Du etwas Munition findest!"
+msgstr "^BGDeine Waffe wurde verschlechtert, bis du etwas Munition findest!"
#: qcsrc/common/notifications/all.inc:728
msgid "^F4^COUNT^BG left to find some ammo!"
-msgstr "^F4^COUNT^BG verbleiben, um etwas Munition zu finden!"
+msgstr "^BGNoch ^F4^COUNT^BG, um etwas Munition zu finden!"
#: qcsrc/common/notifications/all.inc:729
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
-msgstr "^BGHole dir etwas Munition oder Du stirbst in ^F4^COUNT^BG!"
+msgstr "^BGHol dir etwas Munition oder du stirbst in ^F4^COUNT^BG!"
#: qcsrc/common/notifications/all.inc:729
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
-msgstr "^BGHole dir etwas Munition! ^F4^COUNT^BG übrig!"
+msgstr "^BGHol dir etwas Munition! Noch ^F4^COUNT^BG!"
#: qcsrc/common/notifications/all.inc:730
#, c-format
#: qcsrc/common/notifications/all.inc:737
#, c-format
msgid "^BGYou captured %s^BG control point"
-msgstr "^BGDu hast einen Kontrollpunkt erobert: %s^BG"
+msgstr "^BGDu hast Kontrollpunkt „%s^BG“ erobert"
#: qcsrc/common/notifications/all.inc:738
#, c-format
msgid "^TC^TT^BG team captured %s^BG control point"
-msgstr "Team ^TC^TT^BG hat einen Kontrollpunkt erobert: %s^BG"
+msgstr "Team ^TC^TT^BG hat Kontrollpunkt „%s^BG“ erobert"
#: qcsrc/common/notifications/all.inc:739
msgid "^BGThis control point currently cannot be captured"
#: qcsrc/common/notifications/all.inc:778
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
-msgstr "^K1Dein Team wird zu ^TC^TT^K1 geändert in ^COUNT"
+msgstr "^K1Teamwechsel zu ^TC^TT^K1 in ^COUNT"
#: qcsrc/common/notifications/all.inc:779
msgid "^K1Changing team in ^COUNT"
-msgstr "^K1Du wechselst das Team in ^COUNT"
+msgstr "^K1Teamwechsel in ^COUNT"
#: qcsrc/common/notifications/all.inc:780
msgid "^K1Spectating in ^COUNT"
#: qcsrc/common/notifications/all.qh:507
#, c-format
msgid "%d frag spree! "
-msgstr "%d Kills in Folge!"
+msgstr "%d Kills in Folge! "
#: qcsrc/common/notifications/all.qh:520
msgid "First blood! "
#: qcsrc/common/util.qc:1452
msgid "<KEY NOT FOUND>"
-msgstr "<KEY NOT FOUND>"
+msgstr "<TASTE NICHT GEFUNDEN>"
#: qcsrc/common/util.qc:1453
msgid "<UNKNOWN KEYNUM>"
-msgstr "<UNKNOWN KEYNUM>"
+msgstr "<UNBEKANNTE TASTENNR.>"
#: qcsrc/common/util.qc:1458
msgid "TAB"
-msgstr "TABULATOR"
+msgstr "TAB"
#: qcsrc/common/util.qc:1459 qcsrc/common/util.qc:1530
#, c-format
#: qcsrc/common/util.qc:1464 qcsrc/common/util.qc:1521
#, c-format
msgid "UPARROW"
-msgstr "PFEIL-NACHOBEN"
+msgstr "PFEIL_RAUF"
#: qcsrc/common/util.qc:1465 qcsrc/common/util.qc:1516
#, c-format
msgid "DOWNARROW"
-msgstr "PFEIL-NACHUNTEN"
+msgstr "PFEIL_RUNTER"
#: qcsrc/common/util.qc:1466 qcsrc/common/util.qc:1518
#, c-format
msgid "LEFTARROW"
-msgstr "PFEIL-LINKS"
+msgstr "PFEIL_LINKS"
#: qcsrc/common/util.qc:1467 qcsrc/common/util.qc:1519
#, c-format
msgid "RIGHTARROW"
-msgstr "PFEIL-RECHTS"
+msgstr "PFEIL_RECHTS"
#: qcsrc/common/util.qc:1469
msgid "ALT"
#: qcsrc/common/util.qc:1471
msgid "SHIFT"
-msgstr "UMSCHALTTASTE"
+msgstr "UMSCHALT"
#: qcsrc/common/util.qc:1473 qcsrc/common/util.qc:1514
#, c-format
#: qcsrc/common/util.qc:1475 qcsrc/common/util.qc:1517
#, c-format
msgid "PGDN"
-msgstr "BILD-AB"
+msgstr "BILD_AB"
#: qcsrc/common/util.qc:1476 qcsrc/common/util.qc:1522
#, c-format
msgid "PGUP"
-msgstr "BILD-AUF"
+msgstr "BILD_AUF"
#: qcsrc/common/util.qc:1477 qcsrc/common/util.qc:1520
#, c-format
#: qcsrc/common/util.qc:1482
msgid "NUMLOCK"
-msgstr "NUM"
+msgstr "NUMLOCK"
#: qcsrc/common/util.qc:1483
msgid "CAPSLOCK"
#: qcsrc/common/util.qc:1509
#, c-format
msgid "KP_%d"
-msgstr "KP_%d"
+msgstr "ZB_%d"
#: qcsrc/common/util.qc:1514 qcsrc/common/util.qc:1515
#: qcsrc/common/util.qc:1516 qcsrc/common/util.qc:1517
#: qcsrc/common/util.qc:1530 qcsrc/common/util.qc:1531
#, c-format
msgid "KP_%s"
-msgstr "KP_%s"
+msgstr "ZB_%s"
#: qcsrc/common/util.qc:1523
#, c-format
#: qcsrc/common/util.qc:1531
#, c-format
msgid "EQUALS"
-msgstr "GLEICHHEITSZEICHEN"
+msgstr "GLEICH"
#: qcsrc/common/util.qc:1536
msgid "PRINTSCREEN"
#: qcsrc/common/util.qc:1542
msgid "MWHEELDOWN"
-msgstr "MRADHERAB"
+msgstr "MRADRUNTER"
#: qcsrc/common/util.qc:1545
#, c-format
#: qcsrc/common/util.qc:1556
#, c-format
msgid "DPAD_DOWN"
-msgstr "STEUERKREUZ_HERAB"
+msgstr "STEUERKREUZ_RUNTER"
#: qcsrc/common/util.qc:1557
#, c-format
#: qcsrc/common/util.qc:1561
#, c-format
msgid "LEFT_THUMB"
-msgstr "ANALOGSTICK_LINKS"
+msgstr "LINKER_ANALOGSTICK"
#: qcsrc/common/util.qc:1562
#, c-format
msgid "RIGHT_THUMB"
-msgstr "ANALOGSTICK_RECHTS"
+msgstr "RECHTER_ANALOGSTICK"
#: qcsrc/common/util.qc:1563
#, c-format
msgid "LEFT_SHOULDER"
-msgstr "SCHULTERTASTE_LINKS"
+msgstr "LINKE_SCHULTERTASTE"
#: qcsrc/common/util.qc:1564
#, c-format
msgid "RIGHT_SHOULDER"
-msgstr "SCHULTERTASTE_RECHTS"
+msgstr "RECHTE_SCHULTERTASTE"
#: qcsrc/common/util.qc:1565
#, c-format
msgid "LEFT_TRIGGER"
-msgstr "TRIGGERTASTE_LINKS"
+msgstr "LINKER_TRIGGER"
#: qcsrc/common/util.qc:1566
#, c-format
msgid "RIGHT_TRIGGER"
-msgstr "TRIGGERTASTE_RECHTS"
+msgstr "RECHTER_TRIGGER"
#: qcsrc/common/util.qc:1567
#, c-format
msgid "LEFT_THUMB_UP"
-msgstr "ANALOGSTICK_LINKS_HOCH"
+msgstr "LINKER_ANALOGSTICK_HOCH"
#: qcsrc/common/util.qc:1568
#, c-format
msgid "LEFT_THUMB_DOWN"
-msgstr "ANALOGSTICK_LINKS_HERAB"
+msgstr "LINKER_ANALOGSTICK_RUNTER"
#: qcsrc/common/util.qc:1569
#, c-format
msgid "LEFT_THUMB_LEFT"
-msgstr "ANALOGSTICK_LINKS_LINKS"
+msgstr "LINKER_ANALOGSTICK_LINKS"
#: qcsrc/common/util.qc:1570
#, c-format
msgid "LEFT_THUMB_RIGHT"
-msgstr "ANALOGSTICK_LINKS_RECHTS"
+msgstr "LINKER_ANALOGSTICK_RECHTS"
#: qcsrc/common/util.qc:1571
#, c-format
msgid "RIGHT_THUMB_UP"
-msgstr "ANALOGSTICK_RECHTS_HOCH"
+msgstr "RECHTER_ANALOGSTICK_HOCH"
#: qcsrc/common/util.qc:1572
#, c-format
msgid "RIGHT_THUMB_DOWN"
-msgstr "ANALOGSTICK_RECHTS_HERAB"
+msgstr "RECHTER_ANALOGSTICK_RUNTER"
#: qcsrc/common/util.qc:1573
#, c-format
msgid "RIGHT_THUMB_LEFT"
-msgstr "ANALOGSTICK_RECHTS_LINKS"
+msgstr "RECHTER_ANALOGSTICK_LINKS"
#: qcsrc/common/util.qc:1574
#, c-format
msgid "RIGHT_THUMB_RIGHT"
-msgstr "ANALOGSTICK_RECHTS_RECHTS"
+msgstr "RECHTER_ANALOGSTICK_RECHTS"
#: qcsrc/common/util.qc:1584 qcsrc/common/util.qc:1585
#: qcsrc/common/util.qc:1586 qcsrc/common/util.qc:1587
#: qcsrc/common/util.qc:1585
#, c-format
msgid "DOWN"
-msgstr "HERAB"
+msgstr "RUNTER"
#: qcsrc/common/util.qc:1586
#, c-format
"Entity field %s.%s (%s) is not whitelisted. If you believe this is an error, "
"please file an issue."
msgstr ""
-"Entity-Feld %s.%s (%s) ist nicht auf der weißen Liste. Falls Du glaubst, "
+"Entity-Feld %s.%s (%s) ist nicht auf der weißen Liste. Falls du glaubst, "
"dass das ein Programmfehler ist, melde ihn bitte."
#: qcsrc/lib/string.qh:81
#: qcsrc/menu/xonotic/dialog_firstrun.qc:69
msgid "Text language:"
-msgstr "Sprache:"
+msgstr "Textsprache:"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:78
msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
"Play online, against your friends in LAN, view demos or change player "
"settings"
msgstr ""
-"Spiele online, gegen deine Freunde im LAN, schaue Dir Demos an oder ändere "
+"Spiele online, gegen deine Freunde im LAN, schaue dir Demos an oder ändere "
"deine Spieler-Einstellungen"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:38
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:67
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:217
msgid "Invincible Projectiles"
-msgstr "Unzerstörbare Schüsse"
+msgstr "Unzerstörbare Projektile"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:71
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:293
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:183
msgid "Damage done to your enemy gets added to your own health"
msgstr ""
-"Der Schaden, dem Du anderen Spielern zufügst, wird Deiner eigenen Gesundheit "
+"Der Schaden, dem du anderen Spielern zufügst, wird deiner eigenen Gesundheit "
"hinzugefügt"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:188
#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:80
msgid "Show more information about the currently highlighted server"
-msgstr "Lass Dir mehr Informationen über den markierten Server anzeigen"
+msgstr "Lass dir mehr Informationen über den markierten Server anzeigen"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:85
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:58
msgid "Benchmark how fast your computer can run the highlighted demo"
msgstr ""
-"Mach einen Benchmark, mit dem Du testest, wie schnell dein Computer die "
+"Mach einen Benchmark, mit dem du testest, wie schnell dein Computer die "
"markierte Wiederholung abspielen kann"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
#: qcsrc/menu/xonotic/dialog_quit.qc:11
msgid "Are you sure you want to quit?"
-msgstr "Willst Du das Spiel wirklich beenden?"
+msgstr "Willst du das Spiel wirklich beenden?"
#: qcsrc/menu/xonotic/dialog_quit.qc:15
msgid "Back to work..."
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:68
msgid "Physical"
-msgstr "Physik-Eigenschaften"
+msgstr "Physisch"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:70
msgid "Set scale:"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:78
msgid "* object info"
-msgstr "* Objekteigeschaften"
+msgstr "* Objektinfo"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:79
msgid "* mesh info"
-msgstr "* Modelleigenschaften"
+msgstr "* Modellinfo"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:80
msgid "* attachment info"
-msgstr "* Anhängerkupplung"
+msgstr "* Anhangsinfo"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:81
msgid "Show help"
#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:11
msgid "Are you sure you want to reset all key bindings?"
-msgstr "Willst Du wirklich alle Einstellungen zurücksetzen?"
+msgstr "Willst du wirklich alle Einstellungen zurücksetzen?"
#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qh:6
msgid "Reset key bindings"
"models"
msgstr ""
"Stelle für jede Waffe ein anderes Fadenkreuz ein. Diese Option ist zu "
-"empfehlen, wenn Du ohne dargestelltes Waffenmodel spielst"
+"empfehlen, wenn du ohne dargestelltes Waffenmodel spielst"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:48
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:81
msgstr ""
"Keine: Für das Fadenkreuz keine Treffertests ausführen; TrueAim: Das "
"Fadenkreuz verschwimmt, wenn ein Hindernis zwischen deiner Waffen und dem "
-"Ziel ist; Feinde: Das Fadenkreuz wird auch vergrößert, wenn Du einen Feind "
+"Ziel ist; Feinde: Das Fadenkreuz wird auch vergrößert, wenn du einen Feind "
"treffen würdest"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:48
msgid "Fading speed:"
-msgstr "Ausblendegeschwindigkeit:"
+msgstr "Ausblendgeschwindigkeit:"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:51
msgid "Enable rows / columns highlighting"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:67
msgid "Show various gametype specific waypoints"
-msgstr "Lass Dir verschiedene Spieltyp spezifische Wegpunkte anzeigen"
+msgstr "Lass dir verschiedene Spieltyp spezifische Wegpunkte anzeigen"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:73
msgid "Control transparency of the waypoints"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:136
msgid "Max distance:"
-msgstr "Maximale Entferung:"
+msgstr "Max. Entfernung:"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:142
msgid "Decolorize:"
#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:23
msgid "Do you wish to start a local game to set up the HUD?"
-msgstr "Willst Du ein lokales Spiel starten, um das HUD zu bearbeiten?"
+msgstr "Willst du ein lokales Spiel starten, um das HUD zu bearbeiten?"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:24
msgid "Frag Information"
"you are carrying"
msgstr ""
"Wechsel automatisch zu der neu aufgesammelten Waffe, wenn diese in der Liste "
-"weiter oben steht als die, welche Du gerade trägst"
+"weiter oben steht als die, welche du gerade trägst"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:61
msgid "Release attack buttons when you switch weapons"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:116
msgid "Idle limit:"
-msgstr "wenn inaktiv:"
+msgstr "Wenn inaktiv:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
msgid "IDLFPS^Unlimited"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:152
msgid "Advanced settings where you can tweak every single variable of the game"
msgstr ""
-"Erweiterte Einstellungen, in denen Du jede beliebige Variable des Spiels "
+"Erweiterte Einstellungen, in denen du jede beliebige Variable des Spiels "
"ändern kannst"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:157
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
msgid "full language changes will take effect starting from the next game"
-msgstr "volle Sprachänderungen finden erst nach dem Neustart des Spiels statt."
+msgstr "volle Sprachänderungen finden erst nach dem Neustart des Spiels statt"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
msgid "Disconnect now"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
msgid "Answering \"No\" you will appear as \"Anonymous player\""
-msgstr "Wenn Du „Nein“ sagst, wirst Du als „Anonymer Spieler“ erscheinen"
+msgstr "Wenn du „Nein“ sagst, wirst du als „Anonymer Spieler“ erscheinen"
#: qcsrc/menu/xonotic/gametypelist.qc:87
msgid "teamplay"
# Translators:
# afba88cf42cbdff57149d4a6d53a94f9, 2018
# Wuzzy <almikes@aol.com>, 2016-2018
-# Brot Brot <noah.schluessel@gmail.com>, 2015
+# TheTrueBrot <noah.schluessel@gmail.com>, 2015
# cvcxc <hans.andersen72@yahoo.com>, 2013
# divVerent <divVerent@xonotic.org>, 2011,2013
# divVerent <divVerent@xonotic.org>, 2013-2015
# divVerent <divVerent@xonotic.org>, 2011
# Sless <sless@gmx.net>, 2014
# Sless <sless@gmx.net>, 2014
+# TheTrueBrot <noah.schluessel@gmail.com>, 2015
# Wuzzy <almikes@aol.com>, 2016
# Yepoleb <huberg18@gmail.com>, 2013
msgid ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-05-23 12:22+0000\n"
-"Last-Translator: Mirio <opivy@hotmail.de>\n"
+"PO-Revision-Date: 2019-11-09 23:02+0000\n"
+"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: German (http://www.transifex.com/team-xonotic/xonotic/"
"language/de/)\n"
"Language: de\n"
#: qcsrc/client/hud/panel/infomessages.qc:164
#, c-format
msgid "%sPress ^3%s%s once you are ready"
-msgstr "%sDrücke ^3%s%s, sobald Du bereit bist"
+msgstr "%sDrücke ^3%s%s, sobald du bereit bist"
#: qcsrc/client/hud/panel/infomessages.qc:169
msgid "^2Waiting for others to ready up to end warmup..."
#: qcsrc/client/hud/panel/infomessages.qc:229
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
-msgstr "^3CTRL^7, um Kollisionstests zu deaktivieren, ^3SHIFT ^7und"
+msgstr "^3STRG^7, um Kollisionstests zu deaktivieren, ^3UMSCHALT ^7und"
#: qcsrc/client/hud/panel/infomessages.qc:230
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^:-) / nice one"
-msgstr ":-) / gut gemacht"
+msgstr "QMCMD^:-) / gut gemacht"
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^nice one"
-msgstr "gut gemacht"
+msgstr "QMCMD^Gut gemacht"
#: qcsrc/client/hud/panel/quickmenu.qc:784
msgid "QMCMD^good game"
-msgstr "gutes Spiel"
+msgstr "QMCMD^Gut gespielt"
#: qcsrc/client/hud/panel/quickmenu.qc:785
msgid "QMCMD^hi / good luck"
-msgstr "Hallo / Viel Glück"
+msgstr "QMCMD^Hallo / Viel Glück"
#: qcsrc/client/hud/panel/quickmenu.qc:785
msgid "QMCMD^hi / good luck and have fun"
-msgstr "Hallo / Viel Glück und habt Spass"
+msgstr "QMCMD^Hallo / Viel Glück und habt Spass"
#: qcsrc/client/hud/panel/quickmenu.qc:787
msgid "QMCMD^Send in English"
-msgstr "QMCMD^Sende in Englisch"
+msgstr "QMCMD^Auf Englisch senden"
#: qcsrc/client/hud/panel/quickmenu.qc:792
#: qcsrc/client/hud/panel/quickmenu.qc:808
msgid "QMCMD^Team chat"
-msgstr "Teamchat"
+msgstr "QMCMD^Teamchat"
#: qcsrc/client/hud/panel/quickmenu.qc:793
msgid "QMCMD^quad soon"
-msgstr "Quad kommt bald"
+msgstr "QMCMD^Quad kommt bald"
#: qcsrc/client/hud/panel/quickmenu.qc:794
msgid "QMCMD^free item %x^7 (l:%y^7)"
-msgstr "freier Gegenstand %x^7 (l:%y^7)"
+msgstr "QMCMD^Freier Gegenstand %x^7 (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:794
msgid "QMCMD^free item, icon"
-msgstr "freier Gegenstand, Icon"
+msgstr "QMCMD^Freier Gegenstand, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:795
msgid "QMCMD^took item (l:%l^7)"
-msgstr "Gegenstand genommen (l:%l^7)"
+msgstr "QMCMD^Gegenstand genommen (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:795
msgid "QMCMD^took item, icon"
-msgstr "Gegenstand genommen, Icon"
+msgstr "QMCMD^Gegenstand genommen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:796
msgid "QMCMD^negative"
-msgstr "Negativ"
+msgstr "QMCMD^Negativ"
#: qcsrc/client/hud/panel/quickmenu.qc:797
msgid "QMCMD^positive"
-msgstr "Positiv"
+msgstr "QMCMD^Positiv"
#: qcsrc/client/hud/panel/quickmenu.qc:798
msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "brauche Hilfe (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Brauche Hilfe (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:798
msgid "QMCMD^need help, icon"
-msgstr "brauche Hilfe, Icon"
+msgstr "QMCMD^Brauche Hilfe, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:799
msgid "QMCMD^enemy seen (l:%y^7)"
-msgstr "Gegner gesehen (l:%y^7)"
+msgstr "QMCMD^Gegner gesehen (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:799
msgid "QMCMD^enemy seen, icon"
-msgstr "Gegner gesehen, icon"
+msgstr "QMCMD^Gegner gesehen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:800
msgid "QMCMD^flag seen (l:%y^7)"
-msgstr "Flagge gesehen (l:%y^7)"
+msgstr "QMCMD^Flagge gesehen (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:800
msgid "QMCMD^flag seen, icon"
-msgstr "Flagge gesehen, Icon"
+msgstr "QMCMD^Flagge gesehen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:801
msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "verteidigen (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Verteidigend (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:801
msgid "QMCMD^defending, icon"
-msgstr "verteidigen, Icon"
+msgstr "QMCMD^Verteidigend, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:802
msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "wandernd (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Wandernd (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:802
msgid "QMCMD^roaming, icon"
-msgstr "wandernd, Icon"
+msgstr "QMCMD^Wandernd, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:803
msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "angreifen (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^Angreifend (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:803
msgid "QMCMD^attacking, icon"
-msgstr "angreifen, Icon"
+msgstr "QMCMD^Angreifend, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^killed flagcarrier (l:%y^7)"
-msgstr "Flaggenträger getötet (l:%y^7)"
+msgstr "QMCMD^Flaggenträger getötet (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^killed flagcarrier, icon"
-msgstr "Flaggenträger getötet, Icon"
+msgstr "QMCMD^Flaggenträger getötet, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:805
#, c-format
msgid "QMCMD^dropped flag (l:%d^7)"
-msgstr "Flagge fallen gelassen (l:%d^7)"
+msgstr "QMCMD^Flagge weggeworfen (l:%d^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:805
msgid "QMCMD^dropped flag, icon"
-msgstr "Flagge fallen gelassen, Icon"
+msgstr "QMCMD^Flagge weggeworfen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^drop weapon, icon"
-msgstr "Waffe wegwerfen, Icon"
+msgstr "QMCMD^Waffe weggeworfen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^dropped weapon %w^7 (l:%l^7)"
-msgstr "Waffe fallen gelassen %w^7 (l:%l^7)"
+msgstr "QMCMD^Waffe weggeworfen %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^drop flag/key, icon"
-msgstr "Flagge/Schlüssel fallen gelassen, Icon"
+msgstr "QMCMD^Flagge/Schlüssel weggeworfen, Icon"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
-msgstr "Flagge/Schlüssel fallen gelassen %w^7 (l:%l^7)"
+msgstr "QMCMD^Flagge/Schlüssel weggeworfen %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:811
msgid "QMCMD^Send private message to"
-msgstr "Sende private Nachricht an"
+msgstr "QMCMD^Sende private Nachricht an"
#: qcsrc/client/hud/panel/quickmenu.qc:813
#: qcsrc/client/hud/panel/quickmenu.qc:848
msgid "QMCMD^Settings"
-msgstr "Einstellungen"
+msgstr "QMCMD^Einstellungen"
#: qcsrc/client/hud/panel/quickmenu.qc:814
#: qcsrc/client/hud/panel/quickmenu.qc:821
msgid "QMCMD^View/HUD settings"
-msgstr "Ansicht/HUD-Einstellungen"
+msgstr "QMCMD^Ansicht/HUD-Einstellungen"
#: qcsrc/client/hud/panel/quickmenu.qc:815
msgid "QMCMD^3rd person view"
-msgstr "Dritte-Person-Ansicht"
+msgstr "QMCMD^Dritte-Person-Ansicht"
#: qcsrc/client/hud/panel/quickmenu.qc:816
msgid "QMCMD^Player models like mine"
-msgstr "Spielermodelle wie meins"
+msgstr "QMCMD^Spielermodelle wie meins"
#: qcsrc/client/hud/panel/quickmenu.qc:817
msgid "QMCMD^Names above players"
-msgstr "Namen über Spieler"
+msgstr "QMCMD^Namen über Spieler"
#: qcsrc/client/hud/panel/quickmenu.qc:818
msgid "QMCMD^Crosshair per weapon"
-msgstr "Fadenkreuz je nach Waffe"
+msgstr "QMCMD^Fadenkreuz je nach Waffe"
#: qcsrc/client/hud/panel/quickmenu.qc:819
msgid "QMCMD^FPS"
-msgstr "FPS"
+msgstr "QMCMD^FPS"
#: qcsrc/client/hud/panel/quickmenu.qc:820
msgid "QMCMD^Net graph"
-msgstr "Netzwerkgraph"
+msgstr "QMCMD^Netzwerkgraph"
#: qcsrc/client/hud/panel/quickmenu.qc:823
#: qcsrc/client/hud/panel/quickmenu.qc:826
msgid "QMCMD^Sound settings"
-msgstr "Ton-Einstellungen"
+msgstr "QMCMD^Ton-Einstellungen"
#: qcsrc/client/hud/panel/quickmenu.qc:824
msgid "QMCMD^Hit sound"
-msgstr "Ton bei Treffer"
+msgstr "QMCMD^Ton bei Treffer"
#: qcsrc/client/hud/panel/quickmenu.qc:825
msgid "QMCMD^Chat sound"
-msgstr "Chat-Ton"
+msgstr "QMCMD^Chat-Ton"
#: qcsrc/client/hud/panel/quickmenu.qc:830
#: qcsrc/client/hud/panel/quickmenu.qc:834
msgid "QMCMD^Spectator camera"
-msgstr "Zuschauerkamera"
+msgstr "QMCMD^Zuschauerkamera"
#: qcsrc/client/hud/panel/quickmenu.qc:831
msgid "QMCMD^1st person"
-msgstr "Ego-Perspektive"
+msgstr "QMCMD^Ego-Perspektive"
#: qcsrc/client/hud/panel/quickmenu.qc:832
msgid "QMCMD^3rd person around player"
-msgstr "Dritte-Person-Ansicht um Spieler"
+msgstr "QMCMD^Dritte-Person-Ansicht um Spieler"
#: qcsrc/client/hud/panel/quickmenu.qc:833
msgid "QMCMD^3rd person behind"
-msgstr "Dritte-Person-Ansicht (hinter)"
+msgstr "QMCMD^Dritte-Person-Ansicht (hinter)"
#: qcsrc/client/hud/panel/quickmenu.qc:839
#: qcsrc/client/hud/panel/quickmenu.qc:844
msgid "QMCMD^Observer camera"
-msgstr "Beobachterkamera"
+msgstr "QMCMD^Beobachterkamera"
#: qcsrc/client/hud/panel/quickmenu.qc:840
msgid "QMCMD^Increase speed"
-msgstr "Tempo erhöhen"
+msgstr "QMCMD^Tempo erhöhen"
#: qcsrc/client/hud/panel/quickmenu.qc:841
msgid "QMCMD^Decrease speed"
-msgstr "Tempo verringern"
+msgstr "QMCMD^Tempo verringern"
#: qcsrc/client/hud/panel/quickmenu.qc:842
msgid "QMCMD^Wall collision off"
-msgstr "Wandkollision aus"
+msgstr "QMCMD^Wandkollision aus"
#: qcsrc/client/hud/panel/quickmenu.qc:843
msgid "QMCMD^Wall collision on"
-msgstr "Wandkollision an"
+msgstr "QMCMD^Wandkollision an"
#: qcsrc/client/hud/panel/quickmenu.qc:847
msgid "QMCMD^Fullscreen"
-msgstr "Vollbild"
+msgstr "QMCMD^Vollbild"
#: qcsrc/client/hud/panel/quickmenu.qc:850
#: qcsrc/client/hud/panel/quickmenu.qc:860
msgid "QMCMD^Call a vote"
-msgstr "Abstimmung starten"
+msgstr "QMCMD^Abstimmung starten"
#: qcsrc/client/hud/panel/quickmenu.qc:851
msgid "QMCMD^Restart the map"
-msgstr "Karte neustarten"
+msgstr "QMCMD^Karte neustarten"
#: qcsrc/client/hud/panel/quickmenu.qc:852
msgid "QMCMD^End match"
-msgstr "Spiel beenden"
+msgstr "QMCMD^Spiel beenden"
#: qcsrc/client/hud/panel/quickmenu.qc:855
msgid "QMCMD^Reduce match time"
-msgstr "Spielzeit verringern"
+msgstr "QMCMD^Spielzeit verringern"
#: qcsrc/client/hud/panel/quickmenu.qc:856
msgid "QMCMD^Extend match time"
-msgstr "Spielzeit erhöhen"
+msgstr "QMCMD^Spielzeit erhöhen"
#: qcsrc/client/hud/panel/quickmenu.qc:859
msgid "QMCMD^Shuffle teams"
-msgstr "Teams mischen"
+msgstr "QMCMD^Teams mischen"
#: qcsrc/client/hud/panel/racetimer.qc:54
#, c-format
#: qcsrc/client/hud/panel/racetimer.qc:154 qcsrc/client/main.qc:1129
msgid "missing a checkpoint"
-msgstr "einen Checkpoint verpasst"
+msgstr "einen Kontrollpunkt verpasst"
#: qcsrc/client/hud/panel/radar.qc:373
msgid "Click to select teleport destination"
#: qcsrc/client/hud/panel/scoreboard.qc:87
msgid "SCO^bckills"
-msgstr "bbkills"
+msgstr "Bbkills"
#: qcsrc/client/hud/panel/scoreboard.qc:88
msgid "SCO^bctime"
-msgstr "bbzeit"
+msgstr "Bbzeit"
#: qcsrc/client/hud/panel/scoreboard.qc:88
msgid "Total amount of time holding the ball in Keepaway"
#: qcsrc/client/hud/panel/scoreboard.qc:89
msgid "SCO^caps"
-msgstr "caps"
+msgstr "Caps"
#: qcsrc/client/hud/panel/scoreboard.qc:90
msgid "SCO^captime"
-msgstr "capzeit"
+msgstr "Capzeit"
#: qcsrc/client/hud/panel/scoreboard.qc:90
msgid "Time of fastest capture (CTF)"
#: qcsrc/client/hud/panel/scoreboard.qc:91
msgid "SCO^deaths"
-msgstr "tode"
+msgstr "Tode"
#: qcsrc/client/hud/panel/scoreboard.qc:92
msgid "Number of keys destroyed by pushing them into void"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "SCO^damage"
-msgstr "schaden"
+msgstr "Schaden"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "The total damage done"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "SCO^dmgtaken"
-msgstr "scherhal"
+msgstr "Scherhal"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "The total damage taken"
-msgstr "Erhaltenen Gesamtschaden"
+msgstr "Erhaltener Gesamtschaden"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "Number of flag drops"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "SCO^drops"
-msgstr "fallen"
+msgstr "Falleng"
#: qcsrc/client/hud/panel/scoreboard.qc:96
msgid "Player ELO"
-msgstr "Spieler-ELO"
+msgstr "Spieler-Elo"
#: qcsrc/client/hud/panel/scoreboard.qc:96
msgid "SCO^elo"
-msgstr "elo"
+msgstr "Elo"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "SCO^fastest"
-msgstr "schnellste"
+msgstr "Schnellste"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "Time of fastest lap (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:99
msgid "SCO^fckills"
-msgstr "fckills"
+msgstr "Ftkills"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "SCO^fps"
-msgstr "fps"
+msgstr "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:101
msgid "Number of kills minus suicides"
#: qcsrc/client/hud/panel/scoreboard.qc:101
msgid "SCO^frags"
-msgstr "frags"
+msgstr "Frags"
#: qcsrc/client/hud/panel/scoreboard.qc:102
msgid "Number of goals scored"
#: qcsrc/client/hud/panel/scoreboard.qc:102
msgid "SCO^goals"
-msgstr "tore"
+msgstr "Tore"
#: qcsrc/client/hud/panel/scoreboard.qc:103
msgid "Number of keys carrier kills"
#: qcsrc/client/hud/panel/scoreboard.qc:103
msgid "SCO^kckills"
-msgstr "kckills"
+msgstr "Stkills"
#: qcsrc/client/hud/panel/scoreboard.qc:104
msgid "SCO^k/d"
-msgstr "k/d"
+msgstr "K/T"
#: qcsrc/client/hud/panel/scoreboard.qc:104
#: qcsrc/client/hud/panel/scoreboard.qc:105
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "SCO^kdr"
-msgstr "kdr"
+msgstr "KTV"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "SCO^kdratio"
-msgstr "kdratio"
+msgstr "KT-Verh."
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "Number of kills"
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "SCO^kills"
-msgstr "kills"
+msgstr "Kills"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "Number of laps finished (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "SCO^laps"
-msgstr "runden"
+msgstr "Runden"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "Number of lives (LMS)"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "SCO^lives"
-msgstr "leben"
+msgstr "Leben"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "Number of times a key was lost"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "SCO^losses"
-msgstr "verloren"
+msgstr "Verlor"
#: qcsrc/client/hud/panel/scoreboard.qc:111
#: qcsrc/client/hud/panel/scoreboard.qc:112
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "SCO^name"
-msgstr "name"
+msgstr "Name"
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "SCO^nick"
-msgstr "nick"
+msgstr "Nick"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "Number of objectives destroyed"
-msgstr "Anzahl an zerstörten Zielen"
+msgstr "Anzahl an zerstörten Angriffszielen"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "SCO^objectives"
-msgstr "ziele"
+msgstr "Ziele"
#: qcsrc/client/hud/panel/scoreboard.qc:114
msgid ""
#: qcsrc/client/hud/panel/scoreboard.qc:114
msgid "SCO^pickups"
-msgstr "aufheb"
+msgstr "Aufheb"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "Ping time"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "SCO^ping"
-msgstr "ping"
+msgstr "Ping"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "Packet loss"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "SCO^pl"
-msgstr "pl"
+msgstr "Pv"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "Number of players pushed into void"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "SCO^pushes"
-msgstr "schubser"
+msgstr "Schubser"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "Player rank"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "SCO^rank"
-msgstr "rang"
+msgstr "Rang"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "Number of flag returns"
#: qcsrc/client/hud/panel/scoreboard.qc:120
msgid "SCO^revivals"
-msgstr "wiederbelebungen"
+msgstr "Wiederbe"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "Number of rounds won"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "SCO^rounds won"
-msgstr "gewonnene Runden"
+msgstr "Rundensiege"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "SCO^score"
-msgstr "punkte"
+msgstr "Punkte"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "Total score"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "SCO^suicides"
-msgstr "suizide"
+msgstr "Suizide"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "Number of kills minus deaths"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "SCO^sum"
-msgstr "summe"
+msgstr "Summe"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "Number of domination points taken (Domination)"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "SCO^takes"
-msgstr "takes"
+msgstr "erobert"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "Number of teamkills"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "SCO^teamkills"
-msgstr "teamkills"
+msgstr "Teamkills"
#: qcsrc/client/hud/panel/scoreboard.qc:127
msgid "Number of ticks (Domination)"
-msgstr "Anzahl Ticks (Domination)"
+msgstr "Anzahl der Ticks/Zeiteinheiten (Domination)"
#: qcsrc/client/hud/panel/scoreboard.qc:127
msgid "SCO^ticks"
-msgstr "ticks"
+msgstr "Ticks"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^time"
-msgstr "zeit"
+msgstr "Zeit"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "Total time raced (Race/CTS)"
"it into the cvar scoreboard_columns so you can edit it"
msgstr ""
"^2scoreboard_columns_set ^3expand_default ^7lädt das Standard-Layout und "
-"expandiert es in die cvar scoreboard_columns, damit Du sie bearbeiten kannst"
+"expandiert es in die cvar scoreboard_columns, damit du sie bearbeiten kannst"
#: qcsrc/client/hud/panel/scoreboard.qc:319
msgid "You can use a ^3|^7 to start the right-aligned fields."
"or in all but these game types. You can also specify 'all' as a\n"
"field to show all fields available for the current game mode."
msgstr ""
-"Vor einem Feld kannst Du ein Plus- oder Minuszeichen setzen, dann\n"
+"Vor einem Feld kannst du ein Plus- oder Minuszeichen setzen, dann\n"
"eine kommagetrennte Liste an Spieltypen, dann ein Schrägstrich,\n"
"um das Feld nur in diesen oder in allen ausser diesen Spieltypen\n"
"anzuzeigen. Du kannst ausserdem „all“ als ein Feld angeben, um\n"
#: qcsrc/client/hud/panel/scoreboard.qc:1188
#, c-format
msgid "Accuracy stats (average %d%%)"
-msgstr "Genauigkeit (Durchschn.: %d%%)"
+msgstr "Genauigkeitsstatistik (Durchschnitt: %d%%)"
#: qcsrc/client/hud/panel/scoreboard.qc:1336
msgid "Map stats:"
#: qcsrc/client/hud/panel/scoreboard.qc:1629
#, c-format
msgid "^5%s %s"
-msgstr "^5%s%s"
+msgstr "^5%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1623
#: qcsrc/client/hud/panel/scoreboard.qc:1630
#: qcsrc/client/hud/panel/scoreboard.qc:1643
#: qcsrc/client/hud/panel/scoreboard.qc:1650
msgid "SCO^is beaten"
-msgstr "wurde geschlagen"
+msgstr "geschlagen"
#: qcsrc/client/hud/panel/scoreboard.qc:1641
#: qcsrc/client/hud/panel/scoreboard.qc:1648
#, c-format
msgid "^2+%s %s"
-msgstr "^2+%s%s"
+msgstr "^2+%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1659
#, c-format
#: qcsrc/client/hud/panel/scoreboard.qc:1802
#, c-format
msgid "All-time fastest: %d%s ^7(%s^7)"
-msgstr "Rekordzeit: %d%s ^7(%s^7)"
+msgstr "Rekordtempo: %d%s ^7(%s^7)"
#: qcsrc/client/hud/panel/scoreboard.qc:1818
#, c-format
#: qcsrc/client/hud/panel/vote.qc:27
msgid "^1You must answer before entering hud configure mode"
-msgstr "^1Du musst antworten, bevor Du den HUD-Konfigurationsmodus betrittst"
+msgstr "^1Du musst antworten, bevor du den HUD-Konfigurationsmodus betrittst"
#: qcsrc/client/hud/panel/vote.qc:30
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
#: qcsrc/common/gamemodes/gamemode/nexball/weapon.qh:7
msgid "Ball Stealer"
-msgstr "Ball-Dieb"
+msgstr "Balldieb"
#: qcsrc/common/items/item/ammo.qh:66
msgid "bullets"
#: qcsrc/common/minigames/minigame/bd.qc:1095
msgid "Well done! Click 'Next Level' to continue"
-msgstr "Gut gemacht! Klicke 'Nächstes Level' um fortzufahren"
+msgstr "Gut gemacht! Klicke „Nächstes Level“, um fortzufahren"
#: qcsrc/common/minigames/minigame/bd.qc:1162
msgid "Better luck next time!"
#: qcsrc/common/minigames/minigame/pp.qc:2
msgid "Push-Pull"
-msgstr "Drücken-Ziehen"
+msgstr "Schiebezieh"
#: qcsrc/common/minigames/minigame/pp.qc:443
#: qcsrc/common/minigames/minigame/ttt.qc:324
msgid "Select \"^1Next Match^7\" on the menu for a rematch!"
-msgstr "Wähle im Menü \"^1Nächstes Spiel^7\" für eine Revanche!"
+msgstr "Wähle im Menü „^1Nächstes Spiel^7“ für eine Revanche!"
#: qcsrc/common/minigames/minigame/pp.qc:444
#: qcsrc/common/minigames/minigame/pp.qc:450
#: qcsrc/common/minigames/minigame/ps.qc:414
msgid "All pieces cleared!"
-msgstr "Alle Teile abgeräumt!"
+msgstr "Alle Figuren abgeräumt!"
#: qcsrc/common/minigames/minigame/ps.qc:416
msgid "Remaining pieces:"
-msgstr "Übrige Teile:"
+msgstr "Verbleibende Figuren:"
#: qcsrc/common/minigames/minigame/ps.qc:481
#, c-format
#: qcsrc/common/minigames/minigame/ps.qc:494
msgid "Well done, you win!"
-msgstr "Gut gemacht, Du gewinnst!"
+msgstr "Gut gemacht, du gewinnst!"
#: qcsrc/common/minigames/minigame/ps.qc:497
msgid "Jump a piece over another to capture it"
-msgstr "Spring mit einer Spielfigur über einer anderen, um sie zu stehlen"
+msgstr "Spring mit einer Spielfigur über einer anderen, um sie zu schnappen"
#: qcsrc/common/minigames/minigame/ttt.qc:2
msgid "Tic Tac Toe"
#: qcsrc/common/mutators/mutator/buffs/all.inc:43
msgid "Medic"
-msgstr "Medizin"
+msgstr "Sanitäter"
#: qcsrc/common/mutators/mutator/buffs/all.inc:54
msgid "Bash"
#: qcsrc/common/mutators/mutator/nades/nades.inc:50
msgid "Heal grenade"
-msgstr "Heilgranate"
+msgstr "Medizingranate"
#: qcsrc/common/mutators/mutator/nades/nades.inc:58
msgid "Monster grenade"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:12
msgid "Checkpoint"
-msgstr "Checkpoint"
+msgstr "Kontrollpunkt"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:13
#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:240
"%s^BG's previous record of ^F2%s^BG seconds"
msgstr ""
"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit ^BG"
-"%s^BGs Rekord von ^F2%s^BG Sekunden gebrochen"
+"%s^BGs Rekord von ^F2%s^BG Sekunden geschlagen"
#: qcsrc/common/notifications/all.inc:243
#, c-format
"^BG%s^BG's previous record of ^F1%s^BG seconds"
msgstr ""
"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, konnte "
-"jedoch nicht ^BG%s^BGs Rekord von ^F2%s^BG Sekunden brechen"
+"jedoch nicht ^BG%s^BGs Rekord von ^F2%s^BG Sekunden schlagen"
#: qcsrc/common/notifications/all.inc:246
msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
"base"
msgstr ""
-"^BGDie ^TC^TT^BG Flagge fiel an einen unerreichbaren Ort und ist daher aus "
-"Langeweile heimgeflogen"
+"^BGDie ^TC^TT^BG Flagge fiel an einen unerreichbaren Ort und ist daher "
+"heimgeflogen"
#: qcsrc/common/notifications/all.inc:253
msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
#: qcsrc/common/notifications/all.inc:271
msgid "^F1Round already started, you will join the game in the next round"
msgstr ""
-"^F1Die Runde hat bereits begonnen, daher musst Du auf die nächste Runde "
+"^F1Die Runde hat bereits begonnen, daher musst du auf die nächste Runde "
"warten"
#: qcsrc/common/notifications/all.inc:272
#: qcsrc/common/notifications/all.inc:274
#, c-format
msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
-msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1 Bonus getötet ^K1%s%s"
+msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus getötet ^K1%s%s"
#: qcsrc/common/notifications/all.inc:274
#, c-format
msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
-"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1 Bonus zu Punkten verarbeitet ^K1%s"
+"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus zu Punkten verarbeitet ^K1%s"
"%s"
#: qcsrc/common/notifications/all.inc:275
#: qcsrc/common/notifications/all.inc:282
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
-msgstr "^BG%s%s^K1 trat einer Napalm-Explosion ein wenig zu nahe%s%s"
+msgstr "^BG%s%s^K1 trat einer Napalmexplosion ein wenig zu nahe%s%s"
#: qcsrc/common/notifications/all.inc:282
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
-msgstr "^BG%s%s^K1 wurde von ^BG%s^K1s Napalm-Granate abgefackelt%s%s"
+msgstr "^BG%s%s^K1 wurde von ^BG%s^K1s Napalmgranate abgefackelt%s%s"
#: qcsrc/common/notifications/all.inc:283
#, c-format
#, c-format
msgid ""
"^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
-msgstr "^BG%s^K1 wollte sich so eine Napalm-Explosion mal genauer ansehen%s%s"
+msgstr "^BG%s^K1 wollte sich so eine Napalmexplosion mal genauer ansehen%s%s"
#: qcsrc/common/notifications/all.inc:324
#, c-format
msgid "^BG%s^K1 was burned to death by their own Napalm Nade%s%s"
-msgstr "^BG%s^K1 wurde von der eigenen Napalm-Granate verbrannt%s%s"
+msgstr "^BG%s^K1 wurde von der eigenen Napalmgranate verbrannt%s%s"
#: qcsrc/common/notifications/all.inc:326
#, c-format
#: qcsrc/common/notifications/all.inc:327
#, c-format
msgid "^BG%s^K1's Healing Nade didn't quite heal them%s%s"
-msgstr "^BG%s^K1s Medizin-Granate war nicht sehr heilsam%s%s"
+msgstr "^BG%s^K1s Medizingranate war nicht sehr heilsam%s%s"
#: qcsrc/common/notifications/all.inc:328
#, c-format
#: qcsrc/common/notifications/all.inc:359
#, c-format
msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
-msgstr "^BG%s^K1 wurde von ^BG%s^K1 betrogen%s%s"
+msgstr "^BG%s^K1 wurde von ^BG%s^K1 verraten%s%s"
#: qcsrc/common/notifications/all.inc:361
#, c-format
#: qcsrc/common/notifications/all.inc:363
#, c-format
msgid "^BG%s^K1 was frozen by ^BG%s"
-msgstr "^BG%s^K1 wurde von ^BG vereist%s"
+msgstr "^BG%s^K1 wurde von ^BG%s^K1 vereist"
#: qcsrc/common/notifications/all.inc:364
#, c-format
msgid "^BG%s^K3 was revived by ^BG%s"
-msgstr "^BG%s^K3 wurde von ^BG wiederbelebt%s"
+msgstr "^BG%s^K3 wurde von ^BG%s^K3 wiederbelebt"
#: qcsrc/common/notifications/all.inc:365
#, c-format
#: qcsrc/common/notifications/all.inc:375
#, c-format
msgid "^BGGodmode saved you %s units of damage, cheater!"
-msgstr "^BGGodmode ersparte Dir %s Schaden, Du Cheater!"
+msgstr "^BGGodmode ersparte dir %s Schaden, du Cheater!"
#: qcsrc/common/notifications/all.inc:377
#, c-format
#: qcsrc/common/notifications/all.inc:411
#, c-format
msgid "^BG%s^BG captured %s^BG control point"
-msgstr "^BG%s^BG hat einen Kontrollpunkt erobert: %s^BG"
+msgstr "^BG%s^BG hat Kontrollpunkt „%s^BG“ erobert"
#: qcsrc/common/notifications/all.inc:412
#, c-format
msgid "^TC^TT^BG team %s^BG control point has been destroyed by %s"
-msgstr "^TC^TT^BGEin Kontrollpunkt vom Team %s^BG wurde von %s zerstört"
+msgstr "Team ^TC^TT^BG ihr Kontrollpunkt „%s^BG“ wurde von %s zerstört"
#: qcsrc/common/notifications/all.inc:413
msgid "^TC^TT^BG generator has been destroyed"
"^F2You were kicked from the server because you are a spectator and "
"spectators aren't allowed at the moment."
msgstr ""
-"^F2Du wurdest vom Server gekickt, weil Du Zuschauer bist, und Beobachter "
+"^F2Du wurdest vom Server gekickt, weil du Zuschauer bist, und Beobachter "
"sind im Moment nicht erlaubt."
#: qcsrc/common/notifications/all.inc:424
#: qcsrc/common/notifications/all.inc:428
#, c-format
msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
-msgstr "^BG%s^BG konnte seinen %s%s^BG Platz nicht brechen von %s%s %s"
+msgstr ""
+"^BG%s^BG konnte den eigenen Rekord auf dem %s%s^BG Platz von %s%s %s nicht "
+"schlagen"
#: qcsrc/common/notifications/all.inc:429
#, c-format
msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
-msgstr "^BG%s^BG konnte den %s%s^BG Platz von %s%s nicht brechen%s"
+msgstr ""
+"^BG%s^BG konnte den Rekord auf dem %s%s^BG Platz von %s%s %s nicht schlagen"
#: qcsrc/common/notifications/all.inc:430
#, c-format
#: qcsrc/common/notifications/all.inc:432
#, c-format
msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
-msgstr "^BG%s^BG verbesserte seinen %s%s^BG Rekord mit %s%s %s"
+msgstr ""
+"^BG%s^BG verbesserte den eigenen Rekord auf dem %s%s^BG Platz mit %s%s %s"
#: qcsrc/common/notifications/all.inc:433
#, c-format
"^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
"and will be lost."
msgstr ""
-"^BG%s^BG hat einen neuen Rekord ^F2%s^BG erziehlt, aber unglücklicherweise "
-"hat er keine UID und der Rekord wird verloren gehen."
+"^BG%s^BG hat einen neuen Rekord ^F2%s^BG erzielt, aber unglücklicherweise "
+"ist keine UID vorhanden und der Rekord wird verloren gehen."
#: qcsrc/common/notifications/all.inc:434
#, c-format
"^BG%s^BG scored a new record with ^F2%s^BG, but is anonymous and will be "
"lost."
msgstr ""
-"^BG%s^BG hat einen neuen Rekord mit ^F2%s^BG erziehlt, aber er ist "
-"anonymisiert und wird verloren gehen."
+"^BG%s^BG hat einen neuen Rekord mit ^F2%s^BG erzielt, aber er ist anonym und "
+"wird verloren gehen."
#: qcsrc/common/notifications/all.inc:435
#, c-format
"^F2You have to become a player within the next %s, otherwise you will be "
"kicked, because spectating isn't allowed at this time!"
msgstr ""
-"^F2Du musst in den nächsten %s Spieler werden, oder Du wirst gekickt, denn "
+"^F2Du musst in den nächsten %s Spieler werden, oder du wirst gekickt, denn "
"zuschauen ist momentan nicht erlaubt."
#: qcsrc/common/notifications/all.inc:443
"^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
"^F2Xonotic %s"
msgstr ""
-"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s (beta)^BG, Du hast "
+"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s (beta)^BG, du hast "
"^F2Xonotic %s"
#: qcsrc/common/notifications/all.inc:449
msgid ""
"^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
msgstr ""
-"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s^BG, Du hast^F2Xonotic "
+"^F4Anmerkung: ^BGDer Server läuft unter ^F1Xonotic %s^BG, du hast^F2Xonotic "
"%s"
#: qcsrc/common/notifications/all.inc:450
"^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
"the update from ^F3http://www.xonotic.org/^BG!"
msgstr ""
-"^F4Anmerkung: ^F1Xonotic %s^BG ist raus und Du hast noch ^F2Xonotic %s^BG - "
-"hol Dir das Update von ^F3http://www.xonotic.org/^BG!"
+"^F4Anmerkung: ^F1Xonotic %s^BG ist raus und du hast noch ^F2Xonotic %s^BG - "
+"hol dir das Update von ^F3http://www.xonotic.org/^BG!"
#: qcsrc/common/notifications/all.inc:452
#, c-format
#: qcsrc/common/notifications/all.inc:794
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
-msgstr "^BGMehr als ^F2%s^BG Minen kannst Du nicht auf einmal legen"
+msgstr "^BGMehr als ^F2%s^BG Minen kannst du nicht auf einmal legen"
#: qcsrc/common/notifications/all.inc:485
#, c-format
msgstr ""
"^BGDu bist jetzt frei.\n"
"^BGDu kannst ^F2versuchen^BG, die Flage noch einmal\n"
-"^BGzu erobern, wenn Du glaubst, es zu schaffen."
+"^BGzu erobern, wenn du glaubst, es zu schaffen."
#: qcsrc/common/notifications/all.inc:560
msgid "^BGThis flag is currently inactive"
"^BGDu bist jetzt von der Flagge ^F1abgeschirmt\n"
"^BGaufgrund ^F2zu vieler fehlgeschlagenen Versuchen^BG,\n"
"^BGdie Flagge zu erobern. Gewinne Punkte in der Verteidigung,\n"
-"^BGbevor Du es noch einmal versuchst."
+"^BGbevor du es noch einmal versuchst."
#: qcsrc/common/notifications/all.inc:562
msgid "^BGYou captured the ^TC^TT^BG flag!"
#: qcsrc/common/notifications/all.inc:563
msgid "^BGYou captured the flag!"
-msgstr "^BGDu hast die Flagge erobert"
+msgstr "^BGDu hast die Flagge erobert!"
#: qcsrc/common/notifications/all.inc:564
#, c-format
#: qcsrc/common/notifications/all.inc:570
#, c-format
msgid "^BGRequesting %s^BG to pass you the flag"
-msgstr "^BG%s^BG wird darum gebeten, Dir die Flagge zu passen"
+msgstr "^BG%s^BG wird darum gebeten, dir die Flagge zu passen"
#: qcsrc/common/notifications/all.inc:571
#, c-format
#: qcsrc/common/notifications/all.inc:581
#, c-format
msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
-msgstr "^BGDer %sFeind^BG hat seine Flagge! Hole sie!"
+msgstr "^BGDer %sFeind^BG hat seine Flagge! Hol sie!"
#: qcsrc/common/notifications/all.inc:582
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
-msgstr "^BGDer %sFeind (^BG%s%s)^BG hat seine Flagge! Hole sie!"
+msgstr "^BGDer %sFeind (^BG%s%s)^BG hat seine Flagge! Hol sie!"
#: qcsrc/common/notifications/all.inc:583
#, c-format
#: qcsrc/common/notifications/all.inc:641
msgid "^K1You killed your own dumb self!"
-msgstr "^K1Du hast dich selbst umgebracht, Du Trottel!"
+msgstr "^K1Du hast dich selbst umgebracht, du Trottel!"
#: qcsrc/common/notifications/all.inc:641
msgid "^K1You need to be more careful!"
#: qcsrc/common/notifications/all.inc:645
msgid "^K1Hanging around a napalm explosion is bad!"
-msgstr "^K1Bei einer Napalm-Explosion herumzuhängen ist schlecht!"
+msgstr "^K1Es ist schlecht, bei einer Napalmexplosion herumzuhängen!"
#: qcsrc/common/notifications/all.inc:646
msgid "^K1You felt a little chilly!"
#: qcsrc/common/notifications/all.inc:647
msgid "^K1Your Healing Nade is a bit defective"
-msgstr "^K1Deine Medizin-Granate ist ein wenig defekt"
+msgstr "^K1Deine Medizingranate ist ein wenig defekt"
#: qcsrc/common/notifications/all.inc:648
msgid "^K1You are respawning for running out of ammo..."
-msgstr "^K1Du wirst wiederbelebt, weil Du keine Munition mehr hast …"
+msgstr "^K1Du wirst wiederbelebt, weil du keine Munition mehr hast …"
#: qcsrc/common/notifications/all.inc:648
msgid "^K1You were killed for running out of ammo..."
-msgstr "^K1Du wurdest getötet, weil Du keine Munition mehr hast…"
+msgstr "^K1Du wurdest getötet, weil du keine Munition mehr hast …"
#: qcsrc/common/notifications/all.inc:649
msgid "^K1You grew too old without taking your medicine"
-msgstr "^K1Du wurdest zu alt, und hast deine Medizin nicht genommen"
+msgstr "^K1Du wurdest zu alt, denn du hast deine Medizin nicht genommen"
#: qcsrc/common/notifications/all.inc:649
msgid "^K1You need to preserve your health"
#: qcsrc/common/notifications/all.inc:667
msgid "^K1Watch your step!"
-msgstr "^K1Achte darauf, wo Du hintrittst!"
+msgstr "^K1Achte darauf, wo du hintrittst!"
#: qcsrc/common/notifications/all.inc:669
#, c-format
msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
-msgstr "^K1Idiot! Du hast ^BG%s^K1 getötet, einen Teamkollegen von Dir!"
+msgstr "^K1Idiot! Du hast ^BG%s^K1 getötet, einen Teamkollegen von dir!"
#: qcsrc/common/notifications/all.inc:669
#, c-format
msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
-msgstr "^K1Idiot! Du hast ^BG%s^K1 getroffen, einen Teamkollegen von Dir!"
+msgstr "^K1Idiot! Du hast ^BG%s^K1 getroffen, einen Teamkollegen von dir!"
#: qcsrc/common/notifications/all.inc:670
#, c-format
#: qcsrc/common/notifications/all.inc:692
msgid "^K1Round already started, you spawn as frozen"
-msgstr "^K1Die Runde hat bereits begonnen, Du spawnst eingefroren"
+msgstr "^K1Die Runde hat bereits begonnen, du spawnst eingefroren"
#: qcsrc/common/notifications/all.inc:694
#, c-format
#: qcsrc/common/notifications/all.inc:713
msgid "^BGKilling people while you don't have the ball gives no points!"
msgstr ""
-"^BGSpieler zu töten, während Du den Ball nicht hast, bringt Dir keine Punkte!"
+"^BGSpieler zu töten, während du den Ball nicht hast, bringt dir keine Punkte!"
#: qcsrc/common/notifications/all.inc:715
msgid ""
"^BGAll keys are in your team's hands!\n"
"Help the key carriers to meet!"
msgstr ""
-"^BGAlle Schlüssel sind in der Hand deines Teams!\n"
+"^BGDein Team hat alle Schlüssel!\n"
"Hilf den Schlüsselträgern, sich zu treffen!"
#: qcsrc/common/notifications/all.inc:716
"^BGAll keys are in ^TC^TT team^BG's hands!\n"
"Interfere ^F4NOW^BG!"
msgstr ""
-"^BGAlle Schlüssel sind in der Hand von Team ^TC^TT^BG!\n"
+"^BGTeam ^TC^TT^BG hat alle Schlüssel!\n"
"^F4SOFORT^BG eingreifen!"
#: qcsrc/common/notifications/all.inc:717
"^BGAll keys are in your team's hands!\n"
"Meet the other key carriers ^F4NOW^BG!"
msgstr ""
-"^BGAlle Schlüssel sind in der Hand deines Teams!\n"
-"Triff dich ^F4SOFORT^BG mit den anderen Schlüsselträgern!"
+"^BGDein Team hat alle Schlüssel!\n"
+"Triff ^F4SOFORT^BG die anderen Schlüsselträger!"
#: qcsrc/common/notifications/all.inc:718
msgid "^F4Round will start in ^COUNT"
#: qcsrc/common/notifications/all.inc:727
msgid "^BGYour weapon has been downgraded until you find some ammo!"
-msgstr "^BGDeine Waffe wurde verschlechtert, bis Du etwas Munition findest!"
+msgstr "^BGDeine Waffe wurde verschlechtert, bis du etwas Munition findest!"
#: qcsrc/common/notifications/all.inc:728
msgid "^F4^COUNT^BG left to find some ammo!"
-msgstr "^F4^COUNT^BG verbleiben, um etwas Munition zu finden!"
+msgstr "^BGNoch ^F4^COUNT^BG, um etwas Munition zu finden!"
#: qcsrc/common/notifications/all.inc:729
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
-msgstr "^BGHole dir etwas Munition oder Du stirbst in ^F4^COUNT^BG!"
+msgstr "^BGHol dir etwas Munition oder du stirbst in ^F4^COUNT^BG!"
#: qcsrc/common/notifications/all.inc:729
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
-msgstr "^BGHole dir etwas Munition! ^F4^COUNT^BG übrig!"
+msgstr "^BGHol dir etwas Munition! Noch ^F4^COUNT^BG!"
#: qcsrc/common/notifications/all.inc:730
#, c-format
#: qcsrc/common/notifications/all.inc:737
#, c-format
msgid "^BGYou captured %s^BG control point"
-msgstr "^BGDu hast einen Kontrollpunkt erobert: %s^BG"
+msgstr "^BGDu hast Kontrollpunkt „%s^BG“ erobert"
#: qcsrc/common/notifications/all.inc:738
#, c-format
msgid "^TC^TT^BG team captured %s^BG control point"
-msgstr "Team ^TC^TT^BG hat einen Kontrollpunkt erobert: %s^BG"
+msgstr "Team ^TC^TT^BG hat Kontrollpunkt „%s^BG“ erobert"
#: qcsrc/common/notifications/all.inc:739
msgid "^BGThis control point currently cannot be captured"
#: qcsrc/common/notifications/all.inc:778
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
-msgstr "^K1Dein Team wird zu ^TC^TT^K1 geändert in ^COUNT"
+msgstr "^K1Teamwechsel zu ^TC^TT^K1 in ^COUNT"
#: qcsrc/common/notifications/all.inc:779
msgid "^K1Changing team in ^COUNT"
-msgstr "^K1Du wechselst das Team in ^COUNT"
+msgstr "^K1Teamwechsel in ^COUNT"
#: qcsrc/common/notifications/all.inc:780
msgid "^K1Spectating in ^COUNT"
#: qcsrc/common/notifications/all.qh:507
#, c-format
msgid "%d frag spree! "
-msgstr "%d Kills in Folge!"
+msgstr "%d Kills in Folge! "
#: qcsrc/common/notifications/all.qh:520
msgid "First blood! "
#: qcsrc/common/util.qc:1452
msgid "<KEY NOT FOUND>"
-msgstr "<KEY NOT FOUND>"
+msgstr "<TASTE NICHT GEFUNDEN>"
#: qcsrc/common/util.qc:1453
msgid "<UNKNOWN KEYNUM>"
-msgstr "<UNKNOWN KEYNUM>"
+msgstr "<UNBEKANNTE TASTENNR.>"
#: qcsrc/common/util.qc:1458
msgid "TAB"
-msgstr "TABULATOR"
+msgstr "TAB"
#: qcsrc/common/util.qc:1459 qcsrc/common/util.qc:1530
#, c-format
#: qcsrc/common/util.qc:1464 qcsrc/common/util.qc:1521
#, c-format
msgid "UPARROW"
-msgstr "PFEIL-NACHOBEN"
+msgstr "PFEIL_RAUF"
#: qcsrc/common/util.qc:1465 qcsrc/common/util.qc:1516
#, c-format
msgid "DOWNARROW"
-msgstr "PFEIL-NACHUNTEN"
+msgstr "PFEIL_RUNTER"
#: qcsrc/common/util.qc:1466 qcsrc/common/util.qc:1518
#, c-format
msgid "LEFTARROW"
-msgstr "PFEIL-LINKS"
+msgstr "PFEIL_LINKS"
#: qcsrc/common/util.qc:1467 qcsrc/common/util.qc:1519
#, c-format
msgid "RIGHTARROW"
-msgstr "PFEIL-RECHTS"
+msgstr "PFEIL_RECHTS"
#: qcsrc/common/util.qc:1469
msgid "ALT"
#: qcsrc/common/util.qc:1471
msgid "SHIFT"
-msgstr "UMSCHALTTASTE"
+msgstr "UMSCHALT"
#: qcsrc/common/util.qc:1473 qcsrc/common/util.qc:1514
#, c-format
#: qcsrc/common/util.qc:1475 qcsrc/common/util.qc:1517
#, c-format
msgid "PGDN"
-msgstr "BILD-AB"
+msgstr "BILD_AB"
#: qcsrc/common/util.qc:1476 qcsrc/common/util.qc:1522
#, c-format
msgid "PGUP"
-msgstr "BILD-AUF"
+msgstr "BILD_AUF"
#: qcsrc/common/util.qc:1477 qcsrc/common/util.qc:1520
#, c-format
#: qcsrc/common/util.qc:1482
msgid "NUMLOCK"
-msgstr "NUM"
+msgstr "NUMLOCK"
#: qcsrc/common/util.qc:1483
msgid "CAPSLOCK"
#: qcsrc/common/util.qc:1509
#, c-format
msgid "KP_%d"
-msgstr "KP_%d"
+msgstr "ZB_%d"
#: qcsrc/common/util.qc:1514 qcsrc/common/util.qc:1515
#: qcsrc/common/util.qc:1516 qcsrc/common/util.qc:1517
#: qcsrc/common/util.qc:1530 qcsrc/common/util.qc:1531
#, c-format
msgid "KP_%s"
-msgstr "KP_%s"
+msgstr "ZB_%s"
#: qcsrc/common/util.qc:1523
#, c-format
#: qcsrc/common/util.qc:1531
#, c-format
msgid "EQUALS"
-msgstr "GLEICHHEITSZEICHEN"
+msgstr "GLEICH"
#: qcsrc/common/util.qc:1536
msgid "PRINTSCREEN"
#: qcsrc/common/util.qc:1542
msgid "MWHEELDOWN"
-msgstr "MRADHERAB"
+msgstr "MRADRUNTER"
#: qcsrc/common/util.qc:1545
#, c-format
#: qcsrc/common/util.qc:1556
#, c-format
msgid "DPAD_DOWN"
-msgstr "STEUERKREUZ_HERAB"
+msgstr "STEUERKREUZ_RUNTER"
#: qcsrc/common/util.qc:1557
#, c-format
#: qcsrc/common/util.qc:1561
#, c-format
msgid "LEFT_THUMB"
-msgstr "ANALOGSTICK_LINKS"
+msgstr "LINKER_ANALOGSTICK"
#: qcsrc/common/util.qc:1562
#, c-format
msgid "RIGHT_THUMB"
-msgstr "ANALOGSTICK_RECHTS"
+msgstr "RECHTER_ANALOGSTICK"
#: qcsrc/common/util.qc:1563
#, c-format
msgid "LEFT_SHOULDER"
-msgstr "SCHULTERTASTE_LINKS"
+msgstr "LINKE_SCHULTERTASTE"
#: qcsrc/common/util.qc:1564
#, c-format
msgid "RIGHT_SHOULDER"
-msgstr "SCHULTERTASTE_RECHTS"
+msgstr "RECHTE_SCHULTERTASTE"
#: qcsrc/common/util.qc:1565
#, c-format
msgid "LEFT_TRIGGER"
-msgstr "TRIGGERTASTE_LINKS"
+msgstr "LINKER_TRIGGER"
#: qcsrc/common/util.qc:1566
#, c-format
msgid "RIGHT_TRIGGER"
-msgstr "TRIGGERTASTE_RECHTS"
+msgstr "RECHTER_TRIGGER"
#: qcsrc/common/util.qc:1567
#, c-format
msgid "LEFT_THUMB_UP"
-msgstr "ANALOGSTICK_LINKS_HOCH"
+msgstr "LINKER_ANALOGSTICK_HOCH"
#: qcsrc/common/util.qc:1568
#, c-format
msgid "LEFT_THUMB_DOWN"
-msgstr "ANALOGSTICK_LINKS_HERAB"
+msgstr "LINKER_ANALOGSTICK_RUNTER"
#: qcsrc/common/util.qc:1569
#, c-format
msgid "LEFT_THUMB_LEFT"
-msgstr "ANALOGSTICK_LINKS_LINKS"
+msgstr "LINKER_ANALOGSTICK_LINKS"
#: qcsrc/common/util.qc:1570
#, c-format
msgid "LEFT_THUMB_RIGHT"
-msgstr "ANALOGSTICK_LINKS_RECHTS"
+msgstr "LINKER_ANALOGSTICK_RECHTS"
#: qcsrc/common/util.qc:1571
#, c-format
msgid "RIGHT_THUMB_UP"
-msgstr "ANALOGSTICK_RECHTS_HOCH"
+msgstr "RECHTER_ANALOGSTICK_HOCH"
#: qcsrc/common/util.qc:1572
#, c-format
msgid "RIGHT_THUMB_DOWN"
-msgstr "ANALOGSTICK_RECHTS_HERAB"
+msgstr "RECHTER_ANALOGSTICK_RUNTER"
#: qcsrc/common/util.qc:1573
#, c-format
msgid "RIGHT_THUMB_LEFT"
-msgstr "ANALOGSTICK_RECHTS_LINKS"
+msgstr "RECHTER_ANALOGSTICK_LINKS"
#: qcsrc/common/util.qc:1574
#, c-format
msgid "RIGHT_THUMB_RIGHT"
-msgstr "ANALOGSTICK_RECHTS_RECHTS"
+msgstr "RECHTER_ANALOGSTICK_RECHTS"
#: qcsrc/common/util.qc:1584 qcsrc/common/util.qc:1585
#: qcsrc/common/util.qc:1586 qcsrc/common/util.qc:1587
#: qcsrc/common/util.qc:1585
#, c-format
msgid "DOWN"
-msgstr "HERAB"
+msgstr "RUNTER"
#: qcsrc/common/util.qc:1586
#, c-format
"Entity field %s.%s (%s) is not whitelisted. If you believe this is an error, "
"please file an issue."
msgstr ""
-"Entity-Feld %s.%s (%s) ist nicht auf der weissen Liste. Falls Du glaubst, "
+"Entity-Feld %s.%s (%s) ist nicht auf der weissen Liste. Falls du glaubst, "
"dass das ein Programmfehler ist, melde ihn bitte."
#: qcsrc/lib/string.qh:81
#: qcsrc/menu/xonotic/dialog_firstrun.qc:69
msgid "Text language:"
-msgstr "Sprache:"
+msgstr "Textsprache:"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:78
msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
"Play online, against your friends in LAN, view demos or change player "
"settings"
msgstr ""
-"Spiele online, gegen deine Freunde im LAN, schaue Dir Demos an oder ändere "
+"Spiele online, gegen deine Freunde im LAN, schaue dir Demos an oder ändere "
"deine Spieler-Einstellungen"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:38
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:67
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:217
msgid "Invincible Projectiles"
-msgstr "Unzerstörbare Schüsse"
+msgstr "Unzerstörbare Projektile"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:71
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:293
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:183
msgid "Damage done to your enemy gets added to your own health"
msgstr ""
-"Der Schaden, dem Du anderen Spielern zufügst, wird Deiner eigenen Gesundheit "
+"Der Schaden, dem du anderen Spielern zufügst, wird deiner eigenen Gesundheit "
"hinzugefügt"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:188
#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:80
msgid "Show more information about the currently highlighted server"
-msgstr "Lass Dir mehr Informationen über den markierten Server anzeigen"
+msgstr "Lass dir mehr Informationen über den markierten Server anzeigen"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:85
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:58
msgid "Benchmark how fast your computer can run the highlighted demo"
msgstr ""
-"Mach einen Benchmark, mit dem Du testest, wie schnell dein Computer die "
+"Mach einen Benchmark, mit dem du testest, wie schnell dein Computer die "
"markierte Wiederholung abspielen kann"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
#: qcsrc/menu/xonotic/dialog_quit.qc:11
msgid "Are you sure you want to quit?"
-msgstr "Willst Du das Spiel wirklich beenden?"
+msgstr "Willst du das Spiel wirklich beenden?"
#: qcsrc/menu/xonotic/dialog_quit.qc:15
msgid "Back to work..."
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:68
msgid "Physical"
-msgstr "Physik-Eigenschaften"
+msgstr "Physisch"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:70
msgid "Set scale:"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:78
msgid "* object info"
-msgstr "* Objekteigeschaften"
+msgstr "* Objektinfo"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:79
msgid "* mesh info"
-msgstr "* Modelleigenschaften"
+msgstr "* Modellinfo"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:80
msgid "* attachment info"
-msgstr "* Anhängerkupplung"
+msgstr "* Anhangsinfo"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:81
msgid "Show help"
#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:11
msgid "Are you sure you want to reset all key bindings?"
-msgstr "Willst Du wirklich alle Einstellungen zurücksetzen?"
+msgstr "Willst du wirklich alle Einstellungen zurücksetzen?"
#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qh:6
msgid "Reset key bindings"
"models"
msgstr ""
"Stelle für jede Waffe ein anderes Fadenkreuz ein. Diese Option ist zu "
-"empfehlen, wenn Du ohne dargestelltes Waffenmodel spielst"
+"empfehlen, wenn du ohne dargestelltes Waffenmodel spielst"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:48
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:81
msgstr ""
"Keine: Für das Fadenkreuz keine Treffertests ausführen; TrueAim: Das "
"Fadenkreuz verschwimmt, wenn ein Hindernis zwischen deiner Waffen und dem "
-"Ziel ist; Feinde: Das Fadenkreuz wird auch vergrössert, wenn Du einen Feind "
+"Ziel ist; Feinde: Das Fadenkreuz wird auch vergrössert, wenn du einen Feind "
"treffen würdest"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:48
msgid "Fading speed:"
-msgstr "Ausblendegeschwindigkeit:"
+msgstr "Ausblendgeschwindigkeit:"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:51
msgid "Enable rows / columns highlighting"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:67
msgid "Show various gametype specific waypoints"
-msgstr "Lass Dir verschiedene Spieltyp spezifische Wegpunkte anzeigen"
+msgstr "Lass dir verschiedene Spieltyp spezifische Wegpunkte anzeigen"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:73
msgid "Control transparency of the waypoints"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:136
msgid "Max distance:"
-msgstr "Maximale Entferung:"
+msgstr "Max. Entfernung:"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:142
msgid "Decolorize:"
#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:23
msgid "Do you wish to start a local game to set up the HUD?"
-msgstr "Willst Du ein lokales Spiel starten, um das HUD zu bearbeiten?"
+msgstr "Willst du ein lokales Spiel starten, um das HUD zu bearbeiten?"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:24
msgid "Frag Information"
"you are carrying"
msgstr ""
"Wechsel automatisch zu der neu aufgesammelten Waffe, wenn diese in der Liste "
-"weiter oben steht als die, welche Du gerade trägst"
+"weiter oben steht als die, welche du gerade trägst"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:61
msgid "Release attack buttons when you switch weapons"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:116
msgid "Idle limit:"
-msgstr "wenn inaktiv:"
+msgstr "Wenn inaktiv:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
msgid "IDLFPS^Unlimited"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:152
msgid "Advanced settings where you can tweak every single variable of the game"
msgstr ""
-"Erweiterte Einstellungen, in denen Du jede beliebige Variable des Spiels "
+"Erweiterte Einstellungen, in denen du jede beliebige Variable des Spiels "
"ändern kannst"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:157
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
msgid "full language changes will take effect starting from the next game"
-msgstr "volle Sprachänderungen finden erst nach dem Neustart des Spiels statt."
+msgstr "volle Sprachänderungen finden erst nach dem Neustart des Spiels statt"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
msgid "Disconnect now"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
msgid "Answering \"No\" you will appear as \"Anonymous player\""
-msgstr "Wenn Du „Nein“ sagst, wirst Du als „Anonymer Spieler“ erscheinen"
+msgstr "Wenn du „Nein“ sagst, wirst du als „Anonymer Spieler“ erscheinen"
#: qcsrc/menu/xonotic/gametypelist.qc:87
msgid "teamplay"
# MasterWord, 2016
# Mensious Mensious <ektoras@tutanota.com>, 2018-2019
# Vindex <kon14.inside@gmail.com>, 2014
-# Γιάννης Ανθυμίδης, 2011-2012
+# Yannis Anthymidis, 2011-2012
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-08-29 09:07+0000\n"
+"PO-Revision-Date: 2019-10-06 08:21+0000\n"
"Last-Translator: Yannick Le Guen <leguen.yannick@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/team-xonotic/xonotic/"
"language/fr/)\n"
#: qcsrc/lib/counting.qh:12
#, c-format
msgid "CI_ZER^%d years"
-msgstr "%d ans"
+msgstr "%d an"
#: qcsrc/lib/counting.qh:13
#, c-format
#: qcsrc/lib/counting.qh:21
#, c-format
msgid "CI_ZER^%d weeks"
-msgstr "%d semaines"
+msgstr "%d semaine"
#: qcsrc/lib/counting.qh:22
#, c-format
#: qcsrc/lib/counting.qh:30
#, c-format
msgid "CI_ZER^%d days"
-msgstr "%d jours"
+msgstr "%d jour"
#: qcsrc/lib/counting.qh:31
#, c-format
#: qcsrc/lib/counting.qh:39
#, c-format
msgid "CI_ZER^%d hours"
-msgstr "%d heures"
+msgstr "%d heure"
#: qcsrc/lib/counting.qh:40
#, c-format
#: qcsrc/lib/counting.qh:49
#, c-format
msgid "CI_ZER^%d minutes"
-msgstr "%d minutes"
+msgstr "%d minute"
#: qcsrc/lib/counting.qh:50
#, c-format
#: qcsrc/lib/counting.qh:58
#, c-format
msgid "CI_ZER^%d seconds"
-msgstr "%d secondes"
+msgstr "%d seconde"
#: qcsrc/lib/counting.qh:59
#, c-format
# busterdbk <busterdbk@gmail.com>, 2013
# busterdbk <busterdbk@gmail.com>, 2013
# Cuzenco Andrei Robert <cuzencoandreirobert2008@gmail.com>, 2019
+# Iulian Oancea <iulian.o@protonmail.ch>, 2019
# MirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>, 2011
# Sorin Botirla <sorin.botirla@gmail.com>, 2015
# Tudor Ionel <tropiko.matrox@gmail.com>, 2015
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-07-02 21:28+0000\n"
-"Last-Translator: Cuzenco Andrei Robert <cuzencoandreirobert2008@gmail.com>\n"
+"PO-Revision-Date: 2019-10-09 21:10+0000\n"
+"Last-Translator: Iulian Oancea <iulian.o@protonmail.ch>\n"
"Language-Team: Romanian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ro/)\n"
"Language: ro\n"
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
msgstr ""
-"^2Exportat cu succes către %s! (Notă: Fisierul este salvat in data/data)"
+"^2Exportat cu succes către %s! (Notă: Fişierul este salvat în data/data)"
#: qcsrc/client/hud/hud_config.qc:247
#, c-format
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^drop weapon, icon"
-msgstr ""
+msgstr "QMCMD^scapă arma, pictogramă"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^dropped weapon %w^7 (l:%l^7)"
-msgstr ""
+msgstr "QMCMD^armă scăpată %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^drop flag/key, icon"
#: qcsrc/client/hud/panel/racetimer.qc:262
#, c-format
msgid "PENALTY: %.1f (%s)"
-msgstr ""
+msgstr "^1PENALIZARE: %.1f (%s)"
#: qcsrc/client/hud/panel/racetimer.qc:154 qcsrc/client/main.qc:1129
msgid "missing a checkpoint"
#: qcsrc/client/hud/panel/scoreboard.qc:89
msgid "How often a flag (CTF) or a key (KeyHunt) was captured"
msgstr ""
+"Cât de des un steag (CS) sau o cheie („Vânătoare de chei”) au fost capturate"
#: qcsrc/client/hud/panel/scoreboard.qc:89
msgid "SCO^caps"
#: qcsrc/client/hud/panel/scoreboard.qc:93
msgid "The total damage done"
-msgstr ""
+msgstr "Total daună dat"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "SCO^dmgtaken"
#: qcsrc/client/hud/panel/scoreboard.qc:94
msgid "The total damage taken"
-msgstr ""
+msgstr "Total daună primit"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "Number of flag drops"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "SCO^fastest"
-msgstr ""
+msgstr "SCO^cel mai rapid"
#: qcsrc/client/hud/panel/scoreboard.qc:97
msgid "Time of fastest lap (Race/CTS)"
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-06-24 06:22+0000\n"
+"PO-Revision-Date: 2019-11-21 19:30+0000\n"
"Last-Translator: Andrei Stepanov <adem4ik@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ru/)\n"
#: qcsrc/client/hud/panel/racetimer.qc:151
#, c-format
msgid "Intermediate %d"
-msgstr "Ð\9fÑ\80омежÑ\83Ñ\82оÑ\87ное %d"
+msgstr "УÑ\87аÑ\81Ñ\82ок %d"
#: qcsrc/client/hud/panel/racetimer.qc:154
#: qcsrc/client/hud/panel/racetimer.qc:201
#: qcsrc/client/hud/panel/scoreboard.qc:1613
#, c-format
msgid "^3%1.0f minutes"
-msgstr "^3%1.0f минуты"
+msgstr "^3%1.0f минут(ы)"
#: qcsrc/client/hud/panel/scoreboard.qc:1622
#: qcsrc/client/hud/panel/scoreboard.qc:1629
#: qcsrc/client/main.qc:1027
msgid " qu/s"
-msgstr "юнит/с"
+msgstr " юнит/с"
#: qcsrc/client/main.qc:1029
msgid " m/s"
#: qcsrc/common/mapinfo.qc:626
#, no-c-format
msgid "@!#%'n Tuba Throwing"
-msgstr "@!#%'n ШвÑ\8bÑ\80Ñ\8fние ТÑ\80Ñ\83бой"
+msgstr "@!#%'n Швыряние Тубой"
#: qcsrc/common/mapinfo.qh:72 qcsrc/common/mapinfo.qh:333
#: qcsrc/common/mapinfo.qh:528
#: qcsrc/common/notifications/all.inc:428
#, c-format
msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
-msgstr "^BG%s^BG не смог побить рекорд %s%s^BG места со временем %s%s %s"
+msgstr "^BG%s^BG не Ñ\81мог побиÑ\82Ñ\8c Ñ\81вой Ñ\80екоÑ\80д %s%s^BG меÑ\81Ñ\82а Ñ\81о вÑ\80еменем %s%s %s"
#: qcsrc/common/notifications/all.inc:429
#, c-format
#: qcsrc/common/notifications/all.inc:667
msgid "^K1Watch your step!"
-msgstr "^K1Смотри под ноги!"
+msgstr "^K1Смотрите под ноги!"
#: qcsrc/common/notifications/all.inc:669
#, c-format
"Need active players for: %s"
msgstr ""
"^BGОжидание игроков...\n"
-"Активные игроки необходимы для: %s"
+"%s нуждается в активных игроках"
#: qcsrc/common/notifications/all.inc:725
#, c-format
#: qcsrc/common/teams.qh:31
msgid "TEAM^Red"
-msgstr "TEAM^Красные"
+msgstr "TEAM^Красная"
#: qcsrc/common/teams.qh:32
msgid "TEAM^Blue"
-msgstr "TEAM^Синие"
+msgstr "TEAM^Синяя"
#: qcsrc/common/teams.qh:33
msgid "TEAM^Yellow"
-msgstr "TEAM^Жёлтые"
+msgstr "TEAM^Жёлтая"
#: qcsrc/common/teams.qh:34
msgid "TEAM^Pink"
-msgstr "TEAM^Розовые"
+msgstr "TEAM^Розовая"
#: qcsrc/common/teams.qh:35
msgid "Team"
#: qcsrc/common/weapons/weapon/tuba.qh:18
#, no-c-format
msgid "@!#%'n Tuba"
-msgstr "@!#%'n ТÑ\80Ñ\83ба"
+msgstr "@!#%'n Туба"
#: qcsrc/common/weapons/weapon/vaporizer.qh:19
msgid "Vaporizer"
#: qcsrc/lib/counting.qh:46
#, c-format
msgid "CI_DEC^%s minutes"
-msgstr "%s минут"
+msgstr "%s минут(ы)"
#: qcsrc/lib/counting.qh:49
#, c-format
msgid "CI_ZER^%d minutes"
-msgstr "%d минут"
+msgstr "%d минут(ы)"
#: qcsrc/lib/counting.qh:50
#, c-format
#: qcsrc/lib/counting.qh:51
#, c-format
msgid "CI_SEC^%d minutes"
-msgstr "%d минуты"
+msgstr "%d минут(ы)"
#: qcsrc/lib/counting.qh:52
#, c-format
msgid "CI_THI^%d minutes"
-msgstr "%d минуты"
+msgstr "%d минут(ы)"
#: qcsrc/lib/counting.qh:53
#, c-format
msgid "CI_MUL^%d minutes"
-msgstr "%d минут"
+msgstr "%d минут(ы)"
#: qcsrc/lib/counting.qh:55
#, c-format
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:82
#, c-format
msgid "%d minutes"
-msgstr "%d минуты"
+msgstr "%d минут(ы)"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:83
msgid "TIMLIM^Default"
#: qcsrc/menu/xonotic/keybinder.qc:40
msgid "jump / swim"
-msgstr "прыжок / плыть"
+msgstr "пÑ\80Ñ\8bжок / вÑ\81плÑ\8bÑ\82Ñ\8c"
#: qcsrc/menu/xonotic/keybinder.qc:41
msgid "crouch / sink"
#: qcsrc/menu/xonotic/keybinder.qc:57
msgid "drop weapon / throw nade"
-msgstr "бÑ\80оÑ\81иÑ\82Ñ\8c оÑ\80Ñ\83жие / кинÑ\83Ñ\82Ñ\8c гÑ\80анаÑ\82Ñ\83"
+msgstr "бросить оружие / гранату"
#: qcsrc/menu/xonotic/keybinder.qc:86
msgid "hold zoom"
#: qcsrc/menu/xonotic/keybinder.qc:118
msgid "drop key / drop flag"
-msgstr "бросить ключ или флаг"
+msgstr "бросить ключ / флаг"
#: qcsrc/menu/xonotic/keybinder.qc:122
msgid "respawn"
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Abdurrahman AKKUŞ <a.rahmanakkus@hotmail.com>, 2019
# Çağlar Turalı <caglarturali@gmail.com>, 2018
# Demiray Muhterem <mdemiray@msn.com>, 2018
# ibra kap <ibrakap@gmail.com>, 2019
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-09-11 17:17+0000\n"
-"Last-Translator: ibra kap <ibrakap@gmail.com>\n"
+"PO-Revision-Date: 2019-12-18 07:52+0000\n"
+"Last-Translator: Abdurrahman AKKUŞ <a.rahmanakkus@hotmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/team-xonotic/xonotic/"
"language/tr/)\n"
"Language: tr\n"
#: qcsrc/client/hud/hud_config.qc:243
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
-msgstr ""
+msgstr "^2Başarıyla %s'e aktarıldı! (Dikkat: data/data/'ya kaydedildi)"
#: qcsrc/client/hud/hud_config.qc:247
#, c-format
msgid "^1Couldn't write to %s"
-msgstr ""
+msgstr "^1 %s'e yazılamadı"
#: qcsrc/client/hud/panel/centerprint.qc:140
#, c-format
// hit testing/tracing for special effects for the crosshair
set g_trueaim_minrange 44 "TrueAim minimum range (TrueAim adjusts shots so they hit the crosshair point even though the gun is not at the screen center)"
-seta crosshair_hittest 1 "do a crosshair hit evaluation, applying effects from the _blur, _scale, and _showipact cvars"
+seta crosshair_hittest 1 "do a crosshair hit evaluation, applying effects from the _blur and _scale cvars"
seta crosshair_hittest_blur 1 "blur the crosshair if the shot is obstructed"
seta crosshair_hittest_scale 1.25 "shrink crosshair if shot is obstructed or aiming at a teammate"
-seta crosshair_hittest_showimpact 0 "move the crosshair to the actual impact location if obstructed"
+seta crosshair_hittest_showimpact 0 "move the crosshair to the actual impact location if obstructed (debug setting, very glitchy!)"
// change color based on special case
seta crosshair_color_special 1 "special color handling for crosshair... 1 = per-weapon crosshair color (see crosshair_per_weapon), 2 = crosshair changes color based on health, 3 = rainbow/random color selection"
r_shadow_shadowmapping 0
r_shadow_usenormalmap 1
r_showsurfaces 0
+r_sky 1
r_subdivisions_tolerance 3
r_texture_dds_load 1
r_water 1
r_shadow_shadowmapping 0
r_shadow_usenormalmap 0
r_showsurfaces 0
+r_sky 1
r_subdivisions_tolerance 8
r_texture_dds_load 1
r_water 0
r_shadow_shadowmapping 0
r_shadow_usenormalmap 0
r_showsurfaces 0
+r_sky 1
r_subdivisions_tolerance 4
r_texture_dds_load 1
r_water 0
r_shadow_shadowmapping 0
r_shadow_usenormalmap 1
r_showsurfaces 0
+r_sky 1
r_subdivisions_tolerance 3
r_texture_dds_load 1
r_water 0
r_shadow_shadowmapping 0
r_shadow_usenormalmap 0
r_showsurfaces 3
+r_sky 0
r_subdivisions_tolerance 16
r_texture_dds_load 1
r_water 0
alias sv_hook_gamestart_ft
alias sv_hook_gamestart_inv
alias sv_hook_gamestart_duel
-alias sv_hook_gamerestart
+// there is currently no hook for when the match is restarted
+// see sv_hook_readyrestart for previous uses of this hook
+//alias sv_hook_gamerestart
alias sv_hook_gameend
// =========
// dodging
// =========
-set g_dodging 0 "set to 1 to enable dodging in games"
+set g_dodging 0 "set to 1 to enable dodging (quick acceleration in a given direction)"
seta cl_dodging_timeout 0.2 "determines how long apart (in seconds) two taps on the same direction key are considered a dodge. use 0 to disable"
// ===============
// rocket flying
// ===============
-set g_rocket_flying 0 "set to 1 to enable rocket flying in all balance configs"
+set g_rocket_flying 0 "make rocket jumping easier - use the remote_jump weapon cvars for selfdamage and selfpush force"
set g_rocket_flying_disabledelays 1 "disable detonation delays on rockets and mines"
// ================
set g_physical_items 0 "1 uses ODE physics for dropped weapons, 2 for all items, requires physics_ode to be enabled"
set g_physical_items_damageforcescale 3 "how affected physical weapons are by damage"
-set g_physical_items_reset 1 "return map items to their original lotation after being picked up"
+set g_physical_items_reset 1 "return map items to their original location after being picked up"
// ===============
// ===============
set g_touchexplode 0 "touching other players causes an explosion"
set g_touchexplode_radius 50
-set g_touchexplode_damage 10
+set g_touchexplode_damage 20
set g_touchexplode_edgedamage 0
-set g_touchexplode_force 150
+set g_touchexplode_force 300
// ================
// =======
// Nades
// =======
-set g_nades 0 "enable off-hand grenades"
+set g_nades 0 "enable off-hand grenades - use the 'dropweapon' (second press throws) or 'hook' (release throws) binds"
set g_nades_spread 0.04 "random spread offset of throw direction"
set g_nades_throw_offset "0 -25 0" "nade throwing offset"
set g_nades_spawn 1 "give nades right away when player spawns rather than delaying entire refire"
// ================
// grappling hook
// ================
-set g_grappling_hook 0 "let players spawn with the grappling hook which allows them to pull themselves up"
+set g_grappling_hook 0 "let players spawn with the grappling hook which allows them to pull themselves"
set g_grappling_hook_useammo 0 "use ammunition with the off-hand grappling hook"
seta notification_ANNCE_VOTE_CALL "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_VOTE_FAIL "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
-// MSG_INFO notifications (count = 329):
+// MSG_INFO notifications (count = 334):
seta notification_INFO_CA_JOIN_LATE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CA_LEAVE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CHAT_NOSPECTATORS "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_MONSTERS_DISABLED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_NEXBALL_RETURN_HELD "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_ONSLAUGHT_CAPTURE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_ONSLAUGHT_CAPTURE_NONAME "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_ONSLAUGHT_CPDESTROYED_NONAME "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_ONSLAUGHT_CPDESTROYED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_ONSLAUGHT_GENDESTROYED_OVERTIME "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_ONSLAUGHT_GENDESTROYED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_VAPORIZER_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_VORTEX_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-// MSG_CENTER notifications (count = 235):
+// MSG_CENTER notifications (count = 239):
seta notification_CENTER_ALONE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ASSAULT_ATTACKING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ASSAULT_DEFENDING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_NIX_COUNTDOWN "1" "0 = off, 1 = centerprint"
seta notification_CENTER_NIX_NEWWEAPON "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ONS_CAPTURE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_ONS_CAPTURE_NONAME "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_ONS_CAPTURE_TEAM_NONAME "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ONS_CAPTURE_TEAM "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ONS_CONTROLPOINT_SHIELDED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ONS_GENERATOR_SHIELDED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ROUND_TEAM_LOSS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ROUND_TEAM_WIN "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ROUND_TIED "1" "0 = off, 1 = centerprint"
-seta notification_CENTER_SECONDARY_NODAMAGE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_SEQUENCE_COMPLETED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_SEQUENCE_COUNTER "1" "0 = off, 1 = centerprint"
seta notification_CENTER_SEQUENCE_COUNTER_FEWMORE "1" "0 = off, 1 = centerprint"
seta notification_show_sprees_info_newline "1" "Show attacker spree information for MSG_INFO messages on a separate line than the death notification itself"
seta notification_show_sprees_info_specialonly "1" "Don't show attacker spree information in MSG_INFO messages if it isn't an achievement"
-// Notification counts (total = 837): MSG_ANNCE = 89, MSG_INFO = 329, MSG_CENTER = 235, MSG_MULTI = 156, MSG_CHOICE = 28
+// Notification counts (total = 846): MSG_ANNCE = 89, MSG_INFO = 334, MSG_CENTER = 239, MSG_MULTI = 156, MSG_CHOICE = 28
$(eval DAT=$(PROG)-$(VER).dat)
$(eval LNO=$(PROG)-$(VER).lno)
@ echo "http://xonotic.org" > $(TXT)
- @ ln -f $(PROGS_OUT)/$(PROG).dat $(DAT)
- @ ln -f $(PROGS_OUT)/$(PROG).lno $(LNO)
+ @ cp -f $(PROGS_OUT)/$(PROG).dat $(DAT)
+ @ cp -f $(PROGS_OUT)/$(PROG).lno $(LNO)
@ $(RM) *.pk3
$(ZIP) $(PK3) $(TXT) $(DAT) $(LNO)
@ $(RM) $(TXT) $(DAT) $(LNO)
bool autocvar_cl_spawn_event_sound = 1;
// float autocvar_cl_spawn_point_model;
bool autocvar_cl_spawn_point_particles;
-float autocvar_cl_spawn_point_dist_min = 1200;
-float autocvar_cl_spawn_point_dist_max = 1600;
+float autocvar_cl_spawn_point_dist_min = 800;
+float autocvar_cl_spawn_point_dist_max = 1200;
bool autocvar_cl_spawnzoom = 1;
float autocvar_cl_spawnzoom_speed = 1;
float autocvar_cl_spawnzoom_factor = 2;
==================
*/
+float lasthud;
+float vh_notice_time;
void HUD_Vehicle()
{
if(autocvar__hud_configure) return;
Vehicle info = Vehicles_from(hud);
info.vr_hud(info);
}
+
+ if(hud != HUD_NORMAL && lasthud == HUD_NORMAL)
+ vh_notice_time = time + autocvar_cl_vehicles_notify_time;
+
+ lasthud = hud;
}
void HUD_Panel_Draw(entity panent)
return false;
}
+float prev_myteam;
void HUD_Main()
{
int i;
else
hud_fade_alpha = 1 - autocvar__menu_alpha;
+ if(myteam != prev_myteam)
+ {
+ myteamcolors = colormapPaletteColor(myteam, 1);
+ FOREACH(hud_panels, true, it.update_time = time);
+ prev_myteam = myteam;
+ }
+
HUD_Configure_Frame();
if(scoreboard_fade_alpha == 1)
if(teamplay)
{
QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat")
- QUICKMENU_ENTRY_TC(CTX(_("QMCMD^quad soon")), "say_team %s", "quad soon", CTX(_("QMCMD^quad soon")))
+ QUICKMENU_ENTRY_TC(CTX(_("QMCMD^strength soon")), "say_team %s", "strength soon", CTX(_("QMCMD^strength soon")))
QUICKMENU_ENTRY_TC(CTX(_("QMCMD^free item, icon")), "say_team %s; g_waypointsprite_team_here_p", "free item %x^7 (l:%y^7)", CTX(_("QMCMD^free item %x^7 (l:%y^7)")))
QUICKMENU_ENTRY_TC(CTX(_("QMCMD^took item, icon")), "say_team %s; g_waypointsprite_team_here", "took item (l:%l^7)", CTX(_("QMCMD^took item (l:%l^7)")))
QUICKMENU_ENTRY_TC(CTX(_("QMCMD^negative")), "say_team %s", "negative", CTX(_("QMCMD^negative")))
if(spectatee_status > 0)
{
- QUICKMENU_SMENU(CTX(_("QMCMD^Spectator camera")), "Spectator camera")
- QUICKMENU_ENTRY(CTX(_("QMCMD^1st person")), "chase_active 0; -use")
- QUICKMENU_ENTRY(CTX(_("QMCMD^3rd person around player")), "chase_active 1; +use")
- QUICKMENU_ENTRY(CTX(_("QMCMD^3rd person behind")), "chase_active 1; -use")
- QUICKMENU_SMENU(CTX(_("QMCMD^Spectator camera")), "Spectator camera")
+ QUICKMENU_ENTRY(CTX(_("QMCMD^Change spectator camera")), "dropweapon")
}
if(spectatee_status == -1)
QUICKMENU_SMENU(CTX(_("QMCMD^Observer camera")), "Observer camera")
QUICKMENU_ENTRY(CTX(_("QMCMD^Increase speed")), "weapnext")
QUICKMENU_ENTRY(CTX(_("QMCMD^Decrease speed")), "weapprev")
- QUICKMENU_ENTRY(CTX(_("QMCMD^Wall collision off")), "+use")
- QUICKMENU_ENTRY(CTX(_("QMCMD^Wall collision on")), "-use")
+ QUICKMENU_ENTRY(CTX(_("QMCMD^Wall collision")), "toggle cl_clippedspectating")
QUICKMENU_SMENU(CTX(_("QMCMD^Observer camera")), "Observer camera")
}
{
str = strcat(str, sprintf(_("^5%s %s"), ScoreString(teamscores_flags(ts_primary), fl),
(teamscores_label(ts_primary) == "score") ? CTX(_("SCO^points")) :
- (teamscores_label(ts_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (teamscores_label(ts_primary) == "fastest") ? "" :
TranslateScoresLabel(teamscores_label(ts_primary))));
}
else
{
str = strcat(str, sprintf(_("^5%s %s"), ScoreString(scores_flags(ps_primary), fl),
(scores_label(ps_primary) == "score") ? CTX(_("SCO^points")) :
- (scores_label(ps_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (scores_label(ps_primary) == "fastest") ? "" :
TranslateScoresLabel(scores_label(ps_primary))));
}
}
{
str = strcat(str, sprintf(_("^2+%s %s"), ScoreString(teamscores_flags(ts_primary), ll),
(teamscores_label(ts_primary) == "score") ? CTX(_("SCO^points")) :
- (teamscores_label(ts_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (teamscores_label(ts_primary) == "fastest") ? "" :
TranslateScoresLabel(teamscores_label(ts_primary))));
}
else
{
str = strcat(str, sprintf(_("^2+%s %s"), ScoreString(scores_flags(ps_primary), ll),
(scores_label(ps_primary) == "score") ? CTX(_("SCO^points")) :
- (scores_label(ps_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (scores_label(ps_primary) == "fastest") ? "" :
TranslateScoresLabel(scores_label(ps_primary))));
}
}
bool SetTeam(entity o, int Team)
{
TC(int, Team);
- devassert_once(Team);
+ //devassert_once(Team);
entity tm;
if(teamplay)
{
for(i_t = 0; i_t < n_t; ++i_t)
{
tri = getsurfacetriangle(e, i_s, i_t);
- R_BeginPolygon(tex, 0);
+ R_BeginPolygon(tex, 0, false);
R_PolygonVertex(getsurfacepoint(e, i_s, tri.x), getsurfacepointattribute(e, i_s, tri.x, SPA_TEXCOORDS0), '1 1 1', 1);
R_PolygonVertex(getsurfacepoint(e, i_s, tri.y), getsurfacepointattribute(e, i_s, tri.y, SPA_TEXCOORDS0), '1 1 1', 1);
R_PolygonVertex(getsurfacepoint(e, i_s, tri.z), getsurfacepointattribute(e, i_s, tri.z, SPA_TEXCOORDS0), '1 1 1', 1);
if(f >= 1)
{
// draw full rectangle
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
v.x += 0.5 * ringsize.x; t += '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
d = q - 1;
if(d > 0)
{
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
else if(f > 0.75)
{
// draw upper and first triangle
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
v.x += 0.5 * ringsize.x; t += '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
v.x -= 0.5 * ringsize.x; t -= '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
R_EndPolygon();
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
else if(f > 0.5)
{
// draw upper triangle
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
v.x += 0.5 * ringsize.x; t += '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
d = q - 0.5;
if(d > 0)
{
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
else if(f > 0.25)
{
// draw first triangle
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
d = q;
if(d > 0)
{
- R_BeginPolygon(pic, drawflag);
+ R_BeginPolygon(pic, drawflag, true);
v = centre; t = '0.5 0.5 0';
R_PolygonVertex(v, t, rgb, a);
{
fga = 1;
fgc = '1 1 1' * fg;
- R_BeginPolygon(minimapname, DRAWFLAG_SCREEN | DRAWFLAG_MIPMAP);
+ R_BeginPolygon(minimapname, DRAWFLAG_SCREEN | DRAWFLAG_MIPMAP, true);
if(v_flipped)
{
R_PolygonVertex(teamradar_texcoord_to_2dcoord(mi_pictexcoord3), yinvert(mi_pictexcoord3), fgc, fga);
else
rgb2 = '1 1 1';
- R_BeginPolygon("", 0);
+ R_BeginPolygon("", 0, true);
R_PolygonVertex(coord+forward*3, '0 0 0', rgb2, panel_fg_alpha);
R_PolygonVertex(coord+right*4-forward*2.5, '0 1 0', rgb2, panel_fg_alpha);
R_PolygonVertex(coord-forward*2, '1 0 0', rgb2, panel_fg_alpha);
R_PolygonVertex(coord-right*4-forward*2.5, '1 1 0', rgb2, panel_fg_alpha);
R_EndPolygon();
- R_BeginPolygon("", 0);
+ R_BeginPolygon("", 0, true);
R_PolygonVertex(coord+forward*2, '0 0 0', rgb, panel_fg_alpha);
R_PolygonVertex(coord+right*3-forward*2, '0 1 0', rgb, panel_fg_alpha);
R_PolygonVertex(coord-forward, '1 0 0', rgb, panel_fg_alpha);
c0 = colormapPaletteColor(colors & 0x0F, false);
c1 = colormapPaletteColor((colors & 0xF0) / 0x10, false);
- R_BeginPolygon("", 0);
+ R_BeginPolygon("", 0, true);
R_PolygonVertex(start - norm, '0 0 0', c0, panel_fg_alpha);
R_PolygonVertex(start + norm, '0 1 0', c0, panel_fg_alpha);
R_PolygonVertex(end + norm, '1 1 0', c1, panel_fg_alpha);
#define EFMASK_CHEAP (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NODRAW | EF_NOSHADOW | EF_SELECTABLE | EF_TELEPORT_BIT)
float autocvar_cl_viewmodel_scale;
-float autocvar_cl_viewmodel_alpha;
+float autocvar_cl_viewmodel_alpha = 1;
bool autocvar_cl_bobmodel;
float autocvar_cl_bobmodel_speed;
showfps_prevfps_time = currentTime; // we must initialize it to avoid an instant low frame sending
}
-float drawtime;
float avgspeed;
vector GetCurrentFov(float fov)
{
traceline(traceorigin, traceorigin + view_forward * max_shot_distance, mv, ta);
trueaimpoint = trace_endpos;
+ // move trueaimpoint a little bit forward to make the final tracebox reliable
+ // since it sometimes doesn't reach a teammate by a hair
+ trueaimpoint += view_forward;
if(vdist((trueaimpoint - traceorigin), <, g_trueaim_minrange))
trueaimpoint = traceorigin + view_forward * g_trueaim_minrange;
return 0;
}
+void View_EventChase(entity this)
+{
+ // event chase camera
+ if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
+ {
+ if(STAT(CAMERA_SPECTATOR))
+ {
+ if(spectatee_status > 0)
+ {
+ if(!autocvar_chase_active)
+ {
+ cvar_set("chase_active", "-2");
+ return;
+ }
+ }
+ else if(autocvar_chase_active == -2)
+ cvar_set("chase_active", "0");
+
+ if(autocvar_chase_active == -2)
+ return;
+ }
+ else if(autocvar_chase_active == -2)
+ cvar_set("chase_active", "0");
+
+ bool vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0));
+
+ float vehicle_viewdist = 0;
+ vector vehicle_viewofs = '0 0 0';
+
+ if(vehicle_chase)
+ {
+ if(hud != HUD_BUMBLEBEE_GUN)
+ {
+ Vehicle info = Vehicles_from(hud);
+ vehicle_viewdist = info.height;
+ vehicle_viewofs = info.view_ofs;
+ if(vehicle_viewdist < 0) // when set below 0, this vehicle doesn't use third person view (gunner slots)
+ vehicle_chase = false;
+ }
+ else
+ vehicle_chase = false;
+ }
+
+ int eventchase = WantEventchase(this, vehicle_chase);
+ if (eventchase)
+ {
+ vector current_view_origin_override = '0 0 0';
+ vector view_offset_override = '0 0 0';
+ float chase_distance_override = 0;
+ bool custom_eventchase = MUTATOR_CALLHOOK(CustomizeEventchase, this);
+ if(custom_eventchase)
+ {
+ current_view_origin_override = M_ARGV(0, vector);
+ view_offset_override = M_ARGV(1, vector);
+ chase_distance_override = M_ARGV(0, float);
+ }
+ eventchase_running = true;
+
+ // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
+ vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org);
+ if (custom_eventchase)
+ current_view_origin = current_view_origin_override;
+
+ // detect maximum viewoffset and use it
+ vector view_offset = autocvar_cl_eventchase_viewoffset;
+ if(vehicle_chase)
+ {
+ if(vehicle_viewofs)
+ view_offset = vehicle_viewofs;
+ else
+ view_offset = autocvar_cl_eventchase_vehicle_viewoffset;
+ }
+ if (custom_eventchase)
+ view_offset = view_offset_override;
+
+ if(view_offset)
+ {
+ WarpZone_TraceLine(current_view_origin, current_view_origin + view_offset + ('0 0 1' * autocvar_cl_eventchase_maxs.z), MOVE_WORLDONLY, this);
+ if(trace_fraction == 1) { current_view_origin += view_offset; }
+ else { current_view_origin.z += max(0, (trace_endpos.z - current_view_origin.z) - autocvar_cl_eventchase_maxs.z); }
+ }
+
+ // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
+ // Ideally, there should be another way to enable third person cameras, such as through setproperty()
+ // -1 enables chase_active while marking it as set by this code, and not by the user (which would be 1)
+ if(!autocvar_chase_active) { cvar_set("chase_active", "-1"); }
+
+ // make the camera smooth back
+ float chase_distance = autocvar_cl_eventchase_distance;
+ if(vehicle_chase)
+ {
+ if(vehicle_viewofs)
+ chase_distance = vehicle_viewdist;
+ else
+ chase_distance = autocvar_cl_eventchase_vehicle_distance;
+ }
+ if (custom_eventchase)
+ chase_distance = chase_distance_override;
+
+ if(autocvar_cl_eventchase_speed && eventchase_current_distance < chase_distance)
+ eventchase_current_distance += autocvar_cl_eventchase_speed * (chase_distance - eventchase_current_distance) * frametime; // slow down the further we get
+ else if(eventchase_current_distance != chase_distance)
+ eventchase_current_distance = chase_distance;
+
+ vector forward, right, up;
+ MAKE_VECTORS(view_angles, forward, right, up);
+
+ vector eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance));
+ WarpZone_TraceBox(current_view_origin, autocvar_cl_eventchase_mins, autocvar_cl_eventchase_maxs, eventchase_target_origin, MOVE_WORLDONLY, this);
+
+ // If the boxtrace fails, revert back to line tracing.
+ if(!this.viewloc)
+ if(trace_startsolid)
+ {
+ eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance));
+ WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, this);
+ setproperty(VF_ORIGIN, (trace_endpos - (forward * autocvar_cl_eventchase_mins.z)));
+ }
+ else { setproperty(VF_ORIGIN, trace_endpos); }
+
+ if(!this.viewloc)
+ setproperty(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
+ }
+
+ if (eventchase <= 0 && autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
+ {
+ eventchase_running = false;
+ cvar_set("chase_active", "0");
+ eventchase_current_distance = 0; // start from 0 next time
+ }
+ }
+ // workaround for camera stuck between player's legs when using chase_active 1
+ // because the engine stops updating the chase_active camera when the game ends
+ else if(intermission)
+ {
+ cvar_settemp("chase_active", "-1");
+ eventchase_current_distance = 0;
+ }
+}
+
void HUD_Crosshair_Vehicle(entity this)
{
if(hud != HUD_BUMBLEBEE_GUN)
if (damage_dealt_time != damage_dealt_time_prev)
{
unaccounted_damage += unaccounted_damage_new;
- LOG_TRACE("dmg total: ", ftos(unaccounted_damage), " (+", ftos(unaccounted_damage_new), ")");
+ //LOG_TRACE("dmg total: ", ftos(unaccounted_damage), " (+", ftos(unaccounted_damage_new), ")");
}
damage_dealt_time_prev = damage_dealt_time;
pitch_shift = mirror_value + (mirror_value - pitch_shift);
}
- LOG_TRACE("dmg total (dmg): ", ftos(unaccounted_damage), " , pitch shift: ", ftos(pitch_shift));
+ //LOG_TRACE("dmg total (dmg): ", ftos(unaccounted_damage), " , pitch shift: ", ftos(pitch_shift));
// todo: avoid very long and very short sounds from wave stretching using different sound files? seems unnecessary
// todo: normalize sound pressure levels? seems unnecessary
wcross_alpha_goal_prev = wcross_alpha;
wcross_color_goal_prev = wcross_color;
- if(spectatee_status == -1 && shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && autocvar_crosshair_hittest_blur && !autocvar_chase_active))
+ if(spectatee_status == 0 && (shottype == SHOTTYPE_HITTEAM || (shottype == SHOTTYPE_HITOBSTRUCTION && autocvar_crosshair_hittest_blur && !autocvar_chase_active)))
{
wcross_blur = 1;
wcross_alpha *= 0.75;
HUD_Cursor_Show();
}
-bool ov_enabled;
-float oldr_nearclip;
-float oldr_farclip_base;
-float oldr_farclip_world;
-float oldr_novis;
-float oldr_useportalculling;
-float oldr_useinfinitefarclip;
-
-float prev_myteam;
-int lasthud;
-float vh_notice_time;
-void CSQC_UpdateView(entity this, float w, float h)
+void View_NightVision()
{
- TC(int, w); TC(int, h);
- entity e;
- float fov;
- float f;
- vector vf_size, vf_min;
+ if(!(autocvar_r_fakelight >= 2 || autocvar_r_fullbright) || (serverflags & SERVERFLAG_ALLOW_FULLBRIGHT))
+ return;
+
+ // apply night vision effect
+ vector tc_00, tc_01, tc_10, tc_11;
+ vector rgb = '0 0 0';
float a;
- execute_next_frame();
+ if(!nightvision_noise)
+ {
+ nightvision_noise = new(nightvision_noise);
+ }
+ if(!nightvision_noise2)
+ {
+ nightvision_noise2 = new(nightvision_noise2);
+ }
+
+ // color tint in yellow
+ drawfill('0 0 0', autocvar_vid_conwidth * '1 0 0' + autocvar_vid_conheight * '0 1 0', '0.5 1 0.3', 1, DRAWFLAG_MODULATE);
+
+ // draw BG
+ a = Noise_Pink(nightvision_noise, frametime * 1.5) * 0.05 + 0.15;
+ rgb = '1 1 1';
+ tc_00 = '0 0 0' + '0.2 0 0' * sin(time * 0.3) + '0 0.3 0' * cos(time * 0.7);
+ tc_01 = '0 2.25 0' + '0.6 0 0' * cos(time * 1.2) - '0 0.3 0' * sin(time * 2.2);
+ tc_10 = '1.5 0 0' - '0.2 0 0' * sin(time * 0.5) + '0 0.5 0' * cos(time * 1.7);
+ //tc_11 = '1 1 0' + '0.6 0 0' * sin(time * 0.6) + '0 0.3 0' * cos(time * 0.1);
+ tc_11 = tc_01 + tc_10 - tc_00;
+ R_BeginPolygon("gfx/nightvision-bg.tga", DRAWFLAG_ADDITIVE, true);
+ R_PolygonVertex('0 0 0', tc_00, rgb, a);
+ R_PolygonVertex(autocvar_vid_conwidth * '1 0 0', tc_10, rgb, a);
+ R_PolygonVertex(autocvar_vid_conwidth * '1 0 0' + autocvar_vid_conheight * '0 1 0', tc_11, rgb, a);
+ R_PolygonVertex(autocvar_vid_conheight * '0 1 0', tc_01, rgb, a);
+ R_EndPolygon();
+
+ // draw FG
+ a = Noise_Pink(nightvision_noise2, frametime * 0.1) * 0.05 + 0.12;
+ rgb = '0.3 0.6 0.4' + '0.1 0.4 0.2' * Noise_White(nightvision_noise2, frametime);
+ tc_00 = '0 0 0' + '1 0 0' * Noise_White(nightvision_noise2, frametime) + '0 1 0' * Noise_White(nightvision_noise2, frametime);
+ tc_01 = tc_00 + '0 3 0' * (1 + Noise_White(nightvision_noise2, frametime) * 0.2);
+ tc_10 = tc_00 + '2 0 0' * (1 + Noise_White(nightvision_noise2, frametime) * 0.3);
+ tc_11 = tc_01 + tc_10 - tc_00;
+ R_BeginPolygon("gfx/nightvision-fg.tga", DRAWFLAG_ADDITIVE, true);
+ R_PolygonVertex('0 0 0', tc_00, rgb, a);
+ R_PolygonVertex(autocvar_vid_conwidth * '1 0 0', tc_10, rgb, a);
+ R_PolygonVertex(autocvar_vid_conwidth * '1 0 0' + autocvar_vid_conheight * '0 1 0', tc_11, rgb, a);
+ R_PolygonVertex(autocvar_vid_conheight * '0 1 0', tc_01, rgb, a);
+ R_EndPolygon();
+}
- ++framecount;
+void DrawReticle(entity this)
+{
+ if(!autocvar_cl_reticle || MUTATOR_CALLHOOK(DrawReticle))
+ {
+ reticle_type = 0;
+ return;
+ }
- stats_get();
- hud = STAT(HUD);
+ float is_dead = (STAT(HEALTH) <= 0);
+ string reticle_image = string_null;
+ bool wep_zoomed = false;
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ entity wepe = viewmodels[slot];
+ Weapon wep = wepe.activeweapon;
+ if(wep != WEP_Null && wep.wr_zoom)
+ {
+ bool do_zoom = wep.wr_zoom(wep, NULL);
+ if(!reticle_image && wep.w_reticle && wep.w_reticle != "")
+ reticle_image = wep.w_reticle;
+ wep_zoomed += do_zoom;
+ }
+ }
+ // Draw the aiming reticle for weapons that use it
+ // reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use
+ // It must be a persisted float for fading out to work properly (you let go of the zoom button for
+ // the view to go back to normal, so reticle_type would become 0 as we fade out)
+ if(spectatee_status || is_dead || hud != HUD_NORMAL || this.viewloc)
+ {
+ // no zoom reticle while dead
+ reticle_type = 0;
+ }
+ else if(wep_zoomed && autocvar_cl_reticle_weapon)
+ {
+ if(reticle_image) { reticle_type = 2; }
+ else { reticle_type = 0; }
+ }
+ else if(button_zoom || zoomscript_caught)
+ {
+ // normal zoom
+ reticle_type = 1;
+ }
- if(hud != HUD_NORMAL && lasthud == HUD_NORMAL)
- vh_notice_time = time + autocvar_cl_vehicles_notify_time;
+ if(reticle_type)
+ {
+ vector reticle_pos = '0 0 0', reticle_size = '0 0 0';
+ if(autocvar_cl_reticle_stretch)
+ {
+ reticle_size.x = vid_conwidth;
+ reticle_size.y = vid_conheight;
+ reticle_pos.x = 0;
+ reticle_pos.y = 0;
+ }
+ else
+ {
+ reticle_size.x = max(vid_conwidth, vid_conheight);
+ reticle_size.y = max(vid_conwidth, vid_conheight);
+ reticle_pos.x = (vid_conwidth - reticle_size.x) / 2;
+ reticle_pos.y = (vid_conheight - reticle_size.y) / 2;
+ }
- lasthud = hud;
+ float f = (zoomscript_caught) ? 1 : current_zoomfraction;
- ReplicateVars(false);
- if (ReplicateVars_NOT_SENDING())
- ReplicateVars_DELAY(0.8 + random() * 0.4); // no need to check cvars every frame
+ if(f)
+ {
+ switch(reticle_type)
+ {
+ case 1: drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * autocvar_cl_reticle_normal_alpha, DRAWFLAG_NORMAL); break;
+ case 2: if(reticle_image) drawpic(reticle_pos, reticle_image, reticle_size, '1 1 1', f * autocvar_cl_reticle_weapon_alpha, DRAWFLAG_NORMAL); break;
+ }
+ }
+ }
+}
- HUD_Scale_Disable();
+// visual overlay while in liquids
+// provides some effects to the postprocessing function
+void HUD_Contents()
+{
+ if(!autocvar_hud_contents || MUTATOR_CALLHOOK(HUD_Contents))
+ return;
- if(autocvar__hud_showbinds_reload) // menu can set this one
+ // improved polyblend
+ float contentalpha_temp, incontent, liquidalpha, contentfadetime;
+ vector liquidcolor;
+
+ switch(pointcontents(view_origin))
{
- db_close(binddb);
- binddb = db_create();
- cvar_set("_hud_showbinds_reload", "0");
+ case CONTENT_WATER:
+ liquidalpha = autocvar_hud_contents_water_alpha;
+ liquidcolor = stov(autocvar_hud_contents_water_color);
+ incontent = 1;
+ break;
+
+ case CONTENT_LAVA:
+ liquidalpha = autocvar_hud_contents_lava_alpha;
+ liquidcolor = stov(autocvar_hud_contents_lava_color);
+ incontent = 1;
+ break;
+
+ case CONTENT_SLIME:
+ liquidalpha = autocvar_hud_contents_slime_alpha;
+ liquidcolor = stov(autocvar_hud_contents_slime_color);
+ incontent = 1;
+ break;
+
+ default:
+ liquidalpha = 0;
+ liquidcolor = '0 0 0';
+ incontent = 0;
+ break;
}
- if(checkextension("DP_CSQC_MINFPS_QUALITY"))
- view_quality = getproperty(VF_MINFPS_QUALITY);
+ if(incontent) // fade in/out at different speeds so you can do e.g. instant fade when entering water and slow when leaving it.
+ { // also lets delcare previous values for blending properties, this way it isn't reset until after you have entered a different content
+ contentfadetime = autocvar_hud_contents_fadeintime;
+ liquidalpha_prev = liquidalpha;
+ liquidcolor_prev = liquidcolor;
+ }
else
- view_quality = 1;
+ contentfadetime = autocvar_hud_contents_fadeouttime;
- button_attack2 = PHYS_INPUT_BUTTON_ATCK2(this);
- button_zoom = PHYS_INPUT_BUTTON_ZOOM(this);
+ contentalpha_temp = bound(0, drawframetime / max(0.0001, contentfadetime), 1);
+ contentavgalpha = contentavgalpha * (1 - contentalpha_temp) + incontent * contentalpha_temp;
- vf_size = getpropertyvec(VF_SIZE);
- vf_min = getpropertyvec(VF_MIN);
- vid_width = vf_size.x;
- vid_height = vf_size.y;
+ if(contentavgalpha)
+ drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL);
+
+ if(autocvar_hud_postprocessing)
+ {
+ if(autocvar_hud_contents_blur && contentavgalpha)
+ {
+ content_blurpostprocess.x = 1;
+ content_blurpostprocess.y = contentavgalpha * autocvar_hud_contents_blur;
+ content_blurpostprocess.z = contentavgalpha * autocvar_hud_contents_blur_alpha;
+ }
+ else
+ {
+ content_blurpostprocess.x = 0;
+ content_blurpostprocess.y = 0;
+ content_blurpostprocess.z = 0;
+ }
+ }
+}
+
+// visual pain effects on the screen
+// provides some effects to the postprocessing function
+void HUD_Damage()
+{
+ if(!autocvar_hud_damage || STAT(FROZEN))
+ return;
- vector reticle_pos = '0 0 0', reticle_size = '0 0 0';
vector splash_pos = '0 0 0', splash_size = '0 0 0';
+ splash_size.x = max(vid_conwidth, vid_conheight);
+ splash_size.y = max(vid_conwidth, vid_conheight);
+ splash_pos.x = (vid_conwidth - splash_size.x) / 2;
+ splash_pos.y = (vid_conheight - splash_size.y) / 2;
- WaypointSprite_Load();
+ float myhealth_flash_temp;
+ myhealth = STAT(HEALTH);
- CSQCPlayer_SetCamera();
+ // fade out
+ myhealth_flash = max(0, myhealth_flash - autocvar_hud_damage_fade_rate * frametime);
+ // add new damage
+ myhealth_flash = bound(0, myhealth_flash + dmg_take * autocvar_hud_damage_factor, autocvar_hud_damage_maxalpha);
- if(player_localentnum <= maxclients) // is it a client?
- current_player = player_localentnum - 1;
- else // then player_localentnum is the vehicle I'm driving
- current_player = player_localnum;
- myteam = entcs_GetTeam(current_player);
+ float pain_threshold, pain_threshold_lower, pain_threshold_lower_health;
+ pain_threshold = autocvar_hud_damage_pain_threshold;
+ pain_threshold_lower = autocvar_hud_damage_pain_threshold_lower;
+ pain_threshold_lower_health = autocvar_hud_damage_pain_threshold_lower_health;
- if(myteam != prev_myteam)
+ if(pain_threshold_lower && myhealth < pain_threshold_lower_health)
{
- myteamcolors = colormapPaletteColor(myteam, 1);
- FOREACH(hud_panels, true, it.update_time = time);
- prev_myteam = myteam;
+ pain_threshold = pain_threshold - max(autocvar_hud_damage_pain_threshold_pulsating_min, fabs(sin(M_PI * time / autocvar_hud_damage_pain_threshold_pulsating_period))) * pain_threshold_lower * (1 - max(0, myhealth)/pain_threshold_lower_health);
}
- ticrate = STAT(MOVEVARS_TICRATE) * STAT(MOVEVARS_TIMESCALE);
-
- float is_dead = (STAT(HEALTH) <= 0);
+ myhealth_flash_temp = bound(0, myhealth_flash - pain_threshold, 1);
- // FIXME do we need this hack?
- if(isdemo())
+ if(myhealth_prev < 1)
{
- // in demos, input_buttons do not work
- button_zoom = (autocvar__togglezoom == "-");
+ if(myhealth >= 1)
+ {
+ myhealth_flash = 0; // just spawned, clear the flash immediately
+ myhealth_flash_temp = 0;
+ }
+ else
+ {
+ myhealth_flash += autocvar_hud_damage_fade_rate * frametime; // dead
+ }
}
- else if(button_zoom
- && autocvar_cl_unpress_zoom_on_death
- && (spectatee_status >= 0)
- && (is_dead || intermission))
+
+ if(spectatee_status == -1 || intermission)
{
- // no zoom while dead or in intermission please
- localcmd("-zoom\n");
- button_zoom = false;
+ myhealth_flash = 0; // observing, or match ended
+ myhealth_flash_temp = 0;
}
- // abused multiple places below
- entity local_player = ((csqcplayer) ? csqcplayer : CSQCModel_server2csqc(player_localentnum - 1));
- if(!local_player)
- local_player = this; // fall back!
+ myhealth_prev = myhealth;
- // event chase camera
- if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
+ // IDEA: change damage color/picture based on player model for robot/alien species?
+ // pro: matches model better
+ // contra: it's not red because blood is red, but because red is an alarming color, so red should stay
+ // maybe different reddish pics?
+ if(autocvar_cl_gentle_damage || autocvar_cl_gentle)
{
- if(STAT(CAMERA_SPECTATOR))
+ if(autocvar_cl_gentle_damage == 2)
{
- if(spectatee_status > 0)
- {
- if(!autocvar_chase_active)
- {
- cvar_set("chase_active", "-2");
- goto skip_eventchase_death;
- }
- }
- else if(autocvar_chase_active == -2)
- cvar_set("chase_active", "0");
-
- if(autocvar_chase_active == -2)
- goto skip_eventchase_death;
+ if(myhealth_flash < pain_threshold) // only randomize when the flash is gone
+ myhealth_gentlergb = randomvec();
}
- else if(autocvar_chase_active == -2)
- cvar_set("chase_active", "0");
-
- bool vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0));
+ else
+ myhealth_gentlergb = stov(autocvar_hud_damage_gentle_color);
- float vehicle_viewdist = 0;
- vector vehicle_viewofs = '0 0 0';
+ if(myhealth_flash_temp > 0)
+ drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), myhealth_gentlergb, autocvar_hud_damage_gentle_alpha_multiplier * bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL);
+ }
+ else if(myhealth_flash_temp > 0)
+ drawpic(splash_pos, "gfx/blood", splash_size, stov(autocvar_hud_damage_color), bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL);
- if(vehicle_chase)
+ if(autocvar_hud_postprocessing) // we still need to set this anyway even when chase_active is set, this way it doesn't get stuck on.
+ {
+ if(autocvar_hud_damage_blur && myhealth_flash_temp)
{
- if(hud != HUD_BUMBLEBEE_GUN)
- {
- Vehicle info = Vehicles_from(hud);
- vehicle_viewdist = info.height;
- vehicle_viewofs = info.view_ofs;
- if(vehicle_viewdist < 0) // when set below 0, this vehicle doesn't use third person view (gunner slots)
- vehicle_chase = false;
- }
- else
- vehicle_chase = false;
+ damage_blurpostprocess.x = 1;
+ damage_blurpostprocess.y = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur;
+ damage_blurpostprocess.z = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur_alpha;
}
+ else
+ {
+ damage_blurpostprocess.x = 0;
+ damage_blurpostprocess.y = 0;
+ damage_blurpostprocess.z = 0;
+ }
+ }
+}
- int eventchase = WantEventchase(this, vehicle_chase);
- if (eventchase)
+void View_PostProcessing()
+{
+ float e1 = (autocvar_hud_postprocessing_maxbluralpha != 0);
+ float e2 = (autocvar_hud_powerup != 0);
+ if(autocvar_hud_postprocessing && (e1 || e2)) // TODO: Remove this code and re-do the postprocess handling in the engine, where it properly belongs.
+ {
+ // enable or disable rendering types if they are used or not
+ if(cvar("r_glsl_postprocess_uservec1_enable") != e1) { cvar_set("r_glsl_postprocess_uservec1_enable", ftos(e1)); }
+ if(cvar("r_glsl_postprocess_uservec2_enable") != e2) { cvar_set("r_glsl_postprocess_uservec2_enable", ftos(e2)); }
+
+ // blur postprocess handling done first (used by hud_damage and hud_contents)
+ if((damage_blurpostprocess.x || content_blurpostprocess.x))
{
- vector current_view_origin_override = '0 0 0';
- vector view_offset_override = '0 0 0';
- float chase_distance_override = 0;
- bool custom_eventchase = MUTATOR_CALLHOOK(CustomizeEventchase, this);
- if(custom_eventchase)
+ float blurradius = bound(0, damage_blurpostprocess.y + content_blurpostprocess.y, autocvar_hud_postprocessing_maxblurradius);
+ float bluralpha = bound(0, damage_blurpostprocess.z + content_blurpostprocess.z, autocvar_hud_postprocessing_maxbluralpha);
+ if(blurradius != old_blurradius || bluralpha != old_bluralpha) // reduce cvar_set spam as much as possible
{
- current_view_origin_override = M_ARGV(0, vector);
- view_offset_override = M_ARGV(1, vector);
- chase_distance_override = M_ARGV(0, float);
+ cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(blurradius), " ", ftos(bluralpha), " 0 0"));
+ old_blurradius = blurradius;
+ old_bluralpha = bluralpha;
}
- eventchase_running = true;
+ }
+ else if(cvar_string("r_glsl_postprocess_uservec1") != "0 0 0 0") // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
+ old_blurradius = 0;
+ old_bluralpha = 0;
+ }
- // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
- vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org);
- if (custom_eventchase)
- current_view_origin = current_view_origin_override;
+ // edge detection postprocess handling done second (used by hud_powerup)
+ float sharpen_intensity = 0, strength_finished = STAT(STRENGTH_FINISHED), invincible_finished = STAT(INVINCIBLE_FINISHED);
+ if (strength_finished - time > 0) { sharpen_intensity += (strength_finished - time); }
+ if (invincible_finished - time > 0) { sharpen_intensity += (invincible_finished - time); }
- // detect maximum viewoffset and use it
- vector view_offset = autocvar_cl_eventchase_viewoffset;
- if(vehicle_chase)
- {
- if(vehicle_viewofs)
- view_offset = vehicle_viewofs;
- else
- view_offset = autocvar_cl_eventchase_vehicle_viewoffset;
- }
- if (custom_eventchase)
- view_offset = view_offset_override;
+ sharpen_intensity = bound(0, ((STAT(HEALTH) > 0) ? sharpen_intensity : 0), 5); // Check to see if player is alive (if not, set 0) - also bound to fade out starting at 5 seconds.
- if(view_offset)
+ if(autocvar_hud_powerup && sharpen_intensity > 0)
+ {
+ if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible
{
- WarpZone_TraceLine(current_view_origin, current_view_origin + view_offset + ('0 0 1' * autocvar_cl_eventchase_maxs.z), MOVE_WORLDONLY, this);
- if(trace_fraction == 1) { current_view_origin += view_offset; }
- else { current_view_origin.z += max(0, (trace_endpos.z - current_view_origin.z) - autocvar_cl_eventchase_maxs.z); }
+ cvar_set("r_glsl_postprocess_uservec2", strcat(ftos((sharpen_intensity / 5) * autocvar_hud_powerup), " ", ftos(-sharpen_intensity * autocvar_hud_powerup), " 0 0"));
+ old_sharpen_intensity = sharpen_intensity;
}
+ }
+ else if(cvar_string("r_glsl_postprocess_uservec2") != "0 0 0 0") // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0");
+ old_sharpen_intensity = 0;
+ }
- // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
- // Ideally, there should be another way to enable third person cameras, such as through setproperty()
- // -1 enables chase_active while marking it as set by this code, and not by the user (which would be 1)
- if(!autocvar_chase_active) { cvar_set("chase_active", "-1"); }
+ if(cvar("r_glsl_postprocess") == 0)
+ cvar_set("r_glsl_postprocess", "2");
+ }
+ else if(cvar("r_glsl_postprocess") == 2)
+ cvar_set("r_glsl_postprocess", "0");
+}
- // make the camera smooth back
- float chase_distance = autocvar_cl_eventchase_distance;
- if(vehicle_chase)
- {
- if(vehicle_viewofs)
- chase_distance = vehicle_viewdist;
- else
- chase_distance = autocvar_cl_eventchase_vehicle_distance;
- }
- if (custom_eventchase)
- chase_distance = chase_distance_override;
+void View_Lock()
+{
+ if(autocvar_cl_lockview || (!autocvar_hud_cursormode && (autocvar__hud_configure && spectatee_status <= 0 || intermission > 1 || QuickMenu_IsOpened())))
+ {
+ setproperty(VF_ORIGIN, freeze_org);
+ setproperty(VF_ANGLES, freeze_ang);
+ }
+ else
+ {
+ freeze_org = getpropertyvec(VF_ORIGIN);
+ freeze_ang = getpropertyvec(VF_ANGLES);
+ }
+}
- if(autocvar_cl_eventchase_speed && eventchase_current_distance < chase_distance)
- eventchase_current_distance += autocvar_cl_eventchase_speed * (chase_distance - eventchase_current_distance) * frametime; // slow down the further we get
- else if(eventchase_current_distance != chase_distance)
- eventchase_current_distance = chase_distance;
+void View_DemoCamera()
+{
+ if(camera_active) // Camera for demo playback
+ {
+ if(autocvar_camera_enable)
+ CSQC_Demo_Camera();
+ else
+ {
+ cvar_set("chase_active", ftos(chase_active_backup));
+ cvar_set("cl_demo_mousegrab", "0");
+ camera_active = false;
+ }
+ }
+ else
+ {
+#ifdef CAMERATEST
+ if(autocvar_camera_enable)
+#else
+ if(autocvar_camera_enable && isdemo())
+#endif
+ {
+ // Enable required Darkplaces cvars
+ chase_active_backup = autocvar_chase_active;
+ cvar_set("chase_active", "2");
+ cvar_set("cl_demo_mousegrab", "1");
+ camera_active = true;
+ camera_mode = false;
+ }
+ }
+}
- vector forward, right, up;
- MAKE_VECTORS(view_angles, forward, right, up);
+#ifdef BLURTEST
+void View_BlurTest()
+{
+ if(time > blurtest_time0 && time < blurtest_time1)
+ {
+ float t = (time - blurtest_time0) / (blurtest_time1 - blurtest_time0);
+ float r = t * blurtest_radius;
+ float f = 1 / (t ** blurtest_power) - 1;
- vector eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance));
- WarpZone_TraceBox(current_view_origin, autocvar_cl_eventchase_mins, autocvar_cl_eventchase_maxs, eventchase_target_origin, MOVE_WORLDONLY, this);
+ cvar_set("r_glsl_postprocess", "1");
+ cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(r), " ", ftos(f), " 0 0"));
+ }
+ else
+ {
+ cvar_set("r_glsl_postprocess", "0");
+ cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
+ }
+}
+#endif
- // If the boxtrace fails, revert back to line tracing.
- if(!local_player.viewloc)
- if(trace_startsolid)
- {
- eventchase_target_origin = (current_view_origin - (forward * eventchase_current_distance));
- WarpZone_TraceLine(current_view_origin, eventchase_target_origin, MOVE_WORLDONLY, this);
- setproperty(VF_ORIGIN, (trace_endpos - (forward * autocvar_cl_eventchase_mins.z)));
- }
- else { setproperty(VF_ORIGIN, trace_endpos); }
+void View_CheckButtonStatus()
+{
+ float is_dead = (STAT(HEALTH) <= 0);
- if(!local_player.viewloc)
- setproperty(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
- }
+ // FIXME do we need this hack?
+ if(isdemo())
+ {
+ // in demos, input_buttons do not work
+ button_zoom = (autocvar__togglezoom == "-");
+ }
+ else if(button_zoom
+ && autocvar_cl_unpress_zoom_on_death
+ && (spectatee_status >= 0)
+ && (is_dead || intermission))
+ {
+ // no zoom while dead or in intermission please
+ localcmd("-zoom\n");
+ button_zoom = false;
+ }
- if (eventchase <= 0 && autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
+ if(autocvar_fov <= 59.5)
+ {
+ if(!zoomscript_caught)
{
- eventchase_running = false;
- cvar_set("chase_active", "0");
- eventchase_current_distance = 0; // start from 0 next time
+ localcmd("+button9\n");
+ zoomscript_caught = 1;
}
}
- // workaround for camera stuck between player's legs when using chase_active 1
- // because the engine stops updating the chase_active camera when the game ends
- else if(intermission)
+ else
{
- cvar_settemp("chase_active", "-1");
- eventchase_current_distance = 0;
+ if(zoomscript_caught)
+ {
+ localcmd("-button9\n");
+ zoomscript_caught = 0;
+ }
}
- LABEL(skip_eventchase_death);
-
- // do lockview after event chase camera so that it still applies whenever necessary.
- if(autocvar_cl_lockview || (!autocvar_hud_cursormode && (autocvar__hud_configure && spectatee_status <= 0 || intermission > 1 || QuickMenu_IsOpened())))
+ if(active_minigame && HUD_MinigameMenu_IsOpened())
{
- setproperty(VF_ORIGIN, freeze_org);
- setproperty(VF_ANGLES, freeze_ang);
+ if(!minigame_wasactive)
+ {
+ localcmd("+button12\n");
+ minigame_wasactive = true;
+ }
}
- else
+ else if(minigame_wasactive)
{
- freeze_org = getpropertyvec(VF_ORIGIN);
- freeze_ang = getpropertyvec(VF_ANGLES);
+ localcmd("-button12\n");
+ minigame_wasactive = false;
}
- WarpZone_FixView();
- //WarpZone_FixPMove();
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ entity wepent = viewmodels[slot];
+
+ if(wepent.last_switchweapon != wepent.switchweapon)
+ {
+ weapontime = time;
+ wepent.last_switchweapon = wepent.switchweapon;
+ if(slot == 0 && button_zoom && autocvar_cl_unpress_zoom_on_weapon_switch)
+ {
+ localcmd("-zoom\n");
+ button_zoom = false;
+ }
+ if(slot == 0 && autocvar_cl_unpress_attack_on_weapon_switch)
+ {
+ localcmd("-fire\n");
+ localcmd("-fire2\n");
+ button_attack2 = false;
+ }
+ }
+ if(wepent.last_activeweapon != wepent.activeweapon)
+ {
+ wepent.last_activeweapon = wepent.activeweapon;
+
+ entity e = wepent.activeweapon;
+ if(e.netname != "")
+ localcmd(strcat("\ncl_hook_activeweapon ", e.netname), "\n");
+ else if(slot == 0)
+ localcmd("\ncl_hook_activeweapon none\n");
+ }
+ }
+}
- vector ov_org = '0 0 0';
- vector ov_mid = '0 0 0';
- vector ov_worldmin = '0 0 0';
- vector ov_worldmax = '0 0 0';
+bool ov_enabled;
+float oldr_nearclip;
+float oldr_farclip_base;
+float oldr_farclip_world;
+float oldr_novis;
+float oldr_useportalculling;
+float oldr_useinfinitefarclip;
+vector ov_org = '0 0 0';
+vector ov_mid = '0 0 0';
+vector ov_worldmin = '0 0 0';
+vector ov_worldmax = '0 0 0';
+
+void View_Ortho()
+{
+ ov_org = '0 0 0';
+ ov_mid = '0 0 0';
+ ov_worldmin = '0 0 0';
+ ov_worldmax = '0 0 0';
if(autocvar_cl_orthoview)
{
ov_worldmin = mi_picmin;
}
ov_enabled = false;
}
+}
+
+void View_UpdateFov()
+{
+ vector fov;
+ if(autocvar_cl_orthoview)
+ fov = GetOrthoviewFOV(ov_worldmin, ov_worldmax, ov_mid, ov_org);
+ else if(csqcplayer.viewloc)
+ fov = GetViewLocationFOV(110); // enforce 110 fov, so things don't look odd
+ else
+ fov = GetCurrentFov(autocvar_fov);
+
+ setproperty(VF_FOV, fov);
+}
+
+void CSQC_UpdateView(entity this, float w, float h)
+{
+ TC(int, w); TC(int, h);
+
+ execute_next_frame();
+
+ ++framecount;
+
+ stats_get();
+ hud = STAT(HUD);
+
+ ReplicateVars(false);
+ if (ReplicateVars_NOT_SENDING())
+ ReplicateVars_DELAY(0.8 + random() * 0.4); // no need to check cvars every frame
+
+ HUD_Scale_Disable();
+
+ if(autocvar__hud_showbinds_reload) // menu can set this one
+ {
+ db_close(binddb);
+ binddb = db_create();
+ cvar_set("_hud_showbinds_reload", "0");
+ }
+
+ if(checkextension("DP_CSQC_MINFPS_QUALITY"))
+ view_quality = getproperty(VF_MINFPS_QUALITY);
+ else
+ view_quality = 1;
+
+ button_attack2 = PHYS_INPUT_BUTTON_ATCK2(this);
+ button_zoom = PHYS_INPUT_BUTTON_ZOOM(this);
+
+ vector vf_size = getpropertyvec(VF_SIZE);
+ vector vf_min = getpropertyvec(VF_MIN);
+ vid_width = vf_size.x;
+ vid_height = vf_size.y;
+
+ WaypointSprite_Load();
+
+ CSQCPlayer_SetCamera();
+
+ if(player_localentnum <= maxclients) // is it a client?
+ current_player = player_localentnum - 1;
+ else // then player_localentnum is the vehicle I'm driving
+ current_player = player_localnum;
+ myteam = entcs_GetTeam(current_player);
+
+ ticrate = STAT(MOVEVARS_TICRATE) * STAT(MOVEVARS_TIMESCALE);
+
+ // abused multiple places below
+ entity local_player = ((csqcplayer) ? csqcplayer : CSQCModel_server2csqc(player_localentnum - 1));
+ if(!local_player)
+ local_player = this; // fall back!
+
+ View_EventChase(local_player);
+
+ // do lockview after event chase camera so that it still applies whenever necessary.
+ View_Lock();
+
+ WarpZone_FixView();
+ //WarpZone_FixPMove();
+
+ View_Ortho();
// run viewmodel_draw before updating view_angles to the angles calculated by WarpZone_FixView
// viewmodel_draw needs to use the view_angles set by the engine on every CSQC_UpdateView call
view_angles = getpropertyvec(VF_ANGLES);
MAKE_VECTORS(view_angles, view_forward, view_right, view_up);
-#ifdef BLURTEST
- if(time > blurtest_time0 && time < blurtest_time1)
- {
- float r, t;
-
- t = (time - blurtest_time0) / (blurtest_time1 - blurtest_time0);
- r = t * blurtest_radius;
- f = 1 / (t ** blurtest_power) - 1;
-
- cvar_set("r_glsl_postprocess", "1");
- cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(r), " ", ftos(f), " 0 0"));
- }
- else
- {
- cvar_set("r_glsl_postprocess", "0");
- cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
- }
+#ifdef BLURTEST
+ View_BlurTest();
#endif
TargetMusic_Advance();
Announcer();
- fov = autocvar_fov;
- if(fov <= 59.5)
- {
- if(!zoomscript_caught)
- {
- localcmd("+button9\n");
- zoomscript_caught = 1;
- }
- }
- else
- {
- if(zoomscript_caught)
- {
- localcmd("-button9\n");
- zoomscript_caught = 0;
- }
- }
-
- if(active_minigame && HUD_MinigameMenu_IsOpened())
- {
- if(!minigame_wasactive)
- {
- localcmd("+button12\n");
- minigame_wasactive = true;
- }
- }
- else if(minigame_wasactive)
- {
- localcmd("-button12\n");
- minigame_wasactive = false;
- }
+ View_CheckButtonStatus();
ColorTranslateMode = autocvar_cl_stripcolorcodes;
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- entity wepent = viewmodels[slot];
-
- if(wepent.last_switchweapon != wepent.switchweapon)
- {
- weapontime = time;
- wepent.last_switchweapon = wepent.switchweapon;
- if(slot == 0 && button_zoom && autocvar_cl_unpress_zoom_on_weapon_switch)
- {
- localcmd("-zoom\n");
- button_zoom = false;
- }
- if(slot == 0 && autocvar_cl_unpress_attack_on_weapon_switch)
- {
- localcmd("-fire\n");
- localcmd("-fire2\n");
- button_attack2 = false;
- }
- }
- if(wepent.last_activeweapon != wepent.activeweapon)
- {
- wepent.last_activeweapon = wepent.activeweapon;
-
- e = wepent.activeweapon;
- if(e.netname != "")
- localcmd(strcat("\ncl_hook_activeweapon ", e.netname), "\n");
- else if(slot == 0)
- localcmd("\ncl_hook_activeweapon none\n");
- }
- }
-
// ALWAYS Clear Current Scene First
clearscene();
vid_conheight = autocvar_vid_conheight;
vid_pixelheight = autocvar_vid_pixelheight;
- if(autocvar_cl_orthoview) { setproperty(VF_FOV, GetOrthoviewFOV(ov_worldmin, ov_worldmax, ov_mid, ov_org)); }
- else if(csqcplayer.viewloc) { setproperty(VF_FOV, GetViewLocationFOV(110)); } // enforce 110 fov, so things dont look odd
- else { setproperty(VF_FOV, GetCurrentFov(fov)); }
+ View_UpdateFov();
- if(camera_active) // Camera for demo playback
- {
- if(autocvar_camera_enable)
- CSQC_Demo_Camera();
- else
- {
- cvar_set("chase_active", ftos(chase_active_backup));
- cvar_set("cl_demo_mousegrab", "0");
- camera_active = false;
- }
- }
- else
- {
-#ifdef CAMERATEST
- if(autocvar_camera_enable)
-#else
- if(autocvar_camera_enable && isdemo())
-#endif
- {
- // Enable required Darkplaces cvars
- chase_active_backup = autocvar_chase_active;
- cvar_set("chase_active", "2");
- cvar_set("cl_demo_mousegrab", "1");
- camera_active = true;
- camera_mode = false;
- }
- }
+ View_DemoCamera();
// Draw the Crosshair
setproperty(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden
// next R_RenderScene call
drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
- if(autocvar_r_fakelight >= 2 || autocvar_r_fullbright)
- if (!(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT))
- {
- // apply night vision effect
- vector tc_00, tc_01, tc_10, tc_11;
- vector rgb = '0 0 0';
-
- if(!nightvision_noise)
- {
- nightvision_noise = new(nightvision_noise);
- }
- if(!nightvision_noise2)
- {
- nightvision_noise2 = new(nightvision_noise2);
- }
-
- // color tint in yellow
- drawfill('0 0 0', autocvar_vid_conwidth * '1 0 0' + autocvar_vid_conheight * '0 1 0', '0.5 1 0.3', 1, DRAWFLAG_MODULATE);
-
- // draw BG
- a = Noise_Pink(nightvision_noise, frametime * 1.5) * 0.05 + 0.15;
- rgb = '1 1 1';
- tc_00 = '0 0 0' + '0.2 0 0' * sin(time * 0.3) + '0 0.3 0' * cos(time * 0.7);
- tc_01 = '0 2.25 0' + '0.6 0 0' * cos(time * 1.2) - '0 0.3 0' * sin(time * 2.2);
- tc_10 = '1.5 0 0' - '0.2 0 0' * sin(time * 0.5) + '0 0.5 0' * cos(time * 1.7);
- //tc_11 = '1 1 0' + '0.6 0 0' * sin(time * 0.6) + '0 0.3 0' * cos(time * 0.1);
- tc_11 = tc_01 + tc_10 - tc_00;
- R_BeginPolygon("gfx/nightvision-bg.tga", DRAWFLAG_ADDITIVE);
- R_PolygonVertex('0 0 0', tc_00, rgb, a);
- R_PolygonVertex(autocvar_vid_conwidth * '1 0 0', tc_10, rgb, a);
- R_PolygonVertex(autocvar_vid_conwidth * '1 0 0' + autocvar_vid_conheight * '0 1 0', tc_11, rgb, a);
- R_PolygonVertex(autocvar_vid_conheight * '0 1 0', tc_01, rgb, a);
- R_EndPolygon();
-
- // draw FG
- a = Noise_Pink(nightvision_noise2, frametime * 0.1) * 0.05 + 0.12;
- rgb = '0.3 0.6 0.4' + '0.1 0.4 0.2' * Noise_White(nightvision_noise2, frametime);
- tc_00 = '0 0 0' + '1 0 0' * Noise_White(nightvision_noise2, frametime) + '0 1 0' * Noise_White(nightvision_noise2, frametime);
- tc_01 = tc_00 + '0 3 0' * (1 + Noise_White(nightvision_noise2, frametime) * 0.2);
- tc_10 = tc_00 + '2 0 0' * (1 + Noise_White(nightvision_noise2, frametime) * 0.3);
- tc_11 = tc_01 + tc_10 - tc_00;
- R_BeginPolygon("gfx/nightvision-fg.tga", DRAWFLAG_ADDITIVE);
- R_PolygonVertex('0 0 0', tc_00, rgb, a);
- R_PolygonVertex(autocvar_vid_conwidth * '1 0 0', tc_10, rgb, a);
- R_PolygonVertex(autocvar_vid_conwidth * '1 0 0' + autocvar_vid_conheight * '0 1 0', tc_11, rgb, a);
- R_PolygonVertex(autocvar_vid_conheight * '0 1 0', tc_01, rgb, a);
- R_EndPolygon();
- }
-
- if(autocvar_cl_reticle && !MUTATOR_CALLHOOK(DrawReticle))
- {
- string reticle_image = string_null;
- bool wep_zoomed = false;
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- entity wepe = viewmodels[slot];
- Weapon wep = wepe.activeweapon;
- if(wep != WEP_Null && wep.wr_zoom)
- {
- bool do_zoom = wep.wr_zoom(wep, NULL);
- if(!reticle_image && wep.w_reticle && wep.w_reticle != "")
- reticle_image = wep.w_reticle;
- wep_zoomed += do_zoom;
- }
- }
- // Draw the aiming reticle for weapons that use it
- // reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use
- // It must be a persisted float for fading out to work properly (you let go of the zoom button for
- // the view to go back to normal, so reticle_type would become 0 as we fade out)
- if(spectatee_status || is_dead || hud != HUD_NORMAL || local_player.viewloc)
- {
- // no zoom reticle while dead
- reticle_type = 0;
- }
- else if(wep_zoomed && autocvar_cl_reticle_weapon)
- {
- if(reticle_image) { reticle_type = 2; }
- else { reticle_type = 0; }
- }
- else if(button_zoom || zoomscript_caught)
- {
- // normal zoom
- reticle_type = 1;
- }
-
- if(reticle_type)
- {
- if(autocvar_cl_reticle_stretch)
- {
- reticle_size.x = vid_conwidth;
- reticle_size.y = vid_conheight;
- reticle_pos.x = 0;
- reticle_pos.y = 0;
- }
- else
- {
- reticle_size.x = max(vid_conwidth, vid_conheight);
- reticle_size.y = max(vid_conwidth, vid_conheight);
- reticle_pos.x = (vid_conwidth - reticle_size.x) / 2;
- reticle_pos.y = (vid_conheight - reticle_size.y) / 2;
- }
-
- if(zoomscript_caught)
- f = 1;
- else
- f = current_zoomfraction;
-
- if(f)
- {
- switch(reticle_type)
- {
- case 1: drawpic(reticle_pos, "gfx/reticle_normal", reticle_size, '1 1 1', f * autocvar_cl_reticle_normal_alpha, DRAWFLAG_NORMAL); break;
- case 2: if(reticle_image) drawpic(reticle_pos, reticle_image, reticle_size, '1 1 1', f * autocvar_cl_reticle_weapon_alpha, DRAWFLAG_NORMAL); break;
- }
- }
- }
- }
- else
- {
- if(reticle_type != 0) { reticle_type = 0; }
- }
-
-
- // improved polyblend
- if(autocvar_hud_contents && !MUTATOR_CALLHOOK(HUD_Contents))
- {
- float contentalpha_temp, incontent, liquidalpha, contentfadetime;
- vector liquidcolor;
-
- switch(pointcontents(view_origin))
- {
- case CONTENT_WATER:
- liquidalpha = autocvar_hud_contents_water_alpha;
- liquidcolor = stov(autocvar_hud_contents_water_color);
- incontent = 1;
- break;
-
- case CONTENT_LAVA:
- liquidalpha = autocvar_hud_contents_lava_alpha;
- liquidcolor = stov(autocvar_hud_contents_lava_color);
- incontent = 1;
- break;
-
- case CONTENT_SLIME:
- liquidalpha = autocvar_hud_contents_slime_alpha;
- liquidcolor = stov(autocvar_hud_contents_slime_color);
- incontent = 1;
- break;
-
- default:
- liquidalpha = 0;
- liquidcolor = '0 0 0';
- incontent = 0;
- break;
- }
-
- if(incontent) // fade in/out at different speeds so you can do e.g. instant fade when entering water and slow when leaving it.
- { // also lets delcare previous values for blending properties, this way it isn't reset until after you have entered a different content
- contentfadetime = autocvar_hud_contents_fadeintime;
- liquidalpha_prev = liquidalpha;
- liquidcolor_prev = liquidcolor;
- }
- else
- contentfadetime = autocvar_hud_contents_fadeouttime;
-
- contentalpha_temp = bound(0, drawframetime / max(0.0001, contentfadetime), 1);
- contentavgalpha = contentavgalpha * (1 - contentalpha_temp) + incontent * contentalpha_temp;
-
- if(contentavgalpha)
- drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL);
-
- if(autocvar_hud_postprocessing)
- {
- if(autocvar_hud_contents_blur && contentavgalpha)
- {
- content_blurpostprocess.x = 1;
- content_blurpostprocess.y = contentavgalpha * autocvar_hud_contents_blur;
- content_blurpostprocess.z = contentavgalpha * autocvar_hud_contents_blur_alpha;
- }
- else
- {
- content_blurpostprocess.x = 0;
- content_blurpostprocess.y = 0;
- content_blurpostprocess.z = 0;
- }
- }
- }
-
- if(autocvar_hud_damage && !STAT(FROZEN))
- {
- splash_size.x = max(vid_conwidth, vid_conheight);
- splash_size.y = max(vid_conwidth, vid_conheight);
- splash_pos.x = (vid_conwidth - splash_size.x) / 2;
- splash_pos.y = (vid_conheight - splash_size.y) / 2;
-
- float myhealth_flash_temp;
- myhealth = STAT(HEALTH);
-
- // fade out
- myhealth_flash = max(0, myhealth_flash - autocvar_hud_damage_fade_rate * frametime);
- // add new damage
- myhealth_flash = bound(0, myhealth_flash + dmg_take * autocvar_hud_damage_factor, autocvar_hud_damage_maxalpha);
-
- float pain_threshold, pain_threshold_lower, pain_threshold_lower_health;
- pain_threshold = autocvar_hud_damage_pain_threshold;
- pain_threshold_lower = autocvar_hud_damage_pain_threshold_lower;
- pain_threshold_lower_health = autocvar_hud_damage_pain_threshold_lower_health;
-
- if(pain_threshold_lower && myhealth < pain_threshold_lower_health)
- {
- pain_threshold = pain_threshold - max(autocvar_hud_damage_pain_threshold_pulsating_min, fabs(sin(M_PI * time / autocvar_hud_damage_pain_threshold_pulsating_period))) * pain_threshold_lower * (1 - max(0, myhealth)/pain_threshold_lower_health);
- }
-
- myhealth_flash_temp = bound(0, myhealth_flash - pain_threshold, 1);
-
- if(myhealth_prev < 1)
- {
- if(myhealth >= 1)
- {
- myhealth_flash = 0; // just spawned, clear the flash immediately
- myhealth_flash_temp = 0;
- }
- else
- {
- myhealth_flash += autocvar_hud_damage_fade_rate * frametime; // dead
- }
- }
-
- if(spectatee_status == -1 || intermission)
- {
- myhealth_flash = 0; // observing, or match ended
- myhealth_flash_temp = 0;
- }
-
- myhealth_prev = myhealth;
-
- // IDEA: change damage color/picture based on player model for robot/alien species?
- // pro: matches model better
- // contra: it's not red because blood is red, but because red is an alarming color, so red should stay
- // maybe different reddish pics?
- if(autocvar_cl_gentle_damage || autocvar_cl_gentle)
- {
- if(autocvar_cl_gentle_damage == 2)
- {
- if(myhealth_flash < pain_threshold) // only randomize when the flash is gone
- myhealth_gentlergb = randomvec();
- }
- else
- myhealth_gentlergb = stov(autocvar_hud_damage_gentle_color);
-
- if(myhealth_flash_temp > 0)
- drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), myhealth_gentlergb, autocvar_hud_damage_gentle_alpha_multiplier * bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL);
- }
- else if(myhealth_flash_temp > 0)
- drawpic(splash_pos, "gfx/blood", splash_size, stov(autocvar_hud_damage_color), bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL);
-
- if(autocvar_hud_postprocessing) // we still need to set this anyway even when chase_active is set, this way it doesn't get stuck on.
- {
- if(autocvar_hud_damage_blur && myhealth_flash_temp)
- {
- damage_blurpostprocess.x = 1;
- damage_blurpostprocess.y = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur;
- damage_blurpostprocess.z = bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage_blur_alpha;
- }
- else
- {
- damage_blurpostprocess.x = 0;
- damage_blurpostprocess.y = 0;
- damage_blurpostprocess.z = 0;
- }
- }
- }
-
- float e1 = (autocvar_hud_postprocessing_maxbluralpha != 0);
- float e2 = (autocvar_hud_powerup != 0);
- if(autocvar_hud_postprocessing && (e1 || e2)) // TODO: Remove this code and re-do the postprocess handling in the engine, where it properly belongs.
- {
- // enable or disable rendering types if they are used or not
- if(cvar("r_glsl_postprocess_uservec1_enable") != e1) { cvar_set("r_glsl_postprocess_uservec1_enable", ftos(e1)); }
- if(cvar("r_glsl_postprocess_uservec2_enable") != e2) { cvar_set("r_glsl_postprocess_uservec2_enable", ftos(e2)); }
-
- // blur postprocess handling done first (used by hud_damage and hud_contents)
- if((damage_blurpostprocess.x || content_blurpostprocess.x))
- {
- float blurradius = bound(0, damage_blurpostprocess.y + content_blurpostprocess.y, autocvar_hud_postprocessing_maxblurradius);
- float bluralpha = bound(0, damage_blurpostprocess.z + content_blurpostprocess.z, autocvar_hud_postprocessing_maxbluralpha);
- if(blurradius != old_blurradius || bluralpha != old_bluralpha) // reduce cvar_set spam as much as possible
- {
- cvar_set("r_glsl_postprocess_uservec1", strcat(ftos(blurradius), " ", ftos(bluralpha), " 0 0"));
- old_blurradius = blurradius;
- old_bluralpha = bluralpha;
- }
- }
- else if(cvar_string("r_glsl_postprocess_uservec1") != "0 0 0 0") // reduce cvar_set spam as much as possible
- {
- cvar_set("r_glsl_postprocess_uservec1", "0 0 0 0");
- old_blurradius = 0;
- old_bluralpha = 0;
- }
-
- // edge detection postprocess handling done second (used by hud_powerup)
- float sharpen_intensity = 0, strength_finished = STAT(STRENGTH_FINISHED), invincible_finished = STAT(INVINCIBLE_FINISHED);
- if (strength_finished - time > 0) { sharpen_intensity += (strength_finished - time); }
- if (invincible_finished - time > 0) { sharpen_intensity += (invincible_finished - time); }
-
- sharpen_intensity = bound(0, ((STAT(HEALTH) > 0) ? sharpen_intensity : 0), 5); // Check to see if player is alive (if not, set 0) - also bound to fade out starting at 5 seconds.
-
- if(autocvar_hud_powerup && sharpen_intensity > 0)
- {
- if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible
- {
- cvar_set("r_glsl_postprocess_uservec2", strcat(ftos((sharpen_intensity / 5) * autocvar_hud_powerup), " ", ftos(-sharpen_intensity * autocvar_hud_powerup), " 0 0"));
- old_sharpen_intensity = sharpen_intensity;
- }
- }
- else if(cvar_string("r_glsl_postprocess_uservec2") != "0 0 0 0") // reduce cvar_set spam as much as possible
- {
- cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0");
- old_sharpen_intensity = 0;
- }
-
- if(cvar("r_glsl_postprocess") == 0)
- cvar_set("r_glsl_postprocess", "2");
- }
- else if(cvar("r_glsl_postprocess") == 2)
- cvar_set("r_glsl_postprocess", "0");
-
- /*if(ISGAMETYPE(CTF))
- {
- ctf_view();
- } else */
+ View_NightVision();
+ DrawReticle(local_player);
+ HUD_Contents();
+ HUD_Damage();
+ View_PostProcessing();
// draw 2D entities
IL_EACH(g_drawables_2d, it.draw2d, it.draw2d(it));
const int CURSOR_MOVE = 1;
const int CURSOR_RESIZE = 2;
const int CURSOR_RESIZE2 = 3;
+
+float drawtime;
}
}
-GENERIC_COMMAND(dumpcommands, "Dump all commands on the program to <program>_cmd_dump.txt")
+GENERIC_COMMAND(dumpcommands, "Dump all commands on the program to <program>_cmd_dump.txt", false)
{
switch(request)
{
*/
// Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
-GENERIC_COMMAND(addtolist, "Add a string to a cvar") { GenericCommand_addtolist(request, arguments); }
-GENERIC_COMMAND(maplist, "Automatic control of maplist") { GenericCommand_maplist(request, arguments); }
-GENERIC_COMMAND(nextframe, "Execute the given command next frame of this VM") { GenericCommand_nextframe(request, command); }
-GENERIC_COMMAND(qc_curl, "Queries a URL") { GenericCommand_qc_curl(request, arguments); }
-GENERIC_COMMAND(removefromlist, "Remove a string from a cvar") { GenericCommand_removefromlist(request, arguments); }
-GENERIC_COMMAND(restartnotifs, "Re-initialize all notifications") { GenericCommand_restartnotifs(request); }
-GENERIC_COMMAND(rpn, "RPN calculator") { GenericCommand_rpn(request, arguments, command); }
-GENERIC_COMMAND(settemp, "Temporarily set a value to a cvar which is restored later") { GenericCommand_settemp(request, arguments); }
-GENERIC_COMMAND(settemp_restore, "Restore all cvars set by settemp command") { GenericCommand_settemp_restore(request); }
-GENERIC_COMMAND(runtest, "Run unit tests") { GenericCommand_runtest(request, arguments); }
+GENERIC_COMMAND(addtolist, "Add a string to a cvar", true) { GenericCommand_addtolist(request, arguments); }
+GENERIC_COMMAND(maplist, "Automatic control of maplist", true) { GenericCommand_maplist(request, arguments); }
+GENERIC_COMMAND(nextframe, "Execute the given command next frame of this VM", true) { GenericCommand_nextframe(request, command); }
+GENERIC_COMMAND(qc_curl, "Queries a URL", true) { GenericCommand_qc_curl(request, arguments); }
+GENERIC_COMMAND(removefromlist, "Remove a string from a cvar", true) { GenericCommand_removefromlist(request, arguments); }
+GENERIC_COMMAND(restartnotifs, "Re-initialize all notifications", false) { GenericCommand_restartnotifs(request); }
+GENERIC_COMMAND(rpn, "RPN calculator", true) { GenericCommand_rpn(request, arguments, command); }
+GENERIC_COMMAND(settemp, "Temporarily set a value to a cvar which is restored later", false) { GenericCommand_settemp(request, arguments); }
+GENERIC_COMMAND(settemp_restore, "Restore all cvars set by settemp command", false) { GenericCommand_settemp_restore(request); }
+GENERIC_COMMAND(runtest, "Run unit tests", false) { GenericCommand_runtest(request, arguments); }
void GenericCommand_macro_help()
{
REGISTER_REGISTRY(GENERIC_COMMANDS)
REGISTRY_SORT(GENERIC_COMMANDS)
-#define GENERIC_COMMAND(id, description) \
+.bool m_menubased; // switch to tell whether this alias should be registered as a menu or client based command
+
+#define GENERIC_COMMAND(id, description, menubased) \
CLASS(genericcommand_##id, Command) \
ATTRIB(genericcommand_##id, m_name, string, #id); \
ATTRIB(genericcommand_##id, m_description, string, description); \
+ ATTRIB(genericcommand_##id, m_menubased, bool, menubased); \
ENDCLASS(genericcommand_##id) \
REGISTER(GENERIC_COMMANDS, CMD_G, id, m_id, NEW(genericcommand_##id)); \
METHOD(genericcommand_##id, m_invokecmd, void(genericcommand_##id this, int request, entity caller, int arguments, string command))
STATIC_INIT(GENERIC_COMMANDS_aliases) {
- FOREACH(GENERIC_COMMANDS, true, localcmd(sprintf("alias %1$s \"%2$s %1$s ${* ?}\"\n", it.m_name, "qc_cmd_svmenu")));
+ FOREACH(GENERIC_COMMANDS, true, localcmd(sprintf("alias %1$s \"%2$s %1$s ${* ?}\"\n", it.m_name, ((it.m_menubased) ? "qc_cmd_svmenu" : "qc_cmd_svcl"))));
}
void rpn_pushf(float f) { return rpn_push(sprintf("%.9g", f)); }
void rpn_setf(float f) { return rpn_set(sprintf("%.9g", f)); }
+SHUTDOWN(_rpndb)
+{
+ if(rpn_db)
+ db_close(rpn_db);
+}
+
void GenericCommand_rpn(int request, int argc, string command)
{
switch(request)
#endif
-GENERIC_COMMAND(bufstr_get, "Examine a string buffer object")
+GENERIC_COMMAND(bufstr_get, "Examine a string buffer object", false)
{
switch (request)
{
}
-GENERIC_COMMAND(version, "Print the current version")
+GENERIC_COMMAND(version, "Print the current version", false)
{
switch (request)
{
#ifdef CSQC
void(float bufhandle, string pattern, string antipattern) buf_cvarlist = #517;
#endif
-GENERIC_COMMAND(cvar_localchanges, "Print locally changed cvars")
+GENERIC_COMMAND(cvar_localchanges, "Print locally changed cvars", false)
{
switch (request)
{
#endif
-GENERIC_COMMAND(find, "Search through entities for matching classname")
+GENERIC_COMMAND(find, "Search through entities for matching classname", false)
{
switch (request)
{
}
-GENERIC_COMMAND(findat, "Search through entities for matching origin")
+GENERIC_COMMAND(findat, "Search through entities for matching origin", false)
{
switch (request)
{
#undef WRITE
}
-GENERIC_COMMAND(dumpeffectinfo, "Dump all effectinfo to effectinfo_dump.txt")
+GENERIC_COMMAND(dumpeffectinfo, "Dump all effectinfo to effectinfo_dump.txt", false)
{
switch (request) {
case CMD_REQUEST_COMMAND: {
#ifdef SVQC
void SpawnCasing(vector vel, float randomvel, vector ang, vector avel, float randomavel, int casingtype, entity casingowner, .entity weaponentity)
{
- if (!(CS(casingowner).cvar_cl_casings))
- return;
-
- entity wep = casingowner.(weaponentity);
- vector org = casingowner.origin + casingowner.view_ofs + wep.spawnorigin.x * v_forward - wep.spawnorigin.y * v_right + wep.spawnorigin.z * v_up;
-
- if (!sound_allowed(MSG_BROADCAST, casingowner))
- casingtype |= 0x80;
-
- WriteHeader(MSG_ALL, casings);
- WriteByte(MSG_ALL, casingtype);
- WriteVector(MSG_ALL, org);
- WriteShort(MSG_ALL, compressShortVector(vel)); // actually compressed velocity
- WriteByte(MSG_ALL, ang.x * 256 / 360);
- WriteByte(MSG_ALL, ang.y * 256 / 360);
- WriteByte(MSG_ALL, ang.z * 256 / 360);
+ entity wep = casingowner.(weaponentity);
+ vector org = casingowner.origin + casingowner.view_ofs + wep.spawnorigin.x * v_forward - wep.spawnorigin.y * v_right + wep.spawnorigin.z * v_up;
+
+ FOREACH_CLIENT(true, {
+ if (!(CS(it).cvar_cl_casings))
+ continue;
+
+ msg_entity = it;
+ if (!sound_allowed(MSG_ONE, it))
+ casingtype |= 0x80; // silent
+
+ WriteHeader(MSG_ONE, casings);
+ WriteByte(MSG_ONE, casingtype);
+ WriteVector(MSG_ONE, org);
+ WriteShort(MSG_ONE, compressShortVector(vel)); // actually compressed velocity
+ WriteByte(MSG_ONE, ang.x * 256 / 360);
+ WriteByte(MSG_ONE, ang.y * 256 / 360);
+ WriteByte(MSG_ONE, ang.z * 256 / 360);
+ });
}
#endif
casing.velocity = casing.velocity + 2 * prandomvec();
casing.avelocity = '0 250 0' + 100 * prandomvec();
set_movetype(casing, MOVETYPE_BOUNCE);
+ casing.bouncefactor = 0.25;
settouch(casing, Casing_Touch);
casing.move_time = time;
casing.event_damage = Casing_Damage;
if (GetPlayerSoundSampleField_notFound) field = GetVoiceMessageSampleField(key);
if (GetPlayerSoundSampleField_notFound)
{
- LOG_TRACEF("Invalid sound info field: %s", key);
+ LOG_TRACEF("Invalid sound info field in player sound file '%s': %s", f, key);
continue;
}
string file = argv(1);
.bool instanceOfVoiceMessage;
.int m_playersoundvt;
-#define REGISTER_VOICEMSG(id, vt) \
+#define REGISTER_VOICEMSG(id, vt, listed) \
.string _playersound_##id; \
REGISTER(PlayerSounds, playersound, id, m_id, new_pure(VoiceMessage)) \
{ \
- this.instanceOfVoiceMessage = true; \
+ this.instanceOfVoiceMessage = listed; \
this.m_playersoundstr = #id; \
this.m_playersoundfld = _playersound_##id; \
this.m_playersoundvt = vt; \
const int VOICETYPE_AUTOTAUNT = 14;
const int VOICETYPE_TAUNT = 15;
-REGISTER_VOICEMSG(attack, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(attackinfive, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(coverme, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(defend, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(freelance, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(incoming, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(meet, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(needhelp, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(seenflag, VOICETYPE_TEAMRADIO)
-REGISTER_VOICEMSG(taunt, VOICETYPE_TAUNT)
-REGISTER_VOICEMSG(teamshoot, VOICETYPE_LASTATTACKER)
-
-// reserved sound names for the future (some models lack sounds for them):
-// _VOICEMSG(flagcarriertakingdamage)
-// _VOICEMSG(getflag)
-// reserved sound names for the future (ALL models lack sounds for them):
-// _VOICEMSG(affirmative)
-// _VOICEMSG(attacking)
-// _VOICEMSG(defending)
-// _VOICEMSG(roaming)
-// _VOICEMSG(onmyway)
-// _VOICEMSG(droppedflag)
-// _VOICEMSG(negative)
-// _VOICEMSG(seenenemy)
+REGISTER_VOICEMSG(attack, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(attackinfive, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(coverme, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(defend, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(freelance, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(incoming, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(meet, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(needhelp, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(seenflag, VOICETYPE_TEAMRADIO, true)
+REGISTER_VOICEMSG(taunt, VOICETYPE_TAUNT, true)
+REGISTER_VOICEMSG(teamshoot, VOICETYPE_LASTATTACKER, true)
+
+//NOTE: some models lack sounds for these:
+REGISTER_VOICEMSG(flagcarriertakingdamage, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(getflag, VOICETYPE_TEAMRADIO, false)
+//NOTE: ALL models lack sounds for these (only available in default sounds currently):
+REGISTER_VOICEMSG(affirmative, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(attacking, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(defending, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(roaming, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(onmyway, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(droppedflag, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(negative, VOICETYPE_TEAMRADIO, false)
+REGISTER_VOICEMSG(seenenemy, VOICETYPE_TEAMRADIO, false)
.string m_globalsoundstr;
REGISTRY(GlobalSounds, BITS(8) - 1)
.bool pushable;
-void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag entity on the map as a spawnfunc
+void ctf_FlagSetup(int teamnum, entity flag) // called when spawning a flag entity on the map as a spawnfunc
{
// main setup
flag.ctf_worldflagnext = ctf_worldflaglist; // link flag into ctf_worldflaglist
setattachment(flag, NULL, "");
- flag.netname = strzone(sprintf("%s%s^7 flag", Team_ColorCode(teamnumber), Team_ColorName_Upper(teamnumber)));
- flag.team = teamnumber;
+ flag.netname = strzone(sprintf("%s%s^7 flag", Team_ColorCode(teamnum), Team_ColorName_Upper(teamnum)));
+ flag.team = teamnum;
flag.classname = "item_flag_team";
flag.target = "###item###"; // for finding the nearest item using findnearest
flag.flags = FL_ITEM | FL_NOTARGET;
if(autocvar_g_ctf_score_ignore_fields)
flag.cnt = flag.score_assist = flag.score_team_capture = flag.score_capture = flag.score_drop = flag.score_pickup = flag.score_return = 0;
- string teamname = Static_Team_ColorName_Lower(teamnumber);
+ string teamname = Static_Team_ColorName_Lower(teamnum);
// appearence
if(!flag.scale) { flag.scale = FLAG_SCALE; }
if(flag.skin == 0) { flag.skin = cvar(sprintf("g_ctf_flag_%s_skin", teamname)); }
if(flag.model == "") { flag.model = cvar_string(sprintf("g_ctf_flag_%s_model", teamname)); }
- if (flag.toucheffect == "") { flag.toucheffect = EFFECT_FLAG_TOUCH(teamnumber).eent_eff_name; }
- if (flag.passeffect == "") { flag.passeffect = EFFECT_PASS(teamnumber).eent_eff_name; }
- if (flag.capeffect == "") { flag.capeffect = EFFECT_CAP(teamnumber).eent_eff_name; }
+ if (flag.toucheffect == "") { flag.toucheffect = EFFECT_FLAG_TOUCH(teamnum).eent_eff_name; }
+ if (flag.passeffect == "") { flag.passeffect = EFFECT_PASS(teamnum).eent_eff_name; }
+ if (flag.capeffect == "") { flag.capeffect = EFFECT_CAP(teamnum).eent_eff_name; }
// sounds
#define X(s,b) \
if(flag.s == "") flag.s = b; \
precache_sound(flag.s);
- X(snd_flag_taken, strzone(SND(CTF_TAKEN(teamnumber))))
- X(snd_flag_returned, strzone(SND(CTF_RETURNED(teamnumber))))
- X(snd_flag_capture, strzone(SND(CTF_CAPTURE(teamnumber))))
- X(snd_flag_dropped, strzone(SND(CTF_DROPPED(teamnumber))))
+ X(snd_flag_taken, strzone(SND(CTF_TAKEN(teamnum))))
+ X(snd_flag_returned, strzone(SND(CTF_RETURNED(teamnum))))
+ X(snd_flag_capture, strzone(SND(CTF_CAPTURE(teamnum))))
+ X(snd_flag_dropped, strzone(SND(CTF_DROPPED(teamnum))))
X(snd_flag_respawn, strzone(SND(CTF_RESPAWN)))
X(snd_flag_touch, strzone(SND(CTF_TOUCH)))
X(snd_flag_pass, strzone(SND(CTF_PASS)))
if(autocvar_g_ctf_flag_glowtrails)
{
- switch(teamnumber)
+ switch(teamnum)
{
case NUM_TEAM_1: flag.glow_color = 251; break;
case NUM_TEAM_2: flag.glow_color = 210; break;
if(autocvar_g_ctf_fullbrightflags) { flag.effects |= EF_FULLBRIGHT; }
if(autocvar_g_ctf_dynamiclights)
{
- switch(teamnumber)
+ switch(teamnum)
{
case NUM_TEAM_1: flag.effects |= EF_RED; break;
case NUM_TEAM_2: flag.effects |= EF_BLUE; break;
// for symmetrical editing of waypoints
entity f1 = ctf_worldflaglist;
entity f2 = f1.ctf_worldflagnext;
- float m = -(f1.origin.y - f2.origin.y) / (f1.origin.x - f2.origin.x);
+ float m = -(f1.origin.y - f2.origin.y) / (max(f1.origin.x - f2.origin.x, FLOAT_EPSILON));
float q = havocbot_middlepoint.y - m * havocbot_middlepoint.x;
havocbot_symmetry_axis_m = m;
havocbot_symmetry_axis_q = q;
if(!round_handler_IsRoundStarted())
return true;
- int n;
entity player = M_ARGV(0, entity);
//if (STAT(FROZEN, player) == FROZEN_NORMAL)
//if(player.freezetag_frozen_timeout > 0 && time < player.freezetag_frozen_timeout)
//player.iceblock.alpha = ICE_MIN_ALPHA + (ICE_MAX_ALPHA - ICE_MIN_ALPHA) * (player.freezetag_frozen_timeout - time) / (player.freezetag_frozen_timeout - player.freezetag_frozen_time);
+ if (!(frametime && IS_PLAYER(player)))
+ return true;
+
entity reviving_players_last = NULL;
entity reviving_players_first = NULL;
+ int n;
if(player.freezetag_frozen_timeout > 0 && time >= player.freezetag_frozen_timeout)
n = -1;
else
return true; // you deceptive little bugger ;3 This needs to be true in order for this function to even count.
}
+MUTATOR_HOOKFUNCTION(ka, Scores_CountFragsRemaining)
+{
+ // announce remaining frags, but only when timed scoring is off
+ return !autocvar_g_keepaway_score_timepoints;
+}
+
MUTATOR_HOOKFUNCTION(ka, PlayerPreThink)
{
entity player = M_ARGV(0, entity);
navigation_routerating(this, head.owner, ratingscale_enemy * 10000, 100000);
}
- havocbot_goalrating_items(this, 1, this.origin, 10000);
+ havocbot_goalrating_items(this, 80000, this.origin, 10000);
}
void havocbot_role_kh_carrier(entity this)
if(item.itemdef == ITEM_ExtraLife)
{
- Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_EXTRALIVES);
+ Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_EXTRALIVES, autocvar_g_lms_extra_lives);
GameRules_scoring_add(toucher, LMS_LIVES, autocvar_g_lms_extra_lives);
return MUT_ITEMTOUCH_PICKUP;
}
// Main Control Point Functions
// =============================
-int ons_ControlPoint_CanBeLinked(entity cp, int teamnumber)
+int ons_ControlPoint_CanBeLinked(entity cp, int teamnum)
{
- if(cp.aregensneighbor & BIT(teamnumber)) return 2;
- if(cp.arecpsneighbor & BIT(teamnumber)) return 1;
+ if(cp.aregensneighbor & BIT(teamnum)) return 2;
+ if(cp.arecpsneighbor & BIT(teamnum)) return 1;
return 0;
}
-int ons_ControlPoint_Attackable(entity cp, int teamnumber)
+int ons_ControlPoint_Attackable(entity cp, int teamnum)
// -2: SAME TEAM, attackable by enemy!
// -1: SAME TEAM!
// 0: off limits
else if(cp.goalentity)
{
// if there's already an icon built, nothing happens
- if(cp.team == teamnumber)
+ if(cp.team == teamnum)
{
- a = ons_ControlPoint_CanBeLinked(cp, teamnumber);
+ a = ons_ControlPoint_CanBeLinked(cp, teamnum);
if(a) // attackable by enemy?
return -2; // EMERGENCY!
return -1;
}
// we know it can be linked, so no need to check
// but...
- a = ons_ControlPoint_CanBeLinked(cp, teamnumber);
+ a = ons_ControlPoint_CanBeLinked(cp, teamnum);
if(a == 2) // near our generator?
return 3; // EMERGENCY!
return 1;
else
{
// free point
- if(ons_ControlPoint_CanBeLinked(cp, teamnumber))
+ if(ons_ControlPoint_CanBeLinked(cp, teamnum))
{
- a = ons_ControlPoint_CanBeLinked(cp, teamnumber); // why was this here NUM_TEAM_1 + NUM_TEAM_2 - t
+ a = ons_ControlPoint_CanBeLinked(cp, teamnum); // why was this here NUM_TEAM_1 + NUM_TEAM_2 - t
if(a == 2)
return 4; // GET THIS ONE NOW!
else
{
sound(this, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
pointparticles(EFFECT_ROCKET_EXPLODE, this.origin, '0 0 0', 1);
- Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_ONSLAUGHT_CPDESTROYED), this.owner.message, attacker.netname);
+ if (this.owner.message != "")
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_ONSLAUGHT_CPDESTROYED), this.owner.message, attacker.netname);
+ else
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(this.team, INFO_ONSLAUGHT_CPDESTROYED_NONAME), attacker.netname);
GameRules_scoring_add(attacker, ONS_TAKES, 1);
GameRules_scoring_add(attacker, SCORE, 10);
if(IS_PLAYER(this.owner.ons_toucher))
{
- Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ONSLAUGHT_CAPTURE, this.owner.ons_toucher.netname, this.owner.message);
- Send_Notification(NOTIF_ALL_EXCEPT, this.owner.ons_toucher, MSG_CENTER, APP_TEAM_NUM(this.owner.ons_toucher.team, CENTER_ONS_CAPTURE_TEAM), this.owner.message);
- Send_Notification(NOTIF_ONE, this.owner.ons_toucher, MSG_CENTER, CENTER_ONS_CAPTURE, this.owner.message);
+ if(this.owner.message != "")
+ {
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ONSLAUGHT_CAPTURE, this.owner.ons_toucher.netname, this.owner.message);
+ Send_Notification(NOTIF_ALL_EXCEPT, this.owner.ons_toucher, MSG_CENTER, APP_TEAM_NUM(this.owner.ons_toucher.team, CENTER_ONS_CAPTURE_TEAM), this.owner.message);
+ Send_Notification(NOTIF_ONE, this.owner.ons_toucher, MSG_CENTER, CENTER_ONS_CAPTURE, this.owner.message);
+ }
+ else
+ {
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ONSLAUGHT_CAPTURE_NONAME, this.owner.ons_toucher.netname);
+ Send_Notification(NOTIF_ALL_EXCEPT, this.owner.ons_toucher, MSG_CENTER, APP_TEAM_NUM(this.owner.ons_toucher.team, CENTER_ONS_CAPTURE_TEAM_NONAME));
+ Send_Notification(NOTIF_ONE, this.owner.ons_toucher, MSG_CENTER, CENTER_ONS_CAPTURE_NONAME);
+ }
GameRules_scoring_add(this.owner.ons_toucher, ONS_CAPS, 1);
GameRules_scoring_add_team(this.owner.ons_toucher, SCORE, 10);
}
cp.islinked = false;
cp.isshielded = true;
- if(cp.message == "") { cp.message = "a"; }
-
// appearence
setmodel(cp, MDL_ONS_CP_PAD1);
void ons_GeneratorSetup(entity gen) // called when spawning a generator entity on the map as a spawnfunc
{
// declarations
- int teamnumber = gen.team;
+ int teamnum = gen.team;
// main setup
gen.ons_worldgeneratornext = ons_worldgeneratorlist; // link generator into ons_worldgeneratorlist
ons_worldgeneratorlist = gen;
- gen.netname = sprintf("%s generator", Team_ColoredFullName(teamnumber));
+ gen.netname = sprintf("%s generator", Team_ColoredFullName(teamnum));
gen.classname = "onslaught_generator";
gen.solid = SOLID_BBOX;
- gen.team_saved = teamnumber;
+ gen.team_saved = teamnum;
IL_PUSH(g_saved_team, gen);
set_movetype(gen, MOVETYPE_NONE);
gen.lasthealth = gen.max_health = autocvar_g_onslaught_gen_health;
// model handled by CSQC
setsize(gen, GENERATOR_MIN, GENERATOR_MAX);
setorigin(gen, (gen.origin + CPGEN_SPAWN_OFFSET));
- gen.colormap = 1024 + (teamnumber - 1) * 17;
+ gen.colormap = 1024 + (teamnum - 1) * 17;
// generator placement
droptofloor(gen);
// declarations for functions used outside gamemode_onslaught.qc
void ons_Generator_UpdateSprite(entity e);
void ons_ControlPoint_UpdateSprite(entity e);
-bool ons_ControlPoint_Attackable(entity cp, int teamnumber);
+bool ons_ControlPoint_Attackable(entity cp, int teamnum);
// CaptureShield: Prevent capturing or destroying control point/generator if it is not available yet
float ons_captureshield_force; // push force of the shield
void Dump_Items();
-GENERIC_COMMAND(dumpitems, "Dump all items to the console") {
+GENERIC_COMMAND(dumpitems, "Dump all items to the console", false) {
switch (request) {
case CMD_REQUEST_COMMAND: {
Dump_Items();
.int fld = inv_items[it.m_id];
int prev = this.(fld);
int next = this.(fld) = ReadByte();
- LOG_TRACEF("%s: %.0f -> %.0f", it.m_name, prev, next);
+ LOG_DEBUGF("%s: %.0f -> %.0f", it.m_name, prev, next);
}
}
return true;
#include <common/monsters/_mod.qh>
#endif
-bool autocvar_g_mapinfo_ignore_warnings;
#ifdef MENUQC
-#define WARN_COND (!autocvar_g_mapinfo_ignore_warnings)
+#define WARN_COND false
#else
+bool autocvar_g_mapinfo_ignore_warnings;
#define WARN_COND (!autocvar_g_mapinfo_ignore_warnings && MapInfo_Map_bspname == mi_shortname)
#endif
this.dmg_force = 200;
this.mdl = this.model;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
if(this.spawnflags & BREAKABLE_NODAMAGE)
this.use = func_breakable_destroy;
if (!this.lip)
this.lip = 4;
+ if(this.wait == -1 && autocvar_sv_vq3compat)
+ this.wait = 0.1; // compatibility for q3df: "instant" return
+
if(this.noise != "")
precache_sound(this.noise);
this.angles = '0 0 0';
set_movetype(this, MOVETYPE_NONE);
this.solid = SOLID_NOT;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
if (!this.cnt)
{
this.cnt = 12;
this.angles = '0 0 0';
set_movetype(this, MOVETYPE_NONE);
this.solid = SOLID_NOT;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
if (!this.cnt)
{
this.cnt = 12;
#define G_MODEL_INIT(ent,sol) \
if(ent.geomtype && autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")) set_movetype(ent, MOVETYPE_PHYSICS); \
if(!ent.scale) ent.scale = ent.modelscale; \
- SetBrushEntityModel(ent); \
+ SetBrushEntityModel(ent,true); \
ent.use = g_model_setcolormaptoactivator; \
InitializeEntity(ent, g_model_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \
if(!ent.solid) ent.solid = (sol); \
#define G_CLIENTMODEL_INIT(ent,sol) \
if(ent.geomtype && autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")) set_movetype(ent, MOVETYPE_PHYSICS); \
if(!ent.scale) ent.scale = ent.modelscale; \
- SetBrushEntityModel(ent); \
+ SetBrushEntityModel(ent,true); \
ent.use = g_clientmodel_use; \
InitializeEntity(ent, g_clientmodel_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \
if(!ent.solid) ent.solid = (sol); \
setsize(e, e.mins, e.maxs);
}
-void SetBrushEntityModel(entity this)
+void SetBrushEntityModel(entity this, bool with_lod)
{
if(this.model != "")
{
}
else
_setmodel(this, this.model); // no precision needed
- InitializeEntity(this, LODmodel_attach, INITPRIO_FINDTARGET);
- }
- setorigin(this, this.origin);
- ApplyMinMaxScaleAngles(this);
-}
+ if(with_lod)
+ InitializeEntity(this, LODmodel_attach, INITPRIO_FINDTARGET);
-void SetBrushEntityModelNoLOD(entity this)
-{
- if(this.model != "")
- {
- precache_model(this.model);
- if(this.mins != '0 0 0' || this.maxs != '0 0 0')
- {
- vector mi = this.mins;
- vector ma = this.maxs;
- _setmodel(this, this.model); // no precision needed
- setsize(this, mi, ma);
- }
- else
- _setmodel(this, this.model); // no precision needed
+ if(endsWith(this.model, ".obj")) // WORKAROUND: darkplaces currently rotates .obj models on entities incorrectly, we need to add 180 degrees to the Y axis
+ this.angles_y = anglemods(this.angles_y - 180);
}
setorigin(this, this.origin);
ApplyMinMaxScaleAngles(this);
// to mean no restrictions, so use a yaw of 360 instead.
SetMovedir(this);
this.solid = SOLID_TRIGGER;
- SetBrushEntityModelNoLOD(this);
+ SetBrushEntityModel(this, false);
set_movetype(this, MOVETYPE_NONE);
this.modelindex = 0;
this.model = "";
// to mean no restrictions, so use a yaw of 360 instead.
SetMovedir(this);
this.solid = SOLID_BSP;
- SetBrushEntityModelNoLOD(this);
+ SetBrushEntityModel(this, false);
set_movetype(this, MOVETYPE_NONE); // why was this PUSH? -div0
// this.modelindex = 0;
this.model = "";
// trigger angles are used for one-way touches. An angle of 0 is assumed
// to mean no restrictions, so use a yaw of 360 instead.
this.solid = SOLID_BSP;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
set_movetype(this, MOVETYPE_PUSH);
if(this.modelindex == 0)
{
#ifdef SVQC
void ApplyMinMaxScaleAngles(entity e);
-void SetBrushEntityModel(entity this);
-
-void SetBrushEntityModelNoLOD(entity this);
+void SetBrushEntityModel(entity this, bool with_lod);
int autocvar_loddebug;
.string lodtarget1;
torg = tgt.origin + (tgt.mins + tgt.maxs) * 0.5;
grav = PHYS_GRAVITY(NULL);
- if(pushed_entity && PHYS_ENTGRAVITY(pushed_entity))
- grav *= PHYS_ENTGRAVITY(pushed_entity);
+ if(pushed_entity && pushed_entity.gravity)
+ grav *= pushed_entity.gravity;
zdist = torg.z - org.z;
sdist = vlen(torg - org - zdist * '0 0 1');
this.wait = 0;
this.use = multi_use;
+ if(this.wait == -1 && autocvar_sv_vq3compat)
+ this.wait = 0.1; // compatibility for q3df: "instant" return
+
EXACTTRIGGER_INIT;
this.team_saved = this.team;
{
// translator-friendly messages composed of 2 existing messages
// TODO: proper "you win" banner instead of hijacking the help message
- if ( (turnflags&TTT_TURN_TEAM) != minigame_self.team )
- strcat(_("You lost the game!"), "\n", _("Select \"^1Next Match^7\" on the menu for a rematch!"));
+ if ( (turnflags & TTT_TURN_TEAM) != minigame_self.team )
+ return strcat(_("You lost the game!"), "\n", _("Select \"^1Next Match^7\" on the menu for a rematch!"));
return strcat(_("You win!"), "\n", _("Select \"^1Next Match^7\" on the menu to start a new match!"));
}
if ( turnflags & TTT_TURN_NEXT )
{
- if ( (turnflags&TTT_TURN_TEAM) != minigame_self.team )
+ if ( (turnflags & TTT_TURN_TEAM) != minigame_self.team )
return _("Select \"^1Next Match^7\" on the menu to start a new match!");
return _("Wait for your opponent to confirm the rematch");
}
if (!IS_PLAYER(actor) || weapon_prepareattack(thiswep, actor, weaponentity, false, 0.2)) {
if (!actor.target_range) actor.target_range = autocvar_g_monsters_target_range;
actor.enemy = Monster_FindTarget(actor);
+ monster_makevectors(actor, actor.enemy);
W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_MageSpike_FIRE, CH_WEAPON_B, 0, DEATH_MONSTER_MAGE.m_id);
if (!IS_PLAYER(actor)) w_shotdir = normalize((actor.enemy.origin + '0 0 10') - actor.origin);
M_Mage_Attack_Spike(actor, w_shotdir);
void M_Shambler_Attack_Lightning(entity this)
{
- monster_makevectors(this, this.enemy);
-
entity gren = new(grenade);
gren.owner = gren.realowner = this;
gren.bot_dodge = true;
actor.anim_finished = time + 1;
}
if (isPlayer) actor.enemy = Monster_FindTarget(actor);
+ monster_makevectors(actor, actor.enemy);
W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_SpiderAttack_FIRE, CH_WEAPON_B, 0, DEATH_MONSTER_SPIDER.m_id);
if (!isPlayer) w_shotdir = normalize((actor.enemy.origin + '0 0 10') - actor.origin);
M_Spider_Attack_Web(actor);
void M_Spider_Attack_Web(entity this)
{
- monster_makevectors(this, this.enemy);
-
sound(this, CH_SHOTS, SND_ELECTRO_FIRE2, VOL_BASE, ATTEN_NORM);
entity proj = new(plasma);
TC(WyvernAttack, thiswep);
if (fire & 1)
if (time > actor.attack_finished_single[0] || weapon_prepareattack(thiswep, actor, weaponentity, false, 1.2)) {
+ monster_makevectors(actor, actor.enemy);
if (IS_PLAYER(actor)) W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_WyvernAttack_FIRE, CH_WEAPON_B, 0, DEATH_MONSTER_WYVERN.m_id);
if (IS_MONSTER(actor)) {
actor.attack_finished_single[0] = time + 1.2;
actor.anim_finished = time + 1.2;
- monster_makevectors(actor, actor.enemy);
}
entity missile = spawn();
.void(entity) monster_delayedfunc;
void Monster_Delay_Action(entity this)
{
- if(Monster_ValidTarget(this.owner, this.owner.enemy)) { this.monster_delayedfunc(this.owner); }
+ if(Monster_ValidTarget(this.owner, this.owner.enemy))
+ {
+ monster_makevectors(this.owner, this.owner.enemy);
+ this.monster_delayedfunc(this.owner);
+ }
if(this.cnt > 1)
{
else
this.attack_finished_single[0] = this.anim_finished = time + animtime;
- monster_makevectors(this, targ);
-
traceline(this.origin + this.view_ofs, this.origin + v_forward * er, 0, this);
if(trace_ent.takedamage)
if(vdist(targ.origin - this.origin, <=, this.attack_range))
{
+ monster_makevectors(this, targ);
int attack_success = this.monster_attackfunc(MONSTER_ATTACK_MELEE, this, targ, weaponentity);
if(attack_success == 1)
Monster_Sound(this, monstersound_melee, 0, false, CH_VOICE);
if(vdist(targ.origin - this.origin, >, this.attack_range))
{
+ monster_makevectors(this, targ);
int attack_success = this.monster_attackfunc(MONSTER_ATTACK_RANGED, this, targ, weaponentity);
if(attack_success == 1)
Monster_Sound(this, monstersound_melee, 0, false, CH_VOICE);
/**/ o(string, MUTATOR_ARGV_1_string) \
/**/
MUTATOR_HOOKABLE(WeaponModel, EV_WeaponModel);
+
+/** decides whether a player can crouch or not */
+#define EV_PlayerCanCrouch(i, o) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /** do_crouch */ i(bool, MUTATOR_ARGV_1_bool) \
+ /**/ o(bool, MUTATOR_ARGV_1_bool) \
+ /**/
+MUTATOR_HOOKABLE(PlayerCanCrouch, EV_PlayerCanCrouch);
// generated file; do not modify
-#ifdef SVQC
- #include <common/mutators/mutator/bloodloss/sv_bloodloss.qc>
-#endif
+#include <common/mutators/mutator/bloodloss/bloodloss.qc>
// generated file; do not modify
-#ifdef SVQC
- #include <common/mutators/mutator/bloodloss/sv_bloodloss.qh>
-#endif
+#include <common/mutators/mutator/bloodloss/bloodloss.qh>
--- /dev/null
+#include "bloodloss.qh"
+
+#ifdef GAMEQC
+#ifdef SVQC
+REGISTER_MUTATOR(bloodloss, autocvar_g_bloodloss);
+#elif defined(CSQC)
+REGISTER_MUTATOR(bloodloss, true);
+#endif
+
+#ifdef SVQC
+.float bloodloss_timer;
+
+MUTATOR_HOOKFUNCTION(bloodloss, PlayerPreThink)
+{
+ entity player = M_ARGV(0, entity);
+
+ if(game_stopped)
+ return; // during intermission, the player's health changes to strange values for the engine, let's not cause damage during this phase!
+
+ if(IS_PLAYER(player))
+ if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss && !IS_DEAD(player) && time >= player.bloodloss_timer)
+ {
+ if(player.vehicle)
+ vehicles_exit(player.vehicle, VHEF_RELEASE); // TODO: boots player out of their vehicle each health rot tick!
+ if(player.event_damage)
+ player.event_damage(player, player, player, 1, DEATH_ROT.m_id, DMG_NOWEP, player.origin, '0 0 0');
+ player.bloodloss_timer = time + 0.5 + random() * 0.5;
+ }
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss, PlayerCanCrouch)
+{
+ entity player = M_ARGV(0, entity);
+ if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss)
+ M_ARGV(1, bool) = true; // do_crouch
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss, PlayerJump)
+{
+ entity player = M_ARGV(0, entity);
+
+ if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss)
+ return true;
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss, BuildMutatorsString)
+{
+ M_ARGV(0, string) = strcat(M_ARGV(0, string), ":bloodloss");
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss, BuildMutatorsPrettyString)
+{
+ M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Blood loss");
+}
+#endif
+
+#ifdef CSQC
+MUTATOR_HOOKFUNCTION(bloodloss, PlayerCanCrouch)
+{
+ if(STAT(HEALTH) <= STAT(BLOODLOSS))
+ M_ARGV(1, bool) = true; // do_crouch
+}
+MUTATOR_HOOKFUNCTION(bloodloss, PlayerJump)
+{
+ if(STAT(HEALTH) <= STAT(BLOODLOSS))
+ return true;
+}
+#endif
+
+#endif
--- /dev/null
+#pragma once
+++ /dev/null
-#include "sv_bloodloss.qh"
-
-float autocvar_g_bloodloss;
-REGISTER_MUTATOR(bloodloss, autocvar_g_bloodloss);
-
-.float bloodloss_timer;
-
-MUTATOR_HOOKFUNCTION(bloodloss, PlayerPreThink)
-{
- entity player = M_ARGV(0, entity);
-
- if(IS_PLAYER(player))
- if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss && !IS_DEAD(player))
- {
- PHYS_INPUT_BUTTON_CROUCH(player) = true;
-
- if(time >= player.bloodloss_timer)
- {
- if(player.vehicle)
- vehicles_exit(player.vehicle, VHEF_RELEASE);
- if(player.event_damage)
- player.event_damage(player, player, player, 1, DEATH_ROT.m_id, DMG_NOWEP, player.origin, '0 0 0');
- player.bloodloss_timer = time + 0.5 + random() * 0.5;
- }
- }
-}
-
-MUTATOR_HOOKFUNCTION(bloodloss, PlayerJump)
-{
- entity player = M_ARGV(0, entity);
-
- if(GetResource(player, RES_HEALTH) <= autocvar_g_bloodloss)
- return true;
-}
-
-MUTATOR_HOOKFUNCTION(bloodloss, BuildMutatorsString)
-{
- M_ARGV(0, string) = strcat(M_ARGV(0, string), ":bloodloss");
-}
-
-MUTATOR_HOOKFUNCTION(bloodloss, BuildMutatorsPrettyString)
-{
- M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Blood loss");
-}
+++ /dev/null
-#pragma once
this.m_color = '1 0.39 0';
}
BUFF_SPAWNFUNCS(bash, BUFF_BASH)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(doubler, BUFF_BASH)
REGISTER_BUFF(VAMPIRE) {
this.m_name = _("Vampire");
FOREACH(Buffs, buff_Available(it),
{
// if it's already been chosen, give it a lower priority
- RandomSelection_AddEnt(it, max(0.2, 1 / it.buff_seencount), 1);
+ float myseencount = (it.buff_seencount > 0) ? it.buff_seencount : 1; // no division by zero please!
+ RandomSelection_AddEnt(it, max(0.2, 1 / myseencount), 1);
});
entity newbuff = RandomSelection_chosen_ent;
newbuff.buff_seencount += 1; // lower chances of seeing this buff again soon
if(frag_target != frag_attacker)
{
- if(frag_damage <= 0 && GetResource(frag_target, RES_HEALTH) > 0) { Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE); }
if(!autocvar_g_instagib_blaster_keepforce)
frag_force = '0 0 0';
}
M_ARGV(6, vector) = frag_force;
}
-MUTATOR_HOOKFUNCTION(mutator_instagib, SetStartItems)
+MUTATOR_HOOKFUNCTION(mutator_instagib, SetStartItems, CBC_ORDER_LAST)
{
start_health = warmup_start_health = 100;
start_armorvalue = warmup_start_armorvalue = 0;
if(item.itemdef == ITEM_ExtraLife)
{
GiveResource(toucher, RES_ARMOR, autocvar_g_instagib_extralives);
- Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_EXTRALIVES);
+ Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_EXTRALIVES, autocvar_g_instagib_extralives);
return MUT_ITEMTOUCH_PICKUP;
}
this.nade_altbutton = true;
if(time > this.nade_refire)
{
- Send_Notification(NOTIF_ONE, this, MSG_CENTER, CENTER_NADE_THROW);
nade_prime(this);
this.nade_refire = time + autocvar_g_nades_nade_refire;
}
held_nade.angles_y = player.angles.y;
if (time + 0.1 >= held_nade.wait)
+ {
toss_nade(player, false, '0 0 0', time + 0.05);
+ Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_NADE_THROW);
+ }
}
if(IS_PLAYER(player))
}
}
- int n = 0;
-
- IntrusiveList reviving_players = NULL;
-
- if(player.freezetag_frozen_timeout > 0 && time >= player.freezetag_frozen_timeout)
- n = -1;
- else if (STAT(FROZEN, player) == FROZEN_TEMP_DYING)
+ if (frametime && IS_PLAYER(player))
{
- vector revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
- n = 0;
- FOREACH_CLIENT(IS_PLAYER(it) && IS_REVIVING(player, it, revive_extra_size), {
- if (!reviving_players)
- reviving_players = IL_NEW();
- IL_PUSH(reviving_players, it);
- ++n;
- });
- }
+ int n = 0;
- if (n > 0 && STAT(FROZEN, player) == FROZEN_TEMP_DYING) // OK, there is at least one teammate reviving us
- {
- STAT(REVIVE_PROGRESS, player) = bound(0, STAT(REVIVE_PROGRESS, player) + frametime * max(1/60, autocvar_g_freezetag_revive_speed), 1);
- SetResource(player, RES_HEALTH, max(1, STAT(REVIVE_PROGRESS, player) * start_health));
+ IntrusiveList reviving_players = NULL;
- if(STAT(REVIVE_PROGRESS, player) >= 1)
+ if(player.freezetag_frozen_timeout > 0 && time >= player.freezetag_frozen_timeout)
+ n = -1;
+ else if (STAT(FROZEN, player) == FROZEN_TEMP_DYING)
{
- Unfreeze(player, false);
-
- entity first = IL_FIRST(reviving_players);
- Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_FREEZETAG_REVIVED, first.netname);
- Send_Notification(NOTIF_ONE, first, MSG_CENTER, CENTER_FREEZETAG_REVIVE, player.netname);
+ vector revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
+ n = 0;
+ FOREACH_CLIENT(IS_PLAYER(it) && IS_REVIVING(player, it, revive_extra_size), {
+ if (!reviving_players)
+ reviving_players = IL_NEW();
+ IL_PUSH(reviving_players, it);
+ ++n;
+ });
}
- IL_EACH(reviving_players, true, {
- STAT(REVIVE_PROGRESS, it) = STAT(REVIVE_PROGRESS, player);
- });
+ if (n > 0 && STAT(FROZEN, player) == FROZEN_TEMP_DYING) // OK, there is at least one teammate reviving us
+ {
+ STAT(REVIVE_PROGRESS, player) = bound(0, STAT(REVIVE_PROGRESS, player) + frametime * max(1/60, autocvar_g_freezetag_revive_speed), 1);
+ SetResource(player, RES_HEALTH, max(1, STAT(REVIVE_PROGRESS, player) * start_health));
+
+ if(STAT(REVIVE_PROGRESS, player) >= 1)
+ {
+ Unfreeze(player, false);
+
+ entity first = IL_FIRST(reviving_players);
+ Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_FREEZETAG_REVIVED, first.netname);
+ Send_Notification(NOTIF_ONE, first, MSG_CENTER, CENTER_FREEZETAG_REVIVE, player.netname);
+ }
+
+ IL_EACH(reviving_players, true, {
+ STAT(REVIVE_PROGRESS, it) = STAT(REVIVE_PROGRESS, player);
+ });
+ }
+ if (reviving_players)
+ IL_DELETE(reviving_players);
}
- if (reviving_players)
- IL_DELETE(reviving_players);
}
MUTATOR_HOOKFUNCTION(nades, PlayerPhysics_UpdateStats)
{
float killcount_bonus = ((CS(frag_attacker).killcount >= 1) ? bound(0, autocvar_g_nades_bonus_score_minor * CS(frag_attacker).killcount, autocvar_g_nades_bonus_score_medium)
: autocvar_g_nades_bonus_score_minor);
-
if (SAME_TEAM(frag_attacker, frag_target) || frag_attacker == frag_target)
nades_RemoveBonus(frag_attacker);
else if(GameRules_scoring_is_vip(frag_target))
if(!STAT(FROZEN, frag_target))
if(!IS_DEAD(frag_target))
{
- Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE);
M_ARGV(6, vector) = '0 0 0'; // force
}
float dist = 10, max_normal = 0.2, scaler = 100;
vector start = this.origin;
- TRACE(start + v_forward * scaler)
- TRACE(start - v_forward * scaler)
- TRACE(start + v_right * scaler)
- TRACE(start - v_right * scaler)
+ vector forward, right, _up;
+ MAKE_VECTORS(this.angles, forward, right, _up);
+ TRACE(start + forward * scaler)
+ TRACE(start - forward * scaler)
+ TRACE(start + right * scaler)
+ TRACE(start - right * scaler)
#undef TRACE
return '0 0 0';
}
v4 = Rotate(v4, rot) + org;
// draw them
- R_BeginPolygon(pic, f);
+ R_BeginPolygon(pic, f, true);
R_PolygonVertex(v1, '0 0 0', rgb, a);
R_PolygonVertex(v2, '1 0 0', rgb, a);
R_PolygonVertex(v3, '1 1 0', rgb, a);
void drawquad(vector o, vector ri, vector up, string pic, vector rgb, float a, float f)
{
- R_BeginPolygon(pic, f);
+ R_BeginPolygon(pic, f, true);
R_PolygonVertex(o, '0 0 0', rgb, a);
R_PolygonVertex(o + ri, '1 0 0', rgb, a);
R_PolygonVertex(o + up + ri, '1 1 0', rgb, a);
vector borderX = eX * (size+borderDiag);
vector borderY = eY * (size+borderDiag+border);
- R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_BeginPolygon("", DRAWFLAG_NORMAL, true);
R_PolygonVertex(o, '0 0 0', '0 0 0', a);
R_PolygonVertex(o + Rotate(arrowY - borderX, ang), '0 0 0', '0 0 0', a);
R_PolygonVertex(o + Rotate(borderY - borderX, ang), '0 0 0', '0 0 0', a);
R_PolygonVertex(o + Rotate(arrowY + borderX, ang), '0 0 0', '0 0 0', a);
R_EndPolygon();
- R_BeginPolygon("", DRAWFLAG_ADDITIVE);
+ R_BeginPolygon("", DRAWFLAG_ADDITIVE, true);
R_PolygonVertex(o + Rotate(eY * borderDiag, ang), '0 0 0', rgb, a);
R_PolygonVertex(o + Rotate(arrowY - arrowX, ang), '0 0 0', rgb, a);
R_PolygonVertex(o + Rotate(arrowY + arrowX, ang), '0 0 0', rgb, a);
MULTITEAM_INFO(NEXBALL_RETURN_HELD, N_CONSOLE, 0, 0, "", "", "", _("^BGThe ^TC^TT^BG team held the ball for too long"), "", NAME)
MSG_INFO_NOTIF(ONSLAUGHT_CAPTURE, N_CONSOLE, 2, 0, "s1 s2", "", "", _("^BG%s^BG captured %s^BG control point"), "")
+ MSG_INFO_NOTIF(ONSLAUGHT_CAPTURE_NONAME, N_CONSOLE, 1, 0, "s1", "", "", _("^BG%s^BG captured a control point"), "")
MULTITEAM_INFO(ONSLAUGHT_CPDESTROYED, N_CONSOLE, 2, 0, "s1 s2", "", "", _("^TC^TT^BG team %s^BG control point has been destroyed by %s"), "", NAME)
+ MULTITEAM_INFO(ONSLAUGHT_CPDESTROYED_NONAME, N_CONSOLE, 1, 0, "s1", "", "", _("^TC^TT^BG team control point has been destroyed by %s"), "", NAME)
MULTITEAM_INFO(ONSLAUGHT_GENDESTROYED, N_CONSOLE, 0, 0, "", "", "", _("^TC^TT^BG generator has been destroyed"), "", GENERATOR)
MULTITEAM_INFO(ONSLAUGHT_GENDESTROYED_OVERTIME, N_CONSOLE, 0, 0, "", "", "", _("^TC^TT^BG generator spontaneously combusted due to overtime!"), "", GENERATOR)
MSG_CENTER_NOTIF(DOOR_LOCKED_ALSONEED, N_ENABLE, 1, 0, "s1", CPID_Null, "0 0", _("^BGYou also need %s^BG!"), "")
MSG_CENTER_NOTIF(DOOR_UNLOCKED, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^BGDoor unlocked!"), "")
- MSG_CENTER_NOTIF(EXTRALIVES, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^F2You picked up some extra lives"), "")
+ MSG_CENTER_NOTIF(EXTRALIVES, N_ENABLE, 0, 1, "f1", CPID_Null, "0 0", _("^F2Extra lives taken: ^K1%s"), "")
MSG_CENTER_NOTIF(FREEZETAG_REVIVE, N_ENABLE, 1, 0, "s1", CPID_Null, "0 0", _("^K3You revived ^BG%s"), "")
MSG_CENTER_NOTIF(FREEZETAG_REVIVE_SELF, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^K3You revived yourself"), "")
MSG_CENTER_NOTIF(NIX_NEWWEAPON, N_ENABLE, 0, 1, "item_wepname", CPID_NIX, "0 0", _("^F2Active weapon: ^F1%s"), "")
MSG_CENTER_NOTIF(ONS_CAPTURE, N_ENABLE, 1, 0, "s1", CPID_ONSLAUGHT, "0 0", _("^BGYou captured %s^BG control point"), "")
+ MSG_CENTER_NOTIF(ONS_CAPTURE_NONAME, N_ENABLE, 0, 0, "", CPID_ONSLAUGHT, "0 0", _("^BGYou captured a control point"), "")
MULTITEAM_CENTER(ONS_CAPTURE_TEAM, N_ENABLE, 1, 0, "s1", CPID_ONSLAUGHT, "0 0", _("^TC^TT^BG team captured %s^BG control point"), "", NAME)
+ MULTITEAM_CENTER(ONS_CAPTURE_TEAM_NONAME, N_ENABLE, 0, 0, "", CPID_ONSLAUGHT, "0 0", _("^TC^TT^BG team captured a control point"), "", NAME)
MSG_CENTER_NOTIF(ONS_CONTROLPOINT_SHIELDED, N_ENABLE, 0, 0, "", CPID_ONS_CAPSHIELD, "0 0", _("^BGThis control point currently cannot be captured"), "")
MSG_CENTER_NOTIF(ONS_GENERATOR_SHIELDED, N_ENABLE, 0, 0, "", CPID_ONS_CAPSHIELD, "0 0", _("^BGThe enemy generator cannot be destroyed yet\n^F2Capture some control points to unshield it"), "")
MULTITEAM_CENTER(ONS_NOTSHIELDED, N_ENABLE, 0, 0, "", CPID_ONSLAUGHT, "0 0", _("^BGThe ^TCenemy^BG generator is no longer shielded!"), "", NAME)
MSG_CENTER_NOTIF(RACE_FINISHLAP, N_ENABLE, 0, 0, "", CPID_RACE_FINISHLAP, "0 0", _("^F2The race is over, finish your lap!"), "")
- MSG_CENTER_NOTIF(SECONDARY_NODAMAGE, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^BGSecondary fire inflicts no damage!"), "")
-
MSG_CENTER_NOTIF(SEQUENCE_COMPLETED, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^BGSequence completed!"), "")
MSG_CENTER_NOTIF(SEQUENCE_COUNTER, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^BGThere are more to go..."), "")
MSG_CENTER_NOTIF(SEQUENCE_COUNTER_FEWMORE, N_ENABLE, 0, 1, "f1", CPID_Null, "0 0", _("^BGOnly %s^BG more to go..."), "")
void Dump_Notifications(int fh, bool alsoprint);
-GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt")
+GENERIC_COMMAND(dumpnotifs, "Dump all notifications into notifications_dump.txt", false)
{
switch (request)
{
void ReplicateVars(bool would_destroy)
{
if (!would_destroy)
- FOREACH(Notifications, it.nent_type == MSG_CHOICE, {
- string cvarname = sprintf("notification_%s", Get_Notif_CvarName(it));
+ FOREACH(Notifications, it.nent_type == MSG_CHOICE && (!it.nent_teamnum || it.nent_teamnum == NUM_TEAM_1), {
+ string cvarname = strcat("notification_", Get_Notif_CvarName(it));
// NOTE: REPLICATE_SIMPLE can return;
REPLICATE_SIMPLE(it.cvar_value, cvarname);
});
if(applygravity)
{
this.move_didgravity = 1;
- grav = dt * (PHYS_ENTGRAVITY(this) ? PHYS_ENTGRAVITY(this) : 1) * PHYS_GRAVITY(this);
+ grav = dt * (this.gravity ? this.gravity : 1) * PHYS_GRAVITY(this);
if(!GAMEPLAYFIX_NOGRAVITYONGROUND || !IS_ONGROUND(this))
{
void _Movetype_Impact(entity this, entity oth) // SV_Impact
{
- if(gettouch(this))
+ if(!this && !oth)
+ return;
+
+ if(this.solid != SOLID_NOT && gettouch(this))
gettouch(this)(this, oth);
- if(gettouch(oth))
+ if(oth.solid != SOLID_NOT && gettouch(oth))
gettouch(oth)(oth, this);
}
entity this = _Movetype_TestEntityPosition_ent;
vector org = this.origin + ofs;
- int cont = this.dphitcontentsmask;
- this.dphitcontentsmask = DPCONTENTS_SOLID;
+ //int cont = this.dphitcontentsmask;
+ //this.dphitcontentsmask = DPCONTENTS_SOLID;
tracebox(org, this.mins, this.maxs, org, ((this.move_movetype == MOVETYPE_FLY_WORLDONLY) ? MOVE_WORLDONLY : MOVE_NOMONSTERS), this);
- this.dphitcontentsmask = cont;
+ //this.dphitcontentsmask = cont;
if(trace_startsolid)
return true;
if(vdist(trace_endpos - this.origin, >, 0.0001))
- this.origin = trace_endpos;
+ {
+ tracebox(trace_endpos, this.mins, this.maxs, trace_endpos, MOVE_NOMONSTERS, this);
+ if(!trace_startsolid)
+ this.origin = trace_endpos;
+ }
return false;
}
return UNSTICK_FINE;
}
#define X(v) if (_Movetype_TestEntityPosition(v))
+ X('0 0 -1') X(' 0 0 1')
X('-1 0 0') X(' 1 0 0')
X(' 0 -1 0') X(' 0 1 0')
X('-1 -1 0') X(' 1 -1 0')
#define X(i) \
if (_Movetype_TestEntityPosition('0 0 -1' * i)) \
if (_Movetype_TestEntityPosition('0 0 1' * i))
- X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8)
+ X(2) X(3) X(4) X(5) X(6) X(7) X(8)
X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16)
X(17)
#undef X
}
LOG_DEBUGF("Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)",
etof(this), this.classname, vtos(this.origin));
- _Movetype_LinkEdict(this, true);
+ _Movetype_LinkEdict(this, false);
return UNSTICK_FIXED;
}
vector last_origin = this.origin;
- if(dolink)
- _Movetype_LinkEdict(this, true);
+ _Movetype_LinkEdict(this, dolink);
- if(trace_fraction < 1)
- if(this.solid >= SOLID_TRIGGER && trace_ent && (!IS_ONGROUND(this) || (this.groundentity != trace_ent)))
- _Movetype_Impact(this, trace_ent);
+ if((this.solid >= SOLID_TRIGGER && trace_fraction < 1 && (!IS_ONGROUND(this) || this.groundentity != trace_ent)))
+ _Movetype_Impact(this, trace_ent);
return (this.origin == last_origin); // false if teleported by touch
}
Movetype_Physics_MatchTicrate(this, TICRATE, sloppy);
}
+// saved .move_*
.vector tic_origin;
.vector tic_velocity;
.int tic_flags;
.vector tic_avelocity;
.vector tic_angles;
+// saved .*
.vector tic_saved_origin;
.vector tic_saved_velocity;
.int tic_saved_flags;
.vector tic_saved_angles;
void Movetype_Physics_MatchTicrate(entity this, float tr, bool sloppy) // SV_Physics_Entity
{
+ // this hack exists to contain the physics feature
+ // (so entities can place themselves in the world and not need to update .tic_* themselves)
#define X(s) \
if(this.(s) != this.tic_saved_##s) \
this.tic_##s = this.(s)
X(angles);
#undef X
+ this.flags = this.tic_flags;
+ this.velocity = this.tic_velocity;
+ setorigin(this, this.tic_origin);
+ this.avelocity = this.tic_avelocity;
+ this.angles = this.tic_angles;
+
if(tr <= 0)
{
- this.flags = this.tic_flags;
- this.velocity = this.tic_velocity;
- this.origin = this.tic_origin;
- this.avelocity = this.tic_avelocity;
- this.angles = this.tic_angles;
Movetype_Physics_NoMatchServer(this);
- this.tic_origin = this.origin;
- this.tic_velocity = this.velocity;
- this.tic_avelocity = this.avelocity;
- this.tic_angles = this.angles;
- this.tic_flags = this.flags;
this.tic_saved_flags = this.flags;
this.tic_saved_velocity = this.velocity;
if(!this.move_didgravity)
this.move_didgravity = ((this.move_movetype == MOVETYPE_BOUNCE || this.move_movetype == MOVETYPE_TOSS) && !(this.tic_flags & FL_ONGROUND));
- for (int i = 0; i < n; ++i)
+ for (int j = 0; j < n; ++j)
{
- this.flags = this.tic_flags;
- this.velocity = this.tic_velocity;
- setorigin(this, this.tic_origin);
- this.avelocity = this.tic_avelocity;
- this.angles = this.tic_angles;
_Movetype_Physics_Frame(this, tr);
- this.tic_origin = this.origin;
- this.tic_velocity = this.velocity;
- this.tic_avelocity = this.avelocity;
- this.tic_angles = this.angles;
- this.tic_flags = this.flags;
if(wasfreed(this))
return;
}
+ // update the physics fields
+ this.tic_origin = this.origin;
+ this.tic_velocity = this.velocity;
+ this.tic_avelocity = this.avelocity;
+ this.tic_angles = this.angles;
+ this.tic_flags = this.flags;
+
+ // restore their actual values
+ this.flags = this.tic_saved_flags;
+ this.velocity = this.tic_saved_velocity;
+ setorigin(this, this.tic_saved_origin);
+ //this.avelocity = this.tic_saved_avelocity;
+ this.angles = this.tic_saved_angles;
+
this.avelocity = this.tic_avelocity;
if(dt > 0 && this.move_movetype != MOVETYPE_NONE && !(this.tic_flags & FL_ONGROUND))
{
this.velocity_z -= (GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE ? 0.5 : 1)
* dt
- * (this.gravity ? this.gravity : 1)
+ * ((this.gravity) ? this.gravity : 1)
* PHYS_GRAVITY(this);
}
}
else
{
- vector oldorg = this.origin;
- this.origin = this.tic_origin;
+ setorigin(this, this.tic_origin);
_Movetype_PushEntityTrace(this, dt * this.velocity);
- this.origin = oldorg;
if(!trace_startsolid)
setorigin(this, trace_endpos);
+ else
+ setorigin(this, this.tic_saved_origin);
}
if(this.move_didgravity > 0 && GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE)
- this.velocity_z -= 0.5 * dt * (this.gravity ? this.gravity : 1) * PHYS_GRAVITY(this);
+ this.velocity_z -= 0.5 * dt * ((this.gravity) ? this.gravity : 1) * PHYS_GRAVITY(this);
}
else
{
setorigin(this, this.tic_origin);
}
+ this.flags = this.tic_flags;
+
this.tic_saved_flags = this.flags;
this.tic_saved_velocity = this.velocity;
this.tic_saved_origin = this.origin;
#define GAMEPLAYFIX_STEPMULTIPLETIMES(s) STAT(GAMEPLAYFIX_STEPMULTIPLETIMES)
#define GAMEPLAYFIX_UNSTICKPLAYERS(s) STAT(GAMEPLAYFIX_UNSTICKPLAYERS)
#define GAMEPLAYFIX_WATERTRANSITION(s) STAT(GAMEPLAYFIX_WATERTRANSITION)
+#define GAMEPLAYFIX_SLIDEMOVEPROJECTILES(s) STAT(GAMEPLAYFIX_SLIDEMOVEPROJECTILES)
+#define GAMEPLAYFIX_GRENADEBOUNCESLOPES(s) STAT(GAMEPLAYFIX_GRENADEBOUNCESLOPES)
+#define GAMEPLAYFIX_NOAIRBORNCORPSE(s) STAT(GAMEPLAYFIX_NOAIRBORNCORPSE)
+#define NOAIRBORNCORPSE_ALLOWSUSPENDED(s) STAT(NOAIRBORNCORPSE_ALLOWSUSPENDED)
#define UPWARD_VELOCITY_CLEARS_ONGROUND(s) STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND)
+
#define PHYS_STEPHEIGHT(s) STAT(MOVEVARS_STEPHEIGHT)
#define PHYS_NOSTEP(s) STAT(NOSTEP)
#define PHYS_JUMPSTEP(s) STAT(MOVEVARS_JUMPSTEP)
void _Movetype_Physics_Toss(entity this, float dt) // SV_Physics_Toss
{
- if (IS_ONGROUND(this))
+ if(IS_ONGROUND(this))
{
- if (this.velocity.z >= 1 / 32 && UPWARD_VELOCITY_CLEARS_ONGROUND(this))
+ if(this.velocity.z >= (1 / 32) && UPWARD_VELOCITY_CLEARS_ONGROUND(this))
{
+ // don't stick to ground if onground and moving upward
UNSET_ONGROUND(this);
}
- else if (!this.groundentity)
+ else if(!this.groundentity || !GAMEPLAYFIX_NOAIRBORNCORPSE(this))
{
return;
}
- else if (this.move_suspendedinair && wasfreed(this.groundentity))
+ else if(this.move_suspendedinair && wasfreed(this.groundentity))
{
this.groundentity = NULL;
+ if(NOAIRBORNCORPSE_ALLOWSUSPENDED(this))
+ return;
+ }
+ else if(boxesoverlap(this.absmin, this.absmax, this.groundentity.absmin, this.groundentity.absmax))
+ {
+ // don't slide if still touching the groundentity
return;
}
}
_Movetype_CheckVelocity(this);
- /*if (this.move_movetype == MOVETYPE_BOUNCE || this.move_movetype == MOVETYPE_TOSS)
+ if(this.move_movetype == MOVETYPE_BOUNCE || this.move_movetype == MOVETYPE_TOSS)
{
- this.move_didgravity = 1;
+ this.move_didgravity = true;
this.velocity_z -= (GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE ? 0.5 : 1)
* dt
- * (this.gravity ? this.gravity : 1)
+ * ((this.gravity) ? this.gravity : 1)
* PHYS_GRAVITY(this);
- }*/
+ }
- if (this.move_movetype == MOVETYPE_BOUNCE || this.move_movetype == MOVETYPE_TOSS)
+ /*if (this.move_movetype == MOVETYPE_BOUNCE || this.move_movetype == MOVETYPE_TOSS)
{
this.move_didgravity = true;
this.velocity_z -= (((this.gravity) ? this.gravity : 1) * PHYS_GRAVITY(this) * dt);
- }
+ }*/
this.angles = this.angles + this.avelocity * dt;
float movetime = dt;
- for (int bump = 0; bump < MAX_CLIP_PLANES && movetime > 0; ++bump)
+ for (int bump = 0; bump < MAX_CLIP_PLANES && movetime > 0; bump++)
{
vector move = this.velocity * movetime;
- _Movetype_PushEntity(this, move, true, false);
+ if(!_Movetype_PushEntity(this, move, true, true))
+ return;
if (wasfreed(this))
return;
if (trace_startsolid)
{
_Movetype_UnstickEntity(this);
- _Movetype_PushEntity(this, move, false, false);
+ if(!_Movetype_PushEntity(this, move, true, true))
+ return;
if (wasfreed(this))
return;
}
if (this.move_movetype == MOVETYPE_BOUNCEMISSILE)
{
- this.velocity = _Movetype_ClipVelocity(this.velocity, trace_plane_normal, 2.0);
+ float bouncefac = (!this.bouncefactor) ? 1.0 : this.bouncefactor;
+ this.velocity = _Movetype_ClipVelocity(this.velocity, trace_plane_normal, 1 + bouncefac);
UNSET_ONGROUND(this);
+ if(!GAMEPLAYFIX_SLIDEMOVEPROJECTILES(this))
+ movetime = 0;
}
else if (this.move_movetype == MOVETYPE_BOUNCE)
{
- float bouncefac = this.bouncefactor; if (!bouncefac) bouncefac = 0.5;
- float bstop = this.bouncestop; if (!bstop) bstop = 60 / 800;
- bstop *= (this.gravity ? this.gravity : 1) * PHYS_GRAVITY(this);
+ float bouncefac = (!this.bouncefactor) ? 0.5 : this.bouncefactor;
+ float bstop = (!this.bouncestop) ? (60 / 800) : this.bouncestop;
+ float grav = ((this.gravity) ? this.gravity : 1);
this.velocity = _Movetype_ClipVelocity(this.velocity, trace_plane_normal, 1 + bouncefac);
float d = trace_plane_normal * this.velocity;
- if (trace_plane_normal.z > 0.7 && d < bstop && d > -bstop)
+ if(!GAMEPLAYFIX_GRENADEBOUNCESLOPES(this))
+ d = this.velocity.z;
+ if (trace_plane_normal.z > 0.7 && d < PHYS_GRAVITY(this) * bstop * grav)
{
SET_ONGROUND(this);
this.groundentity = trace_ent;
this.velocity = '0 0 0';
this.avelocity = '0 0 0';
+ movetime = 0;
}
else
{
UNSET_ONGROUND(this);
+ if(!GAMEPLAYFIX_SLIDEMOVEPROJECTILES(this))
+ movetime = 0;
}
}
else
this.move_suspendedinair = true;
this.velocity = '0 0 0';
this.avelocity = '0 0 0';
+ movetime = 0;
}
else
{
UNSET_ONGROUND(this);
+ if(!GAMEPLAYFIX_SLIDEMOVEPROJECTILES(this))
+ movetime = 0;
}
}
// DP revision 8905 (just, WHY...)
- if (this.move_movetype == MOVETYPE_BOUNCEMISSILE)
- break;
+ //if (this.move_movetype == MOVETYPE_BOUNCEMISSILE)
+ //break;
// DP revision 8918 (WHY...)
- if (IS_ONGROUND(this))
- break;
+ //if (IS_ONGROUND(this))
+ //break;
}
- //if (GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE && this.move_didgravity > 0 && !IS_ONGROUND(this))
- // this.velocity_z -= 0.5 * dt * (this.gravity ? this.gravity : 1) * PHYS_GRAVITY(this);
+ if (GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE && this.move_didgravity > 0 && !IS_ONGROUND(this))
+ this.velocity_z -= 0.5 * dt * ((this.gravity) ? this.gravity : 1) * PHYS_GRAVITY(this);
_Movetype_CheckWaterTransition(this);
}
do_crouch = false;
}
+ MUTATOR_CALLHOOK(PlayerCanCrouch, this, do_crouch);
+ do_crouch = M_ARGV(1, bool);
+
if (do_crouch) {
if (!IS_DUCKED(this)) {
SET_DUCKED(this);
if(!IS_ONGROUND(this))
return;
- if(!PHYS_SLICK_APPLYGRAVITY(this))
- return;
-
+ trace_dphitq3surfaceflags = 0;
tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this);
if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK)
{
- UNSET_ONGROUND(this);
+ if(PHYS_SLICK_APPLYGRAVITY(this))
+ UNSET_ONGROUND(this);
SET_ONSLICK(this);
}
else
}
}
+SHUTDOWN(PlayerStats_PlayerBasic_Shutdown)
+{
+ if(PS_B_IN_DB >= 0)
+ {
+ db_close(PS_B_IN_DB);
+ PS_B_IN_DB = -1;
+ }
+
+ if(PS_GR_OUT_DB >= 0)
+ {
+ db_close(PS_GR_OUT_DB);
+ PS_GR_OUT_DB = -1;
+ }
+}
+
void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer)
{
// determine whether we should retrieve playerbasic information again
//float PS_PM_IN_DB = -1; // playerstats_prematch_in_db // db for info COLLECTED at the beginning of a match
int PS_GR_OUT_DB = -1; // playerstats_gamereport_out_db // db of info SENT at the end of a match
//float PS_GR_IN_DB = -1; // playerstats_gamereport_in_db // db for info COLLECTED at the end of a match
-int PS_B_IN_DB = -1; // playerstats_playerbasic_in_db // db for info COLLECTED for basic player info (ELO)
+float PS_B_IN_DB = -1; // playerstats_playerbasic_in_db // db for info COLLECTED for basic player info (ELO)
#endif
#ifdef MENUQC
int autocvar_sv_gameplayfix_stepmultipletimes = 1;
int autocvar_sv_gameplayfix_unstickplayers = 1;
int autocvar_sv_gameplayfix_fixedcheckwatertransition = 1;
+int autocvar_sv_gameplayfix_slidemoveprojectiles = 1;
+int autocvar_sv_gameplayfix_grenadebouncedownslopes = 1;
+int autocvar_sv_gameplayfix_noairborncorpse = 1;
+int autocvar_sv_gameplayfix_noairborncorpse_allowsuspendeditems = 1;
#endif
REGISTER_STAT(GAMEPLAYFIX_DOWNTRACEONGROUND, int, autocvar_sv_gameplayfix_downtracesupportsongroundflag)
REGISTER_STAT(GAMEPLAYFIX_EASIERWATERJUMP, int, autocvar_sv_gameplayfix_easierwaterjump)
REGISTER_STAT(GAMEPLAYFIX_UNSTICKPLAYERS, int, autocvar_sv_gameplayfix_unstickplayers)
REGISTER_STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, int, autocvar_sv_gameplayfix_upwardvelocityclearsongroundflag)
REGISTER_STAT(GAMEPLAYFIX_WATERTRANSITION, int, autocvar_sv_gameplayfix_fixedcheckwatertransition)
+REGISTER_STAT(GAMEPLAYFIX_SLIDEMOVEPROJECTILES, int, autocvar_sv_gameplayfix_slidemoveprojectiles)
+REGISTER_STAT(GAMEPLAYFIX_GRENADEBOUNCESLOPES, int, autocvar_sv_gameplayfix_grenadebouncedownslopes)
+REGISTER_STAT(GAMEPLAYFIX_NOAIRBORNCORPSE, int, autocvar_sv_gameplayfix_noairborncorpse)
+REGISTER_STAT(NOAIRBORNCORPSE_ALLOWSUSPENDED, int, autocvar_sv_gameplayfix_noairborncorpse_allowsuspendeditems)
REGISTER_STAT(MOVEVARS_JUMPSTEP, int, cvar("sv_jumpstep"))
REGISTER_STAT(NOSTEP, int, cvar("sv_nostep"))
REGISTER_STAT(WALLJUMP_FORCE, float, autocvar_g_walljump_force)
REGISTER_STAT(LASTWJ, float)
+#ifdef SVQC
+float autocvar_g_bloodloss;
+#endif
+REGISTER_STAT(BLOODLOSS, float, autocvar_g_bloodloss)
+
// freeze tag, clan arena
REGISTER_STAT(REDALIVE, int)
REGISTER_STAT(BLUEALIVE, int)
this.onground_time = time + 0.5;
}
}
- else if (autocvar_cl_animate_items)
+ else if (autocvar_cl_animate_items && !this.item_simple) // no bobbing applied to simple items, for consistency's sake (no visual difference between ammo and weapons)
{
if(this.ItemStatus & ITS_ANIMATE1)
{
- if(!this.item_simple)
- this.angles += this.avelocity * frametime;
+ this.angles += this.avelocity * frametime;
float fade_in = bound(0, time - this.onground_time, 1);
setorigin(this, this.oldorigin + fade_in * ('0 0 10' + '0 0 8' * sin((time - this.onground_time) * 2)));
}
if(this.ItemStatus & ITS_ANIMATE2)
{
- if(!this.item_simple)
- this.angles += this.avelocity * frametime;
+ this.angles += this.avelocity * frametime;
float fade_in = bound(0, time - this.onground_time, 1);
setorigin(this, this.oldorigin + fade_in * ('0 0 8' + '0 0 4' * sin((time - this.onground_time) * 3)));
}
Item_SetAlpha(this);
- if(autocvar_cl_fullbright_items)
- if(this.ItemStatus & ITS_ALLOWFB)
- this.effects |= EF_FULLBRIGHT;
+ if(this.ItemStatus & ITS_ALLOWFB)
+ this.effects |= EF_FULLBRIGHT;
if(this.ItemStatus & ITS_GLOW)
{
float autocvar_cl_animate_items = 1;
float autocvar_cl_ghost_items = 0.45;
vector autocvar_cl_ghost_items_color = '-1 -1 -1';
-float autocvar_cl_fullbright_items = 0;
vector autocvar_cl_weapon_stay_color = '2 0.5 0.5';
float autocvar_cl_weapon_stay_alpha = 0.75;
float autocvar_cl_simple_items = 0;
#define TR_CONFIG_END()
#endif
-GENERIC_COMMAND(dumpturrets, "Dump all turrets into turrets_dump.txt")
+GENERIC_COMMAND(dumpturrets, "Dump all turrets into turrets_dump.txt", false)
{
switch(request)
{
if((pValue == 0) && (pFlags & (SFL_HIDE_ZERO | SFL_RANK | SFL_TIME)))
valstr = "";
else if(pFlags & SFL_RANK)
- {
- valstr = ftos(pValue);
- l = strlen(valstr);
- if((l >= 2) && (substring(valstr, l - 2, 1) == "1"))
- valstr = strcat(valstr, "th");
- else if(substring(valstr, l - 1, 1) == "1")
- valstr = strcat(valstr, "st");
- else if(substring(valstr, l - 1, 1) == "2")
- valstr = strcat(valstr, "nd");
- else if(substring(valstr, l - 1, 1) == "3")
- valstr = strcat(valstr, "rd");
- else
- valstr = strcat(valstr, "th");
- }
+ valstr = count_ordinal(pValue);
else if(pFlags & SFL_TIME)
valstr = TIME_ENCODED_TOSTRING(pValue);
else
l *= f;
}
- if(cvar("developer"))
+ if(cvar("developer") > 0)
{
LOG_TRACE("Verifying vector compression table...");
for(i = 0x0F00; i < 0xFFFF; ++i)
#define WepSet_FromWeapon(it) ((it).m_wepset)
WepSet _WepSet_FromWeapon(int i);
-GENERIC_COMMAND(dumpweapons, "Dump all weapons into weapons_dump.txt") // WEAPONTODO: make this work with other progs than just server
+GENERIC_COMMAND(dumpweapons, "Dump all weapons into weapons_dump.txt", false) // WEAPONTODO: make this work with other progs than just server
{
switch(request)
{
Draw_CylindricLine(start, end, thickness, beam.beam_image, 0.25, -time * 3, beam.beam_color, beam.beam_alpha, DRAWFLAG_NORMAL, transformed_view_org);
else
{
- R_BeginPolygon(beam.beam_image, DRAWFLAG_NORMAL); // DRAWFLAG_ADDITIVE
+ R_BeginPolygon(beam.beam_image, DRAWFLAG_NORMAL, false); // DRAWFLAG_ADDITIVE
R_PolygonVertex(
top,
'0 0.5 0' + ('0 0.5 0' * (thickness / beam.beam_thickness)),
// into a weapon system for client code.
// find where we are aiming
- makevectors(((autocvar_chase_active) ? warpzone_save_view_angles : view_angles));
- vector forward = v_forward;
- vector right = v_right;
- vector up = v_up;
+ vector myviewangle = ((autocvar_chase_active) ? warpzone_save_view_angles : view_angles);
+ vector forward, right, up;
+ MAKE_VECTORS(myviewangle, forward, right, up);
entity wepent = viewmodels[this.beam_slot];
if(autocvar_chase_active)
else
{ start_pos = this.origin; }
- int v_shot_idx; // used later
- (v_shot_idx = gettagindex(wepent, "shot")) || (v_shot_idx = gettagindex(wepent, "tag_shot"));
- if(v_shot_idx && this.beam_usevieworigin == 2)
- start_pos = gettaginfo(wepent, v_shot_idx) - '0 0 2';
-
// trace forward with an estimation
WarpZone_TraceLine(
start_pos,
this
);
+ int v_shot_idx; // used later
+ (v_shot_idx = gettagindex(wepent, "shot")) || (v_shot_idx = gettagindex(wepent, "tag_shot"));
+ if(v_shot_idx && this.beam_usevieworigin == 2)
+ start_pos = gettaginfo(wepent, v_shot_idx) - '0 0 2';
+
// untransform in case our trace went through a warpzone
vector end_pos = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
{
this.beam_dir = wantdir;
this.beam_initialized = true;
+
+ this.beam_muzzleentity.drawmask = MASK_NORMAL; // NOTE: this works around the muzzle entity flashing on the middle of the screen for a frame
}
if(this.beam_dir != wantdir)
// if the angle is greater than maxangle, force the blendfactor to make this the maximum factor
float blendfactor = bound(
0,
- (1 - (this.beam_returnspeed * frametime)),
+ (1 - (this.beam_returnspeed * dt)),
min(this.beam_maxangle / angle, 1)
);
this.beam_dir = normalize((wantdir * (1 - blendfactor)) + (this.beam_dir * blendfactor));
// the radius is not too far yet, no worries :D
float blendfactor = bound(
0,
- (1 - (this.beam_returnspeed * frametime)),
+ (1 - (this.beam_returnspeed * dt)),
1
);
this.beam_dir = normalize((wantdir * (1 - blendfactor)) + (this.beam_dir * blendfactor));
this.beam_hiteffect,
last_origin,
beamdir * -1,
- frametime * 2
+ dt * 2
);
}
if(this.beam_hitlight[0])
this.beam_muzzleeffect,
original_start_pos + wantdir * 20,
wantdir * 1000,
- frametime * 0.1
+ dt * 0.1
);
}
if(this.beam_muzzlelight[0])
flash = spawn();
flash.owner = this;
flash.effects = EF_ADDITIVE | EF_FULLBRIGHT;
- flash.drawmask = MASK_NORMAL;
+ //flash.drawmask = MASK_NORMAL;
flash.solid = SOLID_NOT;
flash.avelocity_z = 5000;
setattachment(flash, this, "");
dir = reflect(dir, trace_plane_normal);
pos = trace_endpos;
wepent.polyline[++idx] = pos;
- if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
+ if ((trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK) || (trace_dphitcontents & DPCONTENTS_PLAYERCLIP))
{
n += 1;
continue;
if(counter >= 1)
{
// draw from shot origin to min spread radius
- R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_BeginPolygon("", DRAWFLAG_NORMAL, false);
R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(new_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(this.sw_shotorg, '0 0 0', sw_color, a);
R_EndPolygon();
// draw from min spread radius to max spread radius
- R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_BeginPolygon("", DRAWFLAG_NORMAL, false);
R_PolygonVertex(new_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(prev_max_end, '0 0 0', sw_color, a);
if((counter + 1) == divisions)
{
// draw from shot origin to min spread radius
- R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_BeginPolygon("", DRAWFLAG_NORMAL, false);
R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(first_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(this.sw_shotorg, '0 0 0', sw_color, a);
R_EndPolygon();
// draw from min spread radius to max spread radius
- R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_BeginPolygon("", DRAWFLAG_NORMAL, false);
R_PolygonVertex(first_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(prev_min_end, '0 0 0', sw_color, a);
R_PolygonVertex(prev_max_end, '0 0 0', sw_color, a);
// apply edge friction
const float f2 = vlen2(vec2(this.velocity));
if (f2 > 0) {
- trace_dphitq3surfaceflags = 0;
- tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this);
// TODO: apply edge friction
// apply ground friction
- const int realfriction = (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK)
+ const int realfriction = (IS_ONSLICK(this))
? PHYS_FRICTION_SLICK(this)
: PHYS_FRICTION(this);
return (this == csqcplayer);
}
+float stairsmoothz;
+float autocvar_cl_stairsmoothspeed;
+float autocvar_cl_smoothviewheight;
+float smooth_prevtime;
+float viewheightavg;
+vector CSQCPlayer_ApplySmoothing(entity this, vector v)
+{
+ float smoothtime = bound(0, time - smooth_prevtime, 0.1);
+ smooth_prevtime = max(smooth_prevtime, drawtime); // drawtime is the previous frame's time at this point
+
+ if(this.csqcmodel_teleported || !(this.pmove_flags & PMF_ONGROUND) || autocvar_cl_stairsmoothspeed <= 0)
+ stairsmoothz = v.z;
+ else
+ {
+ if(stairsmoothz < v.z)
+ v.z = stairsmoothz = bound(v.z - PHYS_STEPHEIGHT(this), stairsmoothz + smoothtime * autocvar_cl_stairsmoothspeed, v.z);
+ else if(stairsmoothz > v.z)
+ v.z = stairsmoothz = bound(v.z, stairsmoothz - smoothtime * autocvar_cl_stairsmoothspeed, v.z + PHYS_STEPHEIGHT(this));
+ }
+
+ float viewheight = bound(0, (time - smooth_prevtime) / max(0.0001, autocvar_cl_smoothviewheight), 1);
+ viewheightavg = viewheightavg * (1 - viewheight) + this.view_ofs.z * viewheight;
+ v.z += viewheightavg;
+
+ smooth_prevtime = time;
+
+ return v;
+}
+
+bool autocvar_v_deathtilt;
+float autocvar_v_deathtiltangle;
+void CSQCPlayer_ApplyDeathTilt(entity this)
+{
+ if(!this.csqcmodel_isdead || !autocvar_v_deathtilt)
+ return;
+ view_angles.z = autocvar_v_deathtiltangle;
+}
+
+float autocvar_v_idlescale;
+float autocvar_v_ipitch_cycle;
+float autocvar_v_iyaw_cycle;
+float autocvar_v_iroll_cycle;
+float autocvar_v_ipitch_level;
+float autocvar_v_iyaw_level;
+float autocvar_v_iroll_level;
+void CSQCPlayer_ApplyIdleScaling(entity this)
+{
+ if(!autocvar_v_idlescale)
+ return;
+ view_angles.x += autocvar_v_idlescale * sin(time * autocvar_v_ipitch_cycle) * autocvar_v_ipitch_level;
+ view_angles.y += autocvar_v_idlescale * sin(time * autocvar_v_iyaw_cycle) * autocvar_v_iyaw_level;
+ view_angles.z += autocvar_v_idlescale * sin(time * autocvar_v_iroll_cycle) * autocvar_v_iroll_level;
+ //setproperty(VF_CL_VIEWANGLES, view_angles); // update view angles as well so we can aim
+}
+
+float autocvar_cl_bob;
+float autocvar_cl_bobcycle;
+float autocvar_cl_bob_limit;
+float autocvar_cl_bob_limit_heightcheck;
+float autocvar_cl_bob_velocity_limit;
+float autocvar_cl_bobup;
+float autocvar_cl_bobfall;
+float autocvar_cl_bobfallcycle;
+float autocvar_cl_bobfallminspeed;
+float autocvar_cl_bob2;
+float autocvar_cl_bob2cycle;
+float autocvar_cl_bob2smooth;
+float bobfall_swing;
+float bobfall_speed;
+float bob2_smooth;
+vector CSQCPlayer_ApplyBobbing(entity this, vector v)
+{
+ if(this.csqcmodel_isdead)
+ return v;
+
+ // bounded XY speed, used by several effects below
+ float bob, cycle;
+
+ // vertical view bobbing code
+ if(autocvar_cl_bob && autocvar_cl_bobcycle)
+ {
+ float bob_limit = autocvar_cl_bob_limit;
+
+ if(autocvar_cl_bob_limit_heightcheck)
+ {
+ // use traces to determine what range the view can bob in, and scale down the bob as needed
+ vector bob_height_check_dest = v;
+ bob_height_check_dest.z += autocvar_cl_bob_limit * 1.1;
+ traceline(v, bob_height_check_dest, MOVE_NOMONSTERS, NULL);
+ float trace1fraction = trace_fraction;
+
+ bob_height_check_dest = v;
+ bob_height_check_dest.z += autocvar_cl_bob_limit * -0.5;
+ traceline(v, bob_height_check_dest, MOVE_NOMONSTERS, NULL);
+ float trace2fraction = trace_fraction;
+
+ bob_limit *= min(trace1fraction, trace2fraction);
+ }
+
+ // LordHavoc: figured out bobup: the time at which the sin is at 180
+ // degrees (which allows lengthening or squishing the peak or valley)
+ cycle = time / autocvar_cl_bobcycle;
+ cycle -= rint(cycle);
+ if(cycle < autocvar_cl_bobup)
+ cycle = sin(M_PI * cycle / autocvar_cl_bobup);
+ else
+ cycle = sin(M_PI + M_PI * (cycle - autocvar_cl_bobup) / (1.0 - autocvar_cl_bobup));
+ // bob is proportional to velocity in the xy plane
+ // (don't count Z, or jumping messes it up)
+ float xyspeed = bound(0, sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y), autocvar_cl_bob_velocity_limit);
+ bob = xyspeed * autocvar_cl_bob;
+ bob = bound(0, bob, bob_limit);
+ bob = bob * 0.3 + bob * 0.7 * cycle;
+ v.z += bob;
+ }
+
+ // horizontal view bobbing code
+ if(autocvar_cl_bob2 && autocvar_cl_bob2cycle)
+ {
+ cycle = time / autocvar_cl_bob2cycle;
+ cycle -= rint(cycle);
+ if(cycle < 0.5)
+ cycle = cos(M_PI * cycle / 0.5); // cos looks better here with the other view bobbing using sin
+ else
+ cycle = cos(M_PI + M_PI * (cycle - 0.5) / 0.5);
+ bob = autocvar_cl_bob2 * cycle;
+
+ // this value slowly decreases from 1 to 0 when we stop touching the ground.
+ // The cycle is later multiplied with it so the view smooths back to normal
+ if(IS_ONGROUND(this) && !(input_buttons & BIT(1))) // also block the effect while the jump button is pressed, to avoid twitches when bunny-hopping
+ bob2_smooth = 1;
+ else
+ {
+ if(bob2_smooth > 0)
+ bob2_smooth -= bound(0, autocvar_cl_bob2smooth, 1);
+ else
+ bob2_smooth = 0;
+ }
+
+ // calculate the front and side of the player between the X and Y axes
+ makevectors(view_angles);
+ // now get the speed based on those angles. The bounds should match the same value as xyspeed's
+ float side = bound(-autocvar_cl_bob_velocity_limit, (this.velocity * v_right) * bob2_smooth, autocvar_cl_bob_velocity_limit);
+ float front = bound(-autocvar_cl_bob_velocity_limit, (this.velocity * v_forward) * bob2_smooth, autocvar_cl_bob_velocity_limit);
+ v_forward = v_forward * bob;
+ v_right = v_right * bob;
+ // we use side with forward and front with right, so the bobbing goes
+ // to the side when we walk forward and to the front when we strafe
+ vector bob2vel;
+ bob2vel.x = side * v_forward.x + front * v_right.x + 0 * v_up.x;
+ bob2vel.y = side * v_forward.y + front * v_right.y + 0 * v_up.y;
+ bob2vel.z = side * v_forward.z + front * v_right.z + 0 * v_up.z;
+ v.x += bob2vel.x;
+ v.y += bob2vel.y;
+ }
+
+ // fall bobbing code
+ // causes the view to swing down and back up when touching the ground
+ if(autocvar_cl_bobfall && autocvar_cl_bobfallcycle)
+ {
+ if(!IS_ONGROUND(this))
+ {
+ bobfall_speed = bound(-400, this.velocity.z, 0) * bound(0, autocvar_cl_bobfall, 0.1);
+ if(this.velocity.z < -autocvar_cl_bobfallminspeed)
+ bobfall_swing = 1;
+ else
+ bobfall_swing = 0; // really?
+ }
+ else
+ {
+ bobfall_swing = max(0, bobfall_swing - autocvar_cl_bobfallcycle * frametime);
+ float bobfall = sin(M_PI * bobfall_swing) * bobfall_speed;
+ v.z += bobfall;
+ }
+ }
+
+ return v;
+}
+
+float autocvar_cl_rollangle;
+float autocvar_cl_rollspeed;
+float CSQCPlayer_CalcRoll(entity this)
+{
+ makevectors(view_angles);
+ float side = (this.velocity * v_right);
+ float sign = (side < 0) ? -1 : 1;
+ side = fabs(side);
+
+ if(side < autocvar_cl_rollspeed)
+ side = side * autocvar_cl_rollangle / autocvar_cl_rollspeed;
+ else
+ side = autocvar_cl_rollangle;
+
+ return side * sign;
+}
+
+float autocvar_chase_back;
+float autocvar_chase_up;
+bool autocvar_chase_overhead;
+float autocvar_chase_pitchangle;
+vector CSQCPlayer_ApplyChase(entity this, vector v)
+{
+ vector forward;
+ vector chase_dest;
+
+ if(autocvar_chase_overhead)
+ {
+ view_angles.x = 0;
+ makevectors(view_angles);
+ forward = v_forward;
+ vector up = v_up;
+ // trace a little further so it hits a surface more consistently (to avoid 'snapping' on the edge of the range)
+ chase_dest.x = v.x - forward.x * autocvar_chase_back + up.x * autocvar_chase_up;
+ chase_dest.y = v.y - forward.y * autocvar_chase_back + up.y * autocvar_chase_up;
+ chase_dest.z = v.z - forward.z * autocvar_chase_back + up.z * autocvar_chase_up;
+
+ // trace from first person view location to our chosen third person view location
+ traceline(v, chase_dest, MOVE_NOMONSTERS, NULL);
+
+ vector bestvieworg = trace_endpos;
+ vector offset = '0 0 0';
+ for(offset.x = -16; offset.x <= 16; offset.x += 8)
+ {
+ for(offset.y = -16; offset.y <= 16; offset.y += 8)
+ {
+ makevectors(view_angles);
+ up = v_up;
+ chase_dest.x = v.x - forward.x * autocvar_chase_back + up.x * autocvar_chase_up + offset.x;
+ chase_dest.y = v.y - forward.y * autocvar_chase_back + up.y * autocvar_chase_up + offset.y;
+ chase_dest.z = v.z - forward.z * autocvar_chase_back + up.z * autocvar_chase_up + offset.z;
+ traceline(v, chase_dest, MOVE_NOMONSTERS, NULL);
+ if(bestvieworg.z > trace_endpos.z)
+ bestvieworg.z = trace_endpos.z;
+ }
+ }
+ bestvieworg.z -= 8;
+ v = bestvieworg;
+
+ view_angles.x = autocvar_chase_pitchangle;
+ //setproperty(VF_CL_VIEWANGLES, view_angles); // update view angles as well so we can aim
+ }
+ else
+ {
+ makevectors(view_angles);
+ forward = v_forward;
+ // trace a little further so it hits a surface more consistently (to avoid 'snapping' on the edge of the range)
+ float cdist = -autocvar_chase_back - 8;
+ chase_dest.x = v.x + forward.x * cdist;
+ chase_dest.y = v.y + forward.y * cdist;
+ chase_dest.z = v.z + forward.z * cdist + autocvar_chase_up;
+ traceline(v, chase_dest, MOVE_NOMONSTERS, NULL);
+ v.x = 1 * trace_endpos.x + 8 * forward.x + 4 * trace_plane_normal.x;
+ v.y = 1 * trace_endpos.y + 8 * forward.y + 4 * trace_plane_normal.y;
+ v.z = 1 * trace_endpos.z + 8 * forward.z + 4 * trace_plane_normal.z;
+ }
+
+#if 0
+ tracebox(v, '-4 -4 -4', '4 4 4', v - v_forward * autocvar_chase_back, MOVE_NORMAL, this);
+ v = trace_endpos;
+ tracebox(v, '-4 -4 -4', '4 4 4', v + v_up * autocvar_chase_up, MOVE_NORMAL, this);
+ v = trace_endpos;
+#endif
+ return v;
+}
+
+void CSQCPlayer_CalcRefdef(entity this)
+{
+ vector vieworg = this.origin;
+ if(intermission)
+ {
+ // just update view offset, don't need to do anything else
+ vieworg.z += this.view_ofs.z;
+ }
+ else
+ {
+ vieworg = CSQCPlayer_ApplySmoothing(this, vieworg);
+ if(autocvar_chase_active)
+ vieworg = CSQCPlayer_ApplyChase(this, vieworg);
+ else
+ {
+ // angles
+ CSQCPlayer_ApplyDeathTilt(this);
+ view_angles = view_angles + view_punchangle;
+ view_angles.z += CSQCPlayer_CalcRoll(this);
+ // TODO? we don't have damage time accessible here
+ // origin
+ vieworg = vieworg + view_punchvector;
+ vieworg = CSQCPlayer_ApplyBobbing(this, vieworg);
+ }
+ CSQCPlayer_ApplyIdleScaling(this);
+ }
+ setproperty(VF_ORIGIN, vieworg);
+ setproperty(VF_ANGLES, view_angles);
+}
+
+bool autocvar_cl_useenginerefdef = true;
+
/** Called once per CSQC_UpdateView() */
void CSQCPlayer_SetCamera()
{
InterpolateOrigin_Do(view);
view.view_ofs = '0 0 1' * vh;
}
- int refdefflags = 0;
- if (view.csqcmodel_teleported) refdefflags |= REFDEFFLAG_TELEPORTED;
- if (input_buttons & BIT(1)) refdefflags |= REFDEFFLAG_JUMPING;
- // note: these two only work in WIP2, but are harmless in WIP1
- if (PHYS_HEALTH(NULL) <= 0 && PHYS_HEALTH(NULL) != -666 && PHYS_HEALTH(NULL) != -2342) refdefflags |= REFDEFFLAG_DEAD;
- if (intermission) refdefflags |= REFDEFFLAG_INTERMISSION;
- V_CalcRefdef(view, refdefflags); // TODO? uses .health stat in the engine when this isn't called here, may be broken!
+ if(autocvar_cl_useenginerefdef)
+ {
+ int refdefflags = 0;
+ if (view.csqcmodel_teleported) refdefflags |= REFDEFFLAG_TELEPORTED;
+ if (input_buttons & BIT(1)) refdefflags |= REFDEFFLAG_JUMPING;
+ // note: these two only work in WIP2, but are harmless in WIP1
+ if (PHYS_HEALTH(NULL) <= 0 && PHYS_HEALTH(NULL) != -666 && PHYS_HEALTH(NULL) != -2342) refdefflags |= REFDEFFLAG_DEAD;
+ if (intermission) refdefflags |= REFDEFFLAG_INTERMISSION;
+ V_CalcRefdef(view, refdefflags); // TODO? uses .health stat in the engine when this isn't called here, may be broken!
+ }
+ else
+ {
+ CSQCPlayer_CalcRefdef(view);
+ }
+
}
else
{
C = to + thickdir * (thickness / 2);
D = to - thickdir * (thickness / 2);
- R_BeginPolygon(texture, drawflag);
+ R_BeginPolygon(texture, drawflag, false);
R_PolygonVertex(A, '0 0 0' + shift * '1 0 0', rgb, theAlpha);
R_PolygonVertex(B, '0 1 0' + shift * '1 0 0', rgb, theAlpha);
R_PolygonVertex(C, '0 1 0' + (shift + length_tex) * '1 0 0', rgb, theAlpha);
string prvm_language;
/**
- * @deprecated prefer _("translated")
+ * @deprecated prefer _("translated") - GMQCC's -ftranslatable-strings feature
*/
ERASEABLE
string language_filename(string s)
string c = HM_gets(CTX_cache, s);
if (c != "") return c;
#endif
- int p = strstrofs(s, "^", 0);
- string ret = (p < 0) ? s : substring(s, p + 1, -1);
+ int caret_ofs = strstrofs(s, "^", 0);
+ string ret = s;
+ // empty (caret_ofs == 0) and one char (caret_ofs == 1) prefixes are invalid
+ if (caret_ofs > 1)
+ {
+ int space_ofs = strstrofs(substring(s, 0, caret_ofs), " ", 0);
+ // prefixes containing a space are invalid (likely the caret is part of a color code)
+ if (space_ofs < 0 || space_ofs > caret_ofs)
+ ret = substring(s, caret_ofs + 1, -1);
+ }
#if CTX_CACHE
LOG_DEBUGF("CTX(\"%s\")", s);
HM_sets(CTX_cache, s, ret);
void print_assertfailed_fatal(string expr);
#define assert(expr, ...) _assert(print_assertfailed_severe, expr, __VA_ARGS__)
-#define devassert(...) MACRO_BEGIN if (autocvar_developer) assert(__VA_ARGS__); MACRO_END
+#define devassert(...) MACRO_BEGIN if (autocvar_developer > 0) assert(__VA_ARGS__); MACRO_END
#define assert_once(expr, ...) \
MACRO_BEGIN \
__once = true; \
} \
MACRO_END
-#define devassert_once(...) MACRO_BEGIN if (autocvar_developer) assert_once(__VA_ARGS__); MACRO_END
+#define devassert_once(...) MACRO_BEGIN if (autocvar_developer > 0) assert_once(__VA_ARGS__); MACRO_END
#define demand(expr, ...) _assert(print_assertfailed_fatal, expr, __VA_ARGS__)
-#define devdemand(...) MACRO_BEGIN if (autocvar_developer) demand(__VA_ARGS__); MACRO_END
+#define devdemand(...) MACRO_BEGIN if (autocvar_developer > 0) demand(__VA_ARGS__); MACRO_END
#define _assert(f, expr, then) \
MACRO_BEGIN \
#include <common/command/_mod.qh>
-GENERIC_COMMAND(mx, "Send a matrix command") {
+GENERIC_COMMAND(mx, "Send a matrix command", false) {
switch (argv(1)) {
case "user":
strcpy(matrix_user, substring(command, argv_start_index(2), -1));
{
TC(Object, this);
string s = _("No description");
- if (cvar("developer"))
+ if (cvar("developer") > 0)
{
for (int i = 0, n = numentityfields(); i < n; ++i)
{
store.fld = field; \
}
#elif defined(CSQC)
- float ReplicateVars_time;
+ noref float ReplicateVars_time;
#define ReplicateVars_NOT_SENDING() (time > ReplicateVars_time)
#define ReplicateVars_DELAY(t) ReplicateVars_time = time + t
#define ReplicateVars_DELAY_1FRAME() ReplicateVars_time = time
}
#define REPLICATE_SIMPLE(field, cvarname) MACRO_BEGIN \
- if (ReplicateVars_NOT_SENDING() && field != cvar(cvarname)) \
+ if (ReplicateVars_NOT_SENDING()) \
{ \
- localcmd(strcat("cl_cmd sendcvar ", cvarname, "\n")); \
- ReplicateVars_DELAY_1FRAME(); \
- field = cvar(cvarname); \
- return; \
+ float thecvar = cvar(cvarname); \
+ if(field != thecvar) \
+ { \
+ localcmd(strcat("cl_cmd sendcvar ", cvarname, "\n")); \
+ ReplicateVars_DELAY_1FRAME(); \
+ field = thecvar; \
+ return; \
+ } \
} \
MACRO_END
#endif
}
#define _STATIC_INIT(func, where) \
- ACCUMULATE void _static_##func##profile() { profile(#func); } \
- ACCUMULATE_FUNCTION(where, _static_##func##profile) \
+ /* ACCUMULATE void _static_##func##profile() { profile(#func); } */ \
+ /* ACCUMULATE_FUNCTION(where, _static_##func##profile) */ \
ACCUMULATE void _static_##func(); \
ACCUMULATE_FUNCTION(where, _static_##func) \
void _static_##func()
const int STATS_ENGINE_RESERVE = 32;
// must be listed in ascending order
#define MAGIC_STATS(_, x) \
+ _(x, MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, 220) \
+ _(x, MOVEVARS_AIRCONTROL_PENALTY, 221) \
+ _(x, MOVEVARS_AIRSPEEDLIMIT_NONQW, 222) \
+ _(x, MOVEVARS_AIRSTRAFEACCEL_QW, 223) \
+ _(x, MOVEVARS_AIRCONTROL_POWER, 224) \
+ _(x, MOVEFLAGS, 225) \
+ _(x, MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, 226) \
+ _(x, MOVEVARS_WARSOWBUNNY_ACCEL, 227) \
+ _(x, MOVEVARS_WARSOWBUNNY_TOPSPEED, 228) \
+ _(x, MOVEVARS_WARSOWBUNNY_TURNACCEL, 229) \
+ _(x, MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, 230) \
+ _(x, MOVEVARS_AIRSTOPACCELERATE, 231) \
+ _(x, MOVEVARS_AIRSTRAFEACCELERATE, 232) \
+ _(x, MOVEVARS_MAXAIRSTRAFESPEED, 233) \
+ _(x, MOVEVARS_AIRCONTROL, 234) \
+ _(x, FRAGLIMIT, 235) \
+ _(x, TIMELIMIT, 236) \
+ _(x, MOVEVARS_WALLFRICTION, 237) \
+ _(x, MOVEVARS_FRICTION, 238) \
+ _(x, MOVEVARS_WATERFRICTION, 239) \
+ _(x, MOVEVARS_TICRATE, 240) \
_(x, MOVEVARS_TIMESCALE, 241) \
+ _(x, MOVEVARS_GRAVITY, 242) \
+ _(x, MOVEVARS_STOPSPEED, 243) \
+ _(x, MOVEVARS_MAXSPEED, 244) \
+ _(x, MOVEVARS_SPECTATORMAXSPEED, 245) \
+ _(x, MOVEVARS_ACCELERATE, 246) \
+ _(x, MOVEVARS_AIRACCELERATE, 247) \
+ _(x, MOVEVARS_WATERACCELERATE, 248) \
+ _(x, MOVEVARS_ENTGRAVITY, 249) \
+ _(x, MOVEVARS_JUMPVELOCITY, 250) \
+ _(x, MOVEVARS_EDGEFRICTION, 251) \
+ _(x, MOVEVARS_MAXAIRSPEED, 252) \
+ _(x, MOVEVARS_STEPHEIGHT, 253) \
+ _(x, MOVEVARS_AIRACCEL_QW, 254) \
+ _(x, MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, 255) \
/**/
int g_magic_stats_hole = 0;
addstat_##T(STAT_##id.m_id, fld); \
}
void GlobalStats_update(entity this) {}
+ void GlobalStats_updateglobal() {}
/** TODO: do we want the global copy to update? */
#define REGISTER_STAT_3(id, T, expr) \
REGISTER_STAT_2(id, T); \
ACCUMULATE void GlobalStats_update(entity this) { STAT(id, this) = (expr); } \
+ ACCUMULATE void GlobalStats_updateglobal() { entity this = STATS; STAT(id, this) = (expr); } \
STATIC_INIT(worldstat_##id) { entity this = STATS; STAT(id, this) = (expr); }
#else
#define REGISTER_STAT_2(id, type)
gamestatus = 0;
if (isserver()) gamestatus |= GAME_ISSERVER;
if (clientstate() == CS_CONNECTED || isdemo()) gamestatus |= GAME_CONNECTED;
- if (cvar("developer")) gamestatus |= GAME_DEVELOPER;
+ if (cvar("developer") > 0) gamestatus |= GAME_DEVELOPER;
}
void m_init()
#endif
// list all game dirs (TEST)
- if (cvar("developer"))
+ if (cvar("developer") > 0)
{
for (int i = 0; ; ++i)
{
me.checkMarkOrigin = eY + eX * (me.columnCheckMarkOrigin + me.columnCheckMarkSize) - me.checkMarkSize;
+ me.typeIconOrigin = vec3(me.columnPreviewSize - me.checkMarkSize.x, me.checkMarkOrigin.y, 0);
+ me.typeIconSize = me.checkMarkSize;
+
rewrapCampaign(me.columnNameSize, me.rowsPerItem - 3, me.emptyLineHeight, me.realFontSize);
}
void XonoticCampaignList_doubleClickListBoxItem(entity me, float i, vector where)
else
draw_Picture(me.columnPreviewOrigin * eX, strcat("/maps/", campaign_mapname[i]), me.columnPreviewSize * eX + eY, '1 1 1', theAlpha);
+ s = strcat("/gfx/menu/", cvar_string("menu_skin"), "/gametype_", campaign_gametype[i]);
+ if(i <= me.campaignIndex && draw_PictureSize(s) != '0 0 0')
+ draw_Picture(me.typeIconOrigin, s, me.typeIconSize, '1 1 1', 1);
+
if(i < me.campaignIndex)
draw_Picture(me.checkMarkOrigin, "checkmark", me.checkMarkSize, '1 1 1', 1);
if(i <= me.campaignIndex)
ATTRIB(XonoticCampaignList, columnCheckMarkSize, float, 0);
ATTRIB(XonoticCampaignList, checkMarkOrigin, vector, '0 0 0');
ATTRIB(XonoticCampaignList, checkMarkSize, vector, '0 0 0');
+ ATTRIB(XonoticCampaignList, typeIconOrigin, vector, '0 0 0');
+ ATTRIB(XonoticCampaignList, typeIconSize, vector, '0 0 0');
ATTRIB(XonoticCampaignList, realUpperMargin1, float, 0);
ATTRIB(XonoticCampaignList, realUpperMargin2, float, 0);
me.TD(me, 1, 1, e = makeXonoticButton_T(_("No"), '0 1 0', _("I would play more!")));
e.onClick = Dialog_Close;
e.onClickEntity = me;
-}
\ No newline at end of file
+}
ATTRIB(XonoticDisconnectDialog, rows, float, 3);
ATTRIB(XonoticDisconnectDialog, colums, float, 2);
ATTRIB(XonoticDisconnectDialog, name, string, "Disconnect");
-ENDCLASS(XonoticDisconnectDialog)
\ No newline at end of file
+ENDCLASS(XonoticDisconnectDialog)
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_dodging", _("Dodging"),
- _("Enable dodging")));
+ _("Enable dodging (quick acceleration in a given direction). Double-tap a directional key to dodge")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_touchexplode", _("Touch explode")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_touchexplode", _("Touch explode"),
+ _("An explosion occurs when two players collide")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
_("All players are almost invisible")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_buffs", _("Buffs")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_buffs", _("Buffs"),
+ _("Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps that support it")));
e.cvarOffValue = "-1"; // TODO: make this a radio button?
me.TR(me);
me.TDempty(me, 0.2);
me.TR(me);
me.TDempty(me, 0.2);
s = makeXonoticSlider_T(10, 50, 1, "g_bloodloss",
- _("Amount of health below which your player gets stunned because of blood loss"));
+ _("Amount of health below which players start bleeding out (health rots and they can't jump)"));
me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TR(me);
me.TDempty(me, 0.2);
s = makeXonoticSlider_T(80, 400, 8, "sv_gravity",
- _("Make things fall to the ground slower, lower value means lower gravity"));
+ _("Make things fall to the ground slower (percentage of normal gravity)"));
s.valueDigits = 0;
s.valueDisplayMultiplier = 0.125; // show gravity in percent
me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(800, 1, s, _("Low gravity")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_grappling_hook", _("Grappling hook"),
- _("Players spawn with the grappling hook")));
+ _("Players spawn with the grappling hook. Press the 'hook' key to use it")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_jetpack", _("Jetpack"),
- _("Players spawn with the jetpack")));
+ _("Players spawn with the jetpack. Double-tap 'jump' or press the 'jetpack' key to use it")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_invincible_projectiles", _("Invincible Projectiles")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_invincible_projectiles", _("Invincible Projectiles"),
+ _("Projectiles can't be destroyed. However, Electro combos still work")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_new_toys", _("New Toys")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_new_toys", _("New Toys"),
+ _("Some weapon spawns will be randomly replaced with new weapons: Heavy Laser Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker")));
setDependentWeird(e, checkCompatibility_newtoys);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_rocket_flying", _("Rocket Flying")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_rocket_flying", _("Rocket Flying"),
+ _("Devastator rockets can be detonated instantly (otherwise, there's a short delay). This allows players to fire and detonate a Devastator rocket while in the air for a strong mid-air boost even while moving fast")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 2, makeXonoticTextLabel(0.5, _("Are you sure you want to quit?")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCommandButton_T(_("Yes"), '1 0 0', "echo ]quit\nquit", 0,
+ me.TD(me, 1, 1, e = makeXonoticCommandButton_T(_("Yes"), '1 0 0', "echo ]quit; quit", 0,
_("Back to work...")));
me.TD(me, 1, 1, e = makeXonoticButton_T(_("No"), '0 1 0',
_("I got some more fragging to do!")));
e.sendCvars = true;
me.TR(me);
me.TR(me);
- if(cvar("developer"))
+ if(cvar("developer") > 0)
me.TD(me, 1, 3, makeXonoticCheckBox(0, "showsound", _("Debug info about sounds")));
me.gotoRC(me, me.rows - 1, 0);
float n;
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Quality preset:")));
- n = 5 + 2 * boolean(cvar("developer"));
- if(cvar("developer"))
+ n = 5 + 2 * boolean(cvar("developer") > 0);
+ if(cvar("developer") > 0)
{
me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^OMG!")), '1 0 1', "exec effects-omg.cfg", 0));
e.applyButton = effectsApplyButton;
e.applyButton = effectsApplyButton;
me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultra")), '0 0 0', "exec effects-ultra.cfg", 0));
e.applyButton = effectsApplyButton;
- if(cvar("developer"))
+ if(cvar("developer") > 0)
{
me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultimate")), '0.5 0 0', "exec effects-ultimate.cfg", 0));
e.applyButton = effectsApplyButton;
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
setDependent(e, "r_showsurfaces", 0, 0);
me.TD(me, 1, 2, e = makeXonoticPicmipSlider());
- if(cvar("developer"))
+ if(cvar("developer") > 0)
e.addValue(e, ZCTX(_("RES^Leet")), "1337");
e.addValue(e, ZCTX(_("RES^Lowest")), "3");
e.addValue(e, ZCTX(_("RES^Very low")), "2");
}
}
me.TR(me);
- if(cvar("developer"))
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show skyboxes"), _("Disable skyboxes for performance and visibility")));
+ if(cvar("developer") > 0)
{
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
+ me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
_("Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly.")));
}
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "chase_active", "0", _("1st person perspective")));
- makeMulti(e, "crosshair_hittest_showimpact");
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_eventchase_death", _("Slide to third person upon death")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "chase_active", "1", _("3rd person perspective")));
- makeMulti(e, "crosshair_hittest_showimpact");
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Back distance")));
#include "weaponslist.qh"
#include "commandbutton.qh"
#include "textlabel.qh"
+#include "textslider.qh"
#include "checkbox.qh"
#include "button.qh"
#include "radiobutton.qh"
me.TD(me, 1, 1.0, e = makeXonoticRadioButton_T(1, "cl_gunalign", "3", _("Right align"),
_("Position of the weapon model; requires reconnect")));
setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Weapon model opacity:")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_viewmodel_alpha"));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ e.addValue(e, "15%", "0.15");
+ e.addValue(e, "25%", "0.25");
+ e.addValue(e, "50%", "0.5");
+ e.addValue(e, "75%", "0.75");
+ e.addValue(e, "100%", "1");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TR(me);
me.TDempty(me, 0.2);
e.addValue(e, _("Fast ADSL"), "40000");
e.addValue(e, _("Broadband"), "66666");
e.configureXonoticTextSliderValues(e);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Input packets/s:")));
- me.TD(me, 1, 2, e = makeXonoticSlider_T(30, 180, 5, "cl_netfps",
- _("How many input packets to send to the server each second")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Server queries/s:")));
me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 10, "net_slist_queriespersecond"));
e.addValue(e, strzone(_("Unlimited")), "0");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- if(cvar("developer"))
+ if(cvar("developer") > 0)
{
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Local latency:")));
me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
_("Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate")));
me.TR(me);
- if(cvar("developer"))
+ if(cvar("developer") > 0)
{
me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "v_flipped", _("Flip view horizontally"),
_("Poor man's left handed mode")));
me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "v_glslgamma", _("Use GLSL to handle color control"),
_("Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot")));
setDependent(e, "vid_gl20", 1, 1);
- if(cvar("developer"))
+ if(cvar("developer") > 0)
{
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_psycho", _("Psycho coloring (easter egg)")));
me.gotoRC(me, me.rows - 2, 0);
me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Campaign Difficulty:")));
me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "-2", ZCTX(_("CSKL^Easy"))));
- me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "-1", ZCTX(_("CSKL^Medium"))));
- me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "0", ZCTX(_("CSKL^Hard"))));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "0", ZCTX(_("CSKL^Medium"))));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "2", ZCTX(_("CSKL^Hard"))));
me.TR(me);
me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Singleplayer!"), '0 0 0'));
e.onClick = CampaignList_LoadMap;
{
me.configureXonoticTextSlider(me, "cl_particles_quality",
_("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance"));
- if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")), "0.25 250 0"); }
+ if(cvar("developer") > 0) { 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.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"); }
+ if(cvar("developer") > 0) { me.addValue(me, ZCTX(_("PART^Ultimate")), "3.0 3000 2"); }
me.configureXonoticTextSliderValues(me);
}
void XonoticParticlesSlider_loadCvars(entity me)
#define GAMETYPE(id) ++i;
GAMETYPES
#undef GAMETYPE
- #define GAMETYPE(it) { if (dev) ++i; }
+ #define GAMETYPE(it) { if (dev > 0) ++i; }
HIDDEN_GAMETYPES
#undef GAMETYPE
return i;
float autocvar_g_balance_falldamage_factor;
int autocvar_g_balance_falldamage_maxdamage;
float autocvar_g_balance_falldamage_minspeed;
+bool autocvar_g_balance_falldamage_onlyvertical;
int autocvar_g_balance_firetransfer_damage;
int autocvar_g_balance_firetransfer_time;
float autocvar_g_balance_fuel_limit;
}
else
{
+ entity balance = TeamBalance_CheckAllowedTeams(NULL);
+ TeamBalance_GetTeamCounts(balance, NULL);
+ int smallest_team = -1;
+ int smallest_count = -1;
+ if (teamplay)
+ {
+ for (int i = 1; i <= AvailableTeams(); ++i)
+ {
+ // NOTE if (autocvar_g_campaign && autocvar_g_campaign_forceteam == i)
+ // TeamBalance_GetNumberOfPlayers(balance, i); returns the number of players + 1
+ // since it keeps a spot for the real player in the desired team
+ int count = TeamBalance_GetNumberOfPlayers(balance, i);
+ if (smallest_count < 0 || count < smallest_count)
+ {
+ smallest_team = i;
+ smallest_count = count;
+ }
+ }
+ }
+ TeamBalance_Destroy(balance);
RandomSelection_Init();
while((readfile = fgets(file)))
{
continue;
if(substring(readfile, 0, 1) == "#")
continue;
+ // NOTE if the line is empty tokenizebyseparator(readfile, "\t")
+ // will create 1 empty token because there's no separator (bug?)
+ if (readfile == "")
+ continue;
tokens = tokenizebyseparator(readfile, "\t");
if(tokens == 0)
continue;
s = argv(0);
- prio = 1;
+ prio = 0;
+ bool conflict = false;
FOREACH_CLIENT(IS_BOT_CLIENT(it), {
- if(s == it.cleanname)
+ if (s == it.cleanname)
{
- prio = 0;
+ conflict = true;
break;
}
});
+ if (!conflict)
+ prio += 1;
+ if (teamplay && !(autocvar_bot_vs_human && AvailableTeams() == 2))
+ {
+ int forced_team = stof(argv(5));
+ if (!Team_IsValidIndex(forced_team))
+ forced_team = 0;
+ if (!forced_team || forced_team == smallest_team)
+ prio += 2;
+ }
RandomSelection_AddString(readfile, 1, prio);
}
readfile = RandomSelection_chosen_string;
if(argv(4) != "" && stof(argv(4)) >= 0) bot_pants = argv(4);
else bot_pants = ftos(floor(random() * 15));
- this.bot_forced_team = stof(argv(5));
+ if (teamplay && !(autocvar_bot_vs_human && AvailableTeams() == 2))
+ this.bot_forced_team = stof(argv(5));
+ else
+ this.bot_forced_team = 0;
prio = 6;
}
if (this.goalcurrent && wasfreed(this.goalcurrent))
+ {
navigation_clearroute(this);
+ navigation_goalrating_timeout_force(this);
+ return;
+ }
if(IS_DEAD(this) || STAT(FROZEN, this))
{
return false;
}
+// Unfortuntely we can't use trace_inwater since it doesn't hold the fraction of the total
+// distance that was traveled before impact as the description in the engine (collision.h) says.
+// It would have helped to speed up tracewalk underwater
vector resurface_limited(vector org, float lim, vector m1)
{
if (WETFEET(org + eZ * (lim - org.z)))
}
else
{
- if(autocvar_developer)
+ if(autocvar_developer > 0)
{
LOG_INFO("A generated waypoint is stuck in solid at ", vtos(w.origin));
backtrace("Waypoint stuck");
return;
}
- baseskill = autocvar_g_campaign_skill;
- baseskill = baseskill + campaign_botskill[0];
- if(baseskill < 0)
- baseskill = 0;
-
+ baseskill = max(0, autocvar_g_campaign_skill + campaign_botskill[0]);
campaign_forcewin = false;
cvar_set("sv_public", "0");
cvar_set("skill", ftos(baseskill));
cvar_set("bot_number", ftos(campaign_bots[0]));
#else
+ // since g_campaign is already set to 1 by the menu when starting a campaign level, we first need
+ // to set it back to 0 before settemping it to 1 so it'll be correctly restored to 0 on disconnection
+ cvar_set("g_campaign", "0");
cvar_settemp("g_campaign", "1");
cvar_settemp("g_dm", "0");
cvar_settemp("skill", ftos(baseskill));
#include "campaign.qh"
#include "command/common.qh"
#include "scores_rules.qh"
+#include "weapons/common.qh"
#include "bot/api.qh"
for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
.entity weaponentity = weaponentities[slot];
- entity oldwep = this.(weaponentity);
CL_SpawnWeaponentity(this, weaponentity);
- if(oldwep && oldwep.owner == this)
- this.(weaponentity).m_gunalign = oldwep.m_gunalign;
}
this.alpha = default_player_alpha;
this.colormod = '1 1 1' * autocvar_g_player_brightness;
if (CS(this).impulse) ImpulseCommands(this);
+ W_ResetGunAlign(this, CS(this).cvar_cl_gunalign);
for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
.entity weaponentity = weaponentities[slot];
ERASEABLE
void DebugPrintToChat(entity client, string text)
{
- if (autocvar_developer)
+ if (autocvar_developer > 0)
{
PrintToChat(client, text);
}
ERASEABLE
void DebugPrintToChatAll(string text)
{
- if (autocvar_developer)
+ if (autocvar_developer > 0)
{
PrintToChatAll(text);
}
ERASEABLE
void DebugPrintToChatTeam(int team_num, string text)
{
- if (autocvar_developer)
+ if (autocvar_developer > 0)
{
PrintToChatTeam(team_num, text);
}
.int items_added;
.string shootfromfixedorigin;
+.bool dualwielding_prev;
bool PlayerThink(entity this)
{
if (game_stopped || intermission_running) {
stuffcmd(this, sprintf("\ncl_shootfromfixedorigin \"%s\"\n", autocvar_g_shootfromfixedorigin));
}
+ // reset gun alignment when dual wielding status changes
+ // to ensure guns are always aligned right and left
+ bool dualwielding = W_DualWielding(this);
+ if(this.dualwielding_prev != dualwielding)
+ {
+ W_ResetGunAlign(this, CS(this).cvar_cl_gunalign);
+ this.dualwielding_prev = dualwielding;
+ }
+
// LordHavoc: allow firing on move frames (sub-ticrate), this gives better timing on slow servers
//if(frametime)
{
this.items |= this.items_added;
}
- player_regen(this);
-
- // WEAPONTODO: Add a weapon request for this
- // rot vortex charge to the charge limit
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ if (frametime)
{
- .entity weaponentity = weaponentities[slot];
- if (WEP_CVAR(vortex, charge_rot_rate) && this.(weaponentity).vortex_charge > WEP_CVAR(vortex, charge_limit) && this.(weaponentity).vortex_charge_rottime < time)
- this.(weaponentity).vortex_charge = bound(WEP_CVAR(vortex, charge_limit), this.(weaponentity).vortex_charge - WEP_CVAR(vortex, charge_rot_rate) * frametime / W_TICSPERFRAME, 1);
- }
+ // WEAPONTODO: Add a weapon request for this
+ // rot vortex charge to the charge limit
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if (WEP_CVAR(vortex, charge_rot_rate) && this.(weaponentity).vortex_charge > WEP_CVAR(vortex, charge_limit) && this.(weaponentity).vortex_charge_rottime < time)
+ this.(weaponentity).vortex_charge = bound(WEP_CVAR(vortex, charge_limit), this.(weaponentity).vortex_charge - WEP_CVAR(vortex, charge_rot_rate) * frametime / W_TICSPERFRAME, 1);
+ }
- if (frametime) player_anim(this);
+ player_regen(this);
+ player_anim(this);
+ this.dmg_team = max(0, this.dmg_team - autocvar_g_teamdamage_resetspeed * frametime);
+ }
- // secret status
secrets_setstatus(this);
-
- // monsters status
monsters_setstatus(this);
- this.dmg_team = max(0, this.dmg_team - autocvar_g_teamdamage_resetspeed * frametime);
-
return true;
}
this.max_armorvalue = 0;
}
- if(IS_PLAYER(this))
+ if (frametime && IS_PLAYER(this))
{
if (STAT(FROZEN, this) == FROZEN_TEMP_REVIVING)
{
void ReadyRestart()
{
if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || game_stopped || race_completing) localcmd("restart\n");
- else localcmd("\nsv_hook_gamerestart\n");
+ else localcmd("\nsv_hook_readyrestart\n");
// Reset ALL scores, but only do that at the beginning of the countdown if sv_ready_restart_after_countdown is off!
// Otherwise scores could be manipulated during the countdown.
SPAWNFUNC_ITEM(item_enviro, ITEM_Shield)
// medkit -> armor (we have no holdables)
-SPAWNFUNC_ITEM(holdable_medkit, ITEM_ArmorMega)
-
-// doubler -> strength
-SPAWNFUNC_ITEM(item_doubler, ITEM_Strength)
+SPAWNFUNC_ITEM(holdable_medkit, ITEM_ArmorBig)
.float wait;
.float delay;
}
//spawnfunc(item_flight) /* handled by buffs mutator */
+//spawnfunc(item_doubler) /* 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 */
if(weaponLocked(actor)) return;
if(actor.vehicle) return;
- // TODO: offhand hook shoots from eye
+ int s = W_GunAlign(actor.(weaponentity), STAT(GUNALIGN, actor)) - 1;
+ vector vs = hook_shotorigin[s];
+ vector oldmovedir = actor.(weaponentity).movedir;
+ actor.(weaponentity).movedir = vs;
W_SetupShot_ProjectileSize(actor, weaponentity, '-3 -3 -3', '3 3 3', true, 0, SND_HOOK_FIRE, CH_WEAPON_B, 0, WEP_HOOK.m_id);
Send_Effect(EFFECT_HOOK_MUZZLEFLASH, w_shotorg, '0 0 0', 1);
+ actor.(weaponentity).movedir = oldmovedir;
entity missile = WarpZone_RefSys_SpawnSameRefSys(actor);
missile.owner = missile.realowner = actor;
else
db_save(ServerProgsDB, strcat("server.db", autocvar_sessionid));
}
- if(autocvar_developer)
+ if(autocvar_developer > 0)
{
if(autocvar_sv_db_saveasdump)
db_dump(TemporaryDB, "server-temp.db");
#include "ipban.qh"
#include <server/mutators/_mod.qh>
#include "../common/t_items.qh"
+#include "mapvoting.qh"
#include "resources.qh"
#include "items.qh"
#include "player.qh"
return ammoitems;
}
+string PlayerHealth(entity this)
+{
+ float myhealth = floor(GetResource(this, RES_HEALTH));
+ if(myhealth == -666)
+ return "spectating";
+ else if(myhealth == -2342 || (myhealth == 2342 && mapvote_initialized))
+ return "observing";
+ else if(myhealth <= 0 || IS_DEAD(this))
+ return "dead";
+ return ftos(myhealth);
+}
+
+string WeaponNameFromWeaponentity(entity this, .entity weaponentity)
+{
+ entity wepent = this.(weaponentity);
+ if(!wepent)
+ return "none";
+ else if(wepent.m_weapon != WEP_Null)
+ return wepent.m_weapon.m_name;
+ else if(wepent.m_switchweapon != WEP_Null)
+ return wepent.m_switchweapon.m_name;
+ return "none"; //Weapons_from(wepent.cnt).m_name;
+}
+
string formatmessage(entity this, string msg)
{
float p, p1, p2;
case "\\":replacement = "\\"; break;
case "n": replacement = "\n"; break;
case "a": replacement = ftos(floor(GetResource(this, RES_ARMOR))); break;
- case "h": replacement = ftos(floor(GetResource(this, RES_HEALTH))); break;
+ case "h": replacement = PlayerHealth(this); break;
case "l": replacement = NearestLocation(this.origin); break;
case "y": replacement = NearestLocation(cursor); break;
case "d": replacement = NearestLocation(this.death_origin); break;
- case "w": replacement = ((this.(weaponentity).m_weapon == WEP_Null) ? ((this.(weaponentity).m_switchweapon == WEP_Null) ? Weapons_from(this.(weaponentity).cnt) : this.(weaponentity).m_switchweapon) : this.(weaponentity).m_weapon).m_name; break;
+ case "w": replacement = WeaponNameFromWeaponentity(this, weaponentity); break;
case "W": replacement = AmmoNameFromWeaponentity(this.(weaponentity).m_weapon); break;
case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break;
case "s": replacement = ftos(vlen(this.velocity - this.velocity_z * '0 0 1')); break;
}
if (s == "cl_allow_uidtracking")
PlayerStats_GameReport_AddPlayer(this);
+ //if (s == "cl_gunalign")
+ //W_ResetGunAlign(this, store.cvar_cl_gunalign);
}
}
#include <common/mapinfo.qh>
#include <common/turrets/all.qh>
-#ifdef RELEASE
+#if 1
#define cvar_string_normal builtin_cvar_string
#define cvar_normal builtin_cvar
#else
if(attacker == this)
{
- // don't reset pushltime for this damage as it may be an attempt to
+ // don't reset pushltime for self damage as it may be an attempt to
// escape a lava pit or similar
//this.pushltime = 0;
this.istypefrag = 0;
#include "../lib/warpzone/common.qh"
#include "../common/vehicles/vehicle.qh"
#include "../common/vehicles/sv_vehicles.qh"
+#include <server/player.qh>
#define PORTALS_ARE_NOT_SOLID
}
.vector right_vector;
-float Portal_TeleportPlayer(entity teleporter, entity player)
+float Portal_TeleportPlayer(entity teleporter, entity player, entity portal_owner)
{
vector from, to, safe, step, transform, ang, newvel;
float planeshift, s, t;
if(time < teleporter.teleport_time + 1)
Send_Notification(NOTIF_ONE, player, MSG_ANNCE, ANNCE_ACHIEVEMENT_AMAZING);
}
+ else if(player != portal_owner && IS_PLAYER(portal_owner) && IS_PLAYER(player))
+ {
+ player.pusher = portal_owner;
+ player.pushltime = time + autocvar_g_maxpushtime;
+ player.istypefrag = PHYS_INPUT_BUTTON_CHAT(player);
+ }
if (!teleporter.enemy)
{
}
*/
- if(Portal_TeleportPlayer(this, toucher))
+ if(Portal_TeleportPlayer(this, toucher, this.aiment))
if(toucher.classname == "porto")
if(toucher.effects & EF_RED)
toucher.effects += EF_BLUE - EF_RED;
Portal_Remove(this, 1);
}
-void Portal_Think_TryTeleportPlayer(entity this, entity e, vector g)
+void Portal_Think_TryTeleportPlayer(entity this, entity e, vector g, entity portal_owner)
{
if(!Portal_WillHitPlane(e.origin, e.mins, e.maxs, e.velocity + g, this.origin, v_forward, this.maxs.x))
return;
// already teleport him
tracebox(e.origin, e.mins, e.maxs, e.origin + e.velocity * 2 * frametime, MOVE_NORMAL, e);
if(trace_ent == this)
- Portal_TeleportPlayer(this, e);
+ Portal_TeleportPlayer(this, e, portal_owner);
}
void Portal_Think(entity this)
continue; // cannot go through someone else's portal
if(it != o || time >= this.portal_activatetime)
- Portal_Think_TryTeleportPlayer(this, it, g);
+ Portal_Think_TryTeleportPlayer(this, it, g, o);
for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
.entity weaponentity = weaponentities[slot];
if(it.(weaponentity).hook)
- Portal_Think_TryTeleportPlayer(this, it.(weaponentity).hook, g);
+ Portal_Think_TryTeleportPlayer(this, it.(weaponentity).hook, g, o);
}
});
this.solid = SOLID_TRIGGER;
return; // if the entity hasn't moved and isn't moving, then don't do anything
// check for falling damage
- float velocity_len = vlen(this.velocity);
bool have_hook = false;
for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
}
if(!have_hook)
{
- float dm = vlen(this.oldvelocity) - velocity_len; // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage.
+ float dm; // dm is the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage.
+ if(autocvar_g_balance_falldamage_onlyvertical)
+ dm = fabs(this.oldvelocity.z) - vlen(this.velocity);
+ else
+ dm = vlen(this.oldvelocity) - vlen(this.velocity);
if (IS_DEAD(this))
dm = (dm - autocvar_g_balance_falldamage_deadminspeed) * autocvar_g_balance_falldamage_factor;
else
dm = min((dm - autocvar_g_balance_falldamage_minspeed) * autocvar_g_balance_falldamage_factor, autocvar_g_balance_falldamage_maxdamage);
if (dm > 0)
- Damage (this, NULL, NULL, dm, DEATH_FALL.m_id, DMG_NOWEP, this.origin, '0 0 0');
+ {
+ tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this);
+ if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODAMAGE))
+ Damage (this, NULL, NULL, dm, DEATH_FALL.m_id, DMG_NOWEP, this.origin, '0 0 0');
+ }
}
- if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed)
+ if(autocvar_g_maxspeed > 0 && vdist(this.velocity, >, autocvar_g_maxspeed))
Damage (this, NULL, NULL, 100000, DEATH_SHOOTING_STAR.m_id, DMG_NOWEP, this.origin, '0 0 0');
}
anticheat_startframe();
MUTATOR_CALLHOOK(SV_StartFrame);
+ GlobalStats_updateglobal();
FOREACH_CLIENT(true, GlobalStats_update(it));
IL_EACH(g_players, IS_FAKE_CLIENT(it), PlayerPostThink(it));
}
}
// TODO: Balance quantity of bots across > 2 teams when bot_vs_human is set (and remove next line)
- if (AvailableTeams() == 2)
- if (autocvar_bot_vs_human && for_whom)
+ if (autocvar_bot_vs_human && AvailableTeams() == 2 && for_whom)
{
if (autocvar_bot_vs_human > 0)
{
{
if (wpn.spawnflags & WEP_FLAG_MUTATORBLOCKED)
{
- LOG_WARNF("Attempted to spawn a mutator-blocked weapon rejected: prvm_edict server %i", this);
+ //LOG_WARNF("Attempted to spawn a mutator-blocked weapon rejected: prvm_edict server %i", this);
startitem_failed = true;
return;
}
return false;
}
+void W_ResetGunAlign(entity player, int preferred_alignment)
+{
+ if(W_DualWielding(player))
+ preferred_alignment = 3; // right align, the second gun will default to left
+
+ // clear current weapon slots' alignments so we can redo the calculations!
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if (player.(weaponentity))
+ player.(weaponentity).m_gunalign = 0;
+ }
+
+ // now set the new values
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if (player.(weaponentity))
+ player.(weaponentity).m_gunalign = W_GunAlign(player.(weaponentity), preferred_alignment);
+ }
+}
+
.bool hook_switchweapon;
void W_WeaponFrame(Player actor, .entity weaponentity)
{
if (!(actor.items & IT_UNLIMITED_AMMO))
{
+ if (autocvar_g_weaponswitch_debug == 2 && weaponslot(weaponentity) > 0)
+ return; // in this case the primary weapon will do the switching when it runs out of ammo (TODO: do this same check but for other slots)
if (IS_REAL_CLIENT(actor) && actor.reload_complain < time)
{
play2(actor, SND(UNAVAILABLE));
void W_Reload(entity actor, .entity weaponentity, float sent_ammo_min, Sound sent_sound);
+void W_ResetGunAlign(entity player, int preferred_alignment);
+
void W_WeaponFrame(Player actor, .entity weaponentity);
float W_WeaponRateFactor(entity this);
seta cl_spawn_event_sound 1 "sound effect whenever a player spawns"
//seta cl_spawn_point_model 0 "place a model at all spawn points" // still needs a model
seta cl_spawn_point_particles 1 "pointparticles effect at all spawn points" // managed by effects-.cfg files
-seta cl_spawn_point_dist_min 1200
-seta cl_spawn_point_dist_max 1600
+seta cl_spawn_point_dist_min 800
+seta cl_spawn_point_dist_max 1200
freelook 1
sensitivity 6
seta cl_movement_errorcompensation 1 "try to compensate for prediction errors and reduce perceived lag"
seta cl_movement_intermissionrunning 0 "keep velocity after the match ends, players may appear to continue running while stationary"
-seta cl_viewmodel_alpha 0 "Maximum transparency of the view model, set to 0 to disable"
+seta cl_viewmodel_alpha 1 "Maximum opacity of the view model, use a value between 0 and 1"
set debugdraw 0
set debugdraw_filter ""
// FIXME remove this when the engine feature FINALLY MAYBE works
r_glsl_skeletal 0
+// FIXME engine description mentions the default should be 1, but sets it to 2 anyway, breaks some maps
+r_useportalculling 1
+
// animation tuning
set cl_lerpanim_maxdelta_framegroups 0.05 // must be faster than fastest weapon refire
set cl_lerpanim_maxdelta_server 0.1 // must be slower than slowest server controlled anim (e.g. animinfo stuff)
r_fullbright_directed 1
r_water_hideplayer 1 // hide your own feet/player model in refraction views, this way you don't see half of your body under water
-r_water_refractdistort 0.019
+r_water_refractdistort 0.003
set cl_rainsnow_maxdrawdist 2048
seta cl_ghost_items_color "-1 -1 -1" "color of ghosted items (colormod format: 0 0 0 leaves the color unchanged, negative values allowed)"
seta cl_simple_items 0 "enable simple items (if server allows)"
set cl_simpleitems_postfix "_luma" "posfix to add fo model name when simple items are enabled"
-set cl_fullbright_items 0 "enable fullbright items (if server allows, controlled by g_fullbrightitems) - items are more visible in shadows"
set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_stay > 0 (colormod format: 0 0 0 leaves the color unchanged, negative values allowed)"
set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"
set g_campaign 0
set g_campaign_forceteam 0 "Forces the player to a given team in campaign mode, 1 = red, 2 = blue, 3 = yellow, 4 = pink"
seta g_campaign_name "xonoticbeta"
-seta g_campaign_skill -1 // -2 easy -1 medium 0 hard
+seta g_campaign_skill 0 // -2 easy, 0 medium, 2 hard
alias singleplayer_start "g_campaign_index 0; set scmenu_campaign_goto 0"
alias singleplayer_continue "set scmenu_campaign_goto -1"
set sv_ready_restart_after_countdown 0 "reset players and map items after the countdown ended, instead of at the beginning of the countdown"
set sv_ready_restart_repeatable 0 "allows the players to restart the game as often as needed"
+alias sv_hook_readyrestart
+
//nifreks lockonrestart feature, used in team-based game modes, if set to 1 and all players readied up no other player can then join the game anymore, useful to block spectators from joining
set teamplay_lockonrestart 0 "lock teams once all players readied up and the game restarted (no new players can join after restart unless using the server-command unlockteams)"
set g_spawnpoints_auto_move_out_of_solid 0 "if set to 1 you will see a warning if a spawn point was placed inside a solid"
set g_forced_respawn 0 "if set to 1 and a player died, that player gets automatically respawned once <g_respawn_delay> seconds are over"
set g_fullbrightplayers 0 "brightens up player models (note that the color, skin or model of the players does not change!)"
-set g_fullbrightitems 0 "allows players to use cl_fullbright_items"
+set g_fullbrightitems 0 "disables lighting effects on items, making them appear bright for visibility"
set g_nodepthtestplayers 0 "disables depth testing on players"
set g_nodepthtestitems 0 "disables depth testing on items"
set g_casings 2 "specifies which casings (0: none, 1: only shotgun casings, 2: shotgun and machine gun casings) are sent to the client"