seta hud_configure_grid_xsize "" "snap to X * vid_conwidth"
seta hud_configure_grid_ysize "" "snap to Y * vid_conheight"
-seta scr_centerpos "" "Y position of the centerprint"
-
seta hud_panel_weapons "" "enable/disable this panel"
seta hud_panel_weapons_pos "" "position of this panel"
seta hud_panel_weapons_size "" "size of this panel"
seta hud_panel_infomessages_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
seta hud_panel_infomessages_flip "" "1 = align the items to the right"
-seta hud_panel_physics "" "enable/disable this panel, 1 = show if not observing, 2 = show always"
+seta hud_panel_physics "" "enable/disable this panel, 1 = show if not observing, 2 = show always, 3 = show only in race/cts if not observing"
seta hud_panel_physics_pos "" "position of this base of the panel"
seta hud_panel_physics_size "" "size of this panel"
seta hud_panel_physics_bg "" "if set to something else than \"\" = override default background"
seta hud_panel_physics_progressbar "" "enable progressbar in panel (2 = only for speed; 3 = only for acceleration)"
seta hud_panel_physics_acceleration_progressbar_mode "" "0 = progressbar increases from the center to the right if the acceleration is positive, to the left if it's negative; 1 = progressbar increases from the border in the same direction for both positive and negative accelerations"
seta hud_panel_physics_text "" "show text in panel (2 = only for speed; 3 = only for acceleration)"
+
+seta hud_panel_centerprint "" "enable/disable this panel"
+seta hud_panel_centerprint_pos "" "position of this base of the panel"
+seta hud_panel_centerprint_size "" "size of this panel"
+seta hud_panel_centerprint_bg "" "if set to something else than \"\" = override default background"
+seta hud_panel_centerprint_bg_color "" "if set to something else than \"\" = override default panel background color"
+seta hud_panel_centerprint_bg_color_team "" "override panel color with team color in team based games"
+seta hud_panel_centerprint_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
+seta hud_panel_centerprint_bg_border "" "if set to something else than \"\" = override default size of border around the background"
+seta hud_panel_centerprint_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
+seta hud_panel_centerprint_align "" "text alignment: 0 left, 0.5 center, 1 right"
+seta hud_panel_centerprint_flip "" "invert messages order"
+seta hud_panel_centerprint_fontscale "" "scale the text font by this amount"
+seta hud_panel_centerprint_time "" "message duration (NOTE: certain messages have a fixed duration)"
+seta hud_panel_centerprint_fadetime "" "how long a message takes to fade out (this time is included in the message duration and can't be > 1)"
set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_sniperrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_lifetime2 0
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 0
set g_balance_grenadelauncher_secondary_refire 0.7
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_hlac_reload_ammo 0 //default: 20
set g_balance_hlac_reload_time 2
// }}}
-// {{{ sniperrifle
-set g_balance_sniperrifle_bursttime 0
-set g_balance_sniperrifle_primary_tracer 0
-set g_balance_sniperrifle_primary_shots 1
-set g_balance_sniperrifle_primary_damage 60
-set g_balance_sniperrifle_primary_headshotaddeddamage 100
-set g_balance_sniperrifle_primary_spread 0
-set g_balance_sniperrifle_primary_force 2
-set g_balance_sniperrifle_primary_speed 35000
-set g_balance_sniperrifle_primary_lifetime 5
-set g_balance_sniperrifle_primary_refire 0.8
-set g_balance_sniperrifle_primary_animtime 0.3
-set g_balance_sniperrifle_primary_ammo 10
-set g_balance_sniperrifle_primary_bulletconstant 130 // 56.3qu
-set g_balance_sniperrifle_primary_burstcost 0
-set g_balance_sniperrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_secondary 1
-set g_balance_sniperrifle_secondary_reload 0
-set g_balance_sniperrifle_secondary_tracer 0
-set g_balance_sniperrifle_secondary_shots 1
-set g_balance_sniperrifle_secondary_damage 35
-set g_balance_sniperrifle_secondary_headshotaddeddamage 15 // 50 damage only on head
-set g_balance_sniperrifle_secondary_spread 0.008
-set g_balance_sniperrifle_secondary_force 1
-set g_balance_sniperrifle_secondary_speed 20000
-set g_balance_sniperrifle_secondary_lifetime 5
-set g_balance_sniperrifle_secondary_refire 0.15
-set g_balance_sniperrifle_secondary_animtime 0.1
-set g_balance_sniperrifle_secondary_ammo 10
-set g_balance_sniperrifle_secondary_bulletconstant 130 // 18.3qu
-set g_balance_sniperrifle_secondary_burstcost 0
-set g_balance_sniperrifle_secondary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_reload_ammo 80 //default: 80
-set g_balance_sniperrifle_reload_time 2
+// {{{ rifle
+set g_balance_rifle_bursttime 0
+set g_balance_rifle_primary_tracer 0
+set g_balance_rifle_primary_shots 1
+set g_balance_rifle_primary_damage 60
+set g_balance_rifle_primary_headshotaddeddamage 100
+set g_balance_rifle_primary_spread 0
+set g_balance_rifle_primary_force 2
+set g_balance_rifle_primary_speed 35000
+set g_balance_rifle_primary_lifetime 5
+set g_balance_rifle_primary_refire 0.8
+set g_balance_rifle_primary_animtime 0.3
+set g_balance_rifle_primary_ammo 10
+set g_balance_rifle_primary_bulletconstant 130 // 56.3qu
+set g_balance_rifle_primary_burstcost 0
+set g_balance_rifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_secondary 1
+set g_balance_rifle_secondary_reload 0
+set g_balance_rifle_secondary_tracer 0
+set g_balance_rifle_secondary_shots 1
+set g_balance_rifle_secondary_damage 35
+set g_balance_rifle_secondary_headshotaddeddamage 15 // 50 damage only on head
+set g_balance_rifle_secondary_spread 0.008
+set g_balance_rifle_secondary_force 1
+set g_balance_rifle_secondary_speed 20000
+set g_balance_rifle_secondary_lifetime 5
+set g_balance_rifle_secondary_refire 0.15
+set g_balance_rifle_secondary_animtime 0.1
+set g_balance_rifle_secondary_ammo 10
+set g_balance_rifle_secondary_bulletconstant 130 // 18.3qu
+set g_balance_rifle_secondary_burstcost 0
+set g_balance_rifle_secondary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_reload_ammo 80 //default: 80
+set g_balance_rifle_reload_time 2
// }}}
// {{{ tuba
set g_balance_tuba_refire 0.05
--- /dev/null
+// {{{ starting gear
+set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_shotgun -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_uzi -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_minelayer -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_balance_health_start 125
+set g_balance_armor_start 0
+set g_start_ammo_shells 20
+set g_start_ammo_nails 0
+set g_start_ammo_rockets 0
+set g_start_ammo_cells 0
+set g_start_ammo_fuel 0
+set g_warmup_start_health 200 "starting values when being in warmup-stage"
+set g_warmup_start_armor 100 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
+set g_lms_start_health 200
+set g_lms_start_armor 100
+set g_lms_start_ammo_shells 30
+set g_lms_start_ammo_nails 200
+set g_lms_start_ammo_rockets 150
+set g_lms_start_ammo_cells 150
+set g_lms_start_ammo_fuel 0
+set g_balance_nix_roundtime 25
+set g_balance_nix_incrtime 1.6
+set g_balance_nix_ammo_shells 15
+set g_balance_nix_ammo_nails 45
+set g_balance_nix_ammo_rockets 15
+set g_balance_nix_ammo_cells 15
+set g_balance_nix_ammo_fuel 0
+set g_balance_nix_ammoincr_shells 2
+set g_balance_nix_ammoincr_nails 6
+set g_balance_nix_ammoincr_rockets 2
+set g_balance_nix_ammoincr_cells 2
+set g_balance_nix_ammoincr_fuel 2
+// }}}
+
+// {{{ pickup items
+set g_pickup_ammo_anyway 1
+set g_pickup_weapons_anyway 1
+set g_pickup_shells 20
+set g_pickup_shells_weapon 10
+set g_pickup_shells_max 45
+set g_pickup_nails 120
+set g_pickup_nails_weapon 60
+set g_pickup_nails_max 300
+set g_pickup_rockets 25
+set g_pickup_rockets_weapon 15
+set g_pickup_rockets_max 150
+set g_pickup_cells 30
+set g_pickup_cells_weapon 20
+set g_pickup_cells_max 150
+set g_pickup_fuel 25
+set g_pickup_fuel_weapon 15
+set g_pickup_fuel_jetpack 50
+set g_pickup_fuel_max 100
+set g_pickup_armorsmall 5
+set g_pickup_armorsmall_max 150
+set g_pickup_armorsmall_anyway 1
+set g_pickup_armormedium 25
+set g_pickup_armormedium_max 50
+set g_pickup_armormedium_anyway 0
+set g_pickup_armorbig 50
+set g_pickup_armorbig_max 75; // LOG: to allow a little more armor from medium armor
+set g_pickup_armorbig_anyway 0
+set g_pickup_armorlarge 100
+set g_pickup_armorlarge_max 150
+set g_pickup_armorlarge_anyway 1
+set g_pickup_healthsmall 5
+set g_pickup_healthsmall_max 250
+set g_pickup_healthsmall_anyway 1
+set g_pickup_healthmedium 25
+set g_pickup_healthmedium_max 100
+set g_pickup_healthmedium_anyway 0
+set g_pickup_healthlarge 50
+set g_pickup_healthlarge_max 150
+set g_pickup_healthlarge_anyway 0
+set g_pickup_healthmega 100
+set g_pickup_healthmega_max 250
+set g_pickup_healthmega_anyway 1
+set g_pickup_respawntime_short 15
+set g_pickup_respawntime_medium 20
+set g_pickup_respawntime_long 30
+set g_pickup_respawntime_powerup 120
+set g_pickup_respawntime_weapon 10
+set g_pickup_respawntime_ammo 25
+set g_pickup_respawntimejitter_short 0
+set g_pickup_respawntimejitter_medium 0
+set g_pickup_respawntimejitter_long 0
+set g_pickup_respawntimejitter_powerup 10
+set g_pickup_respawntimejitter_weapon 0
+set g_pickup_respawntimejitter_ammo 0
+// }}}
+
+// {{{ regen/rot
+set g_balance_health_regen 0.05
+set g_balance_health_regenlinear 0
+set g_balance_pause_health_regen 5
+set g_balance_pause_health_regen_spawn 0
+set g_balance_health_rot 0
+set g_balance_health_rotlinear 1
+set g_balance_pause_health_rot 1
+set g_balance_pause_health_rot_spawn 0
+set g_balance_health_regenstable 100
+set g_balance_health_rotstable 100
+set g_balance_health_limit 999
+set g_balance_armor_regen 0
+set g_balance_armor_regenlinear 0
+set g_balance_armor_rot 0
+set g_balance_armor_rotlinear 1
+set g_balance_pause_armor_rot 1
+set g_balance_pause_armor_rot_spawn 0
+set g_balance_armor_regenstable 100
+set g_balance_armor_rotstable 100
+set g_balance_armor_limit 999
+set g_balance_armor_blockpercent 0.7
+set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
+set g_balance_fuel_regenlinear 0
+set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
+set g_balance_fuel_rot 0.05
+set g_balance_fuel_rotlinear 0
+set g_balance_pause_fuel_rot 5
+set g_balance_pause_fuel_rot_spawn 10
+set g_balance_fuel_regenstable 50
+set g_balance_fuel_rotstable 100
+set g_balance_fuel_limit 999
+// }}}
+
+// {{{ misc
+set g_balance_selfdamagepercent 0.65
+set g_balance_weaponswitchdelay 0.15
+set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
+set g_weaponratefactor 1 "weapon fire rate multiplier"
+set g_weapondamagefactor 1 "weapon damage multiplier"
+set g_weaponforcefactor 1 "weapon force multiplier"
+set g_weaponspreadfactor 1 "weapon spread multiplier"
+set g_balance_firetransfer_time 0.9
+set g_balance_firetransfer_damage 0.8
+set g_throughfloor_damage 0.7
+set g_throughfloor_force 0.8
+set g_projectiles_newton_style 2
+// possible values:
+// 0: absolute velocity projectiles (like Quake)
+// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
+// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
+// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
+// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
+set g_projectiles_newton_style_2_minfactor 0.7
+set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 7
+// possible values:
+// 0: forward + solid sphere (like Quake) - varies velocity
+// 1: forward + flattened solid sphere
+// 2: forward + solid circle
+// 3: forward + normal distribution 3D - varies velocity
+// 4: forward + normal distribution on a plane
+// 5: forward + circle with 1-r falloff
+// 6: forward + circle with 1-r^2 falloff
+// 7: forward + circle with (1-r)(2-r) falloff
+set g_balance_falldamage_deadminspeed 150
+set g_balance_falldamage_minspeed 800
+set g_balance_falldamage_factor 0.20
+set g_balance_falldamage_maxdamage 15
+set g_balance_damagepush_speedfactor 2.5
+// }}}
+
+// {{{ powerups
+set g_balance_powerup_invincible_takedamage 0.6
+set g_balance_powerup_invincible_time 30
+set g_balance_powerup_strength_damage 3
+set g_balance_powerup_strength_force 4
+set g_balance_powerup_strength_time 30
+set g_balance_powerup_strength_selfdamage 1.5
+set g_balance_powerup_strength_selfforce 1.5
+// }}}
+
+// {{{ jetpack/hook
+set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
+set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
+set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
+set g_jetpack_maxspeed_side 1500 "max speed of the jetpack in xy direction"
+set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
+set g_jetpack_fuel 8 "fuel per second for jetpack"
+set g_jetpack_attenuation 2 "jetpack sound attenuation"
+
+set g_grappling_hook_tarzan 2 // 2: can also pull players
+set g_balance_grapplehook_speed_fly 1800
+set g_balance_grapplehook_speed_pull 2000
+set g_balance_grapplehook_force_rubber 2000
+set g_balance_grapplehook_force_rubber_overstretch 1000
+set g_balance_grapplehook_length_min 50
+set g_balance_grapplehook_stretch 50
+set g_balance_grapplehook_airfriction 0.2
+set g_balance_grapplehook_health 130
+// }}}
+
+// {{{ weapon properties
+// {{{ laser
+set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high
+set g_balance_laser_primary_edgedamage 20
+set g_balance_laser_primary_force 150 // this looks insanely low, but actually isn't with zscale and velocitybias
+set g_balance_laser_primary_radius 60
+set g_balance_laser_primary_speed 5000
+set g_balance_laser_primary_spread 0
+set g_balance_laser_primary_refire 0.6
+set g_balance_laser_primary_animtime 0.4
+set g_balance_laser_primary_lifetime 5
+set g_balance_laser_primary_shotangle 0
+set g_balance_laser_primary_delay 0
+set g_balance_laser_primary_gauntlet 0
+set g_balance_laser_primary_force_zscale 2 // 300 upforce
+set g_balance_laser_primary_force_velocitybias 0.3
+set g_balance_laser_primary_force_other_scale 2.5 // force 375 when pushing others around
+set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
+set g_balance_laser_secondary_damage 200 // dps
+set g_balance_laser_secondary_edgedamage 0
+set g_balance_laser_secondary_force 1300
+set g_balance_laser_secondary_radius 60
+set g_balance_laser_secondary_speed 0
+set g_balance_laser_secondary_spread 0
+set g_balance_laser_secondary_refire 0.066
+set g_balance_laser_secondary_animtime 0.066
+set g_balance_laser_secondary_lifetime 0
+set g_balance_laser_secondary_shotangle 0
+set g_balance_laser_secondary_delay 0
+set g_balance_laser_secondary_gauntlet 1
+set g_balance_laser_secondary_force_zscale 1.25
+set g_balance_laser_secondary_force_velocitybias 0
+set g_balance_laser_secondary_force_other_scale 0
+set g_balance_laser_reload_ammo 0 //default: 6
+set g_balance_laser_reload_time 2
+// }}}
+// {{{ shotgun
+set g_balance_shotgun_primary_bullets 18
+set g_balance_shotgun_primary_damage 3.5 // LOG: changed from 4 to 3.5, total damage 63
+set g_balance_shotgun_primary_force 20
+set g_balance_shotgun_primary_spread 0.16 // LOG: changed from 0.18 -> 0.16 to compensate a little for lower damage
+set g_balance_shotgun_primary_refire 1
+set g_balance_shotgun_primary_animtime 0.3
+set g_balance_shotgun_primary_ammo 1
+set g_balance_shotgun_primary_speed 12000
+set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_secondary 1
+set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
+set g_balance_shotgun_secondary_melee_range 85
+set g_balance_shotgun_secondary_melee_swing 50
+set g_balance_shotgun_secondary_melee_time 0.1
+set g_balance_shotgun_secondary_melee_no_doubleslap 0
+set g_balance_shotgun_secondary_damage 110
+set g_balance_shotgun_secondary_force 150
+set g_balance_shotgun_secondary_refire 1.1
+set g_balance_shotgun_secondary_animtime 1
+set g_balance_shotgun_reload_ammo 0 //default: 5
+set g_balance_shotgun_reload_time 2
+// }}}
+// {{{ uzi
+set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary
+set g_balance_uzi_spread_min 0.02
+set g_balance_uzi_spread_max 0.3 // LOG: 0.6 -> 0.3
+set g_balance_uzi_spread_add 0.008
+
+set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more)
+set g_balance_uzi_burst_animtime 0.45
+set g_balance_uzi_burst_refire 0.05 // refire between burst bullets
+set g_balance_uzi_burst_refire2 0.45 // refire after burst
+set g_balance_uzi_burst_spread 0.07
+set g_balance_uzi_burst_damage 25
+set g_balance_uzi_burst_force 50
+set g_balance_uzi_burst_ammo 3
+
+set g_balance_uzi_first 1
+set g_balance_uzi_first_damage 15 / f/ LOG: 22 -> 15
+set g_balance_uzi_first_force 50
+set g_balance_uzi_first_spread 0.03
+set g_balance_uzi_first_refire 0.2
+set g_balance_uzi_first_ammo 2
+
+set g_balance_uzi_sustained_damage 12 // 120 dps
+set g_balance_uzi_sustained_force 12
+set g_balance_uzi_sustained_spread 0.06
+set g_balance_uzi_sustained_refire 0.1
+set g_balance_uzi_sustained_ammo 1
+
+set g_balance_uzi_speed 18000
+set g_balance_uzi_bulletconstant 115 // 13.1qu
+
+set g_balance_uzi_reload_ammo 0 //default: 30
+set g_balance_uzi_reload_time 2
+// }}}
+// {{{ mortar
+set g_balance_grenadelauncher_primary_type 0
+set g_balance_grenadelauncher_primary_damage 44
+set g_balance_grenadelauncher_primary_edgedamage 32
+set g_balance_grenadelauncher_primary_force 300
+set g_balance_grenadelauncher_primary_radius 115
+set g_balance_grenadelauncher_primary_speed 1500
+set g_balance_grenadelauncher_primary_speed_up 225
+set g_balance_grenadelauncher_primary_speed_z 0
+set g_balance_grenadelauncher_primary_spread 0
+set g_balance_grenadelauncher_primary_lifetime 5
+set g_balance_grenadelauncher_primary_lifetime2 0.65
+set g_balance_grenadelauncher_primary_refire 0.8
+set g_balance_grenadelauncher_primary_animtime 0.3
+set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_primary_health 80
+set g_balance_grenadelauncher_primary_damageforcescale 0
+set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
+
+set g_balance_grenadelauncher_secondary_type 1
+set g_balance_grenadelauncher_secondary_damage 62
+set g_balance_grenadelauncher_secondary_edgedamage 32
+set g_balance_grenadelauncher_secondary_force 300
+set g_balance_grenadelauncher_secondary_radius 150
+set g_balance_grenadelauncher_secondary_speed 1000
+set g_balance_grenadelauncher_secondary_speed_up 250
+set g_balance_grenadelauncher_secondary_speed_z 0
+set g_balance_grenadelauncher_secondary_spread 0
+set g_balance_grenadelauncher_secondary_lifetime 3
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 0.65
+set g_balance_grenadelauncher_secondary_refire 0.8
+set g_balance_grenadelauncher_secondary_animtime 0.3
+set g_balance_grenadelauncher_secondary_ammo 2
+set g_balance_grenadelauncher_secondary_health 40
+set g_balance_grenadelauncher_secondary_damageforcescale 0
+set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+
+set g_balance_grenadelauncher_bouncefactor 0.5
+set g_balance_grenadelauncher_bouncestop 0.12
+
+set g_balance_grenadelauncher_reload_ammo 0 //default: 12
+set g_balance_grenadelauncher_reload_time 2
+// }}}
+// {{{ minelayer
+set g_balance_minelayer_damage 42
+set g_balance_minelayer_edgedamage 30
+set g_balance_minelayer_force 250
+set g_balance_minelayer_radius 175
+set g_balance_minelayer_proximityradius 150
+set g_balance_minelayer_speed 750
+set g_balance_minelayer_lifetime 60
+set g_balance_minelayer_lifetime_countdown 0
+set g_balance_minelayer_refire 1.5
+set g_balance_minelayer_animtime 0.3
+set g_balance_minelayer_ammo 5
+set g_balance_minelayer_health 15
+set g_balance_minelayer_limit 3 // 0 disables the limit // LOG: 4 -> 3
+set g_balance_minelayer_protection 1 // don't explode if the mine would hurt the owner or a team mate
+set g_balance_minelayer_damageforcescale 0
+set g_balance_minelayer_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
+set g_balance_minelayer_time 0.5
+set g_balance_minelayer_remote_damage 45
+set g_balance_minelayer_remote_edgedamage 40
+set g_balance_minelayer_remote_radius 200
+set g_balance_minelayer_remote_force 300
+set g_balance_minelayer_reload_ammo 0 //default: 15
+set g_balance_minelayer_reload_time 2
+// }}}
+// {{{ electro
+set g_balance_electro_lightning 1
+set g_balance_electro_primary_damage 100
+set g_balance_electro_primary_edgedamage 0
+set g_balance_electro_primary_force 425
+set g_balance_electro_primary_force_up 125
+set g_balance_electro_primary_radius 850
+set g_balance_electro_primary_comboradius 150
+set g_balance_electro_primary_speed 0
+set g_balance_electro_primary_spread 0
+set g_balance_electro_primary_lifetime 0
+set g_balance_electro_primary_refire 0.4
+set g_balance_electro_primary_animtime 0.2
+set g_balance_electro_primary_ammo 5
+set g_balance_electro_primary_range 800
+set g_balance_electro_primary_falloff_mindist 0
+set g_balance_electro_primary_falloff_maxdist 0
+set g_balance_electro_primary_falloff_halflifedist 0
+set g_balance_electro_secondary_damage 25
+set g_balance_electro_secondary_edgedamage 0
+set g_balance_electro_secondary_force 100
+set g_balance_electro_secondary_radius 100
+set g_balance_electro_secondary_speed 700
+set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_speed_z 0
+set g_balance_electro_secondary_spread 0.08
+set g_balance_electro_secondary_lifetime 3.5
+set g_balance_electro_secondary_refire 0.2
+set g_balance_electro_secondary_refire2 2
+set g_balance_electro_secondary_animtime 0.2
+set g_balance_electro_secondary_ammo 2
+set g_balance_electro_secondary_health 10
+set g_balance_electro_secondary_damageforcescale 4
+set g_balance_electro_secondary_count 3
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
+set g_balance_electro_combo_damage 50
+set g_balance_electro_combo_edgedamage 0
+set g_balance_electro_combo_force 80
+set g_balance_electro_combo_radius 250
+set g_balance_electro_combo_comboradius 0
+set g_balance_electro_combo_speed 400
+set g_balance_electro_reload_ammo 0 //default: 20
+set g_balance_electro_reload_time 2
+// }}}
+// {{{ crylink
+set g_balance_crylink_primary_damage 7 // LOG: 10 -> 7
+set g_balance_crylink_primary_edgedamage 4 // LOG: 6 -> 4
+set g_balance_crylink_primary_force 35
+set g_balance_crylink_primary_radius 80
+set g_balance_crylink_primary_speed 1500
+set g_balance_crylink_primary_spread 0.05
+set g_balance_crylink_primary_shots 7
+set g_balance_crylink_primary_bounces 2
+set g_balance_crylink_primary_refire 0.8
+set g_balance_crylink_primary_animtime 0.3
+set g_balance_crylink_primary_ammo 2
+set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_joindelay 0
+set g_balance_crylink_primary_joinspread 0.2
+set g_balance_crylink_primary_jointime 0.1
+set g_balance_crylink_primary_joinexplode 0
+set g_balance_crylink_primary_joinexplode_damage 0
+set g_balance_crylink_primary_joinexplode_edgedamage 0
+set g_balance_crylink_primary_joinexplode_radius 0
+set g_balance_crylink_primary_joinexplode_force 0
+set g_balance_crylink_primary_linkexplode 1
+
+set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
+set g_balance_crylink_primary_middle_fadetime 5
+set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
+set g_balance_crylink_primary_other_fadetime 0.25
+
+set g_balance_crylink_secondary 1
+set g_balance_crylink_secondary_damage 5 // LOG: 8 -> 5
+set g_balance_crylink_secondary_edgedamage 3
+set g_balance_crylink_secondary_force 16 // LOG: 20 -> 16
+set g_balance_crylink_secondary_radius 15 // LOG: 20 -> 15
+set g_balance_crylink_secondary_speed 1250 // LOG: 1500 -> 1250
+set g_balance_crylink_secondary_spread 0.1
+set g_balance_crylink_secondary_shots 6
+set g_balance_crylink_secondary_bounces 2
+set g_balance_crylink_secondary_refire 0.9 // LOG: 0.8 -> 0.9
+set g_balance_crylink_secondary_animtime 0.3
+set g_balance_crylink_secondary_ammo 3 // LOG: 2 -> 3
+set g_balance_crylink_secondary_bouncedamagefactor 0.4 // LOG: 0.2 -> 0.4
+set g_balance_crylink_secondary_joindelay 0
+set g_balance_crylink_secondary_joinspread 0.2
+set g_balance_crylink_secondary_jointime 0.1
+set g_balance_crylink_secondary_joinexplode 0
+set g_balance_crylink_secondary_joinexplode_damage 0
+set g_balance_crylink_secondary_joinexplode_edgedamage 0
+set g_balance_crylink_secondary_joinexplode_radius 0
+set g_balance_crylink_secondary_joinexplode_force 0
+set g_balance_crylink_secondary_linkexplode 0
+
+set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
+set g_balance_crylink_secondary_middle_fadetime 5
+set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 8000
+set g_balance_crylink_secondary_line_fadetime 0.25
+
+set g_balance_crylink_reload_ammo 0 //default: 10
+set g_balance_crylink_reload_time 2
+// }}}
+// {{{ nex
+set g_balance_nex_primary_damage 90
+set g_balance_nex_primary_force 500
+set g_balance_nex_primary_refire 1
+set g_balance_nex_primary_animtime 0.3
+set g_balance_nex_primary_ammo 5
+set g_balance_nex_primary_damagefalloff_mindist 0
+set g_balance_nex_primary_damagefalloff_maxdist 0
+set g_balance_nex_primary_damagefalloff_halflife 0
+set g_balance_nex_primary_damagefalloff_forcehalflife 0
+
+set g_balance_nex_secondary 0 // LOG: disable secondary
+set g_balance_nex_secondary_charge 0 // LOG: disable secondary charge
+set g_balance_nex_secondary_charge_rate 0.4
+set g_balance_nex_secondary_chargepool 1
+set g_balance_nex_secondary_chargepool_regen 0.25
+set g_balance_nex_secondary_chargepool_pause_regen 2
+set g_balance_nex_secondary_chargepool_pause_health_regen 0.5
+set g_balance_nex_secondary_damage 0
+set g_balance_nex_secondary_force 0
+set g_balance_nex_secondary_refire 0
+set g_balance_nex_secondary_animtime 0
+set g_balance_nex_secondary_ammo 0.4 // full charge pool is 1, so it depletes in 2.5 secs
+set g_balance_nex_secondary_damagefalloff_mindist 0
+set g_balance_nex_secondary_damagefalloff_maxdist 0
+set g_balance_nex_secondary_damagefalloff_halflife 0
+set g_balance_nex_secondary_damagefalloff_forcehalflife 0
+
+set g_balance_nex_charge 1
+set g_balance_nex_charge_mindmg 20
+set g_balance_nex_charge_start 0.5
+set g_balance_nex_charge_rate 0.5
+set g_balance_nex_charge_animlimit 0.5
+set g_balance_nex_charge_limit 1 // LOG: 0.5 -> 1 - allow to fully charge automaticaly
+set g_balance_nex_charge_rot_rate 0 // LOG: 0.1 -> 0 - disable rot
+set g_balance_nex_charge_rot_pause 0.5 // Dont rot down until this long after release of charge button
+set g_balance_nex_charge_shot_multiplier 0
+set g_balance_nex_charge_velocity_rate 0
+set g_balance_nex_charge_minspeed 600
+set g_balance_nex_charge_maxspeed 1000
+
+set g_balance_nex_reload_ammo 0 //default: 25
+set g_balance_nex_reload_time 2
+// }}}
+// {{{ minstanex
+set g_balance_minstanex_refire 1
+set g_balance_minstanex_animtime 0.50
+set g_balance_minstanex_ammo 10
+set g_balance_minstanex_laser_ammo 0
+set g_balance_minstanex_reload_ammo 0 //default: 50
+set g_balance_minstanex_reload_time 2
+// }}}
+// {{{ hagar
+set g_balance_hagar_primary_damage 14
+set g_balance_hagar_primary_edgedamage 6
+set g_balance_hagar_primary_force 70
+set g_balance_hagar_primary_radius 110
+set g_balance_hagar_primary_spread 0.1
+set g_balance_hagar_primary_speed 1800
+set g_balance_hagar_primary_lifetime 5
+set g_balance_hagar_primary_refire 0.12
+set g_balance_hagar_primary_ammo 1
+set g_balance_hagar_secondary 1
+set g_balance_hagar_secondary_load 0
+set g_balance_hagar_secondary_load_speed 0.6
+set g_balance_hagar_secondary_load_max 4
+set g_balance_hagar_secondary_load_hold 0
+set g_balance_hagar_secondary_load_releasedeath 1
+set g_balance_hagar_secondary_load_abort 1
+set g_balance_hagar_secondary_damage 14 // default for _load: 32
+set g_balance_hagar_secondary_edgedamage 6 // default for _load: 10
+set g_balance_hagar_secondary_force 70 // default for _load: 160
+set g_balance_hagar_secondary_radius 125
+set g_balance_hagar_secondary_spread 0.15 // default for _load: 0.08
+set g_balance_hagar_secondary_speed 1800
+set g_balance_hagar_secondary_lifetime_min 5
+set g_balance_hagar_secondary_lifetime_rand 0
+set g_balance_hagar_secondary_refire 0.12 // default for _load: 0.8
+set g_balance_hagar_secondary_ammo 1
+set g_balance_hagar_reload_ammo 0 //default: 25
+set g_balance_hagar_reload_time 2
+// }}}
+// {{{ rocketlauncher
+set g_balance_rocketlauncher_damage 82
+set g_balance_rocketlauncher_edgedamage 32
+set g_balance_rocketlauncher_force 350
+set g_balance_rocketlauncher_radius 130
+set g_balance_rocketlauncher_speed 1400
+set g_balance_rocketlauncher_speedaccel 1400
+set g_balance_rocketlauncher_speedstart 800
+set g_balance_rocketlauncher_lifetime 5
+set g_balance_rocketlauncher_refire 1
+set g_balance_rocketlauncher_animtime 0.3
+set g_balance_rocketlauncher_ammo 3
+set g_balance_rocketlauncher_health 0
+set g_balance_rocketlauncher_damageforcescale 0
+set g_balance_rocketlauncher_detonatedelay 0.05 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
+set g_balance_rocketlauncher_guiderate 42 // max degrees per second
+set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
+set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
+set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
+set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
+set g_balance_rocketlauncher_remote_damage 60
+set g_balance_rocketlauncher_remote_edgedamage 20
+set g_balance_rocketlauncher_remote_radius 120
+set g_balance_rocketlauncher_remote_force 350
+set g_balance_rocketlauncher_reload_ammo 0 //default: 25
+set g_balance_rocketlauncher_reload_time 2
+// }}}
+// {{{ porto
+set g_balance_porto_primary_refire 1.5
+set g_balance_porto_primary_animtime 0.2
+set g_balance_porto_primary_speed 2000
+set g_balance_porto_primary_lifetime 5
+set g_balance_portal_health 200 // these get recharged whenever the portal is used
+set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
+// }}}
+// {{{ hook
+set g_balance_hook_primary_fuel 5 // hook monkeys set 0
+set g_balance_hook_primary_refire 0 // hook monkeys set 0
+set g_balance_hook_primary_animtime 0.2 // good shoot anim
+set g_balance_hook_primary_hooked_time_max 0 // infinite
+set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
+set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked
+set g_balance_hook_secondary_damage 25 // not much
+set g_balance_hook_secondary_edgedamage 5 // not much
+set g_balance_hook_secondary_radius 500 // LOTS
+set g_balance_hook_secondary_force -2000 // LOTS
+set g_balance_hook_secondary_ammo 50 // a whole pack
+set g_balance_hook_secondary_lifetime 5 // infinite
+set g_balance_hook_secondary_speed 0 // not much throwing
+set g_balance_hook_secondary_gravity 5 // fast falling
+set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
+set g_balance_hook_secondary_animtime 0.2 // good shoot anim
+set g_balance_hook_secondary_power 3 // effect behaves like a square function
+set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
+// }}}
+// {{{ hlac
+set g_balance_hlac_primary_spread_min 0.01
+set g_balance_hlac_primary_spread_max 0.075
+set g_balance_hlac_primary_spread_add 0.001
+set g_balance_hlac_primary_spread_crouchmod 0.25
+
+set g_balance_hlac_primary_damage 15
+set g_balance_hlac_primary_edgedamage 10
+set g_balance_hlac_primary_force 70
+set g_balance_hlac_primary_radius 40
+set g_balance_hlac_primary_speed 9000
+set g_balance_hlac_primary_lifetime 5
+
+set g_balance_hlac_primary_refire 0.1
+set g_balance_hlac_primary_animtime 0.2
+set g_balance_hlac_primary_ammo 1
+
+set g_balance_hlac_secondary 1
+set g_balance_hlac_secondary_spread 0.15
+set g_balance_hlac_secondary_spread_crouchmod 0.5
+
+set g_balance_hlac_secondary_damage 20
+set g_balance_hlac_secondary_edgedamage 13
+set g_balance_hlac_secondary_force 100
+set g_balance_hlac_secondary_radius 45
+set g_balance_hlac_secondary_speed 9000
+set g_balance_hlac_secondary_lifetime 5
+
+set g_balance_hlac_secondary_refire 0.8
+set g_balance_hlac_secondary_animtime 0.4
+set g_balance_hlac_secondary_ammo 4
+set g_balance_hlac_secondary_shots 6
+
+set g_balance_hlac_reload_ammo 0 //default: 20
+set g_balance_hlac_reload_time 2
+// }}}
+// {{{ rifle
+set g_balance_rifle_bursttime 0
+set g_balance_rifle_primary_tracer 1
+set g_balance_rifle_primary_shots 1
+set g_balance_rifle_primary_damage 60
+set g_balance_rifle_primary_headshotaddeddamage 60
+set g_balance_rifle_primary_spread 0
+set g_balance_rifle_primary_force 2
+set g_balance_rifle_primary_speed 40000
+set g_balance_rifle_primary_lifetime 5
+set g_balance_rifle_primary_refire 1.5
+set g_balance_rifle_primary_animtime 1.4
+set g_balance_rifle_primary_ammo 10
+set g_balance_rifle_primary_bulletconstant 110 // 62.2qu
+set g_balance_rifle_primary_burstcost 0
+set g_balance_rifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_secondary 1
+set g_balance_rifle_secondary_reload 1
+set g_balance_rifle_secondary_tracer 0
+set g_balance_rifle_secondary_shots 1
+set g_balance_rifle_secondary_damage 42
+set g_balance_rifle_secondary_headshotaddeddamage 42
+set g_balance_rifle_secondary_spread 0
+set g_balance_rifle_secondary_force 2
+set g_balance_rifle_secondary_speed 20000
+set g_balance_rifle_secondary_lifetime 5
+set g_balance_rifle_secondary_refire 1.5
+set g_balance_rifle_secondary_animtime 1.4
+set g_balance_rifle_secondary_ammo 10
+set g_balance_rifle_secondary_bulletconstant 110 // 15.5qu
+set g_balance_rifle_secondary_burstcost 0
+set g_balance_rifle_secondary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_reload_ammo 80 //default: 80
+set g_balance_rifle_reload_time 2
+// }}}
+// {{{ tuba
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
+set g_balance_tuba_attenuation 0.5
+set g_balance_tuba_volume 1
+set g_balance_tuba_fadetime 0.25
+set g_balance_tuba_damage 5
+set g_balance_tuba_edgedamage 0
+set g_balance_tuba_radius 200
+set g_balance_tuba_force 40
+// }}}
+// {{{ fireball
+set g_balance_fireball_primary_ammo 40
+set g_balance_fireball_primary_animtime 0.2
+set g_balance_fireball_primary_bfgdamage 100
+set g_balance_fireball_primary_bfgforce 0
+set g_balance_fireball_primary_bfgradius 1000
+set g_balance_fireball_primary_damage 200
+set g_balance_fireball_primary_damageforcescale 4
+set g_balance_fireball_primary_edgedamage 0
+set g_balance_fireball_primary_force 700
+set g_balance_fireball_primary_health 50
+set g_balance_fireball_primary_laserburntime 0.5
+set g_balance_fireball_primary_laserdamage 80
+set g_balance_fireball_primary_laseredgedamage 20
+set g_balance_fireball_primary_laserradius 256
+set g_balance_fireball_primary_lifetime 15
+set g_balance_fireball_primary_radius 200
+set g_balance_fireball_primary_refire 5
+set g_balance_fireball_primary_refire2 0
+set g_balance_fireball_primary_speed 650
+set g_balance_fireball_primary_spread 0
+set g_balance_fireball_secondary_ammo 5
+set g_balance_fireball_secondary_animtime 0.2
+set g_balance_fireball_secondary_damage 40
+set g_balance_fireball_secondary_damageforcescale 4
+set g_balance_fireball_secondary_damagetime 5
+set g_balance_fireball_secondary_force 100
+set g_balance_fireball_secondary_laserburntime 0.5
+set g_balance_fireball_secondary_laserdamage 50
+set g_balance_fireball_secondary_laseredgedamage 20
+set g_balance_fireball_secondary_laserradius 110
+set g_balance_fireball_secondary_lifetime 7
+set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_speed 900
+set g_balance_fireball_secondary_speed_up 100
+set g_balance_fireball_secondary_speed_z 0
+set g_balance_fireball_secondary_spread 0
+set g_balance_fireball_reload_ammo 0 //default: 60
+set g_balance_fireball_reload_time 2
+// }}}
+// {{{ seeker
+set g_balance_seeker_type 0 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
+set g_balance_seeker_flac_ammo 0.5
+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 // LOG: 8 -> 3
+set g_balance_seeker_missile_damage 30 // LOG: 15 -> 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 // LOG: 100 -> 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_up 300
+set g_balance_seeker_missile_speed_z 0
+set g_balance_seeker_missile_speed_max 1300 // LOG: 1400 -> 1300
+set g_balance_seeker_missile_spread 0
+set g_balance_seeker_missile_turnrate 0.65
+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 // LOG: 0.7 -> 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_reload_ammo 0 //default: 15
+set g_balance_seeker_reload_time 2
+// End new seeker
set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hlac 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_sniperrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_fireball 0 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_lifetime2 1
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 1
set g_balance_grenadelauncher_secondary_refire 0.6
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_hlac_reload_ammo 0 //default: 20
set g_balance_hlac_reload_time 2
// }}}
-// {{{ sniperrifle
-set g_balance_sniperrifle_bursttime 0.85 // 0.35 - 0.1 + 0.35 - 0.1 + 0.35 = three secondaries
-set g_balance_sniperrifle_primary_tracer 0
-set g_balance_sniperrifle_primary_shots 1
-set g_balance_sniperrifle_primary_damage 75
-set g_balance_sniperrifle_primary_headshotaddeddamage 90
-set g_balance_sniperrifle_primary_spread 0
-set g_balance_sniperrifle_primary_force 2
-set g_balance_sniperrifle_primary_speed 35000
-set g_balance_sniperrifle_primary_lifetime 5
-set g_balance_sniperrifle_primary_refire 0.7
-set g_balance_sniperrifle_primary_animtime 0.3
-set g_balance_sniperrifle_primary_ammo 10
-set g_balance_sniperrifle_primary_bulletconstant 130 // 56.3qu
-set g_balance_sniperrifle_primary_burstcost 0 // require same cooldown as secondary, note it's smaller than primary refire time
-set g_balance_sniperrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_secondary 1
-set g_balance_sniperrifle_secondary_reload 0
-set g_balance_sniperrifle_secondary_tracer 0
-set g_balance_sniperrifle_secondary_shots 1
-set g_balance_sniperrifle_secondary_damage 40
-set g_balance_sniperrifle_secondary_headshotaddeddamage 20
-set g_balance_sniperrifle_secondary_spread 0.008
-set g_balance_sniperrifle_secondary_force 1
-set g_balance_sniperrifle_secondary_speed 20000
-set g_balance_sniperrifle_secondary_lifetime 5
-set g_balance_sniperrifle_secondary_refire 0.0006
-set g_balance_sniperrifle_secondary_animtime 0.1
-set g_balance_sniperrifle_secondary_ammo 10
-set g_balance_sniperrifle_secondary_bulletconstant 130 // 18.3qu
-set g_balance_sniperrifle_secondary_burstcost 0
-set g_balance_sniperrifle_secondary_bullethail 0
-set g_balance_sniperrifle_reload_ammo 80 //default: 80
-set g_balance_sniperrifle_reload_time 2
+// {{{ rifle
+set g_balance_rifle_bursttime 0.85 // 0.35 - 0.1 + 0.35 - 0.1 + 0.35 = three secondaries
+set g_balance_rifle_primary_tracer 0
+set g_balance_rifle_primary_shots 1
+set g_balance_rifle_primary_damage 75
+set g_balance_rifle_primary_headshotaddeddamage 90
+set g_balance_rifle_primary_spread 0
+set g_balance_rifle_primary_force 2
+set g_balance_rifle_primary_speed 35000
+set g_balance_rifle_primary_lifetime 5
+set g_balance_rifle_primary_refire 0.7
+set g_balance_rifle_primary_animtime 0.3
+set g_balance_rifle_primary_ammo 10
+set g_balance_rifle_primary_bulletconstant 130 // 56.3qu
+set g_balance_rifle_primary_burstcost 0 // require same cooldown as secondary, note it's smaller than primary refire time
+set g_balance_rifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_secondary 1
+set g_balance_rifle_secondary_reload 0
+set g_balance_rifle_secondary_tracer 0
+set g_balance_rifle_secondary_shots 1
+set g_balance_rifle_secondary_damage 40
+set g_balance_rifle_secondary_headshotaddeddamage 20
+set g_balance_rifle_secondary_spread 0.008
+set g_balance_rifle_secondary_force 1
+set g_balance_rifle_secondary_speed 20000
+set g_balance_rifle_secondary_lifetime 5
+set g_balance_rifle_secondary_refire 0.0006
+set g_balance_rifle_secondary_animtime 0.1
+set g_balance_rifle_secondary_ammo 10
+set g_balance_rifle_secondary_bulletconstant 130 // 18.3qu
+set g_balance_rifle_secondary_burstcost 0
+set g_balance_rifle_secondary_bullethail 0
+set g_balance_rifle_reload_ammo 80 //default: 80
+set g_balance_rifle_reload_time 2
// }}}
// {{{ tuba
set g_balance_tuba_refire 0.05
+++ /dev/null
-// {{{ starting gear
-set g_start_weapon_laser -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_shotgun -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_uzi -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_grenadelauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_minelayer -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE
-set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE
-set g_start_weapon_sniperrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE
-set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_balance_health_start 100
-set g_balance_armor_start 0
-set g_start_ammo_shells 15
-set g_start_ammo_nails 0
-set g_start_ammo_rockets 0
-set g_start_ammo_cells 0
-set g_start_ammo_fuel 0
-set g_warmup_start_health 100 "starting values when being in warmup-stage"
-set g_warmup_start_armor 100 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_nails 160 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_rockets 80 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_cells 90 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
-set g_lms_start_health 200
-set g_lms_start_armor 200
-set g_lms_start_ammo_shells 60
-set g_lms_start_ammo_nails 320
-set g_lms_start_ammo_rockets 160
-set g_lms_start_ammo_cells 180
-set g_lms_start_ammo_fuel 0
-set g_balance_nix_roundtime 25
-set g_balance_nix_incrtime 1.6
-set g_balance_nix_ammo_shells 60
-set g_balance_nix_ammo_nails 320
-set g_balance_nix_ammo_rockets 160
-set g_balance_nix_ammo_cells 180
-set g_balance_nix_ammo_fuel 0
-set g_balance_nix_ammoincr_shells 2 // eh this will need figured out later I assume
-set g_balance_nix_ammoincr_nails 6
-set g_balance_nix_ammoincr_rockets 2
-set g_balance_nix_ammoincr_cells 2
-set g_balance_nix_ammoincr_fuel 2
-// }}}
-
-// {{{ pickup items
-set g_pickup_ammo_anyway 1
-set g_pickup_weapons_anyway 1
-set g_pickup_shells 15
-set g_pickup_shells_weapon 15
-set g_pickup_shells_max 60
-set g_pickup_nails 80
-set g_pickup_nails_weapon 80
-set g_pickup_nails_max 320
-set g_pickup_rockets 40
-set g_pickup_rockets_weapon 40
-set g_pickup_rockets_max 160
-set g_pickup_cells 30
-set g_pickup_cells_weapon 30
-set g_pickup_cells_max 180
-set g_pickup_fuel 50
-set g_pickup_fuel_weapon 50
-set g_pickup_fuel_jetpack 100
-set g_pickup_fuel_max 100
-set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 200
-set g_pickup_armorsmall_anyway 1
-set g_pickup_armormedium 25
-set g_pickup_armormedium_max 200
-set g_pickup_armormedium_anyway 1
-set g_pickup_armorbig 50
-set g_pickup_armorbig_max 200
-set g_pickup_armorbig_anyway 1
-set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 200
-set g_pickup_armorlarge_anyway 1
-set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 200
-set g_pickup_healthsmall_anyway 1
-set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 200
-set g_pickup_healthmedium_anyway 1
-set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 200
-set g_pickup_healthlarge_anyway 1
-set g_pickup_healthmega 100
-set g_pickup_healthmega_max 200
-set g_pickup_healthmega_anyway 1
-set g_pickup_respawntime_short 15
-set g_pickup_respawntime_medium 20
-set g_pickup_respawntime_long 30
-set g_pickup_respawntime_powerup 120
-set g_pickup_respawntime_weapon 10
-set g_pickup_respawntime_ammo 10
-set g_pickup_respawntimejitter_short 0
-set g_pickup_respawntimejitter_medium 0
-set g_pickup_respawntimejitter_long 0
-set g_pickup_respawntimejitter_powerup 30
-set g_pickup_respawntimejitter_weapon 0
-set g_pickup_respawntimejitter_ammo 0
-// }}}
-
-// {{{ regen/rot
-set g_balance_health_regen 0.08
-set g_balance_health_regenlinear 0.5
-set g_balance_pause_health_regen 5
-set g_balance_pause_health_regen_spawn 0
-set g_balance_health_rot 0.04
-set g_balance_health_rotlinear 0.75
-set g_balance_pause_health_rot 1
-set g_balance_pause_health_rot_spawn 5
-set g_balance_health_regenstable 100
-set g_balance_health_rotstable 100
-set g_balance_health_limit 999
-set g_balance_armor_regen 0
-set g_balance_armor_regenlinear 0
-set g_balance_armor_rot 0.04
-set g_balance_armor_rotlinear 0.75
-set g_balance_pause_armor_rot 1
-set g_balance_pause_armor_rot_spawn 5
-set g_balance_armor_regenstable 100
-set g_balance_armor_rotstable 100
-set g_balance_armor_limit 999
-set g_balance_armor_blockpercent 0.6
-set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
-set g_balance_fuel_regenlinear 0
-set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
-set g_balance_fuel_rot 0.05
-set g_balance_fuel_rotlinear 0
-set g_balance_pause_fuel_rot 5
-set g_balance_pause_fuel_rot_spawn 10
-set g_balance_fuel_regenstable 50
-set g_balance_fuel_rotstable 100
-set g_balance_fuel_limit 999
-// }}}
-
-// {{{ misc
-set g_balance_selfdamagepercent 0.75
-set g_balance_weaponswitchdelay 0.15
-set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
-set g_weaponratefactor 1 "weapon fire rate multiplier"
-set g_weapondamagefactor 1 "weapon damage multiplier"
-set g_weaponforcefactor 1 "weapon force multiplier"
-set g_weaponspreadfactor 1 "weapon spread multiplier"
-set g_balance_firetransfer_time 0.9
-set g_balance_firetransfer_damage 0.8
-set g_throughfloor_damage 0.4
-set g_throughfloor_force 0.7
-set g_projectiles_newton_style 2
-// possible values:
-// 0: absolute velocity projectiles (like Quake)
-// 1: relative velocity projectiles, "Newtonian" (like Tribes 2)
-// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
-// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
-// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
-set g_projectiles_newton_style_2_minfactor 0.8
-set g_projectiles_newton_style_2_maxfactor 1.5
-set g_projectiles_spread_style 7
-// possible values:
-// 0: forward + solid sphere (like Quake) - varies velocity
-// 1: forward + flattened solid sphere
-// 2: forward + solid circle
-// 3: forward + normal distribution 3D - varies velocity
-// 4: forward + normal distribution on a plane
-// 5: forward + circle with 1-r falloff
-// 6: forward + circle with 1-r^2 falloff
-// 7: forward + circle with (1-r)(2-r) falloff
-set g_balance_falldamage_deadminspeed 250
-set g_balance_falldamage_minspeed 900
-set g_balance_falldamage_factor 0.20
-set g_balance_falldamage_maxdamage 40
-set g_balance_damagepush_speedfactor 2.5
-// }}}
-
-// {{{ powerups
-set g_balance_powerup_invincible_takedamage 0.25 // only 1/4th damage is taken
-set g_balance_powerup_invincible_time 30
-set g_balance_powerup_strength_damage 3
-set g_balance_powerup_strength_force 3
-set g_balance_powerup_strength_time 30
-set g_balance_powerup_strength_selfdamage 1.5
-set g_balance_powerup_strength_selfforce 1.5
-// }}}
-
-// {{{ jetpack/hook
-set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
-set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
-set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
-set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
-set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
-set g_jetpack_fuel 8 "fuel per second for jetpack"
-set g_jetpack_attenuation 2 "jetpack sound attenuation"
-
-set g_grappling_hook_tarzan 2 // 2: can also pull players
-set g_balance_grapplehook_speed_fly 1800
-set g_balance_grapplehook_speed_pull 2000
-set g_balance_grapplehook_force_rubber 2000
-set g_balance_grapplehook_force_rubber_overstretch 1000
-set g_balance_grapplehook_length_min 50
-set g_balance_grapplehook_stretch 50
-set g_balance_grapplehook_airfriction 0.2
-set g_balance_grapplehook_health 130
-// }}}
-
-// {{{ weapon properties
-// {{{ laser
-set g_balance_laser_primary_damage 25
-set g_balance_laser_primary_edgedamage 12.5
-set g_balance_laser_primary_force 250
-set g_balance_laser_primary_radius 70
-set g_balance_laser_primary_speed 6000
-set g_balance_laser_primary_spread 0
-set g_balance_laser_primary_refire 0.7
-set g_balance_laser_primary_animtime 0.3
-set g_balance_laser_primary_lifetime 5
-set g_balance_laser_primary_shotangle 0
-set g_balance_laser_primary_delay 0
-set g_balance_laser_primary_gauntlet 0
-set g_balance_laser_primary_force_zscale 1.5
-set g_balance_laser_primary_force_velocitybias 0
-set g_balance_laser_primary_force_other_scale 1
-set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
-set g_balance_laser_secondary_damage 25
-set g_balance_laser_secondary_edgedamage 12.5
-set g_balance_laser_secondary_force 400
-set g_balance_laser_secondary_radius 70
-set g_balance_laser_secondary_speed 12000
-set g_balance_laser_secondary_spread 0
-set g_balance_laser_secondary_refire 0.7
-set g_balance_laser_secondary_animtime 0.3
-set g_balance_laser_secondary_lifetime 5
-set g_balance_laser_secondary_shotangle -90
-set g_balance_laser_secondary_delay 0
-set g_balance_laser_secondary_gauntlet 0
-set g_balance_laser_secondary_force_zscale 1.25
-set g_balance_laser_secondary_force_velocitybias 0
-set g_balance_laser_secondary_force_other_scale 1
-set g_balance_laser_reload_ammo 0 //default: 6
-set g_balance_laser_reload_time 2
-// }}}
-// {{{ shotgun
-set g_balance_shotgun_primary_bullets 14
-set g_balance_shotgun_primary_damage 4
-set g_balance_shotgun_primary_force 15
-set g_balance_shotgun_primary_spread 0.12
-set g_balance_shotgun_primary_refire 0.75
-set g_balance_shotgun_primary_animtime 0.2
-set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 8000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
-set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
-set g_balance_shotgun_secondary_melee_range 85
-set g_balance_shotgun_secondary_melee_swing 50
-set g_balance_shotgun_secondary_melee_time 0.1
-set g_balance_shotgun_secondary_melee_no_doubleslap 1
-set g_balance_shotgun_secondary_damage 115
-set g_balance_shotgun_secondary_force 150
-set g_balance_shotgun_secondary_refire 1.1
-set g_balance_shotgun_secondary_animtime 1
-set g_balance_shotgun_reload_ammo 0 //default: 5
-set g_balance_shotgun_reload_time 2
-// }}}
-// {{{ uzi
-set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary
-set g_balance_uzi_spread_min 0.02
-set g_balance_uzi_spread_max 0.06
-set g_balance_uzi_spread_add 0.012
-
-set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more)
-set g_balance_uzi_burst_animtime 0.3
-set g_balance_uzi_burst_refire 0.06 // refire between burst bullets
-set g_balance_uzi_burst_refire2 0.45 // refire after burst
-set g_balance_uzi_burst_spread 0.03
-set g_balance_uzi_burst_damage 25
-set g_balance_uzi_burst_force 20
-set g_balance_uzi_burst_ammo 3
-
-set g_balance_uzi_first 1
-set g_balance_uzi_first_damage 16
-set g_balance_uzi_first_force 5
-set g_balance_uzi_first_spread 0.03
-set g_balance_uzi_first_refire 0.2
-set g_balance_uzi_first_ammo 1
-
-set g_balance_uzi_sustained_damage 14
-set g_balance_uzi_sustained_force 5
-set g_balance_uzi_sustained_spread 0.04
-set g_balance_uzi_sustained_refire 0.1
-set g_balance_uzi_sustained_ammo 1
-
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
-
-set g_balance_uzi_reload_ammo 60 //default: 30
-set g_balance_uzi_reload_time 2
-// }}}
-// {{{ mortar
-set g_balance_grenadelauncher_primary_type 0
-set g_balance_grenadelauncher_primary_damage 50
-set g_balance_grenadelauncher_primary_edgedamage 25
-set g_balance_grenadelauncher_primary_force 250
-set g_balance_grenadelauncher_primary_radius 130
-set g_balance_grenadelauncher_primary_speed 1900
-set g_balance_grenadelauncher_primary_speed_up 225
-set g_balance_grenadelauncher_primary_speed_z 0
-set g_balance_grenadelauncher_primary_spread 0.02
-set g_balance_grenadelauncher_primary_lifetime 5
-set g_balance_grenadelauncher_primary_lifetime2 1
-set g_balance_grenadelauncher_primary_refire 0.8
-set g_balance_grenadelauncher_primary_animtime 0.3
-set g_balance_grenadelauncher_primary_ammo 2
-set g_balance_grenadelauncher_primary_health 0
-set g_balance_grenadelauncher_primary_damageforcescale 0
-set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
-
-set g_balance_grenadelauncher_secondary_type 1
-set g_balance_grenadelauncher_secondary_damage 60
-set g_balance_grenadelauncher_secondary_edgedamage 30
-set g_balance_grenadelauncher_secondary_force 250
-set g_balance_grenadelauncher_secondary_radius 130
-set g_balance_grenadelauncher_secondary_speed 1400
-set g_balance_grenadelauncher_secondary_speed_up 150
-set g_balance_grenadelauncher_secondary_speed_z 0
-set g_balance_grenadelauncher_secondary_spread 0.02
-set g_balance_grenadelauncher_secondary_lifetime 1
-set g_balance_grenadelauncher_secondary_lifetime2 0
-set g_balance_grenadelauncher_secondary_refire 0.7
-set g_balance_grenadelauncher_secondary_animtime 0.3
-set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 0
-set g_balance_grenadelauncher_secondary_damageforcescale 4
-set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
-
-set g_balance_grenadelauncher_bouncefactor 0.5
-set g_balance_grenadelauncher_bouncestop 0.075
-
-set g_balance_grenadelauncher_reload_ammo 0 //default: 12
-set g_balance_grenadelauncher_reload_time 2
-// }}}
-// {{{ minelayer
-set g_balance_minelayer_damage 40
-set g_balance_minelayer_edgedamage 20
-set g_balance_minelayer_force 250
-set g_balance_minelayer_radius 175
-set g_balance_minelayer_proximityradius 150
-set g_balance_minelayer_speed 1000
-set g_balance_minelayer_lifetime 10
-set g_balance_minelayer_lifetime_countdown 0.5
-set g_balance_minelayer_refire 1.5
-set g_balance_minelayer_animtime 0.4
-set g_balance_minelayer_ammo 4
-set g_balance_minelayer_health 15
-set g_balance_minelayer_limit 3 // 0 disables the limit
-set g_balance_minelayer_protection 0 // don't explode if the mine would hurt the owner or a team mate
-set g_balance_minelayer_damageforcescale 0
-set g_balance_minelayer_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_minelayer_time 0.5
-set g_balance_minelayer_remote_damage 45
-set g_balance_minelayer_remote_edgedamage 40
-set g_balance_minelayer_remote_radius 200
-set g_balance_minelayer_remote_force 300
-set g_balance_minelayer_reload_ammo 0 //default: 15
-set g_balance_minelayer_reload_time 2
-// }}}
-// {{{ electro
-set g_balance_electro_lightning 0
-set g_balance_electro_primary_damage 55
-set g_balance_electro_primary_edgedamage 27.5
-set g_balance_electro_primary_force 200
-set g_balance_electro_primary_force_up 0
-set g_balance_electro_primary_radius 100
-set g_balance_electro_primary_comboradius 150
-set g_balance_electro_primary_speed 2500
-set g_balance_electro_primary_spread 0
-set g_balance_electro_primary_lifetime 5
-set g_balance_electro_primary_refire 0.6
-set g_balance_electro_primary_animtime 0.1
-set g_balance_electro_primary_ammo 4
-set g_balance_electro_primary_range 0
-set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius
-set g_balance_electro_primary_falloff_maxdist 850
-set g_balance_electro_primary_falloff_halflifedist 425
-set g_balance_electro_secondary_damage 40
-set g_balance_electro_secondary_edgedamage 20
-set g_balance_electro_secondary_force 200
-set g_balance_electro_secondary_radius 150
-set g_balance_electro_secondary_speed 900
-set g_balance_electro_secondary_speed_up 200
-set g_balance_electro_secondary_speed_z 0
-set g_balance_electro_secondary_spread 0.05
-set g_balance_electro_secondary_lifetime 3
-set g_balance_electro_secondary_refire 0.2
-set g_balance_electro_secondary_refire2 1.5
-set g_balance_electro_secondary_animtime 0.2
-set g_balance_electro_secondary_ammo 2
-set g_balance_electro_secondary_health 5
-set g_balance_electro_secondary_damageforcescale 4
-set g_balance_electro_secondary_count 3
-set g_balance_electro_secondary_bouncefactor 0.4
-set g_balance_electro_secondary_bouncestop 0.05
-set g_balance_electro_combo_damage 40
-set g_balance_electro_combo_edgedamage 20
-set g_balance_electro_combo_force 120
-set g_balance_electro_combo_radius 175
-set g_balance_electro_combo_comboradius 275
-set g_balance_electro_combo_speed 2000
-set g_balance_electro_reload_ammo 0 //default: 20
-set g_balance_electro_reload_time 2
-// }}}
-// {{{ crylink
-set g_balance_crylink_primary_damage 10
-set g_balance_crylink_primary_edgedamage 5
-set g_balance_crylink_primary_force -55
-set g_balance_crylink_primary_radius 80
-set g_balance_crylink_primary_speed 1800
-set g_balance_crylink_primary_spread 0.075
-set g_balance_crylink_primary_shots 7
-set g_balance_crylink_primary_bounces 1
-set g_balance_crylink_primary_refire 0.7
-set g_balance_crylink_primary_animtime 0.3
-set g_balance_crylink_primary_ammo 3
-set g_balance_crylink_primary_bouncedamagefactor 0.5
-set g_balance_crylink_primary_joindelay 0
-set g_balance_crylink_primary_joinspread 0.4
-set g_balance_crylink_primary_jointime 0
-set g_balance_crylink_primary_joinexplode 1
-set g_balance_crylink_primary_joinexplode_damage 0
-set g_balance_crylink_primary_joinexplode_edgedamage 0
-set g_balance_crylink_primary_joinexplode_radius 0
-set g_balance_crylink_primary_joinexplode_force 0
-set g_balance_crylink_primary_linkexplode 1
-
-set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_other_lifetime 5
-set g_balance_crylink_primary_other_fadetime 5
-
-set g_balance_crylink_secondary 1
-set g_balance_crylink_secondary_damage 5
-set g_balance_crylink_secondary_edgedamage 0
-set g_balance_crylink_secondary_force -40
-set g_balance_crylink_secondary_radius 70
-set g_balance_crylink_secondary_speed 2000
-set g_balance_crylink_secondary_spread 0.02
-set g_balance_crylink_secondary_shots 3
-set g_balance_crylink_secondary_bounces 1
-set g_balance_crylink_secondary_refire 0.2
-set g_balance_crylink_secondary_animtime 0.2
-set g_balance_crylink_secondary_ammo 2
-set g_balance_crylink_secondary_bouncedamagefactor 0.5
-set g_balance_crylink_secondary_joindelay 0
-set g_balance_crylink_secondary_joinspread 0
-set g_balance_crylink_secondary_jointime 0
-set g_balance_crylink_secondary_joinexplode 0
-set g_balance_crylink_secondary_joinexplode_damage 0
-set g_balance_crylink_secondary_joinexplode_edgedamage 0
-set g_balance_crylink_secondary_joinexplode_radius 0
-set g_balance_crylink_secondary_joinexplode_force 0
-set g_balance_crylink_secondary_linkexplode 1
-
-set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 5
-set g_balance_crylink_secondary_line_fadetime 5
-
-set g_balance_crylink_reload_ammo 0 //default: 10
-set g_balance_crylink_reload_time 2
-// }}}
-// {{{ nex
-set g_balance_nex_primary_damage 90
-set g_balance_nex_primary_force 400
-set g_balance_nex_primary_refire 1.25
-set g_balance_nex_primary_animtime 0.3
-set g_balance_nex_primary_ammo 6
-set g_balance_nex_primary_damagefalloff_mindist 0 // 1000 For tZork ;3
-set g_balance_nex_primary_damagefalloff_maxdist 0 // 3000
-set g_balance_nex_primary_damagefalloff_halflife 0 // 1500
-set g_balance_nex_primary_damagefalloff_forcehalflife 0 // 1500
-
-set g_balance_nex_secondary 0
-set g_balance_nex_secondary_charge 0
-set g_balance_nex_secondary_charge_rate 0.1
-set g_balance_nex_secondary_chargepool 0
-set g_balance_nex_secondary_chargepool_regen 0.15
-set g_balance_nex_secondary_chargepool_pause_regen 1
-set g_balance_nex_secondary_chargepool_pause_health_regen 1
-set g_balance_nex_secondary_damage 0
-set g_balance_nex_secondary_force 0
-set g_balance_nex_secondary_refire 0
-set g_balance_nex_secondary_animtime 0
-set g_balance_nex_secondary_ammo 2
-set g_balance_nex_secondary_damagefalloff_mindist 0
-set g_balance_nex_secondary_damagefalloff_maxdist 0
-set g_balance_nex_secondary_damagefalloff_halflife 0
-set g_balance_nex_secondary_damagefalloff_forcehalflife 0
-
-set g_balance_nex_charge 1
-set g_balance_nex_charge_mindmg 40
-set g_balance_nex_charge_start 0
-set g_balance_nex_charge_rate 0.3
-set g_balance_nex_charge_animlimit 0.5
-set g_balance_nex_charge_limit 1
-set g_balance_nex_charge_rot_rate 0
-set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
-set g_balance_nex_charge_shot_multiplier 0.25
-set g_balance_nex_charge_velocity_rate 0
-set g_balance_nex_charge_minspeed 400
-set g_balance_nex_charge_maxspeed 800
-
-set g_balance_nex_reload_ammo 0 //default: 25
-set g_balance_nex_reload_time 2
-// }}}
-// {{{ minstanex
-set g_balance_minstanex_refire 1
-set g_balance_minstanex_animtime 0.3
-set g_balance_minstanex_ammo 10
-set g_balance_minstanex_laser_ammo 0
-set g_balance_minstanex_reload_ammo 0 //default: 50
-set g_balance_minstanex_reload_time 2
-// }}}
-// {{{ hagar
-set g_balance_hagar_primary_damage 30
-set g_balance_hagar_primary_edgedamage 15
-set g_balance_hagar_primary_force 50
-set g_balance_hagar_primary_radius 70
-set g_balance_hagar_primary_spread 0.08
-set g_balance_hagar_primary_speed 2000
-set g_balance_hagar_primary_lifetime 5
-set g_balance_hagar_primary_refire 0.15
-set g_balance_hagar_primary_ammo 1
-set g_balance_hagar_secondary 1
-set g_balance_hagar_secondary_load 1
-set g_balance_hagar_secondary_load_speed 0.6
-set g_balance_hagar_secondary_load_max 4
-set g_balance_hagar_secondary_load_hold 1
-set g_balance_hagar_secondary_load_releasedeath 0
-set g_balance_hagar_secondary_load_abort 1
-set g_balance_hagar_secondary_damage 30
-set g_balance_hagar_secondary_edgedamage 15
-set g_balance_hagar_secondary_force 50
-set g_balance_hagar_secondary_radius 70
-set g_balance_hagar_secondary_spread 0.05
-set g_balance_hagar_secondary_speed 2000
-set g_balance_hagar_secondary_lifetime_min 10
-set g_balance_hagar_secondary_lifetime_rand 0
-set g_balance_hagar_secondary_refire 0.15
-set g_balance_hagar_secondary_ammo 1
-set g_balance_hagar_reload_ammo 0 //default: 25
-set g_balance_hagar_reload_time 2
-// }}}
-// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 80
-set g_balance_rocketlauncher_edgedamage 40
-set g_balance_rocketlauncher_force 400
-set g_balance_rocketlauncher_radius 100
-set g_balance_rocketlauncher_speed 1500
-set g_balance_rocketlauncher_speedaccel 1500
-set g_balance_rocketlauncher_speedstart 800
-set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 1.1
-set g_balance_rocketlauncher_animtime 0.3
-set g_balance_rocketlauncher_ammo 4
-set g_balance_rocketlauncher_health 0 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
-set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
-set g_balance_rocketlauncher_detonatedelay 0.05 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 110 // max degrees per second
-set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
-set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
-set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in
-set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
-set g_balance_rocketlauncher_remote_damage 70
-set g_balance_rocketlauncher_remote_edgedamage 35
-set g_balance_rocketlauncher_remote_radius 100
-set g_balance_rocketlauncher_remote_force 400
-set g_balance_rocketlauncher_reload_ammo 0 //default: 25
-set g_balance_rocketlauncher_reload_time 2
-// }}}
-// {{{ porto
-set g_balance_porto_primary_refire 1.5
-set g_balance_porto_primary_animtime 0.3
-set g_balance_porto_primary_speed 5000
-set g_balance_porto_primary_lifetime 5
-set g_balance_portal_health 200 // these get recharged whenever the portal is used
-set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
-// }}}
-// {{{ hook
-set g_balance_hook_primary_fuel 5 // hook monkeys set 0
-set g_balance_hook_primary_refire 0 // hook monkeys set 0
-set g_balance_hook_primary_animtime 0.3 // good shoot anim
-set g_balance_hook_primary_hooked_time_max 0 // infinite
-set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
-set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked
-set g_balance_hook_secondary_damage 25 // not much
-set g_balance_hook_secondary_edgedamage 5 // not much
-set g_balance_hook_secondary_radius 500 // LOTS
-set g_balance_hook_secondary_force -2000 // LOTS
-set g_balance_hook_secondary_ammo 50 // a whole pack
-set g_balance_hook_secondary_lifetime 5 // infinite
-set g_balance_hook_secondary_speed 0 // not much throwing
-set g_balance_hook_secondary_gravity 5 // fast falling
-set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
-set g_balance_hook_secondary_animtime 0.3 // good shoot anim
-set g_balance_hook_secondary_power 3 // effect behaves like a square function
-set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
-// }}}
-// {{{ hlac // TO BE REMOVED
-set g_balance_hlac_primary_spread_min 0.01
-set g_balance_hlac_primary_spread_max 0.25
-set g_balance_hlac_primary_spread_add 0.0045
-set g_balance_hlac_primary_spread_crouchmod 0.25
-
-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_radius 70
-set g_balance_hlac_primary_speed 9000
-set g_balance_hlac_primary_lifetime 5
-
-set g_balance_hlac_primary_refire 0.15
-set g_balance_hlac_primary_animtime 0.4
-set g_balance_hlac_primary_ammo 1
-
-set g_balance_hlac_secondary 1
-set g_balance_hlac_secondary_spread 0.15
-set g_balance_hlac_secondary_spread_crouchmod 0.5
-
-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_radius 70
-set g_balance_hlac_secondary_speed 9000
-set g_balance_hlac_secondary_lifetime 5
-
-set g_balance_hlac_secondary_refire 1
-set g_balance_hlac_secondary_animtime 0.3
-set g_balance_hlac_secondary_ammo 10
-set g_balance_hlac_secondary_shots 6
-
-set g_balance_hlac_reload_ammo 0 //default: 20
-set g_balance_hlac_reload_time 2
-// }}}
-// {{{ sniperrifle
-set g_balance_sniperrifle_bursttime 0
-set g_balance_sniperrifle_primary_tracer 1
-set g_balance_sniperrifle_primary_shots 1
-set g_balance_sniperrifle_primary_damage 60
-set g_balance_sniperrifle_primary_headshotaddeddamage 50
-set g_balance_sniperrifle_primary_spread 0
-set g_balance_sniperrifle_primary_force 100
-set g_balance_sniperrifle_primary_speed 40000
-set g_balance_sniperrifle_primary_lifetime 5
-set g_balance_sniperrifle_primary_refire 1.5
-set g_balance_sniperrifle_primary_animtime 0.7
-set g_balance_sniperrifle_primary_ammo 10
-set g_balance_sniperrifle_primary_bulletconstant 110 // 62.2qu
-set g_balance_sniperrifle_primary_burstcost 0
-set g_balance_sniperrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_secondary 0 // Nex and sniper rifle should never be on the same map, so this (zoom on secondary) is okay
-set g_balance_sniperrifle_secondary_reload 0
-set g_balance_sniperrifle_secondary_tracer 0
-set g_balance_sniperrifle_secondary_shots 1
-set g_balance_sniperrifle_secondary_damage 25
-set g_balance_sniperrifle_secondary_headshotaddeddamage 35
-set g_balance_sniperrifle_secondary_spread 0.01
-set g_balance_sniperrifle_secondary_force 50
-set g_balance_sniperrifle_secondary_speed 20000
-set g_balance_sniperrifle_secondary_lifetime 5
-set g_balance_sniperrifle_secondary_refire 0.6
-set g_balance_sniperrifle_secondary_animtime 0.3
-set g_balance_sniperrifle_secondary_ammo 10
-set g_balance_sniperrifle_secondary_bulletconstant 110 // 15.5qu
-set g_balance_sniperrifle_secondary_burstcost 0
-set g_balance_sniperrifle_secondary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_reload_ammo 80 //default: 80
-set g_balance_sniperrifle_reload_time 2
-// }}}
-// {{{ tuba
-set g_balance_tuba_refire 0.05
-set g_balance_tuba_animtime 0.05
-set g_balance_tuba_attenuation 0.5
-set g_balance_tuba_volume 1
-set g_balance_tuba_fadetime 0.25
-set g_balance_tuba_damage 5
-set g_balance_tuba_edgedamage 0
-set g_balance_tuba_radius 200
-set g_balance_tuba_force 40
-// }}}
-// {{{ fireball // this is a superweapon -- lets make it behave as one.
-set g_balance_fireball_primary_ammo 20
-set g_balance_fireball_primary_animtime 0.2
-set g_balance_fireball_primary_bfgdamage 100
-set g_balance_fireball_primary_bfgforce 0
-set g_balance_fireball_primary_bfgradius 1000
-set g_balance_fireball_primary_damage 200
-set g_balance_fireball_primary_damageforcescale 0
-set g_balance_fireball_primary_edgedamage 50
-set g_balance_fireball_primary_force 600
-set g_balance_fireball_primary_health 0
-set g_balance_fireball_primary_laserburntime 0.5
-set g_balance_fireball_primary_laserdamage 80
-set g_balance_fireball_primary_laseredgedamage 20
-set g_balance_fireball_primary_laserradius 256
-set g_balance_fireball_primary_lifetime 15
-set g_balance_fireball_primary_radius 200
-set g_balance_fireball_primary_refire 2
-set g_balance_fireball_primary_refire2 0
-set g_balance_fireball_primary_speed 1200
-set g_balance_fireball_primary_spread 0
-set g_balance_fireball_secondary_ammo 5
-set g_balance_fireball_secondary_animtime 0.3
-set g_balance_fireball_secondary_damage 40
-set g_balance_fireball_secondary_damageforcescale 4
-set g_balance_fireball_secondary_damagetime 5
-set g_balance_fireball_secondary_force 100
-set g_balance_fireball_secondary_laserburntime 0.5
-set g_balance_fireball_secondary_laserdamage 50
-set g_balance_fireball_secondary_laseredgedamage 20
-set g_balance_fireball_secondary_laserradius 110
-set g_balance_fireball_secondary_lifetime 7
-set g_balance_fireball_secondary_refire 1.5
-set g_balance_fireball_secondary_speed 900
-set g_balance_fireball_secondary_speed_up 100
-set g_balance_fireball_secondary_speed_z 0
-set g_balance_fireball_secondary_spread 0
-set g_balance_fireball_reload_ammo 0 //default: 100
-set g_balance_fireball_reload_time 2
-// }}}
-// {{{ seeker
-set g_balance_seeker_type 1 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
-set g_balance_seeker_flac_ammo 0.5
-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_tag_ammo 1
-set g_balance_seeker_tag_animtime 0.2
-set g_balance_seeker_tag_damageforcescale 0
-set g_balance_seeker_tag_health 0
-set g_balance_seeker_tag_lifetime 15
-set g_balance_seeker_tag_refire 0.75 // LOG: 0.7 -> 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_missile_accel 1500
-set g_balance_seeker_missile_ammo 2
-set g_balance_seeker_missile_animtime 0.2
-set g_balance_seeker_missile_count 3 // LOG: 8 -> 3
-set g_balance_seeker_missile_damage 16 // LOG: 15 -> 30
-set g_balance_seeker_missile_damageforcescale 4
-set g_balance_seeker_missile_decel 6000
-set g_balance_seeker_missile_delay 0.25
-set g_balance_seeker_missile_edgedamage 8
-set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
-set g_balance_seeker_missile_health 1
-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 70
-set g_balance_seeker_missile_refire 0.25
-set g_balance_seeker_missile_smart 0
-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 1500
-set g_balance_seeker_missile_speed_up 0
-set g_balance_seeker_missile_speed_z 0
-set g_balance_seeker_missile_speed_max 2000 // LOG: 1400 -> 1300
-set g_balance_seeker_missile_spread 0
-set g_balance_seeker_missile_turnrate 0.15
-set g_balance_seeker_reload_ammo 0 //default: 15
-set g_balance_seeker_reload_time 2
-// End new seeker
set g_start_weapon_electro -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_crylink -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_nex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hagar -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE
set g_start_weapon_rocketlauncher -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_minstanex -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_sniperrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE
+set g_start_weapon_rifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms" // UNTIL IT CAN BE REMOVED FROM CODE
set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_balance_health_start 125
+set g_balance_health_start 100
set g_balance_armor_start 0
-set g_start_ammo_shells 20
+set g_start_ammo_shells 15
set g_start_ammo_nails 0
set g_start_ammo_rockets 0
set g_start_ammo_cells 0
set g_start_ammo_fuel 0
-set g_warmup_start_health 200 "starting values when being in warmup-stage"
+set g_warmup_start_health 100 "starting values when being in warmup-stage"
set g_warmup_start_armor 100 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_shells 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_nails 150 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_rockets 50 "starting values when being in warmup-stage"
-set g_warmup_start_ammo_cells 50 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_shells 30 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_nails 160 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_rockets 80 "starting values when being in warmup-stage"
+set g_warmup_start_ammo_cells 90 "starting values when being in warmup-stage"
set g_warmup_start_ammo_fuel 0 "starting values when being in warmup-stage"
set g_lms_start_health 200
-set g_lms_start_armor 100
-set g_lms_start_ammo_shells 30
-set g_lms_start_ammo_nails 200
-set g_lms_start_ammo_rockets 150
-set g_lms_start_ammo_cells 150
+set g_lms_start_armor 200
+set g_lms_start_ammo_shells 60
+set g_lms_start_ammo_nails 320
+set g_lms_start_ammo_rockets 160
+set g_lms_start_ammo_cells 180
set g_lms_start_ammo_fuel 0
set g_balance_nix_roundtime 25
set g_balance_nix_incrtime 1.6
-set g_balance_nix_ammo_shells 15
-set g_balance_nix_ammo_nails 45
-set g_balance_nix_ammo_rockets 15
-set g_balance_nix_ammo_cells 15
+set g_balance_nix_ammo_shells 60
+set g_balance_nix_ammo_nails 320
+set g_balance_nix_ammo_rockets 160
+set g_balance_nix_ammo_cells 180
set g_balance_nix_ammo_fuel 0
-set g_balance_nix_ammoincr_shells 2
+set g_balance_nix_ammoincr_shells 2 // eh this will need figured out later I assume
set g_balance_nix_ammoincr_nails 6
set g_balance_nix_ammoincr_rockets 2
set g_balance_nix_ammoincr_cells 2
// {{{ pickup items
set g_pickup_ammo_anyway 1
set g_pickup_weapons_anyway 1
-set g_pickup_shells 20
-set g_pickup_shells_weapon 10
-set g_pickup_shells_max 45
-set g_pickup_nails 120
-set g_pickup_nails_weapon 60
-set g_pickup_nails_max 300
-set g_pickup_rockets 25
-set g_pickup_rockets_weapon 15
-set g_pickup_rockets_max 150
+set g_pickup_shells 15
+set g_pickup_shells_weapon 15
+set g_pickup_shells_max 60
+set g_pickup_nails 80
+set g_pickup_nails_weapon 80
+set g_pickup_nails_max 320
+set g_pickup_rockets 40
+set g_pickup_rockets_weapon 40
+set g_pickup_rockets_max 160
set g_pickup_cells 30
-set g_pickup_cells_weapon 20
-set g_pickup_cells_max 150
-set g_pickup_fuel 25
-set g_pickup_fuel_weapon 15
-set g_pickup_fuel_jetpack 50
+set g_pickup_cells_weapon 30
+set g_pickup_cells_max 180
+set g_pickup_fuel 50
+set g_pickup_fuel_weapon 50
+set g_pickup_fuel_jetpack 100
set g_pickup_fuel_max 100
set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 150
+set g_pickup_armorsmall_max 200
set g_pickup_armorsmall_anyway 1
set g_pickup_armormedium 25
-set g_pickup_armormedium_max 50
-set g_pickup_armormedium_anyway 0
+set g_pickup_armormedium_max 200
+set g_pickup_armormedium_anyway 1
set g_pickup_armorbig 50
-set g_pickup_armorbig_max 75; // LOG: to allow a little more armor from medium armor
-set g_pickup_armorbig_anyway 0
+set g_pickup_armorbig_max 200
+set g_pickup_armorbig_anyway 1
set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 150
+set g_pickup_armorlarge_max 200
set g_pickup_armorlarge_anyway 1
set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 250
+set g_pickup_healthsmall_max 200
set g_pickup_healthsmall_anyway 1
set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 100
-set g_pickup_healthmedium_anyway 0
+set g_pickup_healthmedium_max 200
+set g_pickup_healthmedium_anyway 1
set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 150
-set g_pickup_healthlarge_anyway 0
+set g_pickup_healthlarge_max 200
+set g_pickup_healthlarge_anyway 1
set g_pickup_healthmega 100
-set g_pickup_healthmega_max 250
+set g_pickup_healthmega_max 200
set g_pickup_healthmega_anyway 1
set g_pickup_respawntime_short 15
set g_pickup_respawntime_medium 20
set g_pickup_respawntime_long 30
set g_pickup_respawntime_powerup 120
set g_pickup_respawntime_weapon 10
-set g_pickup_respawntime_ammo 25
+set g_pickup_respawntime_ammo 10
set g_pickup_respawntimejitter_short 0
set g_pickup_respawntimejitter_medium 0
set g_pickup_respawntimejitter_long 0
-set g_pickup_respawntimejitter_powerup 10
+set g_pickup_respawntimejitter_powerup 30
set g_pickup_respawntimejitter_weapon 0
set g_pickup_respawntimejitter_ammo 0
// }}}
// {{{ regen/rot
-set g_balance_health_regen 0.05
-set g_balance_health_regenlinear 0
+set g_balance_health_regen 0.08
+set g_balance_health_regenlinear 0.5
set g_balance_pause_health_regen 5
set g_balance_pause_health_regen_spawn 0
-set g_balance_health_rot 0
-set g_balance_health_rotlinear 1
+set g_balance_health_rot 0.04
+set g_balance_health_rotlinear 0.75
set g_balance_pause_health_rot 1
-set g_balance_pause_health_rot_spawn 0
+set g_balance_pause_health_rot_spawn 5
set g_balance_health_regenstable 100
set g_balance_health_rotstable 100
set g_balance_health_limit 999
set g_balance_armor_regen 0
set g_balance_armor_regenlinear 0
-set g_balance_armor_rot 0
-set g_balance_armor_rotlinear 1
+set g_balance_armor_rot 0.04
+set g_balance_armor_rotlinear 0.75
set g_balance_pause_armor_rot 1
-set g_balance_pause_armor_rot_spawn 0
+set g_balance_pause_armor_rot_spawn 5
set g_balance_armor_regenstable 100
set g_balance_armor_rotstable 100
set g_balance_armor_limit 999
-set g_balance_armor_blockpercent 0.7
+set g_balance_armor_blockpercent 0.6
set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
set g_balance_fuel_regenlinear 0
set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
// }}}
// {{{ misc
-set g_balance_selfdamagepercent 0.65
+set g_balance_selfdamagepercent 0.75
set g_balance_weaponswitchdelay 0.15
set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
set g_weaponratefactor 1 "weapon fire rate multiplier"
set g_weaponspreadfactor 1 "weapon spread multiplier"
set g_balance_firetransfer_time 0.9
set g_balance_firetransfer_damage 0.8
-set g_throughfloor_damage 0.7
-set g_throughfloor_force 0.8
+set g_throughfloor_damage 0.4
+set g_throughfloor_force 0.7
set g_projectiles_newton_style 2
// possible values:
// 0: absolute velocity projectiles (like Quake)
// 2: relative velocity projectiles, but aim is precorrected so projectiles hit the crosshair (note: strafe rockets then are SLOWER than ones shot while standing, happens in 1 too when aiming correctly which is hard)
// 3: absolute velocity + player velocity component in shot direction (note: does NOT yield the right relative velocity, but may be good enough, but it is somewhat prone to sniper rockets)
// 4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
-set g_projectiles_newton_style_2_minfactor 0.7
-set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_newton_style_2_minfactor 0.8
+set g_projectiles_newton_style_2_maxfactor 1.5
set g_projectiles_spread_style 7
// possible values:
// 0: forward + solid sphere (like Quake) - varies velocity
// 5: forward + circle with 1-r falloff
// 6: forward + circle with 1-r^2 falloff
// 7: forward + circle with (1-r)(2-r) falloff
-set g_balance_falldamage_deadminspeed 150
-set g_balance_falldamage_minspeed 800
+set g_balance_falldamage_deadminspeed 250
+set g_balance_falldamage_minspeed 900
set g_balance_falldamage_factor 0.20
-set g_balance_falldamage_maxdamage 15
+set g_balance_falldamage_maxdamage 40
set g_balance_damagepush_speedfactor 2.5
// }}}
// {{{ powerups
-set g_balance_powerup_invincible_takedamage 0.6
+set g_balance_powerup_invincible_takedamage 0.25 // only 1/4th damage is taken
set g_balance_powerup_invincible_time 30
set g_balance_powerup_strength_damage 3
-set g_balance_powerup_strength_force 4
+set g_balance_powerup_strength_force 3
set g_balance_powerup_strength_time 30
set g_balance_powerup_strength_selfdamage 1.5
set g_balance_powerup_strength_selfforce 1.5
set g_jetpack_antigravity 0.8 "factor of gravity compensation of the jetpack"
set g_jetpack_acceleration_side 1200 "acceleration of the jetpack in xy direction"
set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
-set g_jetpack_maxspeed_side 1500 "max speed of the jetpack in xy direction"
+set g_jetpack_maxspeed_side 1200 "max speed of the jetpack in xy direction"
set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
set g_jetpack_fuel 8 "fuel per second for jetpack"
set g_jetpack_attenuation 2 "jetpack sound attenuation"
// {{{ weapon properties
// {{{ laser
-set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high
-set g_balance_laser_primary_edgedamage 20
-set g_balance_laser_primary_force 150 // this looks insanely low, but actually isn't with zscale and velocitybias
-set g_balance_laser_primary_radius 60
-set g_balance_laser_primary_speed 5000
+set g_balance_laser_primary_damage 25
+set g_balance_laser_primary_edgedamage 12.5
+set g_balance_laser_primary_force 250
+set g_balance_laser_primary_radius 70
+set g_balance_laser_primary_speed 6000
set g_balance_laser_primary_spread 0
-set g_balance_laser_primary_refire 0.6
-set g_balance_laser_primary_animtime 0.4
+set g_balance_laser_primary_refire 0.7
+set g_balance_laser_primary_animtime 0.3
set g_balance_laser_primary_lifetime 5
set g_balance_laser_primary_shotangle 0
set g_balance_laser_primary_delay 0
set g_balance_laser_primary_gauntlet 0
-set g_balance_laser_primary_force_zscale 2 // 300 upforce
-set g_balance_laser_primary_force_velocitybias 0.3
-set g_balance_laser_primary_force_other_scale 2.5 // force 375 when pushing others around
+set g_balance_laser_primary_force_zscale 1.5
+set g_balance_laser_primary_force_velocitybias 0
+set g_balance_laser_primary_force_other_scale 1
set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
-set g_balance_laser_secondary_damage 200 // dps
-set g_balance_laser_secondary_edgedamage 0
-set g_balance_laser_secondary_force 1300
-set g_balance_laser_secondary_radius 60
-set g_balance_laser_secondary_speed 0
+set g_balance_laser_secondary_damage 25
+set g_balance_laser_secondary_edgedamage 12.5
+set g_balance_laser_secondary_force 400
+set g_balance_laser_secondary_radius 70
+set g_balance_laser_secondary_speed 12000
set g_balance_laser_secondary_spread 0
-set g_balance_laser_secondary_refire 0.066
-set g_balance_laser_secondary_animtime 0.066
-set g_balance_laser_secondary_lifetime 0
-set g_balance_laser_secondary_shotangle 0
+set g_balance_laser_secondary_refire 0.7
+set g_balance_laser_secondary_animtime 0.3
+set g_balance_laser_secondary_lifetime 5
+set g_balance_laser_secondary_shotangle -90
set g_balance_laser_secondary_delay 0
-set g_balance_laser_secondary_gauntlet 1
+set g_balance_laser_secondary_gauntlet 0
set g_balance_laser_secondary_force_zscale 1.25
set g_balance_laser_secondary_force_velocitybias 0
-set g_balance_laser_secondary_force_other_scale 0
+set g_balance_laser_secondary_force_other_scale 1
set g_balance_laser_reload_ammo 0 //default: 6
set g_balance_laser_reload_time 2
// }}}
// {{{ shotgun
-set g_balance_shotgun_primary_bullets 18
-set g_balance_shotgun_primary_damage 3.5 // LOG: changed from 4 to 3.5, total damage 63
-set g_balance_shotgun_primary_force 20
-set g_balance_shotgun_primary_spread 0.16 // LOG: changed from 0.18 -> 0.16 to compensate a little for lower damage
-set g_balance_shotgun_primary_refire 1
-set g_balance_shotgun_primary_animtime 0.3
+set g_balance_shotgun_primary_bullets 14
+set g_balance_shotgun_primary_damage 4
+set g_balance_shotgun_primary_force 15
+set g_balance_shotgun_primary_spread 0.12
+set g_balance_shotgun_primary_refire 0.75
+set g_balance_shotgun_primary_animtime 0.2
set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 12000
+set g_balance_shotgun_primary_speed 8000
set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
set g_balance_shotgun_secondary 1
-set g_balance_shotgun_secondary_melee_delay 0.35 // match the anim
-set g_balance_shotgun_secondary_melee_range 85
+set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
+set g_balance_shotgun_secondary_melee_range 120
set g_balance_shotgun_secondary_melee_swing 50
set g_balance_shotgun_secondary_melee_time 0.1
-set g_balance_shotgun_secondary_melee_no_doubleslap 0
+set g_balance_shotgun_secondary_melee_no_doubleslap 1
set g_balance_shotgun_secondary_damage 110
-set g_balance_shotgun_secondary_force 150
+set g_balance_shotgun_secondary_force 200
set g_balance_shotgun_secondary_refire 1.1
set g_balance_shotgun_secondary_animtime 1
set g_balance_shotgun_reload_ammo 0 //default: 5
// {{{ uzi
set g_balance_uzi_mode 1 // Activates varible spread for sustained & burst mode secondary
set g_balance_uzi_spread_min 0.02
-set g_balance_uzi_spread_max 0.3 // LOG: 0.6 -> 0.3
-set g_balance_uzi_spread_add 0.008
+set g_balance_uzi_spread_max 0.06
+set g_balance_uzi_spread_add 0.012
set g_balance_uzi_burst 3 // # of bullets in a burst (if set to 2 or more)
-set g_balance_uzi_burst_animtime 0.45
-set g_balance_uzi_burst_refire 0.05 // refire between burst bullets
-set g_balance_uzi_burst_refire2 0.45 // refire after burst
-set g_balance_uzi_burst_spread 0.07
-set g_balance_uzi_burst_damage 25
-set g_balance_uzi_burst_force 50
+set g_balance_uzi_burst_animtime 0.3
+set g_balance_uzi_burst_refire 0.06 // refire between burst bullets
+set g_balance_uzi_burst_refire2 0.45 // refire after burst
+set g_balance_uzi_burst_spread 0.03
+set g_balance_uzi_burst_damage 25
+set g_balance_uzi_burst_force 20
set g_balance_uzi_burst_ammo 3
set g_balance_uzi_first 1
-set g_balance_uzi_first_damage 15 / f/ LOG: 22 -> 15
-set g_balance_uzi_first_force 50
+set g_balance_uzi_first_damage 16
+set g_balance_uzi_first_force 5
set g_balance_uzi_first_spread 0.03
set g_balance_uzi_first_refire 0.2
-set g_balance_uzi_first_ammo 2
+set g_balance_uzi_first_ammo 1
-set g_balance_uzi_sustained_damage 12 // 120 dps
-set g_balance_uzi_sustained_force 12
-set g_balance_uzi_sustained_spread 0.06
+set g_balance_uzi_sustained_damage 14
+set g_balance_uzi_sustained_force 5
+set g_balance_uzi_sustained_spread 0.04
set g_balance_uzi_sustained_refire 0.1
set g_balance_uzi_sustained_ammo 1
set g_balance_uzi_speed 18000
set g_balance_uzi_bulletconstant 115 // 13.1qu
-set g_balance_uzi_reload_ammo 0 //default: 30
+set g_balance_uzi_reload_ammo 60 //default: 30
set g_balance_uzi_reload_time 2
// }}}
// {{{ mortar
set g_balance_grenadelauncher_primary_type 0
-set g_balance_grenadelauncher_primary_damage 44
-set g_balance_grenadelauncher_primary_edgedamage 32
-set g_balance_grenadelauncher_primary_force 300
-set g_balance_grenadelauncher_primary_radius 115
-set g_balance_grenadelauncher_primary_speed 1500
+set g_balance_grenadelauncher_primary_damage 50
+set g_balance_grenadelauncher_primary_edgedamage 25
+set g_balance_grenadelauncher_primary_force 250
+set g_balance_grenadelauncher_primary_radius 130
+set g_balance_grenadelauncher_primary_speed 1900
set g_balance_grenadelauncher_primary_speed_up 225
set g_balance_grenadelauncher_primary_speed_z 0
-set g_balance_grenadelauncher_primary_spread 0
+set g_balance_grenadelauncher_primary_spread 0.02
set g_balance_grenadelauncher_primary_lifetime 5
-set g_balance_grenadelauncher_primary_lifetime2 0.65
+set g_balance_grenadelauncher_primary_lifetime2 1
set g_balance_grenadelauncher_primary_refire 0.8
set g_balance_grenadelauncher_primary_animtime 0.3
set g_balance_grenadelauncher_primary_ammo 2
-set g_balance_grenadelauncher_primary_health 80
+set g_balance_grenadelauncher_primary_health 0
set g_balance_grenadelauncher_primary_damageforcescale 0
set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
set g_balance_grenadelauncher_secondary_type 1
-set g_balance_grenadelauncher_secondary_damage 62
-set g_balance_grenadelauncher_secondary_edgedamage 32
-set g_balance_grenadelauncher_secondary_force 300
-set g_balance_grenadelauncher_secondary_radius 150
-set g_balance_grenadelauncher_secondary_speed 1000
-set g_balance_grenadelauncher_secondary_speed_up 250
+set g_balance_grenadelauncher_secondary_damage 60
+set g_balance_grenadelauncher_secondary_edgedamage 30
+set g_balance_grenadelauncher_secondary_force 250
+set g_balance_grenadelauncher_secondary_radius 130
+set g_balance_grenadelauncher_secondary_speed 1400
+set g_balance_grenadelauncher_secondary_speed_up 150
set g_balance_grenadelauncher_secondary_speed_z 0
-set g_balance_grenadelauncher_secondary_spread 0
-set g_balance_grenadelauncher_secondary_lifetime 3
-set g_balance_grenadelauncher_secondary_lifetime2 0.65
-set g_balance_grenadelauncher_secondary_refire 0.8
+set g_balance_grenadelauncher_secondary_spread 0.02
+set g_balance_grenadelauncher_secondary_lifetime 5
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0.5
+set g_balance_grenadelauncher_secondary_lifetime_stick 0
+set g_balance_grenadelauncher_secondary_refire 0.7
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 40
-set g_balance_grenadelauncher_secondary_damageforcescale 0
+set g_balance_grenadelauncher_secondary_health 0
+set g_balance_grenadelauncher_secondary_damageforcescale 4
set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
set g_balance_grenadelauncher_bouncefactor 0.5
-set g_balance_grenadelauncher_bouncestop 0.12
+set g_balance_grenadelauncher_bouncestop 0.075
set g_balance_grenadelauncher_reload_ammo 0 //default: 12
set g_balance_grenadelauncher_reload_time 2
// }}}
// {{{ minelayer
-set g_balance_minelayer_damage 42
-set g_balance_minelayer_edgedamage 30
+set g_balance_minelayer_damage 40
+set g_balance_minelayer_edgedamage 20
set g_balance_minelayer_force 250
set g_balance_minelayer_radius 175
set g_balance_minelayer_proximityradius 150
-set g_balance_minelayer_speed 750
-set g_balance_minelayer_lifetime 60
-set g_balance_minelayer_lifetime_countdown 0
+set g_balance_minelayer_speed 1000
+set g_balance_minelayer_lifetime 10
+set g_balance_minelayer_lifetime_countdown 0.5
set g_balance_minelayer_refire 1.5
-set g_balance_minelayer_animtime 0.3
-set g_balance_minelayer_ammo 5
+set g_balance_minelayer_animtime 0.4
+set g_balance_minelayer_ammo 4
set g_balance_minelayer_health 15
-set g_balance_minelayer_limit 3 // 0 disables the limit // LOG: 4 -> 3
-set g_balance_minelayer_protection 1 // don't explode if the mine would hurt the owner or a team mate
+set g_balance_minelayer_limit 3 // 0 disables the limit
+set g_balance_minelayer_protection 0 // don't explode if the mine would hurt the owner or a team mate
set g_balance_minelayer_damageforcescale 0
set g_balance_minelayer_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
set g_balance_minelayer_time 0.5
set g_balance_minelayer_reload_time 2
// }}}
// {{{ electro
-set g_balance_electro_lightning 1
-set g_balance_electro_primary_damage 100
-set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 425
-set g_balance_electro_primary_force_up 125
-set g_balance_electro_primary_radius 850
+set g_balance_electro_lightning 0
+set g_balance_electro_primary_damage 55
+set g_balance_electro_primary_edgedamage 27.5
+set g_balance_electro_primary_force 200
+set g_balance_electro_primary_force_up 0
+set g_balance_electro_primary_radius 100
set g_balance_electro_primary_comboradius 150
-set g_balance_electro_primary_speed 0
+set g_balance_electro_primary_speed 2500
set g_balance_electro_primary_spread 0
-set g_balance_electro_primary_lifetime 0
-set g_balance_electro_primary_refire 0.4
-set g_balance_electro_primary_animtime 0.2
-set g_balance_electro_primary_ammo 5
-set g_balance_electro_primary_range 800
-set g_balance_electro_primary_falloff_mindist 0
-set g_balance_electro_primary_falloff_maxdist 0
-set g_balance_electro_primary_falloff_halflifedist 0
-set g_balance_electro_secondary_damage 25
-set g_balance_electro_secondary_edgedamage 0
-set g_balance_electro_secondary_force 100
-set g_balance_electro_secondary_radius 100
-set g_balance_electro_secondary_speed 700
+set g_balance_electro_primary_lifetime 5
+set g_balance_electro_primary_refire 0.6
+set g_balance_electro_primary_animtime 0.1
+set g_balance_electro_primary_ammo 4
+set g_balance_electro_primary_range 0
+set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius
+set g_balance_electro_primary_falloff_maxdist 850
+set g_balance_electro_primary_falloff_halflifedist 425
+set g_balance_electro_secondary_damage 40
+set g_balance_electro_secondary_edgedamage 20
+set g_balance_electro_secondary_force 200
+set g_balance_electro_secondary_radius 150
+set g_balance_electro_secondary_speed 900
set g_balance_electro_secondary_speed_up 200
set g_balance_electro_secondary_speed_z 0
-set g_balance_electro_secondary_spread 0.08
-set g_balance_electro_secondary_lifetime 3.5
+set g_balance_electro_secondary_spread 0.05
+set g_balance_electro_secondary_lifetime 3
set g_balance_electro_secondary_refire 0.2
-set g_balance_electro_secondary_refire2 2
+set g_balance_electro_secondary_refire2 1.5
set g_balance_electro_secondary_animtime 0.2
set g_balance_electro_secondary_ammo 2
-set g_balance_electro_secondary_health 10
+set g_balance_electro_secondary_health 5
set g_balance_electro_secondary_damageforcescale 4
set g_balance_electro_secondary_count 3
-set g_balance_electro_secondary_bouncefactor 0.5
-set g_balance_electro_secondary_bouncestop 0.075
-set g_balance_electro_combo_damage 50
-set g_balance_electro_combo_edgedamage 0
-set g_balance_electro_combo_force 80
-set g_balance_electro_combo_radius 250
-set g_balance_electro_combo_comboradius 0
-set g_balance_electro_combo_speed 400
+set g_balance_electro_secondary_bouncefactor 0.4
+set g_balance_electro_secondary_bouncestop 0.05
+set g_balance_electro_combo_damage 40
+set g_balance_electro_combo_edgedamage 20
+set g_balance_electro_combo_force 120
+set g_balance_electro_combo_radius 175
+set g_balance_electro_combo_comboradius 275
+set g_balance_electro_combo_speed 2000
set g_balance_electro_reload_ammo 0 //default: 20
set g_balance_electro_reload_time 2
// }}}
-// {{{ crylink
-set g_balance_crylink_primary_damage 7 // LOG: 10 -> 7
-set g_balance_crylink_primary_edgedamage 4 // LOG: 6 -> 4
-set g_balance_crylink_primary_force 35
+// {{{ crylink
+set g_balance_crylink_primary_damage 10
+set g_balance_crylink_primary_edgedamage 5
+set g_balance_crylink_primary_force -55
set g_balance_crylink_primary_radius 80
-set g_balance_crylink_primary_speed 1500
-set g_balance_crylink_primary_spread 0.05
+set g_balance_crylink_primary_speed 1800
+set g_balance_crylink_primary_spread 0.075
set g_balance_crylink_primary_shots 7
-set g_balance_crylink_primary_bounces 2
-set g_balance_crylink_primary_refire 0.8
+set g_balance_crylink_primary_bounces 1
+set g_balance_crylink_primary_refire 0.7
set g_balance_crylink_primary_animtime 0.3
-set g_balance_crylink_primary_ammo 2
-set g_balance_crylink_primary_bouncedamagefactor 0.2
+set g_balance_crylink_primary_ammo 3
+set g_balance_crylink_primary_bouncedamagefactor 0.5
set g_balance_crylink_primary_joindelay 0
-set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_jointime 0.1
-set g_balance_crylink_primary_joinexplode 0
+set g_balance_crylink_primary_joinspread 0.4
+set g_balance_crylink_primary_jointime 0
+set g_balance_crylink_primary_joinexplode 1
set g_balance_crylink_primary_joinexplode_damage 0
set g_balance_crylink_primary_joinexplode_edgedamage 0
set g_balance_crylink_primary_joinexplode_radius 0
set g_balance_crylink_primary_joinexplode_force 0
set g_balance_crylink_primary_linkexplode 1
-set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
+set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
-set g_balance_crylink_primary_other_fadetime 0.25
+set g_balance_crylink_primary_other_lifetime 5
+set g_balance_crylink_primary_other_fadetime 5
set g_balance_crylink_secondary 1
-set g_balance_crylink_secondary_damage 5 // LOG: 8 -> 5
-set g_balance_crylink_secondary_edgedamage 3
-set g_balance_crylink_secondary_force 16 // LOG: 20 -> 16
-set g_balance_crylink_secondary_radius 15 // LOG: 20 -> 15
-set g_balance_crylink_secondary_speed 1250 // LOG: 1500 -> 1250
-set g_balance_crylink_secondary_spread 0.1
-set g_balance_crylink_secondary_shots 6
-set g_balance_crylink_secondary_bounces 2
-set g_balance_crylink_secondary_refire 0.9 // LOG: 0.8 -> 0.9
-set g_balance_crylink_secondary_animtime 0.3
-set g_balance_crylink_secondary_ammo 3 // LOG: 2 -> 3
-set g_balance_crylink_secondary_bouncedamagefactor 0.4 // LOG: 0.2 -> 0.4
+set g_balance_crylink_secondary_damage 5
+set g_balance_crylink_secondary_edgedamage 0
+set g_balance_crylink_secondary_force -40
+set g_balance_crylink_secondary_radius 70
+set g_balance_crylink_secondary_speed 2000
+set g_balance_crylink_secondary_spread 0.02
+set g_balance_crylink_secondary_shots 3
+set g_balance_crylink_secondary_bounces 1
+set g_balance_crylink_secondary_refire 0.2
+set g_balance_crylink_secondary_animtime 0.2
+set g_balance_crylink_secondary_ammo 2
+set g_balance_crylink_secondary_bouncedamagefactor 0.5
set g_balance_crylink_secondary_joindelay 0
-set g_balance_crylink_secondary_joinspread 0.2
-set g_balance_crylink_secondary_jointime 0.1
+set g_balance_crylink_secondary_joinspread 0
+set g_balance_crylink_secondary_jointime 0
set g_balance_crylink_secondary_joinexplode 0
set g_balance_crylink_secondary_joinexplode_damage 0
set g_balance_crylink_secondary_joinexplode_edgedamage 0
set g_balance_crylink_secondary_joinexplode_radius 0
set g_balance_crylink_secondary_joinexplode_force 0
-set g_balance_crylink_secondary_linkexplode 0
+set g_balance_crylink_secondary_linkexplode 1
-set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
+set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 2 // range: 4000 full, fades to 8000
-set g_balance_crylink_secondary_line_fadetime 0.25
+set g_balance_crylink_secondary_line_lifetime 5
+set g_balance_crylink_secondary_line_fadetime 5
set g_balance_crylink_reload_ammo 0 //default: 10
set g_balance_crylink_reload_time 2
// }}}
// {{{ nex
set g_balance_nex_primary_damage 90
-set g_balance_nex_primary_force 500
-set g_balance_nex_primary_refire 1
+set g_balance_nex_primary_force 400
+set g_balance_nex_primary_refire 1.25
set g_balance_nex_primary_animtime 0.3
-set g_balance_nex_primary_ammo 5
-set g_balance_nex_primary_damagefalloff_mindist 0
-set g_balance_nex_primary_damagefalloff_maxdist 0
-set g_balance_nex_primary_damagefalloff_halflife 0
-set g_balance_nex_primary_damagefalloff_forcehalflife 0
+set g_balance_nex_primary_ammo 6
+set g_balance_nex_primary_damagefalloff_mindist 0 // 1000 For tZork ;3
+set g_balance_nex_primary_damagefalloff_maxdist 0 // 3000
+set g_balance_nex_primary_damagefalloff_halflife 0 // 1500
+set g_balance_nex_primary_damagefalloff_forcehalflife 0 // 1500
-set g_balance_nex_secondary 0 // LOG: disable secondary
-set g_balance_nex_secondary_charge 0 // LOG: disable secondary charge
-set g_balance_nex_secondary_charge_rate 0.4
-set g_balance_nex_secondary_chargepool 1
-set g_balance_nex_secondary_chargepool_regen 0.25
-set g_balance_nex_secondary_chargepool_pause_regen 2
-set g_balance_nex_secondary_chargepool_pause_health_regen 0.5
+set g_balance_nex_secondary 0
+set g_balance_nex_secondary_charge 0
+set g_balance_nex_secondary_charge_rate 0.1
+set g_balance_nex_secondary_chargepool 0
+set g_balance_nex_secondary_chargepool_regen 0.15
+set g_balance_nex_secondary_chargepool_pause_regen 1
+set g_balance_nex_secondary_chargepool_pause_health_regen 1
set g_balance_nex_secondary_damage 0
set g_balance_nex_secondary_force 0
set g_balance_nex_secondary_refire 0
set g_balance_nex_secondary_animtime 0
-set g_balance_nex_secondary_ammo 0.4 // full charge pool is 1, so it depletes in 2.5 secs
+set g_balance_nex_secondary_ammo 2
set g_balance_nex_secondary_damagefalloff_mindist 0
set g_balance_nex_secondary_damagefalloff_maxdist 0
set g_balance_nex_secondary_damagefalloff_halflife 0
set g_balance_nex_secondary_damagefalloff_forcehalflife 0
set g_balance_nex_charge 1
-set g_balance_nex_charge_mindmg 20
+set g_balance_nex_charge_mindmg 40
set g_balance_nex_charge_start 0.5
-set g_balance_nex_charge_rate 0.5
+set g_balance_nex_charge_rate 0.4
set g_balance_nex_charge_animlimit 0.5
-set g_balance_nex_charge_limit 1 // LOG: 0.5 -> 1 - allow to fully charge automaticaly
-set g_balance_nex_charge_rot_rate 0 // LOG: 0.1 -> 0 - disable rot
-set g_balance_nex_charge_rot_pause 0.5 // Dont rot down until this long after release of charge button
+set g_balance_nex_charge_limit 1
+set g_balance_nex_charge_rot_rate 0
+set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
set g_balance_nex_charge_shot_multiplier 0
set g_balance_nex_charge_velocity_rate 0
-set g_balance_nex_charge_minspeed 600
-set g_balance_nex_charge_maxspeed 1000
+set g_balance_nex_charge_minspeed 400
+set g_balance_nex_charge_maxspeed 800
set g_balance_nex_reload_ammo 0 //default: 25
set g_balance_nex_reload_time 2
// }}}
// {{{ minstanex
set g_balance_minstanex_refire 1
-set g_balance_minstanex_animtime 0.50
+set g_balance_minstanex_animtime 0.3
set g_balance_minstanex_ammo 10
set g_balance_minstanex_laser_ammo 0
set g_balance_minstanex_reload_ammo 0 //default: 50
set g_balance_minstanex_reload_time 2
// }}}
// {{{ hagar
-set g_balance_hagar_primary_damage 14
-set g_balance_hagar_primary_edgedamage 6
-set g_balance_hagar_primary_force 70
-set g_balance_hagar_primary_radius 110
-set g_balance_hagar_primary_spread 0.1
-set g_balance_hagar_primary_speed 1800
+set g_balance_hagar_primary_damage 30
+set g_balance_hagar_primary_edgedamage 15
+set g_balance_hagar_primary_force 50
+set g_balance_hagar_primary_radius 70
+set g_balance_hagar_primary_spread 0.05
+set g_balance_hagar_primary_speed 2000
set g_balance_hagar_primary_lifetime 5
-set g_balance_hagar_primary_refire 0.12
+set g_balance_hagar_primary_refire 0.15
set g_balance_hagar_primary_ammo 1
set g_balance_hagar_secondary 1
-set g_balance_hagar_secondary_load 0
-set g_balance_hagar_secondary_load_speed 0.6
+set g_balance_hagar_secondary_load 1
+set g_balance_hagar_secondary_load_speed 0.5
set g_balance_hagar_secondary_load_max 4
-set g_balance_hagar_secondary_load_hold 0
-set g_balance_hagar_secondary_load_releasedeath 1
+set g_balance_hagar_secondary_load_hold 1
+set g_balance_hagar_secondary_load_releasedeath 0
set g_balance_hagar_secondary_load_abort 1
-set g_balance_hagar_secondary_damage 14 // default for _load: 32
-set g_balance_hagar_secondary_edgedamage 6 // default for _load: 10
-set g_balance_hagar_secondary_force 70 // default for _load: 160
-set g_balance_hagar_secondary_radius 125
-set g_balance_hagar_secondary_spread 0.15 // default for _load: 0.08
-set g_balance_hagar_secondary_speed 1800
-set g_balance_hagar_secondary_lifetime_min 5
+set g_balance_hagar_secondary_damage 40
+set g_balance_hagar_secondary_edgedamage 20
+set g_balance_hagar_secondary_force 50
+set g_balance_hagar_secondary_radius 80
+set g_balance_hagar_secondary_spread 0.05
+set g_balance_hagar_secondary_speed 2000
+set g_balance_hagar_secondary_lifetime_min 10
set g_balance_hagar_secondary_lifetime_rand 0
-set g_balance_hagar_secondary_refire 0.12 // default for _load: 0.8
+set g_balance_hagar_secondary_refire 0.5
set g_balance_hagar_secondary_ammo 1
set g_balance_hagar_reload_ammo 0 //default: 25
set g_balance_hagar_reload_time 2
// }}}
// {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 82
-set g_balance_rocketlauncher_edgedamage 32
-set g_balance_rocketlauncher_force 350
-set g_balance_rocketlauncher_radius 130
-set g_balance_rocketlauncher_speed 1400
-set g_balance_rocketlauncher_speedaccel 1400
+set g_balance_rocketlauncher_damage 80
+set g_balance_rocketlauncher_edgedamage 40
+set g_balance_rocketlauncher_force 400
+set g_balance_rocketlauncher_radius 100
+set g_balance_rocketlauncher_speed 1500
+set g_balance_rocketlauncher_speedaccel 1500
set g_balance_rocketlauncher_speedstart 800
-set g_balance_rocketlauncher_lifetime 5
-set g_balance_rocketlauncher_refire 1
+set g_balance_rocketlauncher_lifetime 10
+set g_balance_rocketlauncher_refire 1.1
set g_balance_rocketlauncher_animtime 0.3
-set g_balance_rocketlauncher_ammo 3
-set g_balance_rocketlauncher_health 0
-set g_balance_rocketlauncher_damageforcescale 0
+set g_balance_rocketlauncher_ammo 4
+set g_balance_rocketlauncher_health 0 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
+set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
set g_balance_rocketlauncher_detonatedelay 0.05 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 42 // max degrees per second
+set g_balance_rocketlauncher_guiderate 110 // max degrees per second
set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
-set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
+set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in
set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
-set g_balance_rocketlauncher_remote_damage 60
-set g_balance_rocketlauncher_remote_edgedamage 20
-set g_balance_rocketlauncher_remote_radius 120
-set g_balance_rocketlauncher_remote_force 350
+set g_balance_rocketlauncher_remote_damage 70
+set g_balance_rocketlauncher_remote_edgedamage 35
+set g_balance_rocketlauncher_remote_radius 100
+set g_balance_rocketlauncher_remote_force 400
set g_balance_rocketlauncher_reload_ammo 0 //default: 25
set g_balance_rocketlauncher_reload_time 2
// }}}
// {{{ porto
set g_balance_porto_primary_refire 1.5
-set g_balance_porto_primary_animtime 0.2
-set g_balance_porto_primary_speed 2000
+set g_balance_porto_primary_animtime 0.3
+set g_balance_porto_primary_speed 5000
set g_balance_porto_primary_lifetime 5
set g_balance_portal_health 200 // these get recharged whenever the portal is used
set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
// {{{ hook
set g_balance_hook_primary_fuel 5 // hook monkeys set 0
set g_balance_hook_primary_refire 0 // hook monkeys set 0
-set g_balance_hook_primary_animtime 0.2 // good shoot anim
+set g_balance_hook_primary_animtime 0.3 // good shoot anim
set g_balance_hook_primary_hooked_time_max 0 // infinite
set g_balance_hook_primary_hooked_time_free 2 // 2s being hooked are free
set g_balance_hook_primary_hooked_fuel 5 // fuel per second hooked
set g_balance_hook_secondary_speed 0 // not much throwing
set g_balance_hook_secondary_gravity 5 // fast falling
set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
-set g_balance_hook_secondary_animtime 0.2 // good shoot anim
+set g_balance_hook_secondary_animtime 0.3 // good shoot anim
set g_balance_hook_secondary_power 3 // effect behaves like a square function
set g_balance_hook_secondary_duration 1.5 // effect runs for three seconds
// }}}
-// {{{ hlac
+// {{{ hlac // TO BE REMOVED
set g_balance_hlac_primary_spread_min 0.01
-set g_balance_hlac_primary_spread_max 0.075
-set g_balance_hlac_primary_spread_add 0.001
+set g_balance_hlac_primary_spread_max 0.25
+set g_balance_hlac_primary_spread_add 0.0045
set g_balance_hlac_primary_spread_crouchmod 0.25
-set g_balance_hlac_primary_damage 15
-set g_balance_hlac_primary_edgedamage 10
-set g_balance_hlac_primary_force 70
-set g_balance_hlac_primary_radius 40
+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_radius 70
set g_balance_hlac_primary_speed 9000
set g_balance_hlac_primary_lifetime 5
-set g_balance_hlac_primary_refire 0.1
-set g_balance_hlac_primary_animtime 0.2
+set g_balance_hlac_primary_refire 0.15
+set g_balance_hlac_primary_animtime 0.4
set g_balance_hlac_primary_ammo 1
set g_balance_hlac_secondary 1
set g_balance_hlac_secondary_spread 0.15
set g_balance_hlac_secondary_spread_crouchmod 0.5
-set g_balance_hlac_secondary_damage 20
-set g_balance_hlac_secondary_edgedamage 13
-set g_balance_hlac_secondary_force 100
-set g_balance_hlac_secondary_radius 45
+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_radius 70
set g_balance_hlac_secondary_speed 9000
set g_balance_hlac_secondary_lifetime 5
-set g_balance_hlac_secondary_refire 0.8
-set g_balance_hlac_secondary_animtime 0.4
-set g_balance_hlac_secondary_ammo 4
+set g_balance_hlac_secondary_refire 1
+set g_balance_hlac_secondary_animtime 0.3
+set g_balance_hlac_secondary_ammo 10
set g_balance_hlac_secondary_shots 6
set g_balance_hlac_reload_ammo 0 //default: 20
set g_balance_hlac_reload_time 2
// }}}
-// {{{ sniperrifle
-set g_balance_sniperrifle_bursttime 0
-set g_balance_sniperrifle_primary_tracer 1
-set g_balance_sniperrifle_primary_shots 1
-set g_balance_sniperrifle_primary_damage 60
-set g_balance_sniperrifle_primary_headshotaddeddamage 60
-set g_balance_sniperrifle_primary_spread 0
-set g_balance_sniperrifle_primary_force 2
-set g_balance_sniperrifle_primary_speed 40000
-set g_balance_sniperrifle_primary_lifetime 5
-set g_balance_sniperrifle_primary_refire 1.5
-set g_balance_sniperrifle_primary_animtime 1.4
-set g_balance_sniperrifle_primary_ammo 10
-set g_balance_sniperrifle_primary_bulletconstant 110 // 62.2qu
-set g_balance_sniperrifle_primary_burstcost 0
-set g_balance_sniperrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_secondary 1
-set g_balance_sniperrifle_secondary_reload 1
-set g_balance_sniperrifle_secondary_tracer 0
-set g_balance_sniperrifle_secondary_shots 1
-set g_balance_sniperrifle_secondary_damage 42
-set g_balance_sniperrifle_secondary_headshotaddeddamage 42
-set g_balance_sniperrifle_secondary_spread 0
-set g_balance_sniperrifle_secondary_force 2
-set g_balance_sniperrifle_secondary_speed 20000
-set g_balance_sniperrifle_secondary_lifetime 5
-set g_balance_sniperrifle_secondary_refire 1.5
-set g_balance_sniperrifle_secondary_animtime 1.4
-set g_balance_sniperrifle_secondary_ammo 10
-set g_balance_sniperrifle_secondary_bulletconstant 110 // 15.5qu
-set g_balance_sniperrifle_secondary_burstcost 0
-set g_balance_sniperrifle_secondary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_reload_ammo 80 //default: 80
-set g_balance_sniperrifle_reload_time 2
+// {{{ rifle
+set g_balance_rifle_bursttime 0
+set g_balance_rifle_primary_tracer 1
+set g_balance_rifle_primary_shots 1
+set g_balance_rifle_primary_damage 30
+set g_balance_rifle_primary_headshotaddeddamage 30
+set g_balance_rifle_primary_spread 0
+set g_balance_rifle_primary_force 100
+set g_balance_rifle_primary_speed 40000
+set g_balance_rifle_primary_lifetime 5
+set g_balance_rifle_primary_refire 1.2
+set g_balance_rifle_primary_animtime 0.4
+set g_balance_rifle_primary_ammo 10
+set g_balance_rifle_primary_bulletconstant 110 // 62.2qu
+set g_balance_rifle_primary_burstcost 0
+set g_balance_rifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_secondary 1
+set g_balance_rifle_secondary_reload 0
+set g_balance_rifle_secondary_tracer 0
+set g_balance_rifle_secondary_shots 4
+set g_balance_rifle_secondary_damage 10
+set g_balance_rifle_secondary_headshotaddeddamage 10
+set g_balance_rifle_secondary_spread 0.02
+set g_balance_rifle_secondary_force 50
+set g_balance_rifle_secondary_speed 20000
+set g_balance_rifle_secondary_lifetime 5
+set g_balance_rifle_secondary_refire 0.9
+set g_balance_rifle_secondary_animtime 0.3
+set g_balance_rifle_secondary_ammo 10
+set g_balance_rifle_secondary_bulletconstant 110 // 15.5qu
+set g_balance_rifle_secondary_burstcost 0
+set g_balance_rifle_secondary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_reload_ammo 80 //default: 80
+set g_balance_rifle_reload_time 2
// }}}
// {{{ tuba
set g_balance_tuba_refire 0.05
set g_balance_tuba_radius 200
set g_balance_tuba_force 40
// }}}
-// {{{ fireball
-set g_balance_fireball_primary_ammo 40
+// {{{ fireball // this is a superweapon -- lets make it behave as one.
+set g_balance_fireball_primary_ammo 20
set g_balance_fireball_primary_animtime 0.2
set g_balance_fireball_primary_bfgdamage 100
set g_balance_fireball_primary_bfgforce 0
set g_balance_fireball_primary_bfgradius 1000
set g_balance_fireball_primary_damage 200
-set g_balance_fireball_primary_damageforcescale 4
-set g_balance_fireball_primary_edgedamage 0
-set g_balance_fireball_primary_force 700
-set g_balance_fireball_primary_health 50
+set g_balance_fireball_primary_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 5
+set g_balance_fireball_primary_refire 2
set g_balance_fireball_primary_refire2 0
-set g_balance_fireball_primary_speed 650
+set g_balance_fireball_primary_speed 1200
set g_balance_fireball_primary_spread 0
set g_balance_fireball_secondary_ammo 5
-set g_balance_fireball_secondary_animtime 0.2
+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_laseredgedamage 20
set g_balance_fireball_secondary_laserradius 110
set g_balance_fireball_secondary_lifetime 7
-set g_balance_fireball_secondary_refire 2
+set g_balance_fireball_secondary_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_reload_ammo 0 //default: 60
+set g_balance_fireball_reload_ammo 0 //default: 100
set g_balance_fireball_reload_time 2
// }}}
// {{{ seeker
-set g_balance_seeker_type 0 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
+set g_balance_seeker_type 1 // 0 = old seeker, 1 = new seeker. THIS IS A TEMPORARY CVAR FOR TESTING, will be removed later.
set g_balance_seeker_flac_ammo 0.5
set g_balance_seeker_flac_animtime 0.1
set g_balance_seeker_flac_damage 15
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_tag_ammo 1
+set g_balance_seeker_tag_animtime 0.2
+set g_balance_seeker_tag_damageforcescale 0
+set g_balance_seeker_tag_health 0
+set g_balance_seeker_tag_lifetime 15
+set g_balance_seeker_tag_refire 0.75 // LOG: 0.7 -> 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_missile_accel 1500
set g_balance_seeker_missile_ammo 2
set g_balance_seeker_missile_animtime 0.2
set g_balance_seeker_missile_count 3 // LOG: 8 -> 3
-set g_balance_seeker_missile_damage 30 // LOG: 15 -> 30
+set g_balance_seeker_missile_damage 16 // LOG: 15 -> 30
set g_balance_seeker_missile_damageforcescale 4
-set g_balance_seeker_missile_decel 1400
+set g_balance_seeker_missile_decel 6000
set g_balance_seeker_missile_delay 0.25
-set g_balance_seeker_missile_edgedamage 10
-set g_balance_seeker_missile_force 150 // LOG: 100 -> 150
-set g_balance_seeker_missile_health 5
+set g_balance_seeker_missile_edgedamage 8
+set g_balance_seeker_missile_force 50 // LOG: 100 -> 150
+set g_balance_seeker_missile_health 1
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_radius 70
+set g_balance_seeker_missile_refire 0.25
+set g_balance_seeker_missile_smart 0
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_up 300
+set g_balance_seeker_missile_speed 1500
+set g_balance_seeker_missile_speed_up 0
set g_balance_seeker_missile_speed_z 0
-set g_balance_seeker_missile_speed_max 1300 // LOG: 1400 -> 1300
+set g_balance_seeker_missile_speed_max 2000 // LOG: 1400 -> 1300
set g_balance_seeker_missile_spread 0
-set g_balance_seeker_missile_turnrate 0.65
-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 // LOG: 0.7 -> 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_missile_turnrate 0.15
set g_balance_seeker_reload_ammo 0 //default: 15
set g_balance_seeker_reload_time 2
// End new seeker
set g_start_weapon_porto -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hook -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_hlac -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
-set g_start_weapon_sniperrifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
+set g_start_weapon_rifle -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_tuba -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_fireball -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_start_weapon_seeker -1 "0 = never provide the weapon, 1 = always provide the weapon, -1 = game mode default, -2 = provide the weapon in ca and lms"
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_lifetime2 0
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 0
set g_balance_grenadelauncher_secondary_refire 0.7
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_hlac_reload_ammo 0 //default: 20
set g_balance_hlac_reload_time 2
// }}}
-// {{{ sniperrifle
-set g_balance_sniperrifle_bursttime 0
-set g_balance_sniperrifle_primary_tracer 1
-set g_balance_sniperrifle_primary_shots 1
-set g_balance_sniperrifle_primary_damage 40
-set g_balance_sniperrifle_primary_headshotaddeddamage 100
-set g_balance_sniperrifle_primary_spread 0
-set g_balance_sniperrifle_primary_force 2
-set g_balance_sniperrifle_primary_speed 40000
-set g_balance_sniperrifle_primary_lifetime 5
-set g_balance_sniperrifle_primary_refire 0.65
-set g_balance_sniperrifle_primary_animtime 0.6
-set g_balance_sniperrifle_primary_ammo 10
-set g_balance_sniperrifle_primary_bulletconstant 110 // 62.2qu
-set g_balance_sniperrifle_primary_burstcost 0
-set g_balance_sniperrifle_primary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_secondary 1
-set g_balance_sniperrifle_secondary_reload 0
-set g_balance_sniperrifle_secondary_tracer 0
-set g_balance_sniperrifle_secondary_shots 1
-set g_balance_sniperrifle_secondary_damage 50
-set g_balance_sniperrifle_secondary_headshotaddeddamage 50 // 50 damage only on head
-set g_balance_sniperrifle_secondary_spread 0
-set g_balance_sniperrifle_secondary_force 2
-set g_balance_sniperrifle_secondary_speed 20000
-set g_balance_sniperrifle_secondary_lifetime 5
-set g_balance_sniperrifle_secondary_refire 1.5
-set g_balance_sniperrifle_secondary_animtime 0.6
-set g_balance_sniperrifle_secondary_ammo 10
-set g_balance_sniperrifle_secondary_bulletconstant 110 // 15.5qu
-set g_balance_sniperrifle_secondary_burstcost 0
-set g_balance_sniperrifle_secondary_bullethail 0 // empty magazine on shot
-set g_balance_sniperrifle_reload_ammo 80 //default: 80
-set g_balance_sniperrifle_reload_time 2
+// {{{ rifle
+set g_balance_rifle_bursttime 0
+set g_balance_rifle_primary_tracer 1
+set g_balance_rifle_primary_shots 1
+set g_balance_rifle_primary_damage 40
+set g_balance_rifle_primary_headshotaddeddamage 100
+set g_balance_rifle_primary_spread 0
+set g_balance_rifle_primary_force 2
+set g_balance_rifle_primary_speed 40000
+set g_balance_rifle_primary_lifetime 5
+set g_balance_rifle_primary_refire 0.65
+set g_balance_rifle_primary_animtime 0.6
+set g_balance_rifle_primary_ammo 10
+set g_balance_rifle_primary_bulletconstant 110 // 62.2qu
+set g_balance_rifle_primary_burstcost 0
+set g_balance_rifle_primary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_secondary 1
+set g_balance_rifle_secondary_reload 0
+set g_balance_rifle_secondary_tracer 0
+set g_balance_rifle_secondary_shots 1
+set g_balance_rifle_secondary_damage 50
+set g_balance_rifle_secondary_headshotaddeddamage 50 // 50 damage only on head
+set g_balance_rifle_secondary_spread 0
+set g_balance_rifle_secondary_force 2
+set g_balance_rifle_secondary_speed 20000
+set g_balance_rifle_secondary_lifetime 5
+set g_balance_rifle_secondary_refire 1.5
+set g_balance_rifle_secondary_animtime 0.6
+set g_balance_rifle_secondary_ammo 10
+set g_balance_rifle_secondary_bulletconstant 110 // 15.5qu
+set g_balance_rifle_secondary_burstcost 0
+set g_balance_rifle_secondary_bullethail 0 // empty magazine on shot
+set g_balance_rifle_reload_ammo 80 //default: 80
+set g_balance_rifle_reload_time 2
// }}}
// {{{ tuba
set g_balance_tuba_refire 0.05
#!/bin/sh
+case "$1" in
+ pot)
+ mode=pot
+ mail=true
+ ;;
+ po)
+ mode=po
+ mail=true
+ language=
+ ;;
+ '')
+ echo "Sorry, you are not supposed to use this script."
+ echo "This script is solely for use by the Xonotic Core Team."
+ echo "Unauthorized use of it can cause HIGHLY annoying merge"
+ echo "conflicts."
+ exit 1
+ ;;
+ *)
+ mode=po
+ mail=false
+ language=$1
+ ;;
+esac
+
for VM in menu csprogs; do
case "$VM" in
csprogs)
VMD=$VM
;;
esac
- {
- find qcsrc/"$VMD" -type f -not -name \*.po -not -name \*.txt
- find qcsrc/common -type f -not -name \*.po -not -name \*.txt
- find qcsrc/server -type f -name w_\*.qc
- } | xgettext -LC -k_ -f- --from-code utf-8 -o "$VM".dat.pot >&2
- for X in "$VM".dat.*.po; do
- [ -f "$X" ] || continue
- for Y in ~/check-translations/"$X".*; do
- [ -f "$Y" ] || continue
- msgcat -F --use-first "$Y" "$X" > "$X".new
- mv "$X".new "$X"
- done
- msgmerge -F -U "$X" "$VM".dat.pot >&2
- msgattrib --untranslated "$X" | grep . > "$X".untranslated || rm -f "$X".untranslated
- msgattrib --fuzzy "$X" | grep . > "$X".fuzzy || rm -f "$X".fuzzy
- nu=$((`grep -c ^#: "$X".untranslated` + 0))
- nf=$((`grep -c ^#: "$X".fuzzy` + 0))
- n=$(($nu + $nf))
- if [ $n -gt 0 ]; then
- echo "TODO for translation $X:"
- echo "Untranslated: $nu"
- echo "Fuzzy: $nf"
- ltr=`grep '^"Last-Translator: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '<LL@li.org>|<EMAIL@ADDRESS>'`
- ltm=`grep '^"Language-Team: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '<LL@li.org>|<EMAIL@ADDRESS>'`
- echo "Translators: $ltr, $ltm"
- case "$ltr" in
- '')
- to=$ltm
- cc=
- ;;
- *)
- to=$ltr
- if [ x"$ltr" = x"$ltm" ]; then
- cc=
- else
- cc=$ltm
- fi
- ;;
- esac
- if [ -n "$to" ]; then
- echo "To: $to"
- fi
- if [ -n "$cc" ]; then
- echo "Cc: $cc"
+
+ if [ x"$mode" = x"pot" ]; then
+ {
+ find qcsrc/"$VMD" -type f -not -name \*.po -not -name \*.txt
+ find qcsrc/common -type f -not -name \*.po -not -name \*.txt
+ find qcsrc/server -type f -name w_\*.qc
+ } | xgettext -LC -k_ -f- --from-code utf-8 -o "$VM".dat.pot >&2
+ fi
+
+ if [ x"$mode" = x"po" ]; then
+ for X in "$VM".dat.*.po; do
+ [ -f "$X" ] || continue
+ if [ -n "$language" ]; then
+ if [ x"${X#*.dat.}" != x"$language.po" ]; then
+ continue
+ fi
fi
- if [ -n "$to" ]; then
- while :; do
- echo "Send mail? [y/n]"
- read -r yesno
- case "$yesno" in
- y)
- attach=
- if [ $nu -gt 0 ]; then
- attach="$attach $X.untranslated"
- fi
- if [ $nf -gt 0 ]; then
- attach="$attach $X.fuzzy"
- fi
- {
- cat <<EOF
+ for Y in ~/check-translations/"$X".*; do
+ [ -f "$Y" ] || continue
+ msgcat -F --use-first "$Y" "$X" > "$X".new
+ mv "$X".new "$X"
+ done
+ msgmerge -F -U "$X" "$VM".dat.pot >&2
+ msgattrib --untranslated "$X" | grep . > "$X".untranslated || rm -f "$X".untranslated
+ msgattrib --fuzzy "$X" | grep . > "$X".fuzzy || rm -f "$X".fuzzy
+ nu=$((`grep -c ^#: "$X".untranslated` + 0))
+ nf=$((`grep -c ^#: "$X".fuzzy` + 0))
+ n=$(($nu + $nf))
+ if [ $n -gt 0 ]; then
+ echo "TODO for translation $X:"
+ echo "Untranslated: $nu"
+ echo "Fuzzy: $nf"
+ ltr=`grep '^"Last-Translator: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '<LL@li.org>|<EMAIL@ADDRESS>'`
+ ltm=`grep '^"Language-Team: ' "$X" | cut -d ' ' -f 2- | cut -d '\\' -f 1 | egrep -v '<LL@li.org>|<EMAIL@ADDRESS>'`
+ echo "Translators: $ltr, $ltm"
+ case "$ltr" in
+ '')
+ to=$ltm
+ cc=
+ ;;
+ *)
+ to=$ltr
+ if [ x"$ltr" = x"$ltm" ]; then
+ cc=
+ else
+ cc=$ltm
+ fi
+ ;;
+ esac
+ if [ -n "$to" ]; then
+ echo "To: $to"
+ fi
+ if [ -n "$cc" ]; then
+ echo "Cc: $cc"
+ fi
+ if [ -n "$to" ]; then
+ while $mail; do
+ echo "Send mail? [y/n]"
+ read -r yesno
+ case "$yesno" in
+ y)
+ attach=
+ if [ $nu -gt 0 ]; then
+ attach="$attach $X.untranslated"
+ fi
+ if [ $nf -gt 0 ]; then
+ attach="$attach $X.fuzzy"
+ fi
+ {
+ cat <<EOF
Hi,
as you provided us with translations in the past, we kindly ask you
please tell us in a reply to this message.
EOF
- if [ $nu -gt 0 ]; then
- cat <<EOF
+ if [ $nu -gt 0 ]; then
+ cat <<EOF
Attached to this message is a file
$X.untranslated
with $nu yet to be translated messages. Please translate them and reply
with the file containing the translations in the "msgstr" fields.
EOF
- fi
- if [ $nf -gt 0 ]; then
- cat <<EOF
+ fi
+ if [ $nf -gt 0 ]; then
+ cat <<EOF
Attached to this message is a file
$X.fuzzy
with $nf automatically generated translations. Please verify and/or fix
them and reply with the file having been verified by you.
EOF
- fi
- cat <<EOF
+ fi
+ cat <<EOF
Thanks in advance,
Team Xonotic
EOF
- } | mutt \
- -e "set from=\"divVerent@xonotic.org\"" \
- -e "set use_from=yes" \
- -e "set use_envelope_from=yes" \
- -s "Need update for translations: $X" \
- -c "$cc" \
- -b "divVerent@xonotic.org" \
- -a $attach -- \
- "$to"
- break
- ;;
- n)
- break
- ;;
- esac
- done
+ } | mutt \
+ -e "set from=\"divVerent@xonotic.org\"" \
+ -e "set use_from=yes" \
+ -e "set use_envelope_from=yes" \
+ -s "Need update for translations: $X" \
+ -c "$cc" \
+ -b "divVerent@xonotic.org" \
+ -a $attach -- \
+ "$to"
+ break
+ ;;
+ n)
+ break
+ ;;
+ esac
+ done
+ fi
fi
- fi
- done
- for X in "$VM".dat.*.po.disabled; do
- [ -f "$X" ] || continue
- msgmerge -F -U "$X" "$VM".dat.pot >/dev/null 2>&1
- done
+ done
+
+ for X in "$VM".dat.*.po.disabled; do
+ [ -f "$X" ] || continue
+ if [ -n "$language" ]; then
+ if [ x"${X#*.dat.}" != x"$language.po" ]; then
+ continue
+ fi
+ fi
+ msgmerge -F -U "$X" "$VM".dat.pot >/dev/null 2>&1
+ done
+ fi
done
-// load engine's idea of vid_con*
-seta menu_vid_conwidth $vid_conwidth
-seta menu_vid_conheight $vid_conheight
+// updates for Nexuiz $OLD to 2.4 (also run on first startup, so be careful with what you put in here)
+alias _update_configversion_0 "_update_configversion_1"
-// fix cvar settings of the engine that Xonotic is not compatible with
-alias _update_generic_r_dynamic_0 "r_dynamic 1; r_shadow_realtime_dlight 1"
-alias _update_generic_r_dynamic_1 ""
-alias _update_generic "_update_generic_r_dynamic_$r_dynamic"
+// Updates for Nexuiz 2.4.1 to 2.4.2
+alias _update_configversion_1 "_update_configversion_2"
-// updates for ... to 2.4 (also run on first startup, so be careful with what you put in here)
-alias _update_configversion_0 ""
+// Updates for Nexuiz to Xonotic
+alias _update_configversion_2 "volume 1; cl_gunalign 1; _update_configversion_3"
-// Updates for 2.4.1 to 2.4.2
-alias _update_configversion_1 ""
+// Updates for gunalign fix
+alias _update_configversion_3 "cl_gunalign 3; menu_cl_gunalign 3; _update_configversion_4"
-// Updates for 2.5 to ...
-alias _update_configversion_2 ""
+// place to put further updates
+alias _update_configversion_4 "snd_entchannel0volume 1; snd_entchannel1volume 1; snd_entchannel2volume 1; snd_entchannel3volume 1; snd_entchannel4volume 1; snd_entchannel5volume 1; snd_entchannel6volume 1; snd_entchannel7volume 1; snd_playerchannel0volume 1; snd_playerchannel1volume 1; snd_playerchannel2volume 1; snd_playerchannel3volume 1; snd_playerchannel4volume 1; snd_playerchannel5volume 1; snd_playerchannel6volume 1; snd_playerchannel7volume 1; snd_worldchannel0volume 1; snd_worldchannel1volume 1; snd_worldchannel2volume 1; snd_worldchannel3volume 1; snd_worldchannel4volume 1; snd_worldchannel5volume 1; snd_worldchannel6volume 1; snd_worldchannel7volume 1; snd_csqcchannel0volume 1; snd_csqcchannel1volume 1; snd_csqcchannel2volume 1; snd_csqcchannel3volume 1; snd_csqcchannel4volume 1; snd_csqcchannel5volume 1; snd_csqcchannel6volume 1; snd_csqcchannel7volume 1; _update_configversion_5"
-_update_configversion_$g_configversion
-_update_generic
+// place to put further updates
+alias _update_configversion_5 ""
-set g_configversion 2
+_update_configversion_$g_configversion
-// we now use mastervolume
-volume 1
+set g_configversion 5
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:06+0200\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
"PO-Revision-Date: 2011-04-20 10:46+0200\n"
"Last-Translator: Rudolf Polzer <divVerent@xonotic.org>\n"
"Language-Team: Rudolf Polzer <divVerent@xonotic.org>\n"
msgid "^4CSQC Build information: ^1%s\n"
msgstr "^4CSQC Build-Information: ^1%s (deutsch)\n"
-#: qcsrc/client/Main.qc:232 qcsrc/client/Main.qc:248
+#: qcsrc/client/Main.qc:237 qcsrc/client/Main.qc:253
#, c-format
msgid "trying to switch to unsupported team %d\n"
msgstr "es wurde versucht, in das nicht unterstützte Team %d zu wechseln"
-#: qcsrc/client/Main.qc:364 qcsrc/client/scoreboard.qc:241
+#: qcsrc/client/Main.qc:369 qcsrc/client/scoreboard.qc:241
msgid "Usage:\n"
msgstr "Syntax:\n"
-#: qcsrc/client/Main.qc:365
+#: qcsrc/client/Main.qc:370
msgid "hud_save configname (saves to hud_skinname_configname.cfg)\n"
msgstr "hud_save configname (speichert als hud_skinname_configname.cfg)\n"
-#: qcsrc/client/Main.qc:512
+#: qcsrc/client/Main.qc:494
msgid "Usage: cl_cmd COMMAND..., where possible commands are:\n"
msgstr "Syntax: cl_cmd BEFEHL..., wobei mögliche Befehle sind:\n"
-#: qcsrc/client/Main.qc:513
+#: qcsrc/client/Main.qc:495
msgid " settemp cvar value\n"
msgstr " settemp Cvar Wert\n"
-#: qcsrc/client/Main.qc:514
+#: qcsrc/client/Main.qc:496
msgid " scoreboard_columns_set ...\n"
msgstr " scoreboard_columns_set ...\n"
-#: qcsrc/client/Main.qc:515
+#: qcsrc/client/Main.qc:497
msgid " scoreboard_columns_help\n"
msgstr " scoreboard_columns_help\n"
-#: qcsrc/client/Main.qc:720
-msgid "A CSQC entity changed its owner!\n"
-msgstr "Ein CSQC-Entity hat seinen Besitzer gewechselt!\n"
+#: qcsrc/client/Main.qc:726
+#, c-format
+msgid "A CSQC entity changed its owner! (edict: %d, classname: %s)\n"
+msgstr ""
+"Ein CSQC-Entity hat seinen Besitzer gewechselt! (edict: %d, classname: %s)\n"
-#: qcsrc/client/Main.qc:934
-msgid "A CSQC entity changed its type!\n"
-msgstr "Ein CSQC-Entity hat seinen Typ gewechselt!\n"
+#: qcsrc/client/Main.qc:964
+#, c-format
+msgid "A CSQC entity changed its type! (edict: %d, classname: %s)\n"
+msgstr ""
+"Ein CSQC-Entity hat seinen Typ gewechselt! (edict: %d, classname: %s)\n"
-#: qcsrc/client/Main.qc:972
+#: qcsrc/client/Main.qc:1005
#, c-format
-msgid "unknown entity type in CSQC_Ent_Update: %d\n"
-msgstr "unbekannter Entity-Typ in CSQC_Ent_Update: %d\n"
+msgid ""
+"Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: "
+"%s)\n"
+msgstr ""
+"Unbekannter Entity-Typ in CSQC_Ent_Update (enttype: %d, edict: %d, "
+"classname: %s)\n"
-#: qcsrc/client/Main.qc:1444
+#: qcsrc/client/Main.qc:1461
#, c-format
msgid "%s (not bound)"
msgstr "%s (nicht zugewiesen)"
-#: qcsrc/client/Main.qc:1449 qcsrc/client/hud.qc:407
+#: qcsrc/client/Main.qc:1466 qcsrc/client/hud.qc:230
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
msgid "Awaiting orders..."
msgstr "Warten auf Auftrag..."
-#: qcsrc/client/hud.qc:337
+#: qcsrc/client/hud.qc:160
msgid "1st"
msgstr "1."
-#: qcsrc/client/hud.qc:339
+#: qcsrc/client/hud.qc:162
msgid "2nd"
msgstr "2."
-#: qcsrc/client/hud.qc:341
+#: qcsrc/client/hud.qc:164
msgid "3rd"
msgstr "3."
-#: qcsrc/client/hud.qc:343
+#: qcsrc/client/hud.qc:166
#, c-format
msgid "%dth"
msgstr "%d."
-#: qcsrc/client/hud.qc:375
+#: qcsrc/client/hud.qc:198
#, c-format
msgid " (-%dL)"
msgstr " (-%dR)"
-#: qcsrc/client/hud.qc:380
+#: qcsrc/client/hud.qc:203
#, c-format
msgid " (+%dL)"
msgstr " (+%dR)"
-#: qcsrc/client/hud.qc:396
+#: qcsrc/client/hud.qc:219
msgid "Start line"
msgstr "Start"
-#: qcsrc/client/hud.qc:398 qcsrc/client/hud.qc:402
+#: qcsrc/client/hud.qc:221 qcsrc/client/hud.qc:225
msgid "Finish line"
msgstr "Ziel"
-#: qcsrc/client/hud.qc:400
+#: qcsrc/client/hud.qc:223
#, c-format
msgid "Intermediate %d"
msgstr "Zwischenzeit %d"
-#: qcsrc/client/hud.qc:409
+#: qcsrc/client/hud.qc:232
#, c-format
msgid "%s (%s %s)"
msgstr "%s (%s %s)"
-#: qcsrc/client/hud.qc:553
-#, c-format
-msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
-msgstr ""
-"^2Erfolgreich als %s exportiert! (Hinweis: die Datei wurde in data/data/ "
-"abgelegt)\n"
-
-#: qcsrc/client/hud.qc:557
-#, c-format
-msgid "^1Couldn't write to %s\n"
-msgstr "^1Konnte nicht nach %s schreiben\n"
-
-#: qcsrc/client/hud.qc:1837
+#: qcsrc/client/hud.qc:735
msgid "Out of ammo"
msgstr "Keine Munition mehr."
-#: qcsrc/client/hud.qc:1841
+#: qcsrc/client/hud.qc:739
msgid "Don't have"
msgstr "nicht vorhanden"
-#: qcsrc/client/hud.qc:1845
+#: qcsrc/client/hud.qc:743
msgid "Unavailable"
msgstr "nicht verfügbar"
-#: qcsrc/client/hud.qc:2696
+#: qcsrc/client/hud.qc:1476
#, c-format
msgid "^1%s^1 couldn't take it anymore\n"
msgstr "^1%s^1 konnte es nicht mehr ertragen\n"
-#: qcsrc/client/hud.qc:2700 qcsrc/client/hud.qc:2992
+#: qcsrc/client/hud.qc:1480 qcsrc/client/hud.qc:1784
#, c-format
msgid "^1%s^1 died\n"
msgstr "^1%s^1 ist gestorben\n"
-#: qcsrc/client/hud.qc:2704
+#: qcsrc/client/hud.qc:1484
#, c-format
msgid "^7%s^7 committed suicide. What's the point of living without ammo?\n"
msgstr "^7%s^7 hat sich erhängt. Was ist schon ein Leben ohne Munition?\n"
-#: qcsrc/client/hud.qc:2708
+#: qcsrc/client/hud.qc:1488
#, c-format
msgid "^1%s^1 thought they found a nice camping ground\n"
msgstr "^1%s^1 dachte, einen tollen Campingplatz gefunden zu haben\n"
-#: qcsrc/client/hud.qc:2712
+#: qcsrc/client/hud.qc:1492
#, c-format
msgid "^1%s^1 didn't become friends with the Lord of Teamplay\n"
msgstr "^1%s^1 bekam Probleme mit dem Lord of Teamplay\n"
-#: qcsrc/client/hud.qc:2716
+#: qcsrc/client/hud.qc:1496
#, c-format
msgid "^1%s^1 unfairly eliminated themself\n"
msgstr "^1%s^1 hat sich selbst auf unfaire Weise erledigt\n"
-#: qcsrc/client/hud.qc:2720
+#: qcsrc/client/hud.qc:1500
#, c-format
msgid "^1%s^1 burned to death\n"
msgstr "^1%s^1 brannte zu Tode\n"
-#: qcsrc/client/hud.qc:2724
+#: qcsrc/client/hud.qc:1504
#, c-format
msgid "^1%s^1 couldn't resist the urge to self-destruct\n"
msgstr ""
"^1%s^1 konnte dem Drang zur Selbstzerstörung einfach nicht widerstehen\n"
-#: qcsrc/client/hud.qc:2728
+#: qcsrc/client/hud.qc:1508
#, c-format
msgid "^1%s^1 ended it all after a %d kill spree\n"
msgstr "^1%s^1 machte seinem %d-Amoklauf ein Ende\n"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:1525
#, c-format
msgid "^1%s^1 took action against a team mate\n"
msgstr "^1%s^1 ergriff Maßnahmen gegen einen Mitspieler\n"
-#: qcsrc/client/hud.qc:2747
+#: qcsrc/client/hud.qc:1527
#, c-format
msgid "^1%s^1 mows down a team mate\n"
msgstr "^1%s^1 mähte einen Mitspieler nieder\n"
-#: qcsrc/client/hud.qc:2752
+#: qcsrc/client/hud.qc:1532
#, c-format
msgid "^1%s^1 ended a %d scoring spree by going against a team mate\n"
msgstr ""
"^1%s^1 dachte, %d Punkte hintereinander reichen, und trug dies an einem "
"Mitspieler aus\n"
-#: qcsrc/client/hud.qc:2754
+#: qcsrc/client/hud.qc:1534
#, c-format
msgid "^1%s^1 ended a %d kill spree by killing a team mate\n"
msgstr "^1%s^1 beendete seinen %d-Amoklauf, indem er einen Mitspieler tötete\n"
-#: qcsrc/client/hud.qc:2758
+#: qcsrc/client/hud.qc:1538
#, c-format
msgid "^1%s^1's %s scoring spree was ended by a team mate!\n"
msgstr ""
"^1%s^1s %s Punkte hintereinander wurden von einem Mitspieler gestört!\n"
-#: qcsrc/client/hud.qc:2760
+#: qcsrc/client/hud.qc:1540
#, c-format
msgid "^1%s^1's %s kill spree was ended by a team mate!\n"
msgstr "^1%s^1s %s-Amoklauf wurde von einem Mitspieler beendet!\n"
-#: qcsrc/client/hud.qc:2764
+#: qcsrc/client/hud.qc:1544
#, c-format
msgid "^1%s^1 drew first blood\n"
msgstr "^1%s^1 war der Erste\n"
-#: qcsrc/client/hud.qc:2768
+#: qcsrc/client/hud.qc:1548
#, c-format
msgid "^1%s^1 tried to occupy %s^1's teleport destination space\n"
msgstr "^1%s^1 dachte, %s^1 am Teleportieren hindern zu können\n"
-#: qcsrc/client/hud.qc:2770
+#: qcsrc/client/hud.qc:1550
#, c-format
msgid "^1%s^1 was telefragged by %s\n"
msgstr "^1%s^1 wurde von %s^1 telefragged\n"
-#: qcsrc/client/hud.qc:2775
+#: qcsrc/client/hud.qc:1555
#, c-format
msgid "^1%s^1 was drowned by %s\n"
msgstr "^1%s^1 wurde von %s^1 etränkt\n"
-#: qcsrc/client/hud.qc:2780
+#: qcsrc/client/hud.qc:1560
#, c-format
msgid "^1%s^1 was slimed by %s\n"
msgstr "^1%s^1 wurde von %s^1 im Schleim versenkt\n"
-#: qcsrc/client/hud.qc:2785
+#: qcsrc/client/hud.qc:1565
#, c-format
msgid "^1%s^1 was cooked by %s\n"
msgstr "^1%s^1 wurde von %s^1 gebraten\n"
-#: qcsrc/client/hud.qc:2790
+#: qcsrc/client/hud.qc:1570
#, c-format
msgid "^1%s^1 was grounded by %s\n"
msgstr "^1%s^1 wurde von %s^1 geerdet\n"
-#: qcsrc/client/hud.qc:2795
+#: qcsrc/client/hud.qc:1575
#, c-format
msgid "^1%s^1 was shot into space by %s\n"
msgstr "^1%s^1 wurde von %s^1 ins All geschossen\n"
-#: qcsrc/client/hud.qc:2800
+#: qcsrc/client/hud.qc:1580
#, c-format
msgid "^1%s^1 was conserved by %s\n"
msgstr "^1%s^1 wurde von %s^1 konserviert\n"
-#: qcsrc/client/hud.qc:2806
+#: qcsrc/client/hud.qc:1586
#, c-format
msgid "^1%s^1 was thrown into a world of hurt by %s\n"
msgstr "^1%s^1 wurde von %s^1 in eine Welt des Schmerzes geworfen\n"
-#: qcsrc/client/hud.qc:2810
+#: qcsrc/client/hud.qc:1590
#, c-format
msgid "^1%s^1 was crushed by %s\n"
msgstr "^1%s^1 wurde von %s^1 zerquetscht\n"
-#: qcsrc/client/hud.qc:2814
+#: qcsrc/client/hud.qc:1594
#, c-format
msgid "^1%s^1 got shredded by %s\n"
msgstr "^1%s^1 wurde von %s^1 zerstückelt\n"
-#: qcsrc/client/hud.qc:2818
+#: qcsrc/client/hud.qc:1598
#, c-format
msgid "^1%s^1 was blasted to bits by %s\n"
msgstr "^1%s^1 wurde von %s^1 in die Luft gejagt\n"
-#: qcsrc/client/hud.qc:2822
+#: qcsrc/client/hud.qc:1602
#, c-format
msgid "^1%s^1 got caught in the destruction of %s^1's vehicle\n"
msgstr "^1%s^1 wurde von der Explosion von %s^1s Fahrzeug erwischt\n"
-#: qcsrc/client/hud.qc:2826
+#: qcsrc/client/hud.qc:1606
#, c-format
msgid "^1%s^1 was bolted down by %s\n"
msgstr "^1%s^1 wurde von %s^1 niedergeschmettert\n"
-#: qcsrc/client/hud.qc:2830
+#: qcsrc/client/hud.qc:1610
#, c-format
msgid "^1%s^1 could find no shelter from %s^1's rockets\n"
msgstr "^1%s^1 fand keine Deckung vor %s^1s Raketen\n"
-#: qcsrc/client/hud.qc:2834
+#: qcsrc/client/hud.qc:1614
#, c-format
msgid "^1%s^1 dies when %s^1's wakizashi dies.\n"
msgstr "^1%s^1 starb zusammen mit %s^1's Wakizashi.\n"
-#: qcsrc/client/hud.qc:2838
+#: qcsrc/client/hud.qc:1618
+#, c-format
+msgid "^1%s^1 nailed to hell by %s\n"
+msgstr "^1%s^1 wurde von %s^1 in die Hölle geschossen\n"
+
+#: qcsrc/client/hud.qc:1622
+#, c-format
+msgid "^1%s^1 cluster crushed by %s\n"
+msgstr "^1%s^1 wurde von %s^1 total zerstört\n"
+
+#: qcsrc/client/hud.qc:1626
+#, c-format
+msgid "^1%s^1 dies when %s^1's raptor dies.\n"
+msgstr "^1%s^1 starb zusammen mit %s^1's Raptor.\n"
+
+#: qcsrc/client/hud.qc:1630
#, c-format
msgid "^1%s^1 was pushed into the line of fire by %s\n"
msgstr "^1%s^1 wurde von %s^1 ins offene Feuer geschubst\n"
-#: qcsrc/client/hud.qc:2842
+#: qcsrc/client/hud.qc:1634
#, c-format
msgid "^1%s^1 was pushed into an accident by %s\n"
msgstr "^1%s^1 wurde von %s^1 in einen unglücklichen Unfall geschubst\n"
-#: qcsrc/client/hud.qc:2846
+#: qcsrc/client/hud.qc:1638
#, c-format
msgid "^1%s^1 was unfairly eliminated by %s\n"
msgstr "^1%s^1 wurde von %s auf unfaire Weise erledigt\n"
-#: qcsrc/client/hud.qc:2850
+#: qcsrc/client/hud.qc:1642
#, c-format
msgid "^1%s^1 was burnt to death by %s\n"
msgstr "^1%s^1 wurde von %s verbrannt\n"
-#: qcsrc/client/hud.qc:2862
+#: qcsrc/client/hud.qc:1654
#, c-format
msgid "^1%s^1 was fragged by %s\n"
msgstr "^1%s^1 wurde von %s^1 gefraggt\n"
-#: qcsrc/client/hud.qc:2867
+#: qcsrc/client/hud.qc:1659
#, c-format
msgid "^1%s^1's %s scoring spree was ended by %s\n"
msgstr "^1%s^1's Punkte-Folge wurde von %s^1 beendet\n"
-#: qcsrc/client/hud.qc:2869
+#: qcsrc/client/hud.qc:1661
#, c-format
msgid "^1%s^1's %s kill spree was ended by %s\n"
msgstr "^1%s^1's Kill-Spree wurde von %s^1 beendet\n"
-#: qcsrc/client/hud.qc:2872
+#: qcsrc/client/hud.qc:1664
#, c-format
msgid "^1%s^1 made %s scores in a row\n"
msgstr "^1%s^1 machte %s Punkte hintereinander\n"
-#: qcsrc/client/hud.qc:2874
+#: qcsrc/client/hud.qc:1666
#, c-format
msgid "^1%s^1 has %s frags in a row\n"
msgstr "^1%s^1 hat %s Frags hintereinander\n"
-#: qcsrc/client/hud.qc:2877
+#: qcsrc/client/hud.qc:1669
#, c-format
msgid "%s^7 made a ^1TRIPLE SCORE\n"
msgstr "%s^7 hat einen ^1TRIPLE SCORE\n"
-#: qcsrc/client/hud.qc:2879
+#: qcsrc/client/hud.qc:1671
#, c-format
msgid "%s^7 made a ^1TRIPLE FRAG\n"
msgstr "%s^7 hat einen ^1TRIPLE FRAG\n"
-#: qcsrc/client/hud.qc:2882
+#: qcsrc/client/hud.qc:1674
#, c-format
msgid "%s^7 unleashes ^1SCORING RAGE\n"
msgstr "%s^7 hat ^1PUNKTE-RASEN\n"
-#: qcsrc/client/hud.qc:2884
+#: qcsrc/client/hud.qc:1676
#, c-format
msgid "%s^7 unleashes ^1RAGE\n"
msgstr "%s^7 ^1RAST VOR ZORN\n"
-#: qcsrc/client/hud.qc:2887
+#: qcsrc/client/hud.qc:1679
#, c-format
msgid "%s^7 made ^1TEN SCORES IN A ROW!\n"
msgstr "%s^7 hat ^1ZEHN PUNKTE HINTEREINANDER!\n"
-#: qcsrc/client/hud.qc:2889
+#: qcsrc/client/hud.qc:1681
#, c-format
msgid "%s^7 starts the ^1MASSACRE!\n"
msgstr "%s^7 beginnt das ^1MASSAKER!\n"
-#: qcsrc/client/hud.qc:2892
+#: qcsrc/client/hud.qc:1684
#, c-format
msgid "%s^7 made ^1FIFTEEN SCORES IN A ROW!\n"
msgstr "%s^7 hat ^1FÜNFZEHN PUNKTE HINTEREINANDER\n"
-#: qcsrc/client/hud.qc:2894
+#: qcsrc/client/hud.qc:1686
#, c-format
msgid "%s^7 executes ^1MAYHEM!\n"
msgstr "%s^7 erzeugt das ^1CHAOS!\n"
-#: qcsrc/client/hud.qc:2897
+#: qcsrc/client/hud.qc:1689
#, c-format
msgid "%s^7 made ^1TWENTY SCORES IN A ROW!\n"
msgstr "%s^7 hat ^1ZWANZIG PUNKTE HINTEREINANDER\n"
-#: qcsrc/client/hud.qc:2899
+#: qcsrc/client/hud.qc:1691
#, c-format
msgid "%s^7 is a ^1BERSERKER!\n"
msgstr "%s^7 ist ein ^1BERSERKER!\n"
-#: qcsrc/client/hud.qc:2902
+#: qcsrc/client/hud.qc:1694
#, c-format
msgid "%s^7 made ^1TWENTY FIVE SCORES IN A ROW!\n"
msgstr "%s^7 hat ^1FÜNFUNDZWANZIG PUNKTE HINTEREINANDER!\n"
-#: qcsrc/client/hud.qc:2904
+#: qcsrc/client/hud.qc:1696
#, c-format
msgid "%s^7 inflicts ^1CARNAGE!\n"
msgstr "%s^7 hält ein ^1BLUTBAD!\n"
-#: qcsrc/client/hud.qc:2907
+#: qcsrc/client/hud.qc:1699
#, c-format
msgid "%s^7 made ^1THIRTY SCORES IN A ROW!\n"
msgstr "%s^7 hat ^1DREISSIG PUNKTE HINTEREINANDER\n"
-#: qcsrc/client/hud.qc:2909
+#: qcsrc/client/hud.qc:1701
#, c-format
msgid "%s^7 unleashes ^1ARMAGEDDON!\n"
msgstr "%s^7 lässt die ^1APOKALYPSE^7 los!\n"
-#: qcsrc/client/hud.qc:2917
+#: qcsrc/client/hud.qc:1709
#, c-format
msgid "^1%s^1 was in the water for too long\n"
msgstr "^1%s^1 war zu lange im Wasser\n"
-#: qcsrc/client/hud.qc:2919
+#: qcsrc/client/hud.qc:1711
#, c-format
msgid "^1%s^1 drowned\n"
msgstr "^1%s^1 ertrank\n"
-#: qcsrc/client/hud.qc:2924
+#: qcsrc/client/hud.qc:1716
#, c-format
msgid "^1%s^1 was slimed\n"
msgstr "^1%s^1 wurde im Schleim versenkt\n"
-#: qcsrc/client/hud.qc:2930
+#: qcsrc/client/hud.qc:1722
#, c-format
msgid "^1%s^1 found a hot place\n"
msgstr "^1%s^1 fand einen heißen Ort\n"
-#: qcsrc/client/hud.qc:2932
+#: qcsrc/client/hud.qc:1724
#, c-format
msgid "^1%s^1 turned into hot slag\n"
msgstr "^1%s^1 verwandelte sich in heiße Schlacke\n"
-#: qcsrc/client/hud.qc:2939
+#: qcsrc/client/hud.qc:1731
#, c-format
msgid "^1%s^1 tested gravity (and it worked)\n"
msgstr "^1%s^1 probierte die Gravitation aus (und sie funktionierte)\n"
-#: qcsrc/client/hud.qc:2941
+#: qcsrc/client/hud.qc:1733
#, c-format
msgid "^1%s^1 hit the ground with a crunch\n"
msgstr "^1%s^1 landete mit einem Knall auf dem Boden\n"
-#: qcsrc/client/hud.qc:2946
+#: qcsrc/client/hud.qc:1738
#, c-format
msgid "^1%s^1 became a shooting star\n"
msgstr "^1%s^1 wurde zu einer Sternschnuppe\n"
-#: qcsrc/client/hud.qc:2952
+#: qcsrc/client/hud.qc:1744
#, c-format
msgid "^1%s^1 discovered a swamp\n"
msgstr "^1%s^1 entdeckte einen Sumpf\n"
-#: qcsrc/client/hud.qc:2954
+#: qcsrc/client/hud.qc:1746
#, c-format
msgid "^1%s^1 is now conserved for centuries to come\n"
msgstr "^1%s^1 ist jetzt für Jahrhunderte konserviert\n"
-#: qcsrc/client/hud.qc:2959
+#: qcsrc/client/hud.qc:1751
#, c-format
msgid "^1%s^1 was mowed down by a turret \n"
msgstr "^1%s^1 wurde von einem Turret niedergemäht\n"
-#: qcsrc/client/hud.qc:2971
+#: qcsrc/client/hud.qc:1763
#, c-format
msgid "^1%s^1 died in an accident\n"
msgstr "^1%s^1 starb an einem Unfall\n"
-#: qcsrc/client/hud.qc:2975
+#: qcsrc/client/hud.qc:1767
#, c-format
msgid "^1%s^1 was unfairly eliminated\n"
msgstr "^1%s^1 wurde auf unfaire Weise eliminiert\n"
-#: qcsrc/client/hud.qc:2981
+#: qcsrc/client/hud.qc:1773
#, c-format
msgid "^1%s^1 felt a little hot\n"
msgstr "^1%s^1 fand es ein wenig zu warm\n"
-#: qcsrc/client/hud.qc:2983
+#: qcsrc/client/hud.qc:1775
#, c-format
msgid "^1%s^1 burnt to death\n"
msgstr "^1%s^1 verbrannte\n"
-#: qcsrc/client/hud.qc:2990
+#: qcsrc/client/hud.qc:1782
#, c-format
msgid "^1%s^1 needs a restart\n"
msgstr "^1%s^1 braucht einen Neustart\n"
-#: qcsrc/client/hud.qc:2997
+#: qcsrc/client/hud.qc:1789
#, c-format
msgid "^1%s^1 needs a restart after a %d scoring spree\n"
msgstr "^1%s^1 braucht einen Neustart nach %d Punkten in Folge\n"
-#: qcsrc/client/hud.qc:2999
+#: qcsrc/client/hud.qc:1791
#, c-format
msgid "^1%s^1 died with a %d kill spree\n"
msgstr "^1%s^1 starb mit einer %d-Kill-Spree\n"
-#: qcsrc/client/hud.qc:3003
+#: qcsrc/client/hud.qc:1795
#, c-format
msgid "%s^7 got the %s\n"
msgstr "%s^7 bekam die %s\n"
-#: qcsrc/client/hud.qc:3006
+#: qcsrc/client/hud.qc:1798
#, c-format
msgid "%s^7 lost the %s\n"
msgstr "%s^7 verlor die %s\n"
-#: qcsrc/client/hud.qc:3009
+#: qcsrc/client/hud.qc:1801
#, c-format
msgid "%s^7 picked up the %s\n"
msgstr "%s^7 nahm sich die %s\n"
-#: qcsrc/client/hud.qc:3012
+#: qcsrc/client/hud.qc:1804
#, c-format
msgid "%s^7 returned the %s\n"
msgstr "%s^7 brachte die %s^7 zurück\n"
-#: qcsrc/client/hud.qc:3015
+#: qcsrc/client/hud.qc:1807
#, c-format
msgid "%s^7 captured the %s%s\n"
msgstr "%s^7 eroberte die %s%s\n"
-#: qcsrc/client/hud.qc:3034
+#: qcsrc/client/hud.qc:1826
#, c-format
msgid "%s^7 has picked up the ball!\n"
msgstr "%s^7 hat den Ball genommen!\n"
-#: qcsrc/client/hud.qc:3039
+#: qcsrc/client/hud.qc:1831
#, c-format
msgid "%s^7 has dropped the ball!\n"
msgstr "%s^7 hat den Ball verloren!\n"
-#: qcsrc/client/hud.qc:3052
+#: qcsrc/client/hud.qc:1842
#, c-format
msgid "You are now on: %s"
msgstr "Du bist jetzt im: %s"
-#: qcsrc/client/hud.qc:3054
+#: qcsrc/client/hud.qc:1844
#, c-format
msgid ""
"You have been moved into a different team to improve team balance\n"
"Du wurdest in ein anderes Team verschoben, um Team-Balance zu verbessern.\n"
"Du bist jetzt im: %s"
-#: qcsrc/client/hud.qc:3057
+#: qcsrc/client/hud.qc:1847
msgid "^1Reconsider your tactics, camper!"
msgstr "^1Ändere dein Verhalten, Camper!"
-#: qcsrc/client/hud.qc:3059
+#: qcsrc/client/hud.qc:1849
msgid "^1Die camper!"
msgstr "^1Stirb, Camper!"
-#: qcsrc/client/hud.qc:3062
+#: qcsrc/client/hud.qc:1852
msgid "^1You are reinserted into the game for running out of ammo..."
msgstr ""
"^1Du wurdest ins Spiel neu eingesetzt, weil dir die Munition ausging..."
-#: qcsrc/client/hud.qc:3064
+#: qcsrc/client/hud.qc:1854
msgid "^1You were killed for running out of ammo..."
msgstr "^1Du wurdest getötet, da dir die Munition ausging..."
-#: qcsrc/client/hud.qc:3067
+#: qcsrc/client/hud.qc:1857
msgid "^1You need to preserve your health"
msgstr "^1Du solltest deine Gesundheit erhalten"
-#: qcsrc/client/hud.qc:3069
+#: qcsrc/client/hud.qc:1859
msgid "^1You grew too old without taking your medicine"
msgstr "^1Du wurdest zu alt, und hast nicht deine Medizin genommen"
-#: qcsrc/client/hud.qc:3072
+#: qcsrc/client/hud.qc:1862
msgid "^1Don't go against team mates!"
msgstr "^1Ärgere deine Teamkollegen nicht!"
-#: qcsrc/client/hud.qc:3074
+#: qcsrc/client/hud.qc:1864
msgid "^1Don't shoot your team mates!"
msgstr "^1Schieße nicht auf deine Teamkollegen!"
-#: qcsrc/client/hud.qc:3079
+#: qcsrc/client/hud.qc:1869
msgid "^1You need to be more careful!"
msgstr "^1Sei vorsichtiger!"
-#: qcsrc/client/hud.qc:3081
+#: qcsrc/client/hud.qc:1871
msgid "^1You killed your own dumb self!"
msgstr "^1Du hast dich selbst umgebracht. Wie blöd."
-#: qcsrc/client/hud.qc:3086
+#: qcsrc/client/hud.qc:1876
#, c-format
-msgid "^1Moron! You went against %s, a team mate!"
+msgid "^1Moron! You went against ^7%s^1, a team mate!"
msgstr "^1Idiot! Du hast %s getroffen, also einen Teamkollegen von dir!"
-#: qcsrc/client/hud.qc:3088
+#: qcsrc/client/hud.qc:1878
#, c-format
-msgid "^1Moron! You fragged %s, a team mate!"
+msgid "^1Moron! You fragged ^7%s^1, a team mate!"
msgstr "^1Idiot! Du hast %s getötet, also einen Teamkollegen von dir!"
-#: qcsrc/client/hud.qc:3092
+#: qcsrc/client/hud.qc:1882
msgid "^1First score"
msgstr "^1Erster Punkt"
-#: qcsrc/client/hud.qc:3094
+#: qcsrc/client/hud.qc:1884
msgid "^1First blood"
msgstr "^1Erstes Blut"
-#: qcsrc/client/hud.qc:3098
+#: qcsrc/client/hud.qc:1888
msgid "^1First casualty"
msgstr "^1Erster Kollateralschaden"
-#: qcsrc/client/hud.qc:3100
+#: qcsrc/client/hud.qc:1890
msgid "^1First victim"
msgstr "^1Erstes Opfer"
-#: qcsrc/client/hud.qc:3104
+#: qcsrc/client/hud.qc:1894
#, c-format
msgid "^1You scored against ^7%s^1 who was typing!"
msgstr "^1Du hast gegen ^7%s^1 gepunktet, während er am Tippen war!"
-#: qcsrc/client/hud.qc:3106
+#: qcsrc/client/hud.qc:1896
#, c-format
msgid "^1You typefragged ^7%s"
msgstr "^1Du hast ^7%s^1 beim Tippen erschossen"
-#: qcsrc/client/hud.qc:3110
+#: qcsrc/client/hud.qc:1900
#, c-format
msgid "^1You were scored against by ^7%s^1 while you were typing!"
msgstr "^1Gegen dich hat ^7%s^1 gepunktet, während du am Tippen warst!"
-#: qcsrc/client/hud.qc:3112
+#: qcsrc/client/hud.qc:1902
#, c-format
msgid "^1You were typefragged by ^7%s"
msgstr "^1Du wurdest von ^7%s^1 erschossen, während du am Tippen warst"
-#: qcsrc/client/hud.qc:3116
+#: qcsrc/client/hud.qc:1906
#, c-format
msgid "^4You scored against ^7%s"
msgstr "^4Du hast gegen ^7%s^4 gepunktet"
-#: qcsrc/client/hud.qc:3118
+#: qcsrc/client/hud.qc:1908
#, c-format
msgid "^4You fragged ^7%s"
msgstr "^4Du hast ^7%s^4 getötet"
-#: qcsrc/client/hud.qc:3122
+#: qcsrc/client/hud.qc:1912
#, c-format
msgid "^1You were scored against by ^7%s"
msgstr "^1Gegen dich hat ^7%s^1 gepunktet"
-#: qcsrc/client/hud.qc:3124
+#: qcsrc/client/hud.qc:1914
#, c-format
msgid "^1You were fragged by ^7%s"
msgstr "^1Du wurdest von ^7%s^1 getötet"
-#: qcsrc/client/hud.qc:3129
+#: qcsrc/client/hud.qc:1919
msgid "^1Watch your step!"
msgstr "^1Achte, wo du hintrittst!"
-#: qcsrc/client/hud.qc:3194 qcsrc/client/hud.qc:3195
+#: qcsrc/client/hud.qc:1988 qcsrc/client/hud.qc:1989 qcsrc/client/hud.qc:2474
#, c-format
msgid "Player %d"
msgstr "Spieler %d"
-#: qcsrc/client/hud.qc:3791
+#: qcsrc/client/hud.qc:2779
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermediate 1 (+15.42)"
-#: qcsrc/client/hud.qc:3793 qcsrc/client/hud.qc:3835 qcsrc/client/hud.qc:3876
+#: qcsrc/client/hud.qc:2781 qcsrc/client/hud.qc:2823 qcsrc/client/hud.qc:2864
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1STRAFE: %.1f (%s)"
-#: qcsrc/client/hud.qc:3878
+#: qcsrc/client/hud.qc:2866
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2STRAFE: %.1f (%s)"
-#: qcsrc/client/hud.qc:3903
+#: qcsrc/client/hud.qc:2894
+msgid "^1You must answer before entering hud configure mode\n"
+msgstr "^1Du musst antworten, bevore das HUD konfiguriert werden kann\n"
+
+#: qcsrc/client/hud.qc:2897
msgid "^2Name ^7instead of \"^1Unregistered player^7\" in stats"
msgstr "^2Name^7 statt \"^1Unregistered player^7\" in den Statistiken"
-#: qcsrc/client/hud.qc:3985
+#: qcsrc/client/hud.qc:2979
msgid "A vote has been called for:"
msgstr "Eine Abstimmung wurde initiiert für:"
-#: qcsrc/client/hud.qc:3987
+#: qcsrc/client/hud.qc:2981
msgid "Allow servers to store and display your name?"
msgstr "Erlaube Servern, deinen Namen zu speichern und später zu zeigen?"
-#: qcsrc/client/hud.qc:3991
+#: qcsrc/client/hud.qc:2985
msgid "^1Configure the HUD"
msgstr "^1Das HUD konfigurieren"
-#: qcsrc/client/hud.qc:3995
+#: qcsrc/client/hud.qc:2989
#, c-format
msgid "Yes (%s): %d"
msgstr "Ja (%s): %d"
-#: qcsrc/client/hud.qc:3997
+#: qcsrc/client/hud.qc:2991
#, c-format
msgid "No (%s): %d"
msgstr "Nein (%s): %d"
-#: qcsrc/client/hud.qc:4510 qcsrc/client/hud.qc:4513 qcsrc/client/hud.qc:4515
+#: qcsrc/client/hud.qc:3494 qcsrc/client/hud.qc:3497 qcsrc/client/hud.qc:3499
msgid "Personal best"
msgstr "Persönliche Bestzeit"
-#: qcsrc/client/hud.qc:4528 qcsrc/client/hud.qc:4531 qcsrc/client/hud.qc:4533
+#: qcsrc/client/hud.qc:3512 qcsrc/client/hud.qc:3515 qcsrc/client/hud.qc:3517
msgid "Server best"
msgstr "Server-Bestzeit"
-#: qcsrc/client/hud.qc:4765
+#: qcsrc/client/hud.qc:3861
msgid "^3Player^7: This is the chat area."
msgstr "^3Player^7: Das ist der Chat-Bereich."
-#: qcsrc/client/hud.qc:4828
+#: qcsrc/client/hud.qc:3929
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:4893
+#: qcsrc/client/hud.qc:3996
msgid "^1Observing"
msgstr "^1Beobachten"
-#: qcsrc/client/hud.qc:4895
+#: qcsrc/client/hud.qc:3998
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Zuschauen bei: ^7%s"
-#: qcsrc/client/hud.qc:4899
+#: qcsrc/client/hud.qc:4002
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Drücke ^3%s^1, um bei jemandem zuzuschauen"
-#: qcsrc/client/hud.qc:4901
+#: qcsrc/client/hud.qc:4004
#, c-format
msgid "^1Press ^3%s^1 for another player"
msgstr "^1Drücke ^3%s^1 für einen anderen Spieler"
-#: qcsrc/client/hud.qc:4905
+#: qcsrc/client/hud.qc:4008
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Benutze ^3%s^1 oder ^3%s^1 zum Ändern der Geschwindigkeit"
-#: qcsrc/client/hud.qc:4907
+#: qcsrc/client/hud.qc:4010
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Drücke ^3%s^1 zum Beobachten"
-#: qcsrc/client/hud.qc:4910
+#: qcsrc/client/hud.qc:4013
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Drücke ^3%s^1 für Spielmodus-Info"
-#: qcsrc/client/hud.qc:4914
+#: qcsrc/client/hud.qc:4017
msgid "^1Wait for your turn to join"
msgstr "^1Warte, bis du dran bist"
-#: qcsrc/client/hud.qc:4920
+#: qcsrc/client/hud.qc:4023
msgid "^1Match has already begun"
msgstr "^1Das Match hat bereits begonnen"
-#: qcsrc/client/hud.qc:4922
+#: qcsrc/client/hud.qc:4025
msgid "^1You have no more lives left"
msgstr "^1Du hast keine Leben mehr übrig"
-#: qcsrc/client/hud.qc:4924 qcsrc/client/hud.qc:4927
+#: qcsrc/client/hud.qc:4027 qcsrc/client/hud.qc:4030
#, c-format
msgid "^1Press ^3%s^1 to join"
-msgstr "^1Drücke ^3%s^1 zum Eintreten"
+msgstr "^1Drücke ^3%s^1 zum Mitspielen"
-#: qcsrc/client/hud.qc:4935
+#: qcsrc/client/hud.qc:4038
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Das Spiel beginnt in ^3%d^1 Sekunden"
-#: qcsrc/client/hud.qc:4942
+#: qcsrc/client/hud.qc:4045
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Momentan in der ^1Aufwärmphase!"
-#: qcsrc/client/hud.qc:4957
+#: qcsrc/client/hud.qc:4060
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sDrücke ^3%s%s um die Aufwärmphase zu beenden"
-#: qcsrc/client/hud.qc:4959
+#: qcsrc/client/hud.qc:4062
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sDrücke ^3%s%s sobald du soweit bist"
-#: qcsrc/client/hud.qc:4964
+#: qcsrc/client/hud.qc:4067
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Warte, bis andere bereit sind, um die Aufwärmphase zu beenden"
-#: qcsrc/client/hud.qc:4966
+#: qcsrc/client/hud.qc:4069
msgid "^2Waiting for others to ready up..."
msgstr "^2Warte, bis andere bereit sind..."
-#: qcsrc/client/hud.qc:4972
+#: qcsrc/client/hud.qc:4075
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Drücke ^3%s^2 um die Aufwärmphase zu beenden"
-#: qcsrc/client/hud.qc:4993
+#: qcsrc/client/hud.qc:4096
msgid "Teamnumbers are unbalanced!"
msgstr "Die Teams sind unbalanciert!"
-#: qcsrc/client/hud.qc:4998
+#: qcsrc/client/hud.qc:4101
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Drücke ^3%s%s um dies zu korrigieren"
-#: qcsrc/client/hud.qc:5006
+#: qcsrc/client/hud.qc:4109
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Drücke ^3ESC^7 um die HUD-Optionen zu zeigen"
-#: qcsrc/client/hud.qc:5008
+#: qcsrc/client/hud.qc:4111
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Doppelklick^7 auf ein Panel für Panel-spezifische Optionen."
-#: qcsrc/client/hud.qc:5010
+#: qcsrc/client/hud.qc:4113
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL^7 um Kollisionstests zu deaktivieren, ^3SHIFT^7 und"
-#: qcsrc/client/hud.qc:5012
+#: qcsrc/client/hud.qc:4115
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT^7 + ^3PFEILTASTEN^7 für Feinjustierungen"
-#: qcsrc/client/hud.qc:5037
+#: qcsrc/client/hud.qc:4153
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:5041
+#: qcsrc/client/hud.qc:4157
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:5045
+#: qcsrc/client/hud.qc:4161
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:5049
+#: qcsrc/client/hud.qc:4165
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:5053
+#: qcsrc/client/hud.qc:4169
msgid " knots"
msgstr "Knoten"
+#: qcsrc/client/hud.qc:4814
+msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"
+msgstr "Falsche Panel-Nummern in _hud_panelorder wurden automatisch behoben"
+
+#: qcsrc/client/hud_config.qc:136
+#, c-format
+msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
+msgstr ""
+"^2Erfolgreich als %s exportiert! (Hinweis: die Datei wurde in data/data/ "
+"abgelegt)\n"
+
+#: qcsrc/client/hud_config.qc:140
+#, c-format
+msgid "^1Couldn't write to %s\n"
+msgstr "^1Konnte nicht nach %s schreiben\n"
+
#: qcsrc/client/mapvoting.qc:28
msgid " (1 vote)"
msgstr "(1 Stimme)"
msgid "Vote for a map"
msgstr "Wähle eine Map"
-#: qcsrc/client/mapvoting.qc:199
+#: qcsrc/client/mapvoting.qc:200
#, c-format
msgid "%d seconds left"
msgstr "%d Sekunden übrig"
msgid "Trying to remove a team which is not in the teamlist!"
msgstr "Versuchte, ein Team zu löschen, das nicht in der Teamliste ist!"
+#: qcsrc/client/movetypes.qc:163
+#, c-format
+msgid "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"
+msgstr ""
+"Kann ein Objekt nicht befreien (edict: %d, classname: %s, origin: %s)\n"
+
+#: qcsrc/client/movetypes.qc:166
+#, c-format
+msgid "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"
+msgstr ""
+"Ein Objekt wurde erfolgreich befreit (edict: %d, classname: %s, origin: %s)\n"
+
#: qcsrc/client/scoreboard.qc:19
msgid "SCO^bckills"
msgstr "BC getötet"
msgid "N/A"
msgstr "-"
-#: qcsrc/client/scoreboard.qc:951
+#: qcsrc/client/scoreboard.qc:950
#, c-format
msgid "Accuracy stats (average %d%%)"
msgstr "Genauigkeit (Durchschn.: %d%%)"
-#: qcsrc/client/scoreboard.qc:1016
+#: qcsrc/client/scoreboard.qc:1015
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: qcsrc/client/scoreboard.qc:1076
+#: qcsrc/client/scoreboard.qc:1075
msgid "Rankings"
msgstr "Platzierungen"
-#: qcsrc/client/scoreboard.qc:1167 qcsrc/client/scoreboard.qc:1169
+#: qcsrc/client/scoreboard.qc:1170
msgid "Scoreboard"
msgstr "Tabelle"
-#: qcsrc/client/scoreboard.qc:1210
+#: qcsrc/client/scoreboard.qc:1215
#, c-format
msgid "Speed award: %d ^7(%s^7)"
msgstr "Höchstgeschwindigkeit: %d ^7(%s^7)"
-#: qcsrc/client/scoreboard.qc:1214
+#: qcsrc/client/scoreboard.qc:1219
#, c-format
msgid "All-time fastest: %d ^7(%s^7)"
msgstr "Rekord: %d ^7(%s^7)"
-#: qcsrc/client/scoreboard.qc:1241 qcsrc/client/teamplay.qc:55
+#: qcsrc/client/scoreboard.qc:1246 qcsrc/client/teamplay.qc:63
msgid "Spectators"
msgstr "Zuschauer"
-#: qcsrc/client/scoreboard.qc:1248
+#: qcsrc/client/scoreboard.qc:1252
#, c-format
msgid "playing on ^2%s^7"
msgstr "es wird auf ^2%s^7 gespielt"
-#: qcsrc/client/scoreboard.qc:1255 qcsrc/client/scoreboard.qc:1260
+#: qcsrc/client/scoreboard.qc:1259 qcsrc/client/scoreboard.qc:1264
#, c-format
msgid " for up to ^1%1.0f minutes^7"
msgstr " für bis zu ^1%.1f Minuten^7"
-#: qcsrc/client/scoreboard.qc:1264 qcsrc/client/scoreboard.qc:1283
+#: qcsrc/client/scoreboard.qc:1268 qcsrc/client/scoreboard.qc:1287
msgid " or"
msgstr " oder"
-#: qcsrc/client/scoreboard.qc:1267 qcsrc/client/scoreboard.qc:1274
+#: qcsrc/client/scoreboard.qc:1271 qcsrc/client/scoreboard.qc:1278
#, c-format
msgid " until ^3%s %s^7"
msgstr " bis ^3%s %s^7"
-#: qcsrc/client/scoreboard.qc:1268 qcsrc/client/scoreboard.qc:1275
-#: qcsrc/client/scoreboard.qc:1287 qcsrc/client/scoreboard.qc:1294
+#: qcsrc/client/scoreboard.qc:1272 qcsrc/client/scoreboard.qc:1279
+#: qcsrc/client/scoreboard.qc:1291 qcsrc/client/scoreboard.qc:1298
msgid "SCO^points"
msgstr "Punkte"
-#: qcsrc/client/scoreboard.qc:1269 qcsrc/client/scoreboard.qc:1276
-#: qcsrc/client/scoreboard.qc:1288 qcsrc/client/scoreboard.qc:1295
+#: qcsrc/client/scoreboard.qc:1273 qcsrc/client/scoreboard.qc:1280
+#: qcsrc/client/scoreboard.qc:1292 qcsrc/client/scoreboard.qc:1299
msgid "SCO^is beaten"
msgstr "geschlagen wird"
-#: qcsrc/client/scoreboard.qc:1286 qcsrc/client/scoreboard.qc:1293
+#: qcsrc/client/scoreboard.qc:1290 qcsrc/client/scoreboard.qc:1297
#, c-format
msgid " until a lead of ^3%s %s^7"
msgstr " bis zu einem Vorsprung von ^3%s %s^7"
msgid "Cannot initialize sound %s\n"
msgstr "Kann Sound %s nicht initialisieren\n"
-#: qcsrc/client/teamplay.qc:56
+#: qcsrc/client/teamplay.qc:64
msgid "Red Team"
msgstr "Rotes Team"
-#: qcsrc/client/teamplay.qc:57
+#: qcsrc/client/teamplay.qc:65
msgid "Blue Team"
msgstr "Blaues Team"
-#: qcsrc/client/teamplay.qc:58
+#: qcsrc/client/teamplay.qc:66
msgid "Yellow Team"
msgstr "Gelbes Team"
-#: qcsrc/client/teamplay.qc:59
+#: qcsrc/client/teamplay.qc:67
msgid "Pink Team"
msgstr "Pinkes Team"
-#: qcsrc/server/w_crylink.qc:2
+#: qcsrc/client/waypointsprites.qc:254
+msgid "Push"
+msgstr "Drücken"
+
+#: qcsrc/client/waypointsprites.qc:255
+msgid "Destroy"
+msgstr "Zerstören"
+
+#: qcsrc/client/waypointsprites.qc:256
+msgid "Defend"
+msgstr "Verteidigen"
+
+#: qcsrc/client/waypointsprites.qc:257
+msgid "Blue base"
+msgstr "Blaue Basis"
+
+#: qcsrc/client/waypointsprites.qc:258
+msgid "DANGER"
+msgstr "GEFAHR"
+
+#: qcsrc/client/waypointsprites.qc:259
+msgid "Flag carrier"
+msgstr "Flaggenträger"
+
+#: qcsrc/client/waypointsprites.qc:260
+msgid "Dropped flag"
+msgstr "Flagge"
+
+#: qcsrc/client/waypointsprites.qc:261
+msgid "Help me!"
+msgstr "Hilfe!"
+
+#: qcsrc/client/waypointsprites.qc:262
+msgid "Here"
+msgstr "Hier"
+
+#: qcsrc/client/waypointsprites.qc:263
+msgid "Dropped key"
+msgstr "Schlüssel"
+
+#: qcsrc/client/waypointsprites.qc:264 qcsrc/client/waypointsprites.qc:266
+#: qcsrc/client/waypointsprites.qc:267 qcsrc/client/waypointsprites.qc:268
+#: qcsrc/client/waypointsprites.qc:269
+msgid "Key carrier"
+msgstr "Schlüsselträger"
+
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Run here"
+msgstr "Hier her!"
+
+#: qcsrc/client/waypointsprites.qc:270
+msgid "Red base"
+msgstr "Rote Basis"
+
+#: qcsrc/client/waypointsprites.qc:271
+msgid "Waypoint"
+msgstr "Wegpunkt"
+
+#: qcsrc/client/waypointsprites.qc:272 qcsrc/client/waypointsprites.qc:273
+#: qcsrc/client/waypointsprites.qc:274
+msgid "Generator"
+msgstr "Generator"
+
+#: qcsrc/client/waypointsprites.qc:275 qcsrc/client/waypointsprites.qc:276
+#: qcsrc/client/waypointsprites.qc:277 qcsrc/client/waypointsprites.qc:278
+#: qcsrc/client/waypointsprites.qc:279 qcsrc/client/waypointsprites.qc:280
+#: qcsrc/client/waypointsprites.qc:281 qcsrc/client/waypointsprites.qc:282
+#: qcsrc/client/waypointsprites.qc:306 qcsrc/client/waypointsprites.qc:307
+#: qcsrc/client/waypointsprites.qc:308 qcsrc/client/waypointsprites.qc:309
+#: qcsrc/client/waypointsprites.qc:310
+msgid "Control point"
+msgstr "Kontrollpunkt"
+
+#: qcsrc/client/waypointsprites.qc:283
+msgid "Checkpoint"
+msgstr "Checkpoint"
+
+#: qcsrc/client/waypointsprites.qc:284 qcsrc/client/waypointsprites.qc:286
+msgid "Finish"
+msgstr "Ziel"
+
+#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:286
+msgid "Start"
+msgstr "Start"
+
+#: qcsrc/client/waypointsprites.qc:287 qcsrc/client/waypointsprites.qc:288
+msgid "Ball"
+msgstr "Ball"
+
+#: qcsrc/client/waypointsprites.qc:289
+msgid "Ball carrier"
+msgstr "Ballbesitzer"
+
+#: qcsrc/client/waypointsprites.qc:290 qcsrc/server/w_laser.qc:2
+msgid "Laser"
+msgstr "Laser"
+
+#: qcsrc/client/waypointsprites.qc:291 qcsrc/server/w_shotgun.qc:2
+msgid "Shotgun"
+msgstr "Shotgun"
+
+#: qcsrc/client/waypointsprites.qc:292 qcsrc/server/w_uzi.qc:2
+msgid "Machine Gun"
+msgstr "Machine Gun"
+
+#: qcsrc/client/waypointsprites.qc:293 qcsrc/server/w_grenadelauncher.qc:2
+msgid "Mortar"
+msgstr "Mortar"
+
+#: qcsrc/client/waypointsprites.qc:294 qcsrc/server/w_electro.qc:2
+msgid "Electro"
+msgstr "Electro"
+
+#: qcsrc/client/waypointsprites.qc:295 qcsrc/server/w_crylink.qc:2
msgid "Crylink"
msgstr "Crylink"
+#: qcsrc/client/waypointsprites.qc:296 qcsrc/server/w_nex.qc:2
+msgid "Nex"
+msgstr "Nex"
+
+#: qcsrc/client/waypointsprites.qc:297 qcsrc/server/w_hagar.qc:2
+msgid "Hagar"
+msgstr "Hagar"
+
+#: qcsrc/client/waypointsprites.qc:298 qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
+msgstr "Rocket Launcher"
+
+#: qcsrc/client/waypointsprites.qc:299 qcsrc/server/w_porto.qc:2
+msgid "Port-O-Launch"
+msgstr "Port-O-Launch"
+
+#: qcsrc/client/waypointsprites.qc:300
+msgid "Minstanex"
+msgstr "MinstaNex"
+
+#: qcsrc/client/waypointsprites.qc:301
+msgid "Hook"
+msgstr "Hook"
+
+#: qcsrc/client/waypointsprites.qc:302 qcsrc/server/w_fireball.qc:2
+msgid "Fireball"
+msgstr "Fireball"
+
+#: qcsrc/client/waypointsprites.qc:303
+msgid "HLAC"
+msgstr "HLAC"
+
+#: qcsrc/client/waypointsprites.qc:304 qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr "Gewehr"
+
+#: qcsrc/client/waypointsprites.qc:305 qcsrc/server/w_minelayer.qc:2
+msgid "Mine Layer"
+msgstr "Mine Layer"
+
+#: qcsrc/client/waypointsprites.qc:311
+msgid "Invisibility"
+msgstr "Unsichtbarkeit"
+
+#: qcsrc/client/waypointsprites.qc:312
+msgid "Extra life"
+msgstr "Extraleben"
+
+#: qcsrc/client/waypointsprites.qc:313
+msgid "Speed"
+msgstr "Geschwindigkeit"
+
+#: qcsrc/client/waypointsprites.qc:314
+msgid "Strength"
+msgstr "Stärke"
+
+#: qcsrc/client/waypointsprites.qc:315
+msgid "Shield"
+msgstr "Schutzschild"
+
+#: qcsrc/client/waypointsprites.qc:316
+msgid "Fuel regen"
+msgstr "Treibstoff-Regeneration"
+
+#: qcsrc/client/waypointsprites.qc:317
+msgid "Jet Pack"
+msgstr "Jetpack"
+
+#: qcsrc/client/waypointsprites.qc:318
+msgid "Frozen!"
+msgstr "Eingefroren!"
+
+#: qcsrc/client/waypointsprites.qc:319
+msgid "Tagged"
+msgstr "Getaggt!"
+
+#: qcsrc/client/waypointsprites.qc:320
+msgid "Vehicle"
+msgstr "Fahrzeug"
+
+#: qcsrc/client/waypointsprites.qc:590
+msgid "Spam"
+msgstr "Frühstücksfleisch"
+
+#: qcsrc/client/waypointsprites.qc:594
+#, c-format
+msgid "%s needing help!"
+msgstr "%s braucht Hilfe!"
+
#: qcsrc/server/w_crylink.qc:664
#, c-format
msgid "%s succeeded at self-destructing themself with the Crylink"
msgid "%s took a close look at %s's Crylink"
msgstr "%s schaute sich %ss Crylink sehr genau an"
-#: qcsrc/server/w_electro.qc:2
-msgid "Electro"
-msgstr "Electro"
-
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s vergaß, wo er das Plasma hingetan hatte"
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s spielte mit Plasma"
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s hat gerade %ss blaue Kugel bemerkt"
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s kam mit %ss blauer Kugel in Kontakt"
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s hat gespürt, wie %ss Combo die Luft elektrisierte"
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s kam zu nah an %ss blauen Strahl"
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s wurde von %ss blauen Strahl erwischt"
-#: qcsrc/server/w_fireball.qc:2
-msgid "Fireball"
-msgstr "Fireball"
-
#: qcsrc/server/w_fireball.qc:417
#, c-format
msgid "%s forgot about some firemine"
msgid "%s tasted %s's fireball"
msgstr "%s hat von %ss Feuerball probiert"
-#: qcsrc/server/w_grenadelauncher.qc:2
-msgid "Mortar"
-msgstr "Mortar"
-
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s wollte wissen, ob seine Granate funktioniert"
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s verfing sich in der eigenen Detonation"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s hat %ss Granate nicht gesehen"
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s ist fast %ss Granate ausgewichen"
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s nahm %ss Granate in den Mund"
-#: qcsrc/server/w_hagar.qc:2
-msgid "Hagar"
-msgstr "Hagar"
-
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s hat mit kleinen Raketen gespielt"
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s hat gehofft, dass %ss Raketen nicht von Wänden abprallen"
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "^1%s^1 wurde von %s^1 erwischt"
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s hat das Unmögliche geschafft"
msgid "%s has run into %s's gravity bomb"
msgstr "%s ist in %ss Gravitationsbombe reingelaufen"
-#: qcsrc/server/w_laser.qc:2
-msgid "Laser"
-msgstr "Laser"
-
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr "%s hat sich in die Hölle gelasert"
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr "%s ist von %ss Gauntlet halbiert worden"
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr "^1%s^1 wurde von %s^1 zu Tode gelasert"
-#: qcsrc/server/w_minelayer.qc:2
-msgid "Mine Layer"
-msgstr "Mine Layer"
-
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s ist explodiert"
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr "%s ist %ss Mine zu nahe getreten"
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr "%s ist fast %ss Mine ausgewichen"
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr "%s ist auf %ss Mine gelatscht"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:215 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr "%s kann jetzt mit Portalen denken"
+
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "^1%s^1 wurde von %s^1 vernichtet"
-#: qcsrc/server/w_nex.qc:2
-msgid "Nex"
-msgstr "Nex"
-
-#: qcsrc/server/w_porto.qc:2
-msgid "Port-O-Launch"
-msgstr "Port-O-Launch"
-
#: qcsrc/server/w_porto.qc:298
#, c-format
msgid "%s felt %s doing the impossible to him"
msgstr "%s hat gespürt, wie %s das Unmögliche für ihn getan hat"
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
-msgstr "Rocket Launcher"
+#: qcsrc/server/w_rifle.qc:233
+#, c-format
+msgid "%s shot themself automatically"
+msgstr "%s hat sich vollautomatisch selbst erschossen"
+
+#: qcsrc/server/w_rifle.qc:235
+#, c-format
+msgid "%s sniped themself somehow"
+msgstr "%s hat so scharf geschossen, dass er sich selbst getroffen hat"
+
+#: qcsrc/server/w_rifle.qc:242
+#, c-format
+msgid "%s failed to hide from %s's bullet hail"
+msgstr "%s hat es nicht geschafft, sich vor %ss Kugelhagel zu verstecken"
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
+msgstr "%s ist in %ss Kugelhagel gefallen"
+
+#: qcsrc/server/w_rifle.qc:251
+#, c-format
+msgid "%s failed to hide from %s's rifle"
+msgstr "%s hat es nicht geschafft, sich vor %ss Gewehr zu verstecken"
+
+#: qcsrc/server/w_rifle.qc:256
+#, c-format
+msgid "%s got hit in the head by %s"
+msgstr "%s hat ein Loch im Kopf bekommen; schuld war %s"
+
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
+msgstr "^1%s^1 wurde von %s^1 erledigt"
+
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
msgid "%s got too close to %s's rocket"
msgstr "%s ist %ss Rakete zu nahe getreten"
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
msgid "%s almost dodged %s's rocket"
msgstr "%s ist fast %ss Rakete ausgewichen"
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
msgid "%s ate %s's rocket"
msgstr "%s hat %ss Rakete in den Mund genommen"
msgid "%s was tagged by %s"
msgstr "^1%s^1 wurde von %s^1 getagged"
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
-msgstr "Shotgun"
-
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_shotgun.qc:219
#, c-format
msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr "%2$1s ^7hat %1$s ^7ein wenig mit einer großen Schrotflinte geschlagen"
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_shotgun.qc:221
#, c-format
msgid "%s was gunned by %s"
msgstr "^1%s^1 wurde von %s^1 erschossen"
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s hat sich vollautomatisch selbst erschossen"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s hat so scharf geschossen, dass er sich selbst getroffen hat"
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s hat es nicht geschafft, sich vor %ss Kugelhagel zu verstecken"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s ist in %ss Kugelhagel gefallen"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s hat es nicht geschafft, sich vor %ss Gewehr zu verstecken"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s hat ein Loch im Kopf bekommen; schuld war %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "^1%s^1 wurde von %s^1 erledigt"
-
#: qcsrc/server/w_tuba.qc:2
#, c-format
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr ""
"%s haben die Ohren geschmerzt von seinem eigenen Spiel auf der @!#%%'n Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr ""
"%s ist an seinen Ohrenschmerzen, die von %ss großartigem Spiel auf der @!#"
"%%'n Tuba stammten, gestorben"
-#: qcsrc/server/w_uzi.qc:2
-msgid "Machine Gun"
-msgstr "Machine Gun"
-
#: qcsrc/server/w_uzi.qc:323
#, c-format
msgid "%s was riddled full of holes by %s"
--- /dev/null
+# Xonotic CSQC\r
+# Copyright (C) 2011 Team Xonotic\r
+# This file is distributed under the same license as the Xonotic package.\r
+# Felice Sallustio <fel.sallustio@gmail.com>, 2011.\r
+# Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011.\r
+#\r
+msgid ""\r
+msgstr ""\r
+"Project-Id-Version: 0.1preview\n"\r
+"Report-Msgid-Bugs-To: \n"\r
+"POT-Creation-Date: 2011-08-19 16:25+0200\n"\r
+"PO-Revision-Date: 2011-08-19 17:20+0100\n"\r
+"Last-Translator: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"\r
+"Language-Team: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"\r
+"MIME-Version: 1.0\n"\r
+"Content-Type: text/plain; charset=UTF-8\n"\r
+"Content-Transfer-Encoding: 8bit\n"\r
+"Language: it\n"\r
+"X-Poedit-Language: Italian\n"\r
+\r
+#: qcsrc/client/Main.qc:30\r
+msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"\r
+msgstr "ERRORE - IL MENU E' VISIBILE MA NESSUN MENU E' STATO DEFINITO!"\r
+\r
+#: qcsrc/client/Main.qc:56\r
+msgid ""\r
+"^3Your engine build is outdated\n"\r
+"^3This Server uses a newer QC VM. Please update!\n"\r
+msgstr ""\r
+"^3La tua versione del motore logico è vecchia\n"\r
+"^3Questo server usa un nuovo QC VM. Per favore aggiornalo!\n"\r
+\r
+#: qcsrc/client/Main.qc:66\r
+#, c-format\r
+msgid "^4CSQC Build information: ^1%s\n"\r
+msgstr "^4Informazioni sulla build CSQC: ^1%s\n"\r
+\r
+#: qcsrc/client/Main.qc:237 qcsrc/client/Main.qc:253\r
+#, c-format\r
+msgid "trying to switch to unsupported team %d\n"\r
+msgstr "tentando di passare al team non supportato %d\n"\r
+\r
+#: qcsrc/client/Main.qc:369 qcsrc/client/scoreboard.qc:241\r
+msgid "Usage:\n"\r
+msgstr "Uso:\n"\r
+\r
+#: qcsrc/client/Main.qc:370\r
+msgid "hud_save configname (saves to hud_skinname_configname.cfg)\n"\r
+msgstr "hud_save configname (salva in hud_skinname_configname.cfg)\n"\r
+\r
+#: qcsrc/client/Main.qc:494\r
+msgid "Usage: cl_cmd COMMAND..., where possible commands are:\n"\r
+msgstr "Uso: cl_cmd COMANDO..., dove i possibili comandi sono:\n"\r
+\r
+#: qcsrc/client/Main.qc:495\r
+msgid " settemp cvar value\n"\r
+msgstr " settemp cvar value\n"\r
+\r
+#: qcsrc/client/Main.qc:496\r
+msgid " scoreboard_columns_set ...\n"\r
+msgstr " scoreboard_columns_set ...\n"\r
+\r
+#: qcsrc/client/Main.qc:497\r
+msgid " scoreboard_columns_help\n"\r
+msgstr " scoreboard_columns_help\n"\r
+\r
+#: qcsrc/client/Main.qc:726\r
+#, c-format\r
+msgid "A CSQC entity changed its owner! (edict: %d, classname: %s)\n"\r
+msgstr ""\r
+"Un'entity CSQC ha cambiato il suo proprietario! (edict: %d, classname: %s)\n"\r
+\r
+#: qcsrc/client/Main.qc:964\r
+#, c-format\r
+msgid "A CSQC entity changed its type! (edict: %d, classname: %s)\n"\r
+msgstr "Un'entity CSQC ha cambiato il suo tipo! (edict: %d, classname: %s)\n"\r
+\r
+#: qcsrc/client/Main.qc:1005\r
+#, c-format\r
+msgid ""\r
+"Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %"\r
+"s)\n"\r
+msgstr ""\r
+"Tipo di entity sconosciuta in CSQC_Ent_Update (enttype: %d, edict: %d, "\r
+"classname: %s)\n"\r
+\r
+#: qcsrc/client/Main.qc:1461\r
+#, c-format\r
+msgid "%s (not bound)"\r
+msgstr "%s (nessun tasto)"\r
+\r
+#: qcsrc/client/Main.qc:1466 qcsrc/client/hud.qc:230\r
+#, c-format\r
+msgid "%s (%s)"\r
+msgstr "%s (%s)"\r
+\r
+#: qcsrc/client/ctf.qc:35\r
+msgid "----- Order Menu -----"\r
+msgstr "----- Menu degli ordini -----"\r
+\r
+#: qcsrc/client/ctf.qc:36\r
+#, c-format\r
+msgid "Order: %s"\r
+msgstr "Ordine: %s"\r
+\r
+#: qcsrc/client/ctf.qc:37\r
+msgid "1) ^3previous page"\r
+msgstr "1) ^3pagina precedente"\r
+\r
+#: qcsrc/client/ctf.qc:38\r
+msgid "2) ^3next page"\r
+msgstr "2) ^3pagina successiva"\r
+\r
+#: qcsrc/client/ctf.qc:55 qcsrc/client/ctf.qc:161\r
+msgid "ESC) Exit Menu"\r
+msgstr "ESC) Esci dal menu"\r
+\r
+#: qcsrc/client/ctf.qc:126\r
+#, c-format\r
+msgid "Couldn't find player %d\n"\r
+msgstr "Impossibile trovare il giocatore %d\n"\r
+\r
+#: qcsrc/client/ctf.qc:154\r
+msgid "----- Command Menu -----"\r
+msgstr "----- Menu dei comandi -----"\r
+\r
+#: qcsrc/client/ctf.qc:155\r
+msgid "Issue orders:"\r
+msgstr "Impartisci ordini:"\r
+\r
+#: qcsrc/client/ctf.qc:156\r
+msgid " 1) Attack"\r
+msgstr " 1) Attacca"\r
+\r
+#: qcsrc/client/ctf.qc:158\r
+msgid " 2) Defend"\r
+msgstr " 2) Difendi"\r
+\r
+#: qcsrc/client/ctf.qc:160\r
+msgid "3) Resign from command."\r
+msgstr "3) Dimettiti dal commando."\r
+\r
+#: qcsrc/client/ctf.qc:212\r
+msgid "You're commander!"\r
+msgstr "Sei il comandante!"\r
+\r
+#: qcsrc/client/ctf.qc:215\r
+msgid "Awaiting orders..."\r
+msgstr "Attendendo ordini..."\r
+\r
+#: qcsrc/client/hud.qc:160\r
+msgid "1st"\r
+msgstr "1°"\r
+\r
+#: qcsrc/client/hud.qc:162\r
+msgid "2nd"\r
+msgstr "2°"\r
+\r
+#: qcsrc/client/hud.qc:164\r
+msgid "3rd"\r
+msgstr "3°"\r
+\r
+#: qcsrc/client/hud.qc:166\r
+#, c-format\r
+msgid "%dth"\r
+msgstr "%d°"\r
+\r
+#: qcsrc/client/hud.qc:198\r
+#, c-format\r
+msgid " (-%dL)"\r
+msgstr " (-%dG)"\r
+\r
+#: qcsrc/client/hud.qc:203\r
+#, c-format\r
+msgid " (+%dL)"\r
+msgstr " (+%dG)"\r
+\r
+#: qcsrc/client/hud.qc:219\r
+msgid "Start line"\r
+msgstr "Linea di partenza"\r
+\r
+#: qcsrc/client/hud.qc:221 qcsrc/client/hud.qc:225\r
+msgid "Finish line"\r
+msgstr "Linea d'arrivo"\r
+\r
+#: qcsrc/client/hud.qc:223\r
+#, c-format\r
+msgid "Intermediate %d"\r
+msgstr "Intermedio %d"\r
+\r
+#: qcsrc/client/hud.qc:232\r
+#, c-format\r
+msgid "%s (%s %s)"\r
+msgstr "%s (%s %s)"\r
+\r
+#: qcsrc/client/hud.qc:735\r
+msgid "Out of ammo"\r
+msgstr "Scarica"\r
+\r
+#: qcsrc/client/hud.qc:739\r
+msgid "Don't have"\r
+msgstr "Mancante"\r
+\r
+#: qcsrc/client/hud.qc:743\r
+msgid "Unavailable"\r
+msgstr "Non disponibile"\r
+\r
+#: qcsrc/client/hud.qc:1476\r
+#, c-format\r
+msgid "^1%s^1 couldn't take it anymore\n"\r
+msgstr "^1%s^1 non ne poteva più\n"\r
+\r
+#: qcsrc/client/hud.qc:1480 qcsrc/client/hud.qc:1784\r
+#, c-format\r
+msgid "^1%s^1 died\n"\r
+msgstr "^1%s^1 è morto\n"\r
+\r
+#: qcsrc/client/hud.qc:1484\r
+#, c-format\r
+msgid "^7%s^7 committed suicide. What's the point of living without ammo?\n"\r
+msgstr ""\r
+"^7%s^7 ha commesso suicidio. Qual'è il motivo di vivere senza munizioni?\n"\r
+\r
+#: qcsrc/client/hud.qc:1488\r
+#, c-format\r
+msgid "^1%s^1 thought they found a nice camping ground\n"\r
+msgstr "^1%s^1 pensava di trovare un bel campeggio\n"\r
+\r
+#: qcsrc/client/hud.qc:1492\r
+#, c-format\r
+msgid "^1%s^1 didn't become friends with the Lord of Teamplay\n"\r
+msgstr "^1%s^1 non è diventato amico del Signore del Teamplay\n"\r
+\r
+#: qcsrc/client/hud.qc:1496\r
+#, c-format\r
+msgid "^1%s^1 unfairly eliminated themself\n"\r
+msgstr "^1%s^1 si è eliminato ingiustamente\n"\r
+\r
+#: qcsrc/client/hud.qc:1500\r
+#, c-format\r
+msgid "^1%s^1 burned to death\n"\r
+msgstr "^1%s^1 è morto bruciato\n"\r
+\r
+#: qcsrc/client/hud.qc:1504\r
+#, c-format\r
+msgid "^1%s^1 couldn't resist the urge to self-destruct\n"\r
+msgstr "^1%s^1 non ha resistito allo stimolo di autodistruggersi\n"\r
+\r
+#: qcsrc/client/hud.qc:1508\r
+#, c-format\r
+msgid "^1%s^1 ended it all after a %d kill spree\n"\r
+msgstr "^1%s^1 l'ha fatta finita con una serie di %d uccisioni\n"\r
+\r
+#: qcsrc/client/hud.qc:1525\r
+#, c-format\r
+msgid "^1%s^1 took action against a team mate\n"\r
+msgstr "^1%s^1 ha agito contro un compagno di squadra\n"\r
+\r
+#: qcsrc/client/hud.qc:1527\r
+#, c-format\r
+msgid "^1%s^1 mows down a team mate\n"\r
+msgstr "^1%s^1 ha falciato un compagno di squadra\n"\r
+\r
+#: qcsrc/client/hud.qc:1532\r
+#, c-format\r
+msgid "^1%s^1 ended a %d scoring spree by going against a team mate\n"\r
+msgstr ""\r
+"^1%s^1 ha concluso una serie di %d punti per esser andato contro un compagno "\r
+"di squadra\n"\r
+\r
+#: qcsrc/client/hud.qc:1534\r
+#, c-format\r
+msgid "^1%s^1 ended a %d kill spree by killing a team mate\n"\r
+msgstr ""\r
+"^1%s^1 ha concluso una serie di %d uccisioni per aver ammazzato un compagno "\r
+"di squadra\n"\r
+\r
+#: qcsrc/client/hud.qc:1538\r
+#, c-format\r
+msgid "^1%s^1's %s scoring spree was ended by a team mate!\n"\r
+msgstr ""\r
+"^1La serie di ^1%s^1 di ^1%s^1 punti è stata conclusa da un compagno di "\r
+"squadra!\n"\r
+\r
+#: qcsrc/client/hud.qc:1540\r
+#, c-format\r
+msgid "^1%s^1's %s kill spree was ended by a team mate!\n"\r
+msgstr ""\r
+"^1La serie di ^1%s ^1di ^1%s ^1uccisioni è stata conclusa da un compagno di "\r
+"squadra!\n"\r
+\r
+#: qcsrc/client/hud.qc:1544\r
+#, c-format\r
+msgid "^1%s^1 drew first blood\n"\r
+msgstr "^1%s^1 ha tratto la prima uccisione\n"\r
+\r
+#: qcsrc/client/hud.qc:1548\r
+#, c-format\r
+msgid "^1%s^1 tried to occupy %s^1's teleport destination space\n"\r
+msgstr ""\r
+"^1%s^1 ha provato a occupare lo spazio di destinazione della teleporta di %"\r
+"s\n"\r
+\r
+#: qcsrc/client/hud.qc:1550\r
+#, c-format\r
+msgid "^1%s^1 was telefragged by %s\n"\r
+msgstr "^1%s^1 è stato telefraggato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1555\r
+#, c-format\r
+msgid "^1%s^1 was drowned by %s\n"\r
+msgstr "^1%s^1 è stato annegato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1560\r
+#, c-format\r
+msgid "^1%s^1 was slimed by %s\n"\r
+msgstr "^1%s^1 è stato coperto di melma da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1565\r
+#, c-format\r
+msgid "^1%s^1 was cooked by %s\n"\r
+msgstr "^1%s^1 è stato cucinato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1570\r
+#, c-format\r
+msgid "^1%s^1 was grounded by %s\n"\r
+msgstr "^1%s^1 è stato messo a terra da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1575\r
+#, c-format\r
+msgid "^1%s^1 was shot into space by %s\n"\r
+msgstr "^1%s^1 è stato buttato nello spazio da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1580\r
+#, c-format\r
+msgid "^1%s^1 was conserved by %s\n"\r
+msgstr "^1%s^1 è stato conservato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1586\r
+#, c-format\r
+msgid "^1%s^1 was thrown into a world of hurt by %s\n"\r
+msgstr "^1%s^1 è stato lanciato in un mondo di dolore da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1590\r
+#, c-format\r
+msgid "^1%s^1 was crushed by %s\n"\r
+msgstr "^1%s^1 è stato schiacciato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1594\r
+#, c-format\r
+msgid "^1%s^1 got shredded by %s\n"\r
+msgstr "^1%s^1 è stato triturato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1598\r
+#, c-format\r
+msgid "^1%s^1 was blasted to bits by %s\n"\r
+msgstr "^1%s^1 è stato disintegrato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1602\r
+#, c-format\r
+msgid "^1%s^1 got caught in the destruction of %s^1's vehicle\n"\r
+msgstr "^1%s^1 è caduto nella distruzione del veicolo di %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1606\r
+#, c-format\r
+msgid "^1%s^1 was bolted down by %s\n"\r
+msgstr "^1%s^1 è stato imbullonato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1610\r
+#, c-format\r
+msgid "^1%s^1 could find no shelter from %s^1's rockets\n"\r
+msgstr "^1%s^1 non ha trovato riparo dai razzi di %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1614\r
+#, c-format\r
+msgid "^1%s^1 dies when %s^1's wakizashi dies.\n"\r
+msgstr "^1%s^1 muore mentre il wakizashi di %s^1 muore.\n"\r
+\r
+#: qcsrc/client/hud.qc:1618\r
+#, c-format\r
+msgid "^1%s^1 nailed to hell by %s\n"\r
+msgstr "^1%s^1 è stato inchiodato all'inferno da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1622\r
+#, c-format\r
+msgid "^1%s^1 cluster crushed by %s\n"\r
+msgstr "^1L'ammasso di ^1%s^1 è stato schiacciato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1626\r
+#, c-format\r
+msgid "^1%s^1 dies when %s^1's raptor dies.\n"\r
+msgstr "^1%s^1 muore mentre il raptor di %s^1 muore.\n"\r
+\r
+#: qcsrc/client/hud.qc:1630\r
+#, c-format\r
+msgid "^1%s^1 was pushed into the line of fire by %s\n"\r
+msgstr "^1%s^1 è stato spinto nella linea di fuoco da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1634\r
+#, c-format\r
+msgid "^1%s^1 was pushed into an accident by %s\n"\r
+msgstr "^1%s^1 è stato spinto in un incidente da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1638\r
+#, c-format\r
+msgid "^1%s^1 was unfairly eliminated by %s\n"\r
+msgstr "^1%s^1 è stato ingiustamente eliminato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1642\r
+#, c-format\r
+msgid "^1%s^1 was burnt to death by %s\n"\r
+msgstr "^1%s^1 è stato bruciato a morte da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1654\r
+#, c-format\r
+msgid "^1%s^1 was fragged by %s\n"\r
+msgstr "^1%s^1 è stato fraggato da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1659\r
+#, c-format\r
+msgid "^1%s^1's %s scoring spree was ended by %s\n"\r
+msgstr "^1La serie di ^1%s ^1di ^1%s^1 punti è stata conclusa da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1661\r
+#, c-format\r
+msgid "^1%s^1's %s kill spree was ended by %s\n"\r
+msgstr "^1La serie di %s^1 di ^1%s^1 uccisioni è stata conclusa da %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1664\r
+#, c-format\r
+msgid "^1%s^1 made %s scores in a row\n"\r
+msgstr "^1%s^1 ha fatto %s punti di fila\n"\r
+\r
+#: qcsrc/client/hud.qc:1666\r
+#, c-format\r
+msgid "^1%s^1 has %s frags in a row\n"\r
+msgstr "^1%s^1 ha %s frag di fila\n"\r
+\r
+#: qcsrc/client/hud.qc:1669\r
+#, c-format\r
+msgid "%s^7 made a ^1TRIPLE SCORE\n"\r
+msgstr "%s^7 ha realizzato un ^1TRIPLO PUNTO\n"\r
+\r
+#: qcsrc/client/hud.qc:1671\r
+#, c-format\r
+msgid "%s^7 made a ^1TRIPLE FRAG\n"\r
+msgstr "%s^7 ha realizzato un ^1FRAG TRIPLO\n"\r
+\r
+#: qcsrc/client/hud.qc:1674\r
+#, c-format\r
+msgid "%s^7 unleashes ^1SCORING RAGE\n"\r
+msgstr "%s^7 scatena una ^1FURIA DI PUNTI\n"\r
+\r
+#: qcsrc/client/hud.qc:1676\r
+#, c-format\r
+msgid "%s^7 unleashes ^1RAGE\n"\r
+msgstr "%s^7 scatena la propria ^1FURIA\n"\r
+\r
+#: qcsrc/client/hud.qc:1679\r
+#, c-format\r
+msgid "%s^7 made ^1TEN SCORES IN A ROW!\n"\r
+msgstr "%s^7 ha realizzato ^1DIECI PUNTI DI FILA!\n"\r
+\r
+#: qcsrc/client/hud.qc:1681\r
+#, c-format\r
+msgid "%s^7 starts the ^1MASSACRE!\n"\r
+msgstr "%s^7 ha iniziato il ^1MASSACRO!\n"\r
+\r
+#: qcsrc/client/hud.qc:1684\r
+#, c-format\r
+msgid "%s^7 made ^1FIFTEEN SCORES IN A ROW!\n"\r
+msgstr "%s^7 ha realizzato ^QUINDICI PUNTI DI FILA!\n"\r
+\r
+#: qcsrc/client/hud.qc:1686\r
+#, c-format\r
+msgid "%s^7 executes ^1MAYHEM!\n"\r
+msgstr "%s^7 ha eseguito un ^1MAYHEM!\n"\r
+\r
+#: qcsrc/client/hud.qc:1689\r
+#, c-format\r
+msgid "%s^7 made ^1TWENTY SCORES IN A ROW!\n"\r
+msgstr "%s^7 ha realizzato ^1VENTI PUNTI DI FILA!\n"\r
+\r
+#: qcsrc/client/hud.qc:1691\r
+#, c-format\r
+msgid "%s^7 is a ^1BERSERKER!\n"\r
+msgstr "%s^7 è un ^1FEROCE GUERRIERO!\n"\r
+\r
+#: qcsrc/client/hud.qc:1694\r
+#, c-format\r
+msgid "%s^7 made ^1TWENTY FIVE SCORES IN A ROW!\n"\r
+msgstr "%s^7 ha realizzato ^1VENTICINQUE PUNTI DI FILA!\n"\r
+\r
+#: qcsrc/client/hud.qc:1696\r
+#, c-format\r
+msgid "%s^7 inflicts ^1CARNAGE!\n"\r
+msgstr "%s^7 ha fatto una ^1CARNEFICINA!\n"\r
+\r
+#: qcsrc/client/hud.qc:1699\r
+#, c-format\r
+msgid "%s^7 made ^1THIRTY SCORES IN A ROW!\n"\r
+msgstr "%s^7 ha realizzato ^1TRENTA PUNTI DI FILA!\n"\r
+\r
+#: qcsrc/client/hud.qc:1701\r
+#, c-format\r
+msgid "%s^7 unleashes ^1ARMAGEDDON!\n"\r
+msgstr "%s^7 scatena un ^1ARMAGEDDON!\n"\r
+\r
+#: qcsrc/client/hud.qc:1709\r
+#, c-format\r
+msgid "^1%s^1 was in the water for too long\n"\r
+msgstr "^1%s^1 è stato in acqua per troppo tempo\n"\r
+\r
+#: qcsrc/client/hud.qc:1711\r
+#, c-format\r
+msgid "^1%s^1 drowned\n"\r
+msgstr "^1%s^1 è annegato\n"\r
+\r
+#: qcsrc/client/hud.qc:1716\r
+#, c-format\r
+msgid "^1%s^1 was slimed\n"\r
+msgstr "^1%s^1 è stato coperto di melma\n"\r
+\r
+#: qcsrc/client/hud.qc:1722\r
+#, c-format\r
+msgid "^1%s^1 found a hot place\n"\r
+msgstr "^1%s^1 ha trovato un posto caldo\n"\r
+\r
+#: qcsrc/client/hud.qc:1724\r
+#, c-format\r
+msgid "^1%s^1 turned into hot slag\n"\r
+msgstr "^1%s^1 è finito dentro la lava bollente\n"\r
+\r
+#: qcsrc/client/hud.qc:1731\r
+#, c-format\r
+msgid "^1%s^1 tested gravity (and it worked)\n"\r
+msgstr "^1%s^1 ha testato la gravità (e ha funzionato)\n"\r
+\r
+#: qcsrc/client/hud.qc:1733\r
+#, c-format\r
+msgid "^1%s^1 hit the ground with a crunch\n"\r
+msgstr "^1%s^1 ha fatto scricchiolare il terreno\n"\r
+\r
+#: qcsrc/client/hud.qc:1738\r
+#, c-format\r
+msgid "^1%s^1 became a shooting star\n"\r
+msgstr "^1%s^1 è diventato una stella cadente\n"\r
+\r
+#: qcsrc/client/hud.qc:1744\r
+#, c-format\r
+msgid "^1%s^1 discovered a swamp\n"\r
+msgstr "^1%s^1 ha scoperto una palude\n"\r
+\r
+#: qcsrc/client/hud.qc:1746\r
+#, c-format\r
+msgid "^1%s^1 is now conserved for centuries to come\n"\r
+msgstr "^1%s^1 è ora conservato per i secoli a venire\n"\r
+\r
+#: qcsrc/client/hud.qc:1751\r
+#, c-format\r
+msgid "^1%s^1 was mowed down by a turret \n"\r
+msgstr "^1%s^1 è stato falciato da una torretta \n"\r
+\r
+#: qcsrc/client/hud.qc:1763\r
+#, c-format\r
+msgid "^1%s^1 died in an accident\n"\r
+msgstr "^1%s^1 è morto in un incidente\n"\r
+\r
+#: qcsrc/client/hud.qc:1767\r
+#, c-format\r
+msgid "^1%s^1 was unfairly eliminated\n"\r
+msgstr "^1%s^1 è stato ingiustamente eliminato\n"\r
+\r
+#: qcsrc/client/hud.qc:1773\r
+#, c-format\r
+msgid "^1%s^1 felt a little hot\n"\r
+msgstr "^1%s^1 ha sentito un pò di caldo\n"\r
+\r
+#: qcsrc/client/hud.qc:1775\r
+#, c-format\r
+msgid "^1%s^1 burnt to death\n"\r
+msgstr "^1%s^1 è morto bruciato\n"\r
+\r
+#: qcsrc/client/hud.qc:1782\r
+#, c-format\r
+msgid "^1%s^1 needs a restart\n"\r
+msgstr "^1%s^1 ha bisogno di una ripresa\n"\r
+\r
+#: qcsrc/client/hud.qc:1789\r
+#, c-format\r
+msgid "^1%s^1 needs a restart after a %d scoring spree\n"\r
+msgstr "^1%s^1 ha bisogno di una ripresa dopo una serie di %d punti\n"\r
+\r
+#: qcsrc/client/hud.qc:1791\r
+#, c-format\r
+msgid "^1%s^1 died with a %d kill spree\n"\r
+msgstr "^1%s^1 è morto dopo una serie di %d uccisioni\n"\r
+\r
+#: qcsrc/client/hud.qc:1795\r
+#, c-format\r
+msgid "%s^7 got the %s\n"\r
+msgstr "%s^7 ha preso la %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1798\r
+#, c-format\r
+msgid "%s^7 lost the %s\n"\r
+msgstr "%s^7 ha perso la %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1801\r
+#, c-format\r
+msgid "%s^7 picked up the %s\n"\r
+msgstr "%s^7 ha raccolto la %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1804\r
+#, c-format\r
+msgid "%s^7 returned the %s\n"\r
+msgstr "%s^7 ha fatto ritornare la %s\n"\r
+\r
+#: qcsrc/client/hud.qc:1807\r
+#, c-format\r
+msgid "%s^7 captured the %s%s\n"\r
+msgstr "%s^7 ha catturato la %s%s\n"\r
+\r
+#: qcsrc/client/hud.qc:1826\r
+#, c-format\r
+msgid "%s^7 has picked up the ball!\n"\r
+msgstr "%s^7 ha raccolto la palla!\n"\r
+\r
+#: qcsrc/client/hud.qc:1831\r
+#, c-format\r
+msgid "%s^7 has dropped the ball!\n"\r
+msgstr "%s^7 ha rilasciato la palla!\n"\r
+\r
+#: qcsrc/client/hud.qc:1842\r
+#, c-format\r
+msgid "You are now on: %s"\r
+msgstr "Sei ora in: %s"\r
+\r
+#: qcsrc/client/hud.qc:1844\r
+#, c-format\r
+msgid ""\r
+"You have been moved into a different team to improve team balance\n"\r
+"You are now on: %s"\r
+msgstr ""\r
+"Sei stato spostato in una squadra differente per migliorare il bilanciamento "\r
+"delle squadre\n"\r
+"Sei ora in: %s"\r
+\r
+#: qcsrc/client/hud.qc:1847\r
+msgid "^1Reconsider your tactics, camper!"\r
+msgstr "^1Riconsidera le tue tattiche, camper!"\r
+\r
+#: qcsrc/client/hud.qc:1849\r
+msgid "^1Die camper!"\r
+msgstr "^1Muori camper!"\r
+\r
+#: qcsrc/client/hud.qc:1852\r
+msgid "^1You are reinserted into the game for running out of ammo..."\r
+msgstr "^1Sei reinserito nel gioco per mancanza di munizioni..."\r
+\r
+#: qcsrc/client/hud.qc:1854\r
+msgid "^1You were killed for running out of ammo..."\r
+msgstr "^1Sei stato ucciso per mancanza di munizioni..."\r
+\r
+#: qcsrc/client/hud.qc:1857\r
+msgid "^1You need to preserve your health"\r
+msgstr "^1Hai bisogno di preservare la tua vita"\r
+\r
+#: qcsrc/client/hud.qc:1859\r
+msgid "^1You grew too old without taking your medicine"\r
+msgstr "^1Sei diventato troppo vecchio senza prendere le tue medicine"\r
+\r
+#: qcsrc/client/hud.qc:1862\r
+msgid "^1Don't go against team mates!"\r
+msgstr "^1Non andare contro i tuoi compagni di squadra!"\r
+\r
+#: qcsrc/client/hud.qc:1864\r
+msgid "^1Don't shoot your team mates!"\r
+msgstr "^1Non sparare ai tuoi compagni di squadra!"\r
+\r
+#: qcsrc/client/hud.qc:1869\r
+msgid "^1You need to be more careful!"\r
+msgstr "^1Hai bisogno di essere più prudente!"\r
+\r
+#: qcsrc/client/hud.qc:1871\r
+msgid "^1You killed your own dumb self!"\r
+msgstr "^1Ti sei ammazzato da solo, stupido!"\r
+\r
+#: qcsrc/client/hud.qc:1876\r
+#, c-format\r
+msgid "^1Moron! You went against ^7%s^1, a team mate!"\r
+msgstr "^1Idiota! Sei andato contro ^7%s^1, un compagno di squadra!"\r
+\r
+#: qcsrc/client/hud.qc:1878\r
+#, c-format\r
+msgid "^1Moron! You fragged ^7%s^1, a team mate!"\r
+msgstr "^1Idiota! Hai fraggato ^7%s^1, un compagno di squadra!"\r
+\r
+#: qcsrc/client/hud.qc:1882\r
+msgid "^1First score"\r
+msgstr "^1Primo punto"\r
+\r
+#: qcsrc/client/hud.qc:1884\r
+msgid "^1First blood"\r
+msgstr "^1Primo sangue"\r
+\r
+#: qcsrc/client/hud.qc:1888\r
+msgid "^1First casualty"\r
+msgstr "^1Primo incidente"\r
+\r
+#: qcsrc/client/hud.qc:1890\r
+msgid "^1First victim"\r
+msgstr "^1Prima vittima"\r
+\r
+#: qcsrc/client/hud.qc:1894\r
+#, c-format\r
+msgid "^1You scored against ^7%s^1 who was typing!"\r
+msgstr "^1Hai segnato contro ^7%s^1 che stava scrivendo!"\r
+\r
+#: qcsrc/client/hud.qc:1896\r
+#, c-format\r
+msgid "^1You typefragged ^7%s"\r
+msgstr "^1Hai \"typefraggato\" ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:1900\r
+#, c-format\r
+msgid "^1You were scored against by ^7%s^1 while you were typing!"\r
+msgstr "^1Sei stato segnato da ^7%s^1 mentre stavi scrivendo!"\r
+\r
+#: qcsrc/client/hud.qc:1902\r
+#, c-format\r
+msgid "^1You were typefragged by ^7%s"\r
+msgstr "^1Sei stato \"typefraggato\" da ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:1906\r
+#, c-format\r
+msgid "^4You scored against ^7%s"\r
+msgstr "^4Hai segnato contro ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:1908\r
+#, c-format\r
+msgid "^4You fragged ^7%s"\r
+msgstr "^4Hai fraggato ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:1912\r
+#, c-format\r
+msgid "^1You were scored against by ^7%s"\r
+msgstr "^1Sei stato segnato da ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:1914\r
+#, c-format\r
+msgid "^1You were fragged by ^7%s"\r
+msgstr "^1Sei stato fraggato da ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:1919\r
+msgid "^1Watch your step!"\r
+msgstr "^1Attento a dove metti i piedi!"\r
+\r
+#: qcsrc/client/hud.qc:1988 qcsrc/client/hud.qc:1989 qcsrc/client/hud.qc:2474\r
+#, c-format\r
+msgid "Player %d"\r
+msgstr "Giocatore %d"\r
+\r
+#: qcsrc/client/hud.qc:2779\r
+msgid "^1Intermediate 1 (+15.42)"\r
+msgstr "^1Intermedio 1 (+15.42)"\r
+\r
+#: qcsrc/client/hud.qc:2781 qcsrc/client/hud.qc:2823 qcsrc/client/hud.qc:2864\r
+#, c-format\r
+msgid "^1PENALTY: %.1f (%s)"\r
+msgstr "^1PENALITÀ: %.1f (%s)"\r
+\r
+#: qcsrc/client/hud.qc:2866\r
+#, c-format\r
+msgid "^2PENALTY: %.1f (%s)"\r
+msgstr "^2PENALITÀ: %.1f (%s)"\r
+\r
+#: qcsrc/client/hud.qc:2894\r
+msgid "^1You must answer before entering hud configure mode\n"\r
+msgstr ""\r
+"^1Devi rispondere prima di entrare nella modalità di configurazione "\r
+"dell'HUD\n"\r
+\r
+#: qcsrc/client/hud.qc:2897\r
+msgid "^2Name ^7instead of \"^1Unregistered player^7\" in stats"\r
+msgstr "^2Nome ^7invece di \"^1Giocatore non registrato^7\" nelle statistiche"\r
+\r
+#: qcsrc/client/hud.qc:2979\r
+msgid "A vote has been called for:"\r
+msgstr "Un voto è stato chiamato per:"\r
+\r
+#: qcsrc/client/hud.qc:2981\r
+msgid "Allow servers to store and display your name?"\r
+msgstr "Permetti ai server di salvare e visualizzare il tuo nome?"\r
+\r
+#: qcsrc/client/hud.qc:2985\r
+msgid "^1Configure the HUD"\r
+msgstr "^1Configura l'HUD"\r
+\r
+#: qcsrc/client/hud.qc:2989\r
+#, c-format\r
+msgid "Yes (%s): %d"\r
+msgstr "Sì (%s): %d"\r
+\r
+#: qcsrc/client/hud.qc:2991\r
+#, c-format\r
+msgid "No (%s): %d"\r
+msgstr "No (%s): %d"\r
+\r
+#: qcsrc/client/hud.qc:3494 qcsrc/client/hud.qc:3497 qcsrc/client/hud.qc:3499\r
+msgid "Personal best"\r
+msgstr "Miglior personale"\r
+\r
+#: qcsrc/client/hud.qc:3512 qcsrc/client/hud.qc:3515 qcsrc/client/hud.qc:3517\r
+msgid "Server best"\r
+msgstr "Migliori del server"\r
+\r
+#: qcsrc/client/hud.qc:3861\r
+msgid "^3Player^7: This is the chat area."\r
+msgstr "^3Giocatore^7: Questa è l'area della chat."\r
+\r
+#: qcsrc/client/hud.qc:3929\r
+#, c-format\r
+msgid "FPS: %.*f"\r
+msgstr "FPS: %.*f"\r
+\r
+#: qcsrc/client/hud.qc:3996\r
+msgid "^1Observing"\r
+msgstr "^1Osservando"\r
+\r
+#: qcsrc/client/hud.qc:3998\r
+#, c-format\r
+msgid "^1Spectating: ^7%s"\r
+msgstr "^1Assistendo: ^7%s"\r
+\r
+#: qcsrc/client/hud.qc:4002\r
+#, c-format\r
+msgid "^1Press ^3%s^1 to spectate"\r
+msgstr "^1Premi ^3%s^1 per assistere"\r
+\r
+#: qcsrc/client/hud.qc:4004\r
+#, c-format\r
+msgid "^1Press ^3%s^1 for another player"\r
+msgstr "^1Premi ^3%s^1 per un altro giocatore"\r
+\r
+#: qcsrc/client/hud.qc:4008\r
+#, c-format\r
+msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"\r
+msgstr "^1Usa ^3%s^1 o ^3%s^1 per cambiare velocità"\r
+\r
+#: qcsrc/client/hud.qc:4010\r
+#, c-format\r
+msgid "^1Press ^3%s^1 to observe"\r
+msgstr "^1Premi ^3%s^1 per osservare"\r
+\r
+#: qcsrc/client/hud.qc:4013\r
+#, c-format\r
+msgid "^1Press ^3%s^1 for gamemode info"\r
+msgstr "^1Premi ^3%s^1 per le informazioni sulla modalità di gioco"\r
+\r
+#: qcsrc/client/hud.qc:4017\r
+msgid "^1Wait for your turn to join"\r
+msgstr "^1Attendi il tuo turno per entrare"\r
+\r
+#: qcsrc/client/hud.qc:4023\r
+msgid "^1Match has already begun"\r
+msgstr "^1La partita è già iniziata"\r
+\r
+#: qcsrc/client/hud.qc:4025\r
+msgid "^1You have no more lives left"\r
+msgstr "^1Non hai più vite a disposizione"\r
+\r
+#: qcsrc/client/hud.qc:4027 qcsrc/client/hud.qc:4030\r
+#, c-format\r
+msgid "^1Press ^3%s^1 to join"\r
+msgstr "^1Premi ^3%s^1 per entrare"\r
+\r
+#: qcsrc/client/hud.qc:4038\r
+#, c-format\r
+msgid "^1Game starts in ^3%d^1 seconds"\r
+msgstr "^1La partita inizia tra ^3%d^1 secondi"\r
+\r
+#: qcsrc/client/hud.qc:4045\r
+msgid "^2Currently in ^1warmup^2 stage!"\r
+msgstr "^2Attualmente in ^1warmup^2!"\r
+\r
+#: qcsrc/client/hud.qc:4060\r
+#, c-format\r
+msgid "%sPress ^3%s%s to end warmup"\r
+msgstr "%sPremi ^3%s%s per terminare il warmup"\r
+\r
+#: qcsrc/client/hud.qc:4062\r
+#, c-format\r
+msgid "%sPress ^3%s%s once you are ready"\r
+msgstr "%sPremi ^3%s%s una volta che sei pronto"\r
+\r
+#: qcsrc/client/hud.qc:4067\r
+msgid "^2Waiting for others to ready up to end warmup..."\r
+msgstr "^2Attendendo che gli altri siano pronti per terminare il warmup..."\r
+\r
+#: qcsrc/client/hud.qc:4069\r
+msgid "^2Waiting for others to ready up..."\r
+msgstr "^2Attendendo che gli altri siano pronti..."\r
+\r
+#: qcsrc/client/hud.qc:4075\r
+#, c-format\r
+msgid "^2Press ^3%s^2 to end warmup"\r
+msgstr "^2Premi ^3%s^2 per terminare il warmup"\r
+\r
+#: qcsrc/client/hud.qc:4096\r
+msgid "Teamnumbers are unbalanced!"\r
+msgstr "Il numero di giocatori per squadra è sbilanciato!"\r
+\r
+#: qcsrc/client/hud.qc:4101\r
+#, c-format\r
+msgid " Press ^3%s%s to adjust"\r
+msgstr " Premi ^3%s%s per aggiustare"\r
+\r
+#: qcsrc/client/hud.qc:4109\r
+msgid "^7Press ^3ESC ^7to show HUD options."\r
+msgstr "^7Premi ^3ESC ^7per mostrare le opzioni dell'HUD"\r
+\r
+#: qcsrc/client/hud.qc:4111\r
+msgid "^3Doubleclick ^7a panel for panel-specific options."\r
+msgstr "^7Fai ^3doppio-click ^7su un pannello per le sue specifiche opzioni "\r
+\r
+#: qcsrc/client/hud.qc:4113\r
+msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"\r
+msgstr "^3CTRL ^7per disabilitare il test di collisione, ^3SHIFT ^7e"\r
+\r
+#: qcsrc/client/hud.qc:4115\r
+msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."\r
+msgstr "^3ALT ^7+ ^3ARROW KEYS ^7per fini aggiustamenti"\r
+\r
+#: qcsrc/client/hud.qc:4153\r
+msgid " qu/s"\r
+msgstr " qu/s"\r
+\r
+#: qcsrc/client/hud.qc:4157\r
+msgid " m/s"\r
+msgstr " m/s"\r
+\r
+#: qcsrc/client/hud.qc:4161\r
+msgid " km/h"\r
+msgstr " km/h"\r
+\r
+#: qcsrc/client/hud.qc:4165\r
+msgid " mph"\r
+msgstr " mph"\r
+\r
+#: qcsrc/client/hud.qc:4169\r
+msgid " knots"\r
+msgstr " nodi"\r
+\r
+#: qcsrc/client/hud.qc:4814\r
+msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"\r
+msgstr ""\r
+"Corretti automaticamente numeri di pannello sbagliati/mancanti in "\r
+"_hud_panelorder\n"\r
+\r
+#: qcsrc/client/hud_config.qc:136\r
+#, c-format\r
+msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"\r
+msgstr "^2Esportato con successo in %s! (nota: E' salvato in data/data/)\n"\r
+\r
+#: qcsrc/client/hud_config.qc:140\r
+#, c-format\r
+msgid "^1Couldn't write to %s\n"\r
+msgstr "^1Impossibile scrivere in %s\n"\r
+\r
+#: qcsrc/client/mapvoting.qc:28\r
+msgid " (1 vote)"\r
+msgstr " (1 voto)"\r
+\r
+#: qcsrc/client/mapvoting.qc:30\r
+#, c-format\r
+msgid " (%d votes)"\r
+msgstr " (%d voti)"\r
+\r
+#: qcsrc/client/mapvoting.qc:113\r
+msgid "Don't care"\r
+msgstr "Non importa"\r
+\r
+#: qcsrc/client/mapvoting.qc:194\r
+msgid "Vote for a map"\r
+msgstr "Vota per una mappa"\r
+\r
+#: qcsrc/client/mapvoting.qc:200\r
+#, c-format\r
+msgid "%d seconds left"\r
+msgstr "%d secondi rimanenti"\r
+\r
+#: qcsrc/client/mapvoting.qc:263\r
+msgid ""\r
+"mv_mapdownload: ^3You're not supposed to use this command on your own!\n"\r
+msgstr "mv_mapdownload: ^3Non avrai creduto di poter usare questo comando!\n"\r
+\r
+#: qcsrc/client/mapvoting.qc:273\r
+msgid "^1Error:^7 Couldn't find pak index.\n"\r
+msgstr "^1Errore:^7 Impossibile trovare il pak index.\n"\r
+\r
+#: qcsrc/client/mapvoting.qc:282\r
+msgid "Requesting preview...\n"\r
+msgstr "Richiedendo l'anteprima...\n"\r
+\r
+#: qcsrc/client/miscfunctions.qc:23\r
+msgid "^1Begin!"\r
+msgstr "^1Inizia!"\r
+\r
+#: qcsrc/client/miscfunctions.qc:34\r
+#, c-format\r
+msgid "^1Game starts in %d seconds"\r
+msgstr "^1Il gioco inizia tra %d secondi"\r
+\r
+#: qcsrc/client/miscfunctions.qc:113\r
+msgid "^1RED^7 flag"\r
+msgstr "^7Bandiera ^1ROSSA"\r
+\r
+#: qcsrc/client/miscfunctions.qc:118\r
+msgid "^4BLUE^7 flag"\r
+msgstr "^7Bandiera ^4BLU"\r
+\r
+#: qcsrc/client/miscfunctions.qc:126\r
+#, c-format\r
+msgid "You picked up the %s!"\r
+msgstr "Hai raccolto la %s!"\r
+\r
+#: qcsrc/client/miscfunctions.qc:130\r
+#, c-format\r
+msgid "You got the %s!"\r
+msgstr "Hai preso la %s!"\r
+\r
+#: qcsrc/client/miscfunctions.qc:283\r
+msgid "Trying to remove a team which is not in the teamlist!"\r
+msgstr "Tentando di rimuovere una squadra che non è nella lista delle squadre!"\r
+\r
+#: qcsrc/client/movetypes.qc:163\r
+#, c-format\r
+msgid "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"\r
+msgstr "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"\r
+\r
+#: qcsrc/client/movetypes.qc:166\r
+#, c-format\r
+msgid "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"\r
+msgstr "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:19\r
+msgid "SCO^bckills"\r
+msgstr "uccisioni pp"\r
+\r
+#: qcsrc/client/scoreboard.qc:20\r
+msgid "SCO^bctime"\r
+msgstr "tempo pp"\r
+\r
+#: qcsrc/client/scoreboard.qc:21\r
+msgid "SCO^caps"\r
+msgstr "SCO^catture"\r
+\r
+#: qcsrc/client/scoreboard.qc:22\r
+msgid "SCO^deaths"\r
+msgstr "SCO^morti"\r
+\r
+#: qcsrc/client/scoreboard.qc:23\r
+msgid "SCO^destroyed"\r
+msgstr "SCO^distrutte"\r
+\r
+#: qcsrc/client/scoreboard.qc:24\r
+msgid "SCO^drops"\r
+msgstr "SCO^cadute"\r
+\r
+#: qcsrc/client/scoreboard.qc:25\r
+msgid "SCO^faults"\r
+msgstr "SCO^falli"\r
+\r
+#: qcsrc/client/scoreboard.qc:26\r
+msgid "SCO^fckills"\r
+msgstr "uccisioni pb"\r
+\r
+#: qcsrc/client/scoreboard.qc:27\r
+msgid "SCO^goals"\r
+msgstr "SCO^gol"\r
+\r
+#: qcsrc/client/scoreboard.qc:28\r
+msgid "SCO^kckills"\r
+msgstr "uccisioni pc"\r
+\r
+#: qcsrc/client/scoreboard.qc:29\r
+msgid "SCO^kdratio"\r
+msgstr "rapporto u/m"\r
+\r
+#: qcsrc/client/scoreboard.qc:30\r
+msgid "SCO^k/d"\r
+msgstr "u/m"\r
+\r
+#: qcsrc/client/scoreboard.qc:31\r
+msgid "SCO^kd"\r
+msgstr "um"\r
+\r
+#: qcsrc/client/scoreboard.qc:32\r
+msgid "SCO^kdr"\r
+msgstr "rum"\r
+\r
+#: qcsrc/client/scoreboard.qc:33\r
+msgid "SCO^kills"\r
+msgstr "SCO^uccisioni"\r
+\r
+#: qcsrc/client/scoreboard.qc:34\r
+msgid "SCO^laps"\r
+msgstr "SCO^giri"\r
+\r
+#: qcsrc/client/scoreboard.qc:35\r
+msgid "SCO^lives"\r
+msgstr "SCO^vite"\r
+\r
+#: qcsrc/client/scoreboard.qc:36\r
+msgid "SCO^losses"\r
+msgstr "SCO^perdute"\r
+\r
+#: qcsrc/client/scoreboard.qc:37\r
+msgid "SCO^name"\r
+msgstr "SCO^nome"\r
+\r
+#: qcsrc/client/scoreboard.qc:38\r
+msgid "SCO^nick"\r
+msgstr "SCO^nick"\r
+\r
+#: qcsrc/client/scoreboard.qc:39\r
+msgid "SCO^objectives"\r
+msgstr "obiettivi"\r
+\r
+#: qcsrc/client/scoreboard.qc:40\r
+msgid "SCO^pickups"\r
+msgstr "SCO^raccolte"\r
+\r
+#: qcsrc/client/scoreboard.qc:41\r
+msgid "SCO^ping"\r
+msgstr "SCO^ping"\r
+\r
+#: qcsrc/client/scoreboard.qc:42\r
+msgid "SCO^pl"\r
+msgstr "SCO^pl"\r
+\r
+#: qcsrc/client/scoreboard.qc:43\r
+msgid "SCO^pushes"\r
+msgstr "SCO^spinte"\r
+\r
+#: qcsrc/client/scoreboard.qc:44\r
+msgid "SCO^rank"\r
+msgstr "SCO^posizione"\r
+\r
+#: qcsrc/client/scoreboard.qc:45\r
+msgid "SCO^returns"\r
+msgstr "SCO^ritorni"\r
+\r
+#: qcsrc/client/scoreboard.qc:46\r
+msgid "SCO^revivals"\r
+msgstr "ravvivamenti"\r
+\r
+#: qcsrc/client/scoreboard.qc:47\r
+msgid "SCO^score"\r
+msgstr "SCO^punti"\r
+\r
+#: qcsrc/client/scoreboard.qc:48\r
+msgid "SCO^suicides"\r
+msgstr "SCO^suicidi"\r
+\r
+#: qcsrc/client/scoreboard.qc:49\r
+msgid "SCO^takes"\r
+msgstr "SCO^presi"\r
+\r
+#: qcsrc/client/scoreboard.qc:50\r
+msgid "SCO^ticks"\r
+msgstr "SCO^tick"\r
+\r
+#: qcsrc/client/scoreboard.qc:239\r
+msgid ""\r
+"You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"\r
+msgstr ""\r
+"Puoi modificare lo scoreboard usando il comando ^2scoreboard_columns_set.\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:240\r
+msgid "^3|---------------------------------------------------------------|\n"\r
+msgstr "^3|---------------------------------------------------------------|\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:242\r
+msgid "^2scoreboard_columns_set default\n"\r
+msgstr "^2scoreboard_columns_set default\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:243\r
+msgid "^2scoreboard_columns_set ^7filed1 field2 ...\n"\r
+msgstr "^2scoreboard_columns_set ^7campo1 campo2 ...\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:244\r
+msgid "The following field names are recognized (case insensitive):\n"\r
+msgstr "I seguenti nomi dei campi sono riconosciuti (non case-sensitive):\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:245\r
+msgid ""\r
+"You can use a ^3|^7 to start the right-aligned fields.\n"\r
+"\n"\r
+msgstr ""\r
+"Puoi usare un ^3|^7 per iniziare i campi allineati a destra.\n"\r
+"\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:247\r
+msgid "^3name^7 or ^3nick^7 Name of a player\n"\r
+msgstr "^3name^7 o ^3nick^7 Nome di un giocatore\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:248\r
+msgid "^3ping^7 Ping time\n"\r
+msgstr "^3ping^7 Tempo di ping\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:249\r
+msgid "^3pl^7 Packet loss\n"\r
+msgstr "^3pl^7 Pacchetti persi\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:250\r
+msgid "^3kills^7 Number of kills\n"\r
+msgstr "^3kills^7 Numero di uccisioni\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:251\r
+msgid "^3deaths^7 Number of deaths\n"\r
+msgstr "^3deaths^7 Numero di morti\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:252\r
+msgid "^3suicides^7 Number of suicides\n"\r
+msgstr "^3suicides^7 Numero di suicidi\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:253\r
+msgid "^3frags^7 kills - suicides\n"\r
+msgstr "^3frags^7 uccisioni - suicidi\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:254\r
+msgid "^3kd^7 The kill-death ratio\n"\r
+msgstr "^3kd^7 Rapporto uccisioni-morti\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:255\r
+msgid ""\r
+"^3caps^7 How often a flag (CTF) or a key (KeyHunt) was "\r
+"captured\n"\r
+msgstr ""\r
+"^3caps^7 Per quante volte una bandiera (CTF) o una "\r
+"chiave (KeyHunt) è stata catturata\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:256\r
+msgid ""\r
+"^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a "\r
+"ball (Keepaway) was picked up\n"\r
+msgstr ""\r
+"^3pickups^7 Per quante volte una bandiera (CTF) o una "\r
+"chiave (KeyHunt) o una palla (Keepaway) viene raccolta\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:257\r
+msgid "^3fckills^7 Number of flag carrier kills\n"\r
+msgstr ""\r
+"^3fckills^7 Numero di uccisioni dei portatori di bandiera\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:258\r
+msgid "^3returns^7 Number of flag returns\n"\r
+msgstr "^3returns^7 Numbero di ritorni della bandiera\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:259\r
+msgid "^3drops^7 Number of flag drops\n"\r
+msgstr "^3drops^7 Numero di bandiere cadute\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:260\r
+msgid "^3lives^7 Number of lives (LMS)\n"\r
+msgstr "^3lives^7 Numero di vite (LMS)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:261\r
+msgid "^3rank^7 Player rank\n"\r
+msgstr "^3rank^7 Posizione del giocatore\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:262\r
+msgid "^3pushes^7 Number of players pushed into void\n"\r
+msgstr "^3pushes^7 Numero di giocatori spinti nel vuoto\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:263\r
+msgid ""\r
+"^3destroyed^7 Number of keys destroyed by pushing them into "\r
+"void\n"\r
+msgstr ""\r
+"^3destroyed^7 Numero di chiavi distrutte spingendole nel "\r
+"vuoto\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:264\r
+msgid "^3kckills^7 Number of keys carrier kills\n"\r
+msgstr ""\r
+"^3kckills^7 Numero di uccisioni di portatori di chiavi\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:265\r
+msgid "^3losses^7 Number of times a key was lost\n"\r
+msgstr ""\r
+"^3losses^7 Numero di volte che una chiave s'è persa\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:266\r
+msgid "^3laps^7 Number of laps finished (race/cts)\n"\r
+msgstr "^3laps^7 Numero di giri completati (corsa/cts)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:267\r
+msgid "^3time^7 Total time raced (race/cts)\n"\r
+msgstr "^3time^7 Tempo totale (corsa/cts)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:268\r
+msgid "^3fastest^7 Time of fastest lap (race/cts)\n"\r
+msgstr "^3fastest^7 Tempo del giro più veloce (corsa/cts)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:269\r
+msgid "^3ticks^7 Number of ticks (DOM)\n"\r
+msgstr "^3ticks^7 Numero di tick (DOM)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:270\r
+msgid "^3takes^7 Number of domination points taken (DOM)\n"\r
+msgstr "^3takes^7 Numero di punti di dominio presi (DOM)\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:271\r
+msgid "^3bckills^7 Number of ball carrier kills\n"\r
+msgstr ""\r
+"^3bckills^7 Numbero di uccisioni di portatori di palla\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:272\r
+msgid ""\r
+"^3bctime^7 Total amount of time holding the ball in "\r
+"Keepaway\n"\r
+msgstr ""\r
+"^3bctime^7 Tempo totale di possesso della palla in "\r
+"Keepaway\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:273\r
+msgid ""\r
+"^3score^7 Total score\n"\r
+"\n"\r
+msgstr ""\r
+"^3score^7 Punteggio totale\n"\r
+"\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:275\r
+msgid ""\r
+"Before a field you can put a + or - sign, then a comma separated list\n"\r
+"of game types, then a slash, to make the field show up only in these\n"\r
+"or in all but these game types. You can also specify 'all' as a\n"\r
+"field to show all fields available for the current game mode.\n"\r
+"\n"\r
+msgstr ""\r
+"Prima di un campo puoi mettere il segno + o -, seguito da una lista di tipi "\r
+"di gioco\n"\r
+"separati da virgole, seguita dal segno /, per mostrare il campo solo in "\r
+"questi\n"\r
+"o in tutti tranne questi tipi di gioco. Puoi anche specificare "\r
+"'all' (tutti)\n"\r
+"come campo per mostrare tutti i campi disponibili per l'attuale mdo di "\r
+"gioco.\n"\r
+"\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:280\r
+msgid ""\r
+"The special game type names 'teams' and 'noteams' can be used to\n"\r
+"include/exclude ALL teams/noteams game modes.\n"\r
+"\n"\r
+msgstr ""\r
+"I nomi speciali per il tipo di gioco 'teams' e 'noteams' possono essere "\r
+"usati\n"\r
+"per includere/escludere TUTTE le modalità con team/senza team.\n"\r
+"\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:283\r
+msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"\r
+msgstr ""\r
+"Esempio: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:284\r
+msgid ""\r
+"will display name, ping and pl aligned to the left, and the fields\n"\r
+"right of the vertical bar aligned to the right.\n"\r
+msgstr ""\r
+"farà visualizzare nome, ping e pl allineati a sinistra, e i campi\n"\r
+"a destra della barra verticale allineati a destra.\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:286\r
+msgid ""\r
+"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"\r
+"other gamemodes except DM.\n"\r
+msgstr ""\r
+"'field3' sarà mostrato solo in CTF, e 'field4' sarà mostrato in tutte\n"\r
+"le altre modalità di gioco eccetto DM.\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:432 qcsrc/client/scoreboard.qc:447\r
+#: qcsrc/client/scoreboard.qc:457 qcsrc/client/scoreboard.qc:466\r
+#: qcsrc/client/scoreboard.qc:475\r
+#, c-format\r
+msgid "fixed missing field '%s'\n"\r
+msgstr "riparato campo mancante '%s'\n"\r
+\r
+#: qcsrc/client/scoreboard.qc:515 qcsrc/client/scoreboard.qc:522\r
+msgid "N/A"\r
+msgstr "N/D"\r
+\r
+#: qcsrc/client/scoreboard.qc:950\r
+#, c-format\r
+msgid "Accuracy stats (average %d%%)"\r
+msgstr "Statistiche precisione (media %d%%)"\r
+\r
+#: qcsrc/client/scoreboard.qc:1015\r
+#, c-format\r
+msgid "%d%%"\r
+msgstr "%d%%"\r
+\r
+#: qcsrc/client/scoreboard.qc:1075\r
+msgid "Rankings"\r
+msgstr "Classifica"\r
+\r
+#: qcsrc/client/scoreboard.qc:1170\r
+msgid "Scoreboard"\r
+msgstr "Tabella dei punteggi"\r
+\r
+#: qcsrc/client/scoreboard.qc:1215\r
+#, c-format\r
+msgid "Speed award: %d ^7(%s^7)"\r
+msgstr "Velocità migliore: %d ^7(%s^7)"\r
+\r
+#: qcsrc/client/scoreboard.qc:1219\r
+#, c-format\r
+msgid "All-time fastest: %d ^7(%s^7)"\r
+msgstr "Tempo più veloce in assoluto: %d ^7(%s^7)"\r
+\r
+#: qcsrc/client/scoreboard.qc:1246 qcsrc/client/teamplay.qc:63\r
+msgid "Spectators"\r
+msgstr "Spettatori"\r
+\r
+#: qcsrc/client/scoreboard.qc:1252\r
+#, c-format\r
+msgid "playing on ^2%s^7"\r
+msgstr "giocando in ^2%s^7"\r
+\r
+#: qcsrc/client/scoreboard.qc:1259 qcsrc/client/scoreboard.qc:1264\r
+#, c-format\r
+msgid " for up to ^1%1.0f minutes^7"\r
+msgstr " fino a ^1%1.0f minuti^7"\r
+\r
+#: qcsrc/client/scoreboard.qc:1268 qcsrc/client/scoreboard.qc:1287\r
+msgid " or"\r
+msgstr " o"\r
+\r
+#: qcsrc/client/scoreboard.qc:1271 qcsrc/client/scoreboard.qc:1278\r
+#, c-format\r
+msgid " until ^3%s %s^7"\r
+msgstr " fino a ^3%s %s^7"\r
+\r
+#: qcsrc/client/scoreboard.qc:1272 qcsrc/client/scoreboard.qc:1279\r
+#: qcsrc/client/scoreboard.qc:1291 qcsrc/client/scoreboard.qc:1298\r
+msgid "SCO^points"\r
+msgstr "SCO^punti"\r
+\r
+#: qcsrc/client/scoreboard.qc:1273 qcsrc/client/scoreboard.qc:1280\r
+#: qcsrc/client/scoreboard.qc:1292 qcsrc/client/scoreboard.qc:1299\r
+msgid "SCO^is beaten"\r
+msgstr "SCO^è battuto"\r
+\r
+#: qcsrc/client/scoreboard.qc:1290 qcsrc/client/scoreboard.qc:1297\r
+#, c-format\r
+msgid " until a lead of ^3%s %s^7"\r
+msgstr " fino a che si vince di ^3%s %s^7"\r
+\r
+#: qcsrc/client/target_music.qc:93 qcsrc/client/target_music.qc:181\r
+#, c-format\r
+msgid "Cannot initialize sound %s\n"\r
+msgstr "Impossibile inizializzare il suono %s\n"\r
+\r
+#: qcsrc/client/teamplay.qc:64\r
+msgid "Red Team"\r
+msgstr "Team Rosso"\r
+\r
+#: qcsrc/client/teamplay.qc:65\r
+msgid "Blue Team"\r
+msgstr "Team Blu"\r
+\r
+#: qcsrc/client/teamplay.qc:66\r
+msgid "Yellow Team"\r
+msgstr "Team Giallo"\r
+\r
+#: qcsrc/client/teamplay.qc:67\r
+msgid "Pink Team"\r
+msgstr "Team Rosa"\r
+\r
+#: qcsrc/client/waypointsprites.qc:254\r
+msgid "Push"\r
+msgstr "Spingi"\r
+\r
+#: qcsrc/client/waypointsprites.qc:255\r
+msgid "Destroy"\r
+msgstr "Distruggi"\r
+\r
+#: qcsrc/client/waypointsprites.qc:256\r
+msgid "Defend"\r
+msgstr "Difendi"\r
+\r
+#: qcsrc/client/waypointsprites.qc:257\r
+msgid "Blue base"\r
+msgstr "Base Blu"\r
+\r
+#: qcsrc/client/waypointsprites.qc:258\r
+msgid "DANGER"\r
+msgstr "PERICOLO"\r
+\r
+#: qcsrc/client/waypointsprites.qc:259\r
+msgid "Flag carrier"\r
+msgstr "Portatore bandiera"\r
+\r
+#: qcsrc/client/waypointsprites.qc:260\r
+msgid "Dropped flag"\r
+msgstr "Bandiera rilasciata"\r
+\r
+#: qcsrc/client/waypointsprites.qc:261\r
+msgid "Help me!"\r
+msgstr "Aiuto!"\r
+\r
+#: qcsrc/client/waypointsprites.qc:262\r
+msgid "Here"\r
+msgstr "Qui"\r
+\r
+#: qcsrc/client/waypointsprites.qc:263\r
+msgid "Dropped key"\r
+msgstr "Chiave rilasciata"\r
+\r
+#: qcsrc/client/waypointsprites.qc:264 qcsrc/client/waypointsprites.qc:266\r
+#: qcsrc/client/waypointsprites.qc:267 qcsrc/client/waypointsprites.qc:268\r
+#: qcsrc/client/waypointsprites.qc:269\r
+msgid "Key carrier"\r
+msgstr "Portatore chiave"\r
+\r
+#: qcsrc/client/waypointsprites.qc:265\r
+msgid "Run here"\r
+msgstr "Corri qui"\r
+\r
+#: qcsrc/client/waypointsprites.qc:270\r
+msgid "Red base"\r
+msgstr "Base Rossa"\r
+\r
+#: qcsrc/client/waypointsprites.qc:271\r
+msgid "Waypoint"\r
+msgstr "Waypoint"\r
+\r
+#: qcsrc/client/waypointsprites.qc:272 qcsrc/client/waypointsprites.qc:273\r
+#: qcsrc/client/waypointsprites.qc:274\r
+msgid "Generator"\r
+msgstr "Generatore"\r
+\r
+#: qcsrc/client/waypointsprites.qc:275 qcsrc/client/waypointsprites.qc:276\r
+#: qcsrc/client/waypointsprites.qc:277 qcsrc/client/waypointsprites.qc:278\r
+#: qcsrc/client/waypointsprites.qc:279 qcsrc/client/waypointsprites.qc:280\r
+#: qcsrc/client/waypointsprites.qc:281 qcsrc/client/waypointsprites.qc:282\r
+#: qcsrc/client/waypointsprites.qc:306 qcsrc/client/waypointsprites.qc:307\r
+#: qcsrc/client/waypointsprites.qc:308 qcsrc/client/waypointsprites.qc:309\r
+#: qcsrc/client/waypointsprites.qc:310\r
+msgid "Control point"\r
+msgstr "Punto di controllo"\r
+\r
+#: qcsrc/client/waypointsprites.qc:283\r
+msgid "Checkpoint"\r
+msgstr "Checkpoint"\r
+\r
+#: qcsrc/client/waypointsprites.qc:284 qcsrc/client/waypointsprites.qc:286\r
+msgid "Finish"\r
+msgstr "Arrivo"\r
+\r
+#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:286\r
+msgid "Start"\r
+msgstr "Partenza"\r
+\r
+#: qcsrc/client/waypointsprites.qc:287 qcsrc/client/waypointsprites.qc:288\r
+msgid "Ball"\r
+msgstr "Palla"\r
+\r
+#: qcsrc/client/waypointsprites.qc:289\r
+msgid "Ball carrier"\r
+msgstr "Portatore palla"\r
+\r
+#: qcsrc/client/waypointsprites.qc:290 qcsrc/server/w_laser.qc:2\r
+msgid "Laser"\r
+msgstr "Laser"\r
+\r
+#: qcsrc/client/waypointsprites.qc:291 qcsrc/server/w_shotgun.qc:2\r
+msgid "Shotgun"\r
+msgstr "Shotgun"\r
+\r
+#: qcsrc/client/waypointsprites.qc:292 qcsrc/server/w_uzi.qc:2\r
+msgid "Machine Gun"\r
+msgstr "Machine Gun"\r
+\r
+#: qcsrc/client/waypointsprites.qc:293 qcsrc/server/w_grenadelauncher.qc:2\r
+msgid "Mortar"\r
+msgstr "Mortar"\r
+\r
+#: qcsrc/client/waypointsprites.qc:294 qcsrc/server/w_electro.qc:2\r
+msgid "Electro"\r
+msgstr "Electro"\r
+\r
+#: qcsrc/client/waypointsprites.qc:295 qcsrc/server/w_crylink.qc:2\r
+msgid "Crylink"\r
+msgstr "Crylink"\r
+\r
+#: qcsrc/client/waypointsprites.qc:296 qcsrc/server/w_nex.qc:2\r
+msgid "Nex"\r
+msgstr "Nex"\r
+\r
+#: qcsrc/client/waypointsprites.qc:297 qcsrc/server/w_hagar.qc:2\r
+msgid "Hagar"\r
+msgstr "Hagar"\r
+\r
+#: qcsrc/client/waypointsprites.qc:298 qcsrc/server/w_rocketlauncher.qc:2\r
+msgid "Rocket Launcher"\r
+msgstr "Rocket Launcher"\r
+\r
+#: qcsrc/client/waypointsprites.qc:299 qcsrc/server/w_porto.qc:2\r
+msgid "Port-O-Launch"\r
+msgstr "Port-O-Launch"\r
+\r
+#: qcsrc/client/waypointsprites.qc:300\r
+msgid "Minstanex"\r
+msgstr "Minstanex"\r
+\r
+#: qcsrc/client/waypointsprites.qc:301\r
+msgid "Hook"\r
+msgstr "Hook"\r
+\r
+#: qcsrc/client/waypointsprites.qc:302 qcsrc/server/w_fireball.qc:2\r
+msgid "Fireball"\r
+msgstr "Fireball"\r
+\r
+#: qcsrc/client/waypointsprites.qc:303\r
+msgid "HLAC"\r
+msgstr "HLAC"\r
+\r
+#: qcsrc/client/waypointsprites.qc:304 qcsrc/server/w_rifle.qc:2\r
+msgid "Rifle"\r
+msgstr "Fucile"\r
+\r
+#: qcsrc/client/waypointsprites.qc:305 qcsrc/server/w_minelayer.qc:2\r
+msgid "Mine Layer"\r
+msgstr "Mine Layer"\r
+\r
+#: qcsrc/client/waypointsprites.qc:311\r
+msgid "Invisibility"\r
+msgstr "Invisibilità"\r
+\r
+#: qcsrc/client/waypointsprites.qc:312\r
+msgid "Extra life"\r
+msgstr "Vita extra"\r
+\r
+#: qcsrc/client/waypointsprites.qc:313\r
+msgid "Speed"\r
+msgstr "Velocità"\r
+\r
+#: qcsrc/client/waypointsprites.qc:314\r
+msgid "Strength"\r
+msgstr "Forza"\r
+\r
+#: qcsrc/client/waypointsprites.qc:315\r
+msgid "Shield"\r
+msgstr "Scudo"\r
+\r
+#: qcsrc/client/waypointsprites.qc:316\r
+msgid "Fuel regen"\r
+msgstr "Rigeneratore di carburante"\r
+\r
+#: qcsrc/client/waypointsprites.qc:317\r
+msgid "Jet Pack"\r
+msgstr "Jet Pack"\r
+\r
+#: qcsrc/client/waypointsprites.qc:318\r
+msgid "Frozen!"\r
+msgstr "Congelato!"\r
+\r
+#: qcsrc/client/waypointsprites.qc:319\r
+msgid "Tagged"\r
+msgstr "Contrassegnato"\r
+\r
+#: qcsrc/client/waypointsprites.qc:320\r
+msgid "Vehicle"\r
+msgstr "Veicolo"\r
+\r
+#: qcsrc/client/waypointsprites.qc:590\r
+msgid "Spam"\r
+msgstr "Spam"\r
+\r
+#: qcsrc/client/waypointsprites.qc:594\r
+#, c-format\r
+msgid "%s needing help!"\r
+msgstr "%s sta chiedendo aiuto!"\r
+\r
+#: qcsrc/server/w_crylink.qc:664\r
+#, c-format\r
+msgid "%s succeeded at self-destructing themself with the Crylink"\r
+msgstr "%s è riuscito ad autodistruggersi col Crylink"\r
+\r
+#: qcsrc/server/w_crylink.qc:669\r
+#, c-format\r
+msgid "%s could not hide from %s's Crylink"\r
+msgstr "%s non s'è potuto nascondere dal Crylink di %s"\r
+\r
+#: qcsrc/server/w_crylink.qc:671\r
+#, c-format\r
+msgid "%s was too close to %s's Crylink"\r
+msgstr "%s era troppo vicino al Crylink di %s"\r
+\r
+#: qcsrc/server/w_crylink.qc:673\r
+#, c-format\r
+msgid "%s took a close look at %s's Crylink"\r
+msgstr "%s ha visto da vicino il Crylink di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:574\r
+#, c-format\r
+msgid "%s could not remember where they put plasma"\r
+msgstr "%s non s'è ricordato dove aveva messo il plasma"\r
+\r
+#: qcsrc/server/w_electro.qc:576\r
+#, c-format\r
+msgid "%s played with plasma"\r
+msgstr "%s ha giocato col plasma"\r
+\r
+#: qcsrc/server/w_electro.qc:583\r
+#, c-format\r
+msgid "%s just noticed %s's blue ball"\r
+msgstr "%s ha appena notato la palla blu di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:585\r
+#, c-format\r
+msgid "%s got in touch with %s's blue ball"\r
+msgstr "%s è entrato in contatto con la palla blu di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:590\r
+#, c-format\r
+msgid "%s felt the electrifying air of %s's combo"\r
+msgstr "%s ha sentito l'aria elettrificata della combo di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:592\r
+#, c-format\r
+msgid "%s got too close to %s's blue beam"\r
+msgstr "%s s'è avvicinato troppo al raggio blu di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:594\r
+#, c-format\r
+msgid "%s was blasted by %s's blue beam"\r
+msgstr "%s è stato fatto saltare in aria dal raggio blu di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:417\r
+#, c-format\r
+msgid "%s forgot about some firemine"\r
+msgstr "%s s'è dimenticato di alcune mine infuocate"\r
+\r
+#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240\r
+#, c-format\r
+msgid "%s should have used a smaller gun"\r
+msgstr "%s avrebbe dovuto usare un'arma più piccola"\r
+\r
+#: qcsrc/server/w_fireball.qc:426\r
+#, c-format\r
+msgid "%s tried to catch %s's firemine"\r
+msgstr "%s ha provato a catturare la mina infuocata di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:428\r
+#, c-format\r
+msgid "%s fatefully ignored %s's firemine"\r
+msgstr "%s ha fatalmente ignorato la mina infuocata di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:435\r
+#, c-format\r
+msgid "%s could not hide from %s's fireball"\r
+msgstr "%s non è riuscito a nascondersi dalla fireball di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:437\r
+#, c-format\r
+msgid "%s saw the pretty lights of %s's fireball"\r
+msgstr "%s ha visto le belle luci della fireball di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:440\r
+#, c-format\r
+msgid "%s got too close to %s's fireball"\r
+msgstr "%s s'è avvicinato troppo alla fireball di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:442\r
+#, c-format\r
+msgid "%s tasted %s's fireball"\r
+msgstr "%s ha assaggiato la fireball di %s"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:383\r
+#, c-format\r
+msgid "%s tried out his own grenade"\r
+msgstr "%s ha provato da solo la propria granata"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:385\r
+#, c-format\r
+msgid "%s detonated"\r
+msgstr "%s è detonato"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:391\r
+#, c-format\r
+msgid "%s didn't see %s's grenade"\r
+msgstr "%s non ha visto la granata di %s"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:393\r
+#, c-format\r
+msgid "%s almost dodged %s's grenade"\r
+msgstr "%s ha quasi schivato la granata di %s"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:395\r
+#, c-format\r
+msgid "%s ate %s's grenade"\r
+msgstr "%s ha mangiato la granata di %s"\r
+\r
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655\r
+#, c-format\r
+msgid "%s played with tiny rockets"\r
+msgstr "%s ha giocato con piccoli razzi"\r
+\r
+#: qcsrc/server/w_hagar.qc:386\r
+#, c-format\r
+msgid "%s hoped %s's missiles wouldn't bounce"\r
+msgstr "%s ha sperato che il missile di %s non rimbalzasse"\r
+\r
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661\r
+#, c-format\r
+msgid "%s was pummeled by %s"\r
+msgstr "%s è stato preso a pugni da %s"\r
+\r
+#: qcsrc/server/w_hlac.qc:2\r
+msgid "Heavy Laser Assault Cannon"\r
+msgstr "Heavy Laser Assault Cannon"\r
+\r
+#: qcsrc/server/w_hlac.qc:242\r
+#, c-format\r
+msgid "%s was cut down by %s"\r
+msgstr "%s è stato abbattuto da %s"\r
+\r
+#: qcsrc/server/w_hook.qc:2\r
+msgid "Grappling Hook"\r
+msgstr "Grappling Hook"\r
+\r
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296\r
+#, c-format\r
+msgid "%s did the impossible"\r
+msgstr "%s ha fatto l'impossibile"\r
+\r
+#: qcsrc/server/w_hook.qc:268\r
+#, c-format\r
+msgid "%s has run into %s's gravity bomb"\r
+msgstr "%s è corso nella bomba di gravità di %s"\r
+\r
+#: qcsrc/server/w_laser.qc:311\r
+#, c-format\r
+msgid "%s lasered themself to hell"\r
+msgstr "%s si è \"laserato\" all'inferno"\r
+\r
+#: qcsrc/server/w_laser.qc:315\r
+#, c-format\r
+msgid "%s was cut in half by %s's gauntlet"\r
+msgstr "%s è stato tagliato a metà dal guanto di %s"\r
+\r
+#: qcsrc/server/w_laser.qc:317\r
+#, c-format\r
+msgid "%s was lasered to death by %s"\r
+msgstr "%s è stato \"laserato\" alla morte da %s"\r
+\r
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501\r
+#, c-format\r
+msgid "%s exploded"\r
+msgstr "%s è esploso"\r
+\r
+#: qcsrc/server/w_minelayer.qc:527\r
+#, c-format\r
+msgid "%s got too close to %s's mine"\r
+msgstr "%s s'è avvicinato troppo alla mina di %s"\r
+\r
+#: qcsrc/server/w_minelayer.qc:529\r
+#, c-format\r
+msgid "%s almost dodged %s's mine"\r
+msgstr "%s ha quasi schivato la mina di %s"\r
+\r
+#: qcsrc/server/w_minelayer.qc:531\r
+#, c-format\r
+msgid "%s stepped on %s's mine"\r
+msgstr "%s è passato sopra la mina di %s"\r
+\r
+#: qcsrc/server/w_minstanex.qc:2\r
+msgid "MinstaNex"\r
+msgstr "MinstaNex"\r
+\r
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253\r
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317\r
+#, c-format\r
+msgid "%s is now thinking with portals"\r
+msgstr "%s sta ora pensando con i portali"\r
+\r
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255\r
+#, c-format\r
+msgid "%s has been vaporized by %s"\r
+msgstr "%s è stato vaporizzato da %s"\r
+\r
+#: qcsrc/server/w_porto.qc:298\r
+#, c-format\r
+msgid "%s felt %s doing the impossible to him"\r
+msgstr "%s ha sentito %s fargli l'impossibile"\r
+\r
+#: qcsrc/server/w_rifle.qc:233\r
+#, c-format\r
+msgid "%s shot themself automatically"\r
+msgstr "%s si è sparato da solo automaticamente"\r
+\r
+#: qcsrc/server/w_rifle.qc:235\r
+#, c-format\r
+msgid "%s sniped themself somehow"\r
+msgstr "%s si è fucilato da solo in qualche modo"\r
+\r
+#: qcsrc/server/w_rifle.qc:242\r
+#, c-format\r
+msgid "%s failed to hide from %s's bullet hail"\r
+msgstr "%s non è riuscito a nascondersi dalla raffica di proiettili di %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:244\r
+#, c-format\r
+msgid "%s died in %s's bullet hail"\r
+msgstr "%s è morto nella raffica di proiettili di %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:251\r
+#, c-format\r
+msgid "%s failed to hide from %s's rifle"\r
+msgstr "%s non è riuscito a nascondersi dal fucile di %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:256\r
+#, c-format\r
+msgid "%s got hit in the head by %s"\r
+msgstr "%s ha preso un colpo in testa da %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321\r
+#, c-format\r
+msgid "%s was sniped by %s"\r
+msgstr "%s è stato fucilato da %s"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:505\r
+#, c-format\r
+msgid "%s got too close to %s's rocket"\r
+msgstr "%s s'è avvicinato troppo al razzo di %s"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:507\r
+#, c-format\r
+msgid "%s almost dodged %s's rocket"\r
+msgstr "%s ha quasi schivato il razzo di %s"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:509\r
+#, c-format\r
+msgid "%s ate %s's rocket"\r
+msgstr "%s ha mangiato il razzo di %s"\r
+\r
+#: qcsrc/server/w_seeker.qc:2\r
+msgid "T.A.G. Seeker"\r
+msgstr "T.A.G. Seeker"\r
+\r
+#: qcsrc/server/w_seeker.qc:659\r
+#, c-format\r
+msgid "%s was tagged by %s"\r
+msgstr "%s è stato contrassegnato da %s"\r
+\r
+#: qcsrc/server/w_shotgun.qc:213\r
+#, c-format\r
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"\r
+msgstr "%2$s ^7ha schiaffeggiato %1$s ^7un pò con un grosso ^2shotgun"\r
+\r
+#: qcsrc/server/w_shotgun.qc:215\r
+#, c-format\r
+msgid "%s was gunned by %s"\r
+msgstr "%s è stato sparato da %s"\r
+\r
+#: qcsrc/server/w_tuba.qc:2\r
+#, c-format\r
+msgid "@!#%'n Tuba"\r
+msgstr "@!#%'n Tuba"\r
+\r
+#: qcsrc/server/w_tuba.qc:252\r
+#, c-format\r
+msgid "%s hurt his own ears with the @!#%%'n Tuba"\r
+msgstr "%s s'è fatto male alle orecchie con la @!#%%'n Tuba"\r
+\r
+#: qcsrc/server/w_tuba.qc:256\r
+#, c-format\r
+msgid "%s died of %s's great playing on the @!#%%'n Tuba"\r
+msgstr "%s è morto nella gran esibizione di %s con la @!#%%'n Tuba"\r
+\r
+#: qcsrc/server/w_uzi.qc:323\r
+#, c-format\r
+msgid "%s was riddled full of holes by %s"\r
+msgstr "%s è stato riempito di buchi da %s"\r
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: qcsrc/client/mapvoting.qc:28
-msgid " (1 vote)"
+#: qcsrc/client/scoreboard.qc:19
+msgid "SCO^bckills"
msgstr ""
-#: qcsrc/client/mapvoting.qc:30
-#, c-format
-msgid " (%d votes)"
+#: qcsrc/client/scoreboard.qc:20
+msgid "SCO^bctime"
msgstr ""
-#: qcsrc/client/mapvoting.qc:113
-msgid "Don't care"
+#: qcsrc/client/scoreboard.qc:21
+msgid "SCO^caps"
msgstr ""
-#: qcsrc/client/mapvoting.qc:194
-msgid "Vote for a map"
+#: qcsrc/client/scoreboard.qc:22
+msgid "SCO^deaths"
msgstr ""
-#: qcsrc/client/mapvoting.qc:199
-#, c-format
-msgid "%d seconds left"
+#: qcsrc/client/scoreboard.qc:23
+msgid "SCO^destroyed"
msgstr ""
-#: qcsrc/client/mapvoting.qc:263
+#: qcsrc/client/scoreboard.qc:24
+msgid "SCO^drops"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:25
+msgid "SCO^faults"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:26
+msgid "SCO^fckills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:27
+msgid "SCO^goals"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:28
+msgid "SCO^kckills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:29
+msgid "SCO^kdratio"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:30
+msgid "SCO^k/d"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:31
+msgid "SCO^kd"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:32
+msgid "SCO^kdr"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:33
+msgid "SCO^kills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:34
+msgid "SCO^laps"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:35
+msgid "SCO^lives"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:36
+msgid "SCO^losses"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:37
+msgid "SCO^name"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:38
+msgid "SCO^nick"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:39
+msgid "SCO^objectives"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:40
+msgid "SCO^pickups"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:41
+msgid "SCO^ping"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:42
+msgid "SCO^pl"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:43
+msgid "SCO^pushes"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:44
+msgid "SCO^rank"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:45
+msgid "SCO^returns"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:46
+msgid "SCO^revivals"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:47
+msgid "SCO^score"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:48
+msgid "SCO^suicides"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:49
+msgid "SCO^takes"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:50
+msgid "SCO^ticks"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:239
msgid ""
-"mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
+"You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"
msgstr ""
-#: qcsrc/client/mapvoting.qc:273
-msgid "^1Error:^7 Couldn't find pak index.\n"
+#: qcsrc/client/scoreboard.qc:240
+msgid "^3|---------------------------------------------------------------|\n"
msgstr ""
-#: qcsrc/client/mapvoting.qc:282
-msgid "Requesting preview...\n"
+#: qcsrc/client/scoreboard.qc:241 qcsrc/client/Main.qc:369
+msgid "Usage:\n"
msgstr ""
-#: qcsrc/client/Main.qc:30
-msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
+#: qcsrc/client/scoreboard.qc:242
+msgid "^2scoreboard_columns_set default\n"
msgstr ""
-#: qcsrc/client/Main.qc:56
+#: qcsrc/client/scoreboard.qc:243
+msgid "^2scoreboard_columns_set ^7filed1 field2 ...\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:244
+msgid "The following field names are recognized (case insensitive):\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:245
msgid ""
-"^3Your engine build is outdated\n"
-"^3This Server uses a newer QC VM. Please update!\n"
+"You can use a ^3|^7 to start the right-aligned fields.\n"
+"\n"
msgstr ""
-#: qcsrc/client/Main.qc:66
-#, c-format
-msgid "^4CSQC Build information: ^1%s\n"
+#: qcsrc/client/scoreboard.qc:247
+msgid "^3name^7 or ^3nick^7 Name of a player\n"
msgstr ""
-#: qcsrc/client/Main.qc:232 qcsrc/client/Main.qc:248
-#, c-format
-msgid "trying to switch to unsupported team %d\n"
+#: qcsrc/client/scoreboard.qc:248
+msgid "^3ping^7 Ping time\n"
msgstr ""
-#: qcsrc/client/Main.qc:364 qcsrc/client/scoreboard.qc:241
-msgid "Usage:\n"
+#: qcsrc/client/scoreboard.qc:249
+msgid "^3pl^7 Packet loss\n"
msgstr ""
-#: qcsrc/client/Main.qc:365
-msgid "hud_save configname (saves to hud_skinname_configname.cfg)\n"
+#: qcsrc/client/scoreboard.qc:250
+msgid "^3kills^7 Number of kills\n"
msgstr ""
-#: qcsrc/client/Main.qc:512
-msgid "Usage: cl_cmd COMMAND..., where possible commands are:\n"
+#: qcsrc/client/scoreboard.qc:251
+msgid "^3deaths^7 Number of deaths\n"
msgstr ""
-#: qcsrc/client/Main.qc:513
-msgid " settemp cvar value\n"
+#: qcsrc/client/scoreboard.qc:252
+msgid "^3suicides^7 Number of suicides\n"
msgstr ""
-#: qcsrc/client/Main.qc:514
-msgid " scoreboard_columns_set ...\n"
+#: qcsrc/client/scoreboard.qc:253
+msgid "^3frags^7 kills - suicides\n"
msgstr ""
-#: qcsrc/client/Main.qc:515
-msgid " scoreboard_columns_help\n"
+#: qcsrc/client/scoreboard.qc:254
+msgid "^3kd^7 The kill-death ratio\n"
msgstr ""
-#: qcsrc/client/Main.qc:720
-msgid "A CSQC entity changed its owner!\n"
+#: qcsrc/client/scoreboard.qc:255
+msgid ""
+"^3caps^7 How often a flag (CTF) or a key (KeyHunt) was "
+"captured\n"
msgstr ""
-#: qcsrc/client/Main.qc:934
-msgid "A CSQC entity changed its type!\n"
+#: qcsrc/client/scoreboard.qc:256
+msgid ""
+"^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a "
+"ball (Keepaway) was picked up\n"
msgstr ""
-#: qcsrc/client/Main.qc:972
-#, c-format
-msgid "unknown entity type in CSQC_Ent_Update: %d\n"
+#: qcsrc/client/scoreboard.qc:257
+msgid "^3fckills^7 Number of flag carrier kills\n"
msgstr ""
-#: qcsrc/client/Main.qc:1444
-#, c-format
-msgid "%s (not bound)"
+#: qcsrc/client/scoreboard.qc:258
+msgid "^3returns^7 Number of flag returns\n"
msgstr ""
-#: qcsrc/client/Main.qc:1449 qcsrc/client/hud.qc:407
-#, c-format
-msgid "%s (%s)"
+#: qcsrc/client/scoreboard.qc:259
+msgid "^3drops^7 Number of flag drops\n"
msgstr ""
-#: qcsrc/client/target_music.qc:93 qcsrc/client/target_music.qc:181
-#, c-format
-msgid "Cannot initialize sound %s\n"
+#: qcsrc/client/scoreboard.qc:260
+msgid "^3lives^7 Number of lives (LMS)\n"
msgstr ""
-#: qcsrc/client/hud.qc:337
-msgid "1st"
+#: qcsrc/client/scoreboard.qc:261
+msgid "^3rank^7 Player rank\n"
msgstr ""
-#: qcsrc/client/hud.qc:339
-msgid "2nd"
+#: qcsrc/client/scoreboard.qc:262
+msgid "^3pushes^7 Number of players pushed into void\n"
msgstr ""
-#: qcsrc/client/hud.qc:341
-msgid "3rd"
+#: qcsrc/client/scoreboard.qc:263
+msgid ""
+"^3destroyed^7 Number of keys destroyed by pushing them into "
+"void\n"
msgstr ""
-#: qcsrc/client/hud.qc:343
-#, c-format
-msgid "%dth"
+#: qcsrc/client/scoreboard.qc:264
+msgid "^3kckills^7 Number of keys carrier kills\n"
msgstr ""
-#: qcsrc/client/hud.qc:375
-#, c-format
-msgid " (-%dL)"
+#: qcsrc/client/scoreboard.qc:265
+msgid "^3losses^7 Number of times a key was lost\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:266
+msgid "^3laps^7 Number of laps finished (race/cts)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:267
+msgid "^3time^7 Total time raced (race/cts)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:268
+msgid "^3fastest^7 Time of fastest lap (race/cts)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:269
+msgid "^3ticks^7 Number of ticks (DOM)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:270
+msgid "^3takes^7 Number of domination points taken (DOM)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:271
+msgid "^3bckills^7 Number of ball carrier kills\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:272
+msgid ""
+"^3bctime^7 Total amount of time holding the ball in "
+"Keepaway\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:273
+msgid ""
+"^3score^7 Total score\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:275
+msgid ""
+"Before a field you can put a + or - sign, then a comma separated list\n"
+"of game types, then a slash, to make the field show up only in these\n"
+"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.\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:280
+msgid ""
+"The special game type names 'teams' and 'noteams' can be used to\n"
+"include/exclude ALL teams/noteams game modes.\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:283
+msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:284
+msgid ""
+"will display name, ping and pl aligned to the left, and the fields\n"
+"right of the vertical bar aligned to the right.\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:286
+msgid ""
+"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
+"other gamemodes except DM.\n"
msgstr ""
-#: qcsrc/client/hud.qc:380
+#: qcsrc/client/scoreboard.qc:432 qcsrc/client/scoreboard.qc:447
+#: qcsrc/client/scoreboard.qc:457 qcsrc/client/scoreboard.qc:466
+#: qcsrc/client/scoreboard.qc:475
#, c-format
-msgid " (+%dL)"
+msgid "fixed missing field '%s'\n"
msgstr ""
-#: qcsrc/client/hud.qc:396
-msgid "Start line"
+#: qcsrc/client/scoreboard.qc:515 qcsrc/client/scoreboard.qc:522
+msgid "N/A"
msgstr ""
-#: qcsrc/client/hud.qc:398 qcsrc/client/hud.qc:402
-msgid "Finish line"
+#: qcsrc/client/scoreboard.qc:950
+#, c-format
+msgid "Accuracy stats (average %d%%)"
msgstr ""
-#: qcsrc/client/hud.qc:400
+#: qcsrc/client/scoreboard.qc:1015
#, c-format
-msgid "Intermediate %d"
+msgid "%d%%"
msgstr ""
-#: qcsrc/client/hud.qc:409
-#, c-format
-msgid "%s (%s %s)"
+#: qcsrc/client/scoreboard.qc:1075
+msgid "Rankings"
msgstr ""
-#: qcsrc/client/hud.qc:553
-#, c-format
-msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
+#: qcsrc/client/scoreboard.qc:1170
+msgid "Scoreboard"
msgstr ""
-#: qcsrc/client/hud.qc:557
+#: qcsrc/client/scoreboard.qc:1215
#, c-format
-msgid "^1Couldn't write to %s\n"
+msgid "Speed award: %d ^7(%s^7)"
msgstr ""
-#: qcsrc/client/hud.qc:1837
-msgid "Out of ammo"
+#: qcsrc/client/scoreboard.qc:1219
+#, c-format
+msgid "All-time fastest: %d ^7(%s^7)"
msgstr ""
-#: qcsrc/client/hud.qc:1841
-msgid "Don't have"
+#: qcsrc/client/scoreboard.qc:1246 qcsrc/client/teamplay.qc:63
+msgid "Spectators"
msgstr ""
-#: qcsrc/client/hud.qc:1845
-msgid "Unavailable"
+#: qcsrc/client/scoreboard.qc:1252
+#, c-format
+msgid "playing on ^2%s^7"
msgstr ""
-#: qcsrc/client/hud.qc:2696
+#: qcsrc/client/scoreboard.qc:1259 qcsrc/client/scoreboard.qc:1264
#, c-format
-msgid "^1%s^1 couldn't take it anymore\n"
+msgid " for up to ^1%1.0f minutes^7"
msgstr ""
-#: qcsrc/client/hud.qc:2700 qcsrc/client/hud.qc:2992
-#, c-format
-msgid "^1%s^1 died\n"
+#: qcsrc/client/scoreboard.qc:1268 qcsrc/client/scoreboard.qc:1287
+msgid " or"
msgstr ""
-#: qcsrc/client/hud.qc:2704
+#: qcsrc/client/scoreboard.qc:1271 qcsrc/client/scoreboard.qc:1278
#, c-format
-msgid "^7%s^7 committed suicide. What's the point of living without ammo?\n"
+msgid " until ^3%s %s^7"
msgstr ""
-#: qcsrc/client/hud.qc:2708
-#, c-format
-msgid "^1%s^1 thought they found a nice camping ground\n"
+#: qcsrc/client/scoreboard.qc:1272 qcsrc/client/scoreboard.qc:1279
+#: qcsrc/client/scoreboard.qc:1291 qcsrc/client/scoreboard.qc:1298
+msgid "SCO^points"
msgstr ""
-#: qcsrc/client/hud.qc:2712
-#, c-format
-msgid "^1%s^1 didn't become friends with the Lord of Teamplay\n"
+#: qcsrc/client/scoreboard.qc:1273 qcsrc/client/scoreboard.qc:1280
+#: qcsrc/client/scoreboard.qc:1292 qcsrc/client/scoreboard.qc:1299
+msgid "SCO^is beaten"
msgstr ""
-#: qcsrc/client/hud.qc:2716
+#: qcsrc/client/scoreboard.qc:1290 qcsrc/client/scoreboard.qc:1297
#, c-format
-msgid "^1%s^1 unfairly eliminated themself\n"
+msgid " until a lead of ^3%s %s^7"
msgstr ""
-#: qcsrc/client/hud.qc:2720
-#, c-format
-msgid "^1%s^1 burned to death\n"
+#: qcsrc/client/waypointsprites.qc:254
+msgid "Push"
msgstr ""
-#: qcsrc/client/hud.qc:2724
-#, c-format
-msgid "^1%s^1 couldn't resist the urge to self-destruct\n"
+#: qcsrc/client/waypointsprites.qc:255
+msgid "Destroy"
msgstr ""
-#: qcsrc/client/hud.qc:2728
-#, c-format
-msgid "^1%s^1 ended it all after a %d kill spree\n"
+#: qcsrc/client/waypointsprites.qc:256
+msgid "Defend"
msgstr ""
-#: qcsrc/client/hud.qc:2745
-#, c-format
-msgid "^1%s^1 took action against a team mate\n"
+#: qcsrc/client/waypointsprites.qc:257
+msgid "Blue base"
msgstr ""
-#: qcsrc/client/hud.qc:2747
-#, c-format
-msgid "^1%s^1 mows down a team mate\n"
+#: qcsrc/client/waypointsprites.qc:258
+msgid "DANGER"
msgstr ""
-#: qcsrc/client/hud.qc:2752
-#, c-format
-msgid "^1%s^1 ended a %d scoring spree by going against a team mate\n"
+#: qcsrc/client/waypointsprites.qc:259
+msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/hud.qc:2754
-#, c-format
-msgid "^1%s^1 ended a %d kill spree by killing a team mate\n"
+#: qcsrc/client/waypointsprites.qc:260
+msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/hud.qc:2758
-#, c-format
-msgid "^1%s^1's %s scoring spree was ended by a team mate!\n"
+#: qcsrc/client/waypointsprites.qc:261
+msgid "Help me!"
msgstr ""
-#: qcsrc/client/hud.qc:2760
-#, c-format
-msgid "^1%s^1's %s kill spree was ended by a team mate!\n"
+#: qcsrc/client/waypointsprites.qc:262
+msgid "Here"
msgstr ""
-#: qcsrc/client/hud.qc:2764
-#, c-format
-msgid "^1%s^1 drew first blood\n"
+#: qcsrc/client/waypointsprites.qc:263
+msgid "Dropped key"
msgstr ""
-#: qcsrc/client/hud.qc:2768
-#, c-format
-msgid "^1%s^1 tried to occupy %s^1's teleport destination space\n"
+#: qcsrc/client/waypointsprites.qc:264 qcsrc/client/waypointsprites.qc:266
+#: qcsrc/client/waypointsprites.qc:267 qcsrc/client/waypointsprites.qc:268
+#: qcsrc/client/waypointsprites.qc:269
+msgid "Key carrier"
msgstr ""
-#: qcsrc/client/hud.qc:2770
-#, c-format
-msgid "^1%s^1 was telefragged by %s\n"
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Run here"
msgstr ""
-#: qcsrc/client/hud.qc:2775
-#, c-format
-msgid "^1%s^1 was drowned by %s\n"
+#: qcsrc/client/waypointsprites.qc:270
+msgid "Red base"
msgstr ""
-#: qcsrc/client/hud.qc:2780
-#, c-format
-msgid "^1%s^1 was slimed by %s\n"
+#: qcsrc/client/waypointsprites.qc:271
+msgid "Waypoint"
msgstr ""
-#: qcsrc/client/hud.qc:2785
-#, c-format
-msgid "^1%s^1 was cooked by %s\n"
+#: qcsrc/client/waypointsprites.qc:272 qcsrc/client/waypointsprites.qc:273
+#: qcsrc/client/waypointsprites.qc:274
+msgid "Generator"
msgstr ""
-#: qcsrc/client/hud.qc:2790
-#, c-format
-msgid "^1%s^1 was grounded by %s\n"
+#: qcsrc/client/waypointsprites.qc:275 qcsrc/client/waypointsprites.qc:276
+#: qcsrc/client/waypointsprites.qc:277 qcsrc/client/waypointsprites.qc:278
+#: qcsrc/client/waypointsprites.qc:279 qcsrc/client/waypointsprites.qc:280
+#: qcsrc/client/waypointsprites.qc:281 qcsrc/client/waypointsprites.qc:282
+#: qcsrc/client/waypointsprites.qc:306 qcsrc/client/waypointsprites.qc:307
+#: qcsrc/client/waypointsprites.qc:308 qcsrc/client/waypointsprites.qc:309
+#: qcsrc/client/waypointsprites.qc:310
+msgid "Control point"
msgstr ""
-#: qcsrc/client/hud.qc:2795
-#, c-format
-msgid "^1%s^1 was shot into space by %s\n"
+#: qcsrc/client/waypointsprites.qc:283
+msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/hud.qc:2800
-#, c-format
-msgid "^1%s^1 was conserved by %s\n"
+#: qcsrc/client/waypointsprites.qc:284 qcsrc/client/waypointsprites.qc:286
+msgid "Finish"
msgstr ""
-#: qcsrc/client/hud.qc:2806
-#, c-format
-msgid "^1%s^1 was thrown into a world of hurt by %s\n"
+#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:286
+msgid "Start"
msgstr ""
-#: qcsrc/client/hud.qc:2810
-#, c-format
-msgid "^1%s^1 was crushed by %s\n"
+#: qcsrc/client/waypointsprites.qc:287 qcsrc/client/waypointsprites.qc:288
+msgid "Ball"
msgstr ""
-#: qcsrc/client/hud.qc:2814
-#, c-format
-msgid "^1%s^1 got shredded by %s\n"
+#: qcsrc/client/waypointsprites.qc:289
+msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/hud.qc:2818
-#, c-format
-msgid "^1%s^1 was blasted to bits by %s\n"
+#: qcsrc/client/waypointsprites.qc:290 qcsrc/server/w_laser.qc:2
+msgid "Laser"
msgstr ""
-#: qcsrc/client/hud.qc:2822
-#, c-format
-msgid "^1%s^1 got caught in the destruction of %s^1's vehicle\n"
+#: qcsrc/client/waypointsprites.qc:291 qcsrc/server/w_shotgun.qc:2
+msgid "Shotgun"
msgstr ""
-#: qcsrc/client/hud.qc:2826
-#, c-format
-msgid "^1%s^1 was bolted down by %s\n"
+#: qcsrc/client/waypointsprites.qc:292 qcsrc/server/w_uzi.qc:2
+msgid "Machine Gun"
msgstr ""
-#: qcsrc/client/hud.qc:2830
-#, c-format
-msgid "^1%s^1 could find no shelter from %s^1's rockets\n"
+#: qcsrc/client/waypointsprites.qc:293 qcsrc/server/w_grenadelauncher.qc:2
+msgid "Mortar"
msgstr ""
-#: qcsrc/client/hud.qc:2834
-#, c-format
-msgid "^1%s^1 dies when %s^1's wakizashi dies.\n"
+#: qcsrc/client/waypointsprites.qc:294 qcsrc/server/w_electro.qc:2
+msgid "Electro"
msgstr ""
-#: qcsrc/client/hud.qc:2838
-#, c-format
-msgid "^1%s^1 was pushed into the line of fire by %s\n"
+#: qcsrc/client/waypointsprites.qc:295 qcsrc/server/w_crylink.qc:2
+msgid "Crylink"
msgstr ""
-#: qcsrc/client/hud.qc:2842
-#, c-format
-msgid "^1%s^1 was pushed into an accident by %s\n"
+#: qcsrc/client/waypointsprites.qc:296 qcsrc/server/w_nex.qc:2
+msgid "Nex"
msgstr ""
-#: qcsrc/client/hud.qc:2846
-#, c-format
-msgid "^1%s^1 was unfairly eliminated by %s\n"
+#: qcsrc/client/waypointsprites.qc:297 qcsrc/server/w_hagar.qc:2
+msgid "Hagar"
msgstr ""
-#: qcsrc/client/hud.qc:2850
-#, c-format
-msgid "^1%s^1 was burnt to death by %s\n"
+#: qcsrc/client/waypointsprites.qc:298 qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
msgstr ""
-#: qcsrc/client/hud.qc:2862
-#, c-format
-msgid "^1%s^1 was fragged by %s\n"
+#: qcsrc/client/waypointsprites.qc:299 qcsrc/server/w_porto.qc:2
+msgid "Port-O-Launch"
msgstr ""
-#: qcsrc/client/hud.qc:2867
-#, c-format
-msgid "^1%s^1's %s scoring spree was ended by %s\n"
+#: qcsrc/client/waypointsprites.qc:300
+msgid "Minstanex"
msgstr ""
-#: qcsrc/client/hud.qc:2869
-#, c-format
-msgid "^1%s^1's %s kill spree was ended by %s\n"
+#: qcsrc/client/waypointsprites.qc:301
+msgid "Hook"
msgstr ""
-#: qcsrc/client/hud.qc:2872
-#, c-format
-msgid "^1%s^1 made %s scores in a row\n"
+#: qcsrc/client/waypointsprites.qc:302 qcsrc/server/w_fireball.qc:2
+msgid "Fireball"
msgstr ""
-#: qcsrc/client/hud.qc:2874
-#, c-format
-msgid "^1%s^1 has %s frags in a row\n"
+#: qcsrc/client/waypointsprites.qc:303
+msgid "HLAC"
msgstr ""
-#: qcsrc/client/hud.qc:2877
-#, c-format
-msgid "%s^7 made a ^1TRIPLE SCORE\n"
+#: qcsrc/client/waypointsprites.qc:304 qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
msgstr ""
-#: qcsrc/client/hud.qc:2879
-#, c-format
-msgid "%s^7 made a ^1TRIPLE FRAG\n"
+#: qcsrc/client/waypointsprites.qc:305 qcsrc/server/w_minelayer.qc:2
+msgid "Mine Layer"
msgstr ""
-#: qcsrc/client/hud.qc:2882
-#, c-format
-msgid "%s^7 unleashes ^1SCORING RAGE\n"
+#: qcsrc/client/waypointsprites.qc:311
+msgid "Invisibility"
msgstr ""
-#: qcsrc/client/hud.qc:2884
-#, c-format
-msgid "%s^7 unleashes ^1RAGE\n"
+#: qcsrc/client/waypointsprites.qc:312
+msgid "Extra life"
msgstr ""
-#: qcsrc/client/hud.qc:2887
-#, c-format
-msgid "%s^7 made ^1TEN SCORES IN A ROW!\n"
+#: qcsrc/client/waypointsprites.qc:313
+msgid "Speed"
msgstr ""
-#: qcsrc/client/hud.qc:2889
-#, c-format
-msgid "%s^7 starts the ^1MASSACRE!\n"
+#: qcsrc/client/waypointsprites.qc:314
+msgid "Strength"
msgstr ""
-#: qcsrc/client/hud.qc:2892
-#, c-format
-msgid "%s^7 made ^1FIFTEEN SCORES IN A ROW!\n"
+#: qcsrc/client/waypointsprites.qc:315
+msgid "Shield"
msgstr ""
-#: qcsrc/client/hud.qc:2894
-#, c-format
-msgid "%s^7 executes ^1MAYHEM!\n"
+#: qcsrc/client/waypointsprites.qc:316
+msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/hud.qc:2897
-#, c-format
-msgid "%s^7 made ^1TWENTY SCORES IN A ROW!\n"
+#: qcsrc/client/waypointsprites.qc:317
+msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/hud.qc:2899
-#, c-format
-msgid "%s^7 is a ^1BERSERKER!\n"
+#: qcsrc/client/waypointsprites.qc:318
+msgid "Frozen!"
msgstr ""
-#: qcsrc/client/hud.qc:2902
-#, c-format
-msgid "%s^7 made ^1TWENTY FIVE SCORES IN A ROW!\n"
+#: qcsrc/client/waypointsprites.qc:319
+msgid "Tagged"
msgstr ""
-#: qcsrc/client/hud.qc:2904
-#, c-format
-msgid "%s^7 inflicts ^1CARNAGE!\n"
+#: qcsrc/client/waypointsprites.qc:320
+msgid "Vehicle"
msgstr ""
-#: qcsrc/client/hud.qc:2907
-#, c-format
-msgid "%s^7 made ^1THIRTY SCORES IN A ROW!\n"
+#: qcsrc/client/waypointsprites.qc:590
+msgid "Spam"
msgstr ""
-#: qcsrc/client/hud.qc:2909
+#: qcsrc/client/waypointsprites.qc:594
#, c-format
-msgid "%s^7 unleashes ^1ARMAGEDDON!\n"
+msgid "%s needing help!"
msgstr ""
-#: qcsrc/client/hud.qc:2917
+#: qcsrc/client/hud_config.qc:136
#, c-format
-msgid "^1%s^1 was in the water for too long\n"
+msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud.qc:2919
+#: qcsrc/client/hud_config.qc:140
#, c-format
-msgid "^1%s^1 drowned\n"
+msgid "^1Couldn't write to %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:2924
-#, c-format
-msgid "^1%s^1 was slimed\n"
+#: qcsrc/client/ctf.qc:35
+msgid "----- Order Menu -----"
msgstr ""
-#: qcsrc/client/hud.qc:2930
+#: qcsrc/client/ctf.qc:36
#, c-format
-msgid "^1%s^1 found a hot place\n"
+msgid "Order: %s"
msgstr ""
-#: qcsrc/client/hud.qc:2932
-#, c-format
-msgid "^1%s^1 turned into hot slag\n"
+#: qcsrc/client/ctf.qc:37
+msgid "1) ^3previous page"
msgstr ""
-#: qcsrc/client/hud.qc:2939
-#, c-format
-msgid "^1%s^1 tested gravity (and it worked)\n"
+#: qcsrc/client/ctf.qc:38
+msgid "2) ^3next page"
msgstr ""
-#: qcsrc/client/hud.qc:2941
-#, c-format
-msgid "^1%s^1 hit the ground with a crunch\n"
+#: qcsrc/client/ctf.qc:55 qcsrc/client/ctf.qc:161
+msgid "ESC) Exit Menu"
msgstr ""
-#: qcsrc/client/hud.qc:2946
+#: qcsrc/client/ctf.qc:126
#, c-format
-msgid "^1%s^1 became a shooting star\n"
+msgid "Couldn't find player %d\n"
msgstr ""
-#: qcsrc/client/hud.qc:2952
-#, c-format
-msgid "^1%s^1 discovered a swamp\n"
+#: qcsrc/client/ctf.qc:154
+msgid "----- Command Menu -----"
msgstr ""
-#: qcsrc/client/hud.qc:2954
-#, c-format
-msgid "^1%s^1 is now conserved for centuries to come\n"
+#: qcsrc/client/ctf.qc:155
+msgid "Issue orders:"
msgstr ""
-#: qcsrc/client/hud.qc:2959
-#, c-format
-msgid "^1%s^1 was mowed down by a turret \n"
+#: qcsrc/client/ctf.qc:156
+msgid " 1) Attack"
msgstr ""
-#: qcsrc/client/hud.qc:2971
-#, c-format
-msgid "^1%s^1 died in an accident\n"
+#: qcsrc/client/ctf.qc:158
+msgid " 2) Defend"
msgstr ""
-#: qcsrc/client/hud.qc:2975
-#, c-format
-msgid "^1%s^1 was unfairly eliminated\n"
+#: qcsrc/client/ctf.qc:160
+msgid "3) Resign from command."
msgstr ""
-#: qcsrc/client/hud.qc:2981
-#, c-format
-msgid "^1%s^1 felt a little hot\n"
+#: qcsrc/client/ctf.qc:212
+msgid "You're commander!"
msgstr ""
-#: qcsrc/client/hud.qc:2983
-#, c-format
-msgid "^1%s^1 burnt to death\n"
+#: qcsrc/client/ctf.qc:215
+msgid "Awaiting orders..."
msgstr ""
-#: qcsrc/client/hud.qc:2990
-#, c-format
-msgid "^1%s^1 needs a restart\n"
+#: qcsrc/client/Main.qc:30
+msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/hud.qc:2997
-#, c-format
-msgid "^1%s^1 needs a restart after a %d scoring spree\n"
+#: qcsrc/client/Main.qc:56
+msgid ""
+"^3Your engine build is outdated\n"
+"^3This Server uses a newer QC VM. Please update!\n"
msgstr ""
-#: qcsrc/client/hud.qc:2999
+#: qcsrc/client/Main.qc:66
#, c-format
-msgid "^1%s^1 died with a %d kill spree\n"
+msgid "^4CSQC Build information: ^1%s\n"
msgstr ""
-#: qcsrc/client/hud.qc:3003
+#: qcsrc/client/Main.qc:237 qcsrc/client/Main.qc:253
#, c-format
-msgid "%s^7 got the %s\n"
+msgid "trying to switch to unsupported team %d\n"
msgstr ""
-#: qcsrc/client/hud.qc:3006
-#, c-format
-msgid "%s^7 lost the %s\n"
+#: qcsrc/client/Main.qc:370
+msgid "hud_save configname (saves to hud_skinname_configname.cfg)\n"
msgstr ""
-#: qcsrc/client/hud.qc:3009
-#, c-format
-msgid "%s^7 picked up the %s\n"
+#: qcsrc/client/Main.qc:494
+msgid "Usage: cl_cmd COMMAND..., where possible commands are:\n"
msgstr ""
-#: qcsrc/client/hud.qc:3012
-#, c-format
-msgid "%s^7 returned the %s\n"
+#: qcsrc/client/Main.qc:495
+msgid " settemp cvar value\n"
msgstr ""
-#: qcsrc/client/hud.qc:3015
-#, c-format
-msgid "%s^7 captured the %s%s\n"
+#: qcsrc/client/Main.qc:496
+msgid " scoreboard_columns_set ...\n"
msgstr ""
-#: qcsrc/client/hud.qc:3034
-#, c-format
-msgid "%s^7 has picked up the ball!\n"
+#: qcsrc/client/Main.qc:497
+msgid " scoreboard_columns_help\n"
msgstr ""
-#: qcsrc/client/hud.qc:3039
+#: qcsrc/client/Main.qc:726
#, c-format
-msgid "%s^7 has dropped the ball!\n"
+msgid "A CSQC entity changed its owner! (edict: %d, classname: %s)\n"
msgstr ""
-#: qcsrc/client/hud.qc:3052
+#: qcsrc/client/Main.qc:964
#, c-format
-msgid "You are now on: %s"
+msgid "A CSQC entity changed its type! (edict: %d, classname: %s)\n"
msgstr ""
-#: qcsrc/client/hud.qc:3054
+#: qcsrc/client/Main.qc:1005
#, c-format
msgid ""
-"You have been moved into a different team to improve team balance\n"
-"You are now on: %s"
+"Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: "
+"%s)\n"
msgstr ""
-#: qcsrc/client/hud.qc:3057
-msgid "^1Reconsider your tactics, camper!"
+#: qcsrc/client/Main.qc:1461
+#, c-format
+msgid "%s (not bound)"
msgstr ""
-#: qcsrc/client/hud.qc:3059
-msgid "^1Die camper!"
+#: qcsrc/client/Main.qc:1466 qcsrc/client/hud.qc:230
+#, c-format
+msgid "%s (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:3062
-msgid "^1You are reinserted into the game for running out of ammo..."
+#: qcsrc/client/mapvoting.qc:28
+msgid " (1 vote)"
msgstr ""
-#: qcsrc/client/hud.qc:3064
-msgid "^1You were killed for running out of ammo..."
+#: qcsrc/client/mapvoting.qc:30
+#, c-format
+msgid " (%d votes)"
msgstr ""
-#: qcsrc/client/hud.qc:3067
-msgid "^1You need to preserve your health"
+#: qcsrc/client/mapvoting.qc:113
+msgid "Don't care"
msgstr ""
-#: qcsrc/client/hud.qc:3069
-msgid "^1You grew too old without taking your medicine"
+#: qcsrc/client/mapvoting.qc:194
+msgid "Vote for a map"
msgstr ""
-#: qcsrc/client/hud.qc:3072
-msgid "^1Don't go against team mates!"
+#: qcsrc/client/mapvoting.qc:200
+#, c-format
+msgid "%d seconds left"
msgstr ""
-#: qcsrc/client/hud.qc:3074
-msgid "^1Don't shoot your team mates!"
+#: qcsrc/client/mapvoting.qc:263
+msgid ""
+"mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
msgstr ""
-#: qcsrc/client/hud.qc:3079
-msgid "^1You need to be more careful!"
+#: qcsrc/client/mapvoting.qc:273
+msgid "^1Error:^7 Couldn't find pak index.\n"
msgstr ""
-#: qcsrc/client/hud.qc:3081
-msgid "^1You killed your own dumb self!"
+#: qcsrc/client/mapvoting.qc:282
+msgid "Requesting preview...\n"
msgstr ""
-#: qcsrc/client/hud.qc:3086
+#: qcsrc/client/movetypes.qc:163
#, c-format
-msgid "^1Moron! You went against %s, a team mate!"
+msgid "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"
msgstr ""
-#: qcsrc/client/hud.qc:3088
+#: qcsrc/client/movetypes.qc:166
#, c-format
-msgid "^1Moron! You fragged %s, a team mate!"
+msgid "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"
msgstr ""
-#: qcsrc/client/hud.qc:3092
-msgid "^1First score"
-msgstr ""
-
-#: qcsrc/client/hud.qc:3094
-msgid "^1First blood"
+#: qcsrc/client/miscfunctions.qc:23
+msgid "^1Begin!"
msgstr ""
-#: qcsrc/client/hud.qc:3098
-msgid "^1First casualty"
+#: qcsrc/client/miscfunctions.qc:34
+#, c-format
+msgid "^1Game starts in %d seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3100
-msgid "^1First victim"
+#: qcsrc/client/miscfunctions.qc:113
+msgid "^1RED^7 flag"
msgstr ""
-#: qcsrc/client/hud.qc:3104
-#, c-format
-msgid "^1You scored against ^7%s^1 who was typing!"
+#: qcsrc/client/miscfunctions.qc:118
+msgid "^4BLUE^7 flag"
msgstr ""
-#: qcsrc/client/hud.qc:3106
+#: qcsrc/client/miscfunctions.qc:126
#, c-format
-msgid "^1You typefragged ^7%s"
+msgid "You picked up the %s!"
msgstr ""
-#: qcsrc/client/hud.qc:3110
+#: qcsrc/client/miscfunctions.qc:130
#, c-format
-msgid "^1You were scored against by ^7%s^1 while you were typing!"
+msgid "You got the %s!"
msgstr ""
-#: qcsrc/client/hud.qc:3112
-#, c-format
-msgid "^1You were typefragged by ^7%s"
+#: qcsrc/client/miscfunctions.qc:283
+msgid "Trying to remove a team which is not in the teamlist!"
msgstr ""
-#: qcsrc/client/hud.qc:3116
-#, c-format
-msgid "^4You scored against ^7%s"
+#: qcsrc/client/teamplay.qc:64
+msgid "Red Team"
msgstr ""
-#: qcsrc/client/hud.qc:3118
-#, c-format
-msgid "^4You fragged ^7%s"
+#: qcsrc/client/teamplay.qc:65
+msgid "Blue Team"
msgstr ""
-#: qcsrc/client/hud.qc:3122
-#, c-format
-msgid "^1You were scored against by ^7%s"
+#: qcsrc/client/teamplay.qc:66
+msgid "Yellow Team"
msgstr ""
-#: qcsrc/client/hud.qc:3124
-#, c-format
-msgid "^1You were fragged by ^7%s"
+#: qcsrc/client/teamplay.qc:67
+msgid "Pink Team"
msgstr ""
-#: qcsrc/client/hud.qc:3129
-msgid "^1Watch your step!"
+#: qcsrc/client/hud.qc:160
+msgid "1st"
msgstr ""
-#: qcsrc/client/hud.qc:3194 qcsrc/client/hud.qc:3195
-#, c-format
-msgid "Player %d"
+#: qcsrc/client/hud.qc:162
+msgid "2nd"
msgstr ""
-#: qcsrc/client/hud.qc:3791
-msgid "^1Intermediate 1 (+15.42)"
+#: qcsrc/client/hud.qc:164
+msgid "3rd"
msgstr ""
-#: qcsrc/client/hud.qc:3793 qcsrc/client/hud.qc:3835 qcsrc/client/hud.qc:3876
+#: qcsrc/client/hud.qc:166
#, c-format
-msgid "^1PENALTY: %.1f (%s)"
+msgid "%dth"
msgstr ""
-#: qcsrc/client/hud.qc:3878
+#: qcsrc/client/hud.qc:198
#, c-format
-msgid "^2PENALTY: %.1f (%s)"
-msgstr ""
-
-#: qcsrc/client/hud.qc:3903
-msgid "^2Name ^7instead of \"^1Unregistered player^7\" in stats"
+msgid " (-%dL)"
msgstr ""
-#: qcsrc/client/hud.qc:3985
-msgid "A vote has been called for:"
+#: qcsrc/client/hud.qc:203
+#, c-format
+msgid " (+%dL)"
msgstr ""
-#: qcsrc/client/hud.qc:3987
-msgid "Allow servers to store and display your name?"
+#: qcsrc/client/hud.qc:219
+msgid "Start line"
msgstr ""
-#: qcsrc/client/hud.qc:3991
-msgid "^1Configure the HUD"
+#: qcsrc/client/hud.qc:221 qcsrc/client/hud.qc:225
+msgid "Finish line"
msgstr ""
-#: qcsrc/client/hud.qc:3995
+#: qcsrc/client/hud.qc:223
#, c-format
-msgid "Yes (%s): %d"
+msgid "Intermediate %d"
msgstr ""
-#: qcsrc/client/hud.qc:3997
+#: qcsrc/client/hud.qc:232
#, c-format
-msgid "No (%s): %d"
+msgid "%s (%s %s)"
msgstr ""
-#: qcsrc/client/hud.qc:4510 qcsrc/client/hud.qc:4513 qcsrc/client/hud.qc:4515
-msgid "Personal best"
+#: qcsrc/client/hud.qc:735
+msgid "Out of ammo"
msgstr ""
-#: qcsrc/client/hud.qc:4528 qcsrc/client/hud.qc:4531 qcsrc/client/hud.qc:4533
-msgid "Server best"
+#: qcsrc/client/hud.qc:739
+msgid "Don't have"
msgstr ""
-#: qcsrc/client/hud.qc:4765
-msgid "^3Player^7: This is the chat area."
+#: qcsrc/client/hud.qc:743
+msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:4828
+#: qcsrc/client/hud.qc:1476
#, c-format
-msgid "FPS: %.*f"
+msgid "^1%s^1 couldn't take it anymore\n"
msgstr ""
-#: qcsrc/client/hud.qc:4893
-msgid "^1Observing"
+#: qcsrc/client/hud.qc:1480 qcsrc/client/hud.qc:1784
+#, c-format
+msgid "^1%s^1 died\n"
msgstr ""
-#: qcsrc/client/hud.qc:4895
+#: qcsrc/client/hud.qc:1484
#, c-format
-msgid "^1Spectating: ^7%s"
+msgid "^7%s^7 committed suicide. What's the point of living without ammo?\n"
msgstr ""
-#: qcsrc/client/hud.qc:4899
+#: qcsrc/client/hud.qc:1488
#, c-format
-msgid "^1Press ^3%s^1 to spectate"
+msgid "^1%s^1 thought they found a nice camping ground\n"
msgstr ""
-#: qcsrc/client/hud.qc:4901
+#: qcsrc/client/hud.qc:1492
#, c-format
-msgid "^1Press ^3%s^1 for another player"
+msgid "^1%s^1 didn't become friends with the Lord of Teamplay\n"
msgstr ""
-#: qcsrc/client/hud.qc:4905
+#: qcsrc/client/hud.qc:1496
#, c-format
-msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
+msgid "^1%s^1 unfairly eliminated themself\n"
msgstr ""
-#: qcsrc/client/hud.qc:4907
+#: qcsrc/client/hud.qc:1500
#, c-format
-msgid "^1Press ^3%s^1 to observe"
+msgid "^1%s^1 burned to death\n"
msgstr ""
-#: qcsrc/client/hud.qc:4910
+#: qcsrc/client/hud.qc:1504
#, c-format
-msgid "^1Press ^3%s^1 for gamemode info"
+msgid "^1%s^1 couldn't resist the urge to self-destruct\n"
msgstr ""
-#: qcsrc/client/hud.qc:4914
-msgid "^1Wait for your turn to join"
+#: qcsrc/client/hud.qc:1508
+#, c-format
+msgid "^1%s^1 ended it all after a %d kill spree\n"
msgstr ""
-#: qcsrc/client/hud.qc:4920
-msgid "^1Match has already begun"
+#: qcsrc/client/hud.qc:1525
+#, c-format
+msgid "^1%s^1 took action against a team mate\n"
msgstr ""
-#: qcsrc/client/hud.qc:4922
-msgid "^1You have no more lives left"
+#: qcsrc/client/hud.qc:1527
+#, c-format
+msgid "^1%s^1 mows down a team mate\n"
msgstr ""
-#: qcsrc/client/hud.qc:4924 qcsrc/client/hud.qc:4927
+#: qcsrc/client/hud.qc:1532
#, c-format
-msgid "^1Press ^3%s^1 to join"
+msgid "^1%s^1 ended a %d scoring spree by going against a team mate\n"
msgstr ""
-#: qcsrc/client/hud.qc:4935
+#: qcsrc/client/hud.qc:1534
#, c-format
-msgid "^1Game starts in ^3%d^1 seconds"
+msgid "^1%s^1 ended a %d kill spree by killing a team mate\n"
msgstr ""
-#: qcsrc/client/hud.qc:4942
-msgid "^2Currently in ^1warmup^2 stage!"
+#: qcsrc/client/hud.qc:1538
+#, c-format
+msgid "^1%s^1's %s scoring spree was ended by a team mate!\n"
msgstr ""
-#: qcsrc/client/hud.qc:4957
+#: qcsrc/client/hud.qc:1540
#, c-format
-msgid "%sPress ^3%s%s to end warmup"
+msgid "^1%s^1's %s kill spree was ended by a team mate!\n"
msgstr ""
-#: qcsrc/client/hud.qc:4959
+#: qcsrc/client/hud.qc:1544
#, c-format
-msgid "%sPress ^3%s%s once you are ready"
+msgid "^1%s^1 drew first blood\n"
msgstr ""
-#: qcsrc/client/hud.qc:4964
-msgid "^2Waiting for others to ready up to end warmup..."
+#: qcsrc/client/hud.qc:1548
+#, c-format
+msgid "^1%s^1 tried to occupy %s^1's teleport destination space\n"
msgstr ""
-#: qcsrc/client/hud.qc:4966
-msgid "^2Waiting for others to ready up..."
+#: qcsrc/client/hud.qc:1550
+#, c-format
+msgid "^1%s^1 was telefragged by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:4972
+#: qcsrc/client/hud.qc:1555
#, c-format
-msgid "^2Press ^3%s^2 to end warmup"
+msgid "^1%s^1 was drowned by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:4993
-msgid "Teamnumbers are unbalanced!"
+#: qcsrc/client/hud.qc:1560
+#, c-format
+msgid "^1%s^1 was slimed by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:4998
+#: qcsrc/client/hud.qc:1565
#, c-format
-msgid " Press ^3%s%s to adjust"
+msgid "^1%s^1 was cooked by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5006
-msgid "^7Press ^3ESC ^7to show HUD options."
+#: qcsrc/client/hud.qc:1570
+#, c-format
+msgid "^1%s^1 was grounded by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5008
-msgid "^3Doubleclick ^7a panel for panel-specific options."
+#: qcsrc/client/hud.qc:1575
+#, c-format
+msgid "^1%s^1 was shot into space by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5010
-msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
+#: qcsrc/client/hud.qc:1580
+#, c-format
+msgid "^1%s^1 was conserved by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5012
-msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
+#: qcsrc/client/hud.qc:1586
+#, c-format
+msgid "^1%s^1 was thrown into a world of hurt by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5037
-msgid " qu/s"
+#: qcsrc/client/hud.qc:1590
+#, c-format
+msgid "^1%s^1 was crushed by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5041
-msgid " m/s"
+#: qcsrc/client/hud.qc:1594
+#, c-format
+msgid "^1%s^1 got shredded by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5045
-msgid " km/h"
+#: qcsrc/client/hud.qc:1598
+#, c-format
+msgid "^1%s^1 was blasted to bits by %s\n"
msgstr ""
-#: qcsrc/client/hud.qc:5049
-msgid " mph"
+#: qcsrc/client/hud.qc:1602
+#, c-format
+msgid "^1%s^1 got caught in the destruction of %s^1's vehicle\n"
msgstr ""
-#: qcsrc/client/hud.qc:5053
-msgid " knots"
+#: qcsrc/client/hud.qc:1606
+#, c-format
+msgid "^1%s^1 was bolted down by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:19
-msgid "SCO^bckills"
+#: qcsrc/client/hud.qc:1610
+#, c-format
+msgid "^1%s^1 could find no shelter from %s^1's rockets\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:20
-msgid "SCO^bctime"
+#: qcsrc/client/hud.qc:1614
+#, c-format
+msgid "^1%s^1 dies when %s^1's wakizashi dies.\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:21
-msgid "SCO^caps"
+#: qcsrc/client/hud.qc:1618
+#, c-format
+msgid "^1%s^1 nailed to hell by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:22
-msgid "SCO^deaths"
+#: qcsrc/client/hud.qc:1622
+#, c-format
+msgid "^1%s^1 cluster crushed by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:23
-msgid "SCO^destroyed"
+#: qcsrc/client/hud.qc:1626
+#, c-format
+msgid "^1%s^1 dies when %s^1's raptor dies.\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:24
-msgid "SCO^drops"
+#: qcsrc/client/hud.qc:1630
+#, c-format
+msgid "^1%s^1 was pushed into the line of fire by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:25
-msgid "SCO^faults"
+#: qcsrc/client/hud.qc:1634
+#, c-format
+msgid "^1%s^1 was pushed into an accident by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:26
-msgid "SCO^fckills"
+#: qcsrc/client/hud.qc:1638
+#, c-format
+msgid "^1%s^1 was unfairly eliminated by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:27
-msgid "SCO^goals"
+#: qcsrc/client/hud.qc:1642
+#, c-format
+msgid "^1%s^1 was burnt to death by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:28
-msgid "SCO^kckills"
+#: qcsrc/client/hud.qc:1654
+#, c-format
+msgid "^1%s^1 was fragged by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:29
-msgid "SCO^kdratio"
+#: qcsrc/client/hud.qc:1659
+#, c-format
+msgid "^1%s^1's %s scoring spree was ended by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:30
-msgid "SCO^k/d"
+#: qcsrc/client/hud.qc:1661
+#, c-format
+msgid "^1%s^1's %s kill spree was ended by %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:31
-msgid "SCO^kd"
+#: qcsrc/client/hud.qc:1664
+#, c-format
+msgid "^1%s^1 made %s scores in a row\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:32
-msgid "SCO^kdr"
+#: qcsrc/client/hud.qc:1666
+#, c-format
+msgid "^1%s^1 has %s frags in a row\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:33
-msgid "SCO^kills"
+#: qcsrc/client/hud.qc:1669
+#, c-format
+msgid "%s^7 made a ^1TRIPLE SCORE\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:34
-msgid "SCO^laps"
+#: qcsrc/client/hud.qc:1671
+#, c-format
+msgid "%s^7 made a ^1TRIPLE FRAG\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:35
-msgid "SCO^lives"
+#: qcsrc/client/hud.qc:1674
+#, c-format
+msgid "%s^7 unleashes ^1SCORING RAGE\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:36
-msgid "SCO^losses"
+#: qcsrc/client/hud.qc:1676
+#, c-format
+msgid "%s^7 unleashes ^1RAGE\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:37
-msgid "SCO^name"
+#: qcsrc/client/hud.qc:1679
+#, c-format
+msgid "%s^7 made ^1TEN SCORES IN A ROW!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:38
-msgid "SCO^nick"
+#: qcsrc/client/hud.qc:1681
+#, c-format
+msgid "%s^7 starts the ^1MASSACRE!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:39
-msgid "SCO^objectives"
+#: qcsrc/client/hud.qc:1684
+#, c-format
+msgid "%s^7 made ^1FIFTEEN SCORES IN A ROW!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:40
-msgid "SCO^pickups"
+#: qcsrc/client/hud.qc:1686
+#, c-format
+msgid "%s^7 executes ^1MAYHEM!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:41
-msgid "SCO^ping"
+#: qcsrc/client/hud.qc:1689
+#, c-format
+msgid "%s^7 made ^1TWENTY SCORES IN A ROW!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:42
-msgid "SCO^pl"
+#: qcsrc/client/hud.qc:1691
+#, c-format
+msgid "%s^7 is a ^1BERSERKER!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:43
-msgid "SCO^pushes"
+#: qcsrc/client/hud.qc:1694
+#, c-format
+msgid "%s^7 made ^1TWENTY FIVE SCORES IN A ROW!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:44
-msgid "SCO^rank"
+#: qcsrc/client/hud.qc:1696
+#, c-format
+msgid "%s^7 inflicts ^1CARNAGE!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:45
-msgid "SCO^returns"
+#: qcsrc/client/hud.qc:1699
+#, c-format
+msgid "%s^7 made ^1THIRTY SCORES IN A ROW!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:46
-msgid "SCO^revivals"
+#: qcsrc/client/hud.qc:1701
+#, c-format
+msgid "%s^7 unleashes ^1ARMAGEDDON!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:47
-msgid "SCO^score"
+#: qcsrc/client/hud.qc:1709
+#, c-format
+msgid "^1%s^1 was in the water for too long\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:48
-msgid "SCO^suicides"
+#: qcsrc/client/hud.qc:1711
+#, c-format
+msgid "^1%s^1 drowned\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:49
-msgid "SCO^takes"
+#: qcsrc/client/hud.qc:1716
+#, c-format
+msgid "^1%s^1 was slimed\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:50
-msgid "SCO^ticks"
+#: qcsrc/client/hud.qc:1722
+#, c-format
+msgid "^1%s^1 found a hot place\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:239
-msgid ""
-"You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"
+#: qcsrc/client/hud.qc:1724
+#, c-format
+msgid "^1%s^1 turned into hot slag\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:240
-msgid "^3|---------------------------------------------------------------|\n"
+#: qcsrc/client/hud.qc:1731
+#, c-format
+msgid "^1%s^1 tested gravity (and it worked)\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:242
-msgid "^2scoreboard_columns_set default\n"
+#: qcsrc/client/hud.qc:1733
+#, c-format
+msgid "^1%s^1 hit the ground with a crunch\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:243
-msgid "^2scoreboard_columns_set ^7filed1 field2 ...\n"
+#: qcsrc/client/hud.qc:1738
+#, c-format
+msgid "^1%s^1 became a shooting star\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:244
-msgid "The following field names are recognized (case insensitive):\n"
+#: qcsrc/client/hud.qc:1744
+#, c-format
+msgid "^1%s^1 discovered a swamp\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:245
-msgid ""
-"You can use a ^3|^7 to start the right-aligned fields.\n"
-"\n"
+#: qcsrc/client/hud.qc:1746
+#, c-format
+msgid "^1%s^1 is now conserved for centuries to come\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:247
-msgid "^3name^7 or ^3nick^7 Name of a player\n"
+#: qcsrc/client/hud.qc:1751
+#, c-format
+msgid "^1%s^1 was mowed down by a turret \n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:248
-msgid "^3ping^7 Ping time\n"
+#: qcsrc/client/hud.qc:1763
+#, c-format
+msgid "^1%s^1 died in an accident\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:249
-msgid "^3pl^7 Packet loss\n"
+#: qcsrc/client/hud.qc:1767
+#, c-format
+msgid "^1%s^1 was unfairly eliminated\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:250
-msgid "^3kills^7 Number of kills\n"
+#: qcsrc/client/hud.qc:1773
+#, c-format
+msgid "^1%s^1 felt a little hot\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:251
-msgid "^3deaths^7 Number of deaths\n"
+#: qcsrc/client/hud.qc:1775
+#, c-format
+msgid "^1%s^1 burnt to death\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:252
-msgid "^3suicides^7 Number of suicides\n"
+#: qcsrc/client/hud.qc:1782
+#, c-format
+msgid "^1%s^1 needs a restart\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:253
-msgid "^3frags^7 kills - suicides\n"
+#: qcsrc/client/hud.qc:1789
+#, c-format
+msgid "^1%s^1 needs a restart after a %d scoring spree\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:254
-msgid "^3kd^7 The kill-death ratio\n"
+#: qcsrc/client/hud.qc:1791
+#, c-format
+msgid "^1%s^1 died with a %d kill spree\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:255
-msgid ""
-"^3caps^7 How often a flag (CTF) or a key (KeyHunt) was "
-"captured\n"
+#: qcsrc/client/hud.qc:1795
+#, c-format
+msgid "%s^7 got the %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:256
-msgid ""
-"^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a "
-"ball (Keepaway) was picked up\n"
+#: qcsrc/client/hud.qc:1798
+#, c-format
+msgid "%s^7 lost the %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:257
-msgid "^3fckills^7 Number of flag carrier kills\n"
+#: qcsrc/client/hud.qc:1801
+#, c-format
+msgid "%s^7 picked up the %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:258
-msgid "^3returns^7 Number of flag returns\n"
+#: qcsrc/client/hud.qc:1804
+#, c-format
+msgid "%s^7 returned the %s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:259
-msgid "^3drops^7 Number of flag drops\n"
+#: qcsrc/client/hud.qc:1807
+#, c-format
+msgid "%s^7 captured the %s%s\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:260
-msgid "^3lives^7 Number of lives (LMS)\n"
+#: qcsrc/client/hud.qc:1826
+#, c-format
+msgid "%s^7 has picked up the ball!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:261
-msgid "^3rank^7 Player rank\n"
+#: qcsrc/client/hud.qc:1831
+#, c-format
+msgid "%s^7 has dropped the ball!\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:262
-msgid "^3pushes^7 Number of players pushed into void\n"
+#: qcsrc/client/hud.qc:1842
+#, c-format
+msgid "You are now on: %s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:263
+#: qcsrc/client/hud.qc:1844
+#, c-format
msgid ""
-"^3destroyed^7 Number of keys destroyed by pushing them into "
-"void\n"
+"You have been moved into a different team to improve team balance\n"
+"You are now on: %s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:264
-msgid "^3kckills^7 Number of keys carrier kills\n"
+#: qcsrc/client/hud.qc:1847
+msgid "^1Reconsider your tactics, camper!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:265
-msgid "^3losses^7 Number of times a key was lost\n"
+#: qcsrc/client/hud.qc:1849
+msgid "^1Die camper!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:266
-msgid "^3laps^7 Number of laps finished (race/cts)\n"
+#: qcsrc/client/hud.qc:1852
+msgid "^1You are reinserted into the game for running out of ammo..."
msgstr ""
-#: qcsrc/client/scoreboard.qc:267
-msgid "^3time^7 Total time raced (race/cts)\n"
+#: qcsrc/client/hud.qc:1854
+msgid "^1You were killed for running out of ammo..."
msgstr ""
-#: qcsrc/client/scoreboard.qc:268
-msgid "^3fastest^7 Time of fastest lap (race/cts)\n"
+#: qcsrc/client/hud.qc:1857
+msgid "^1You need to preserve your health"
msgstr ""
-#: qcsrc/client/scoreboard.qc:269
-msgid "^3ticks^7 Number of ticks (DOM)\n"
+#: qcsrc/client/hud.qc:1859
+msgid "^1You grew too old without taking your medicine"
msgstr ""
-#: qcsrc/client/scoreboard.qc:270
-msgid "^3takes^7 Number of domination points taken (DOM)\n"
+#: qcsrc/client/hud.qc:1862
+msgid "^1Don't go against team mates!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:271
-msgid "^3bckills^7 Number of ball carrier kills\n"
+#: qcsrc/client/hud.qc:1864
+msgid "^1Don't shoot your team mates!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:272
-msgid ""
-"^3bctime^7 Total amount of time holding the ball in "
-"Keepaway\n"
+#: qcsrc/client/hud.qc:1869
+msgid "^1You need to be more careful!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:273
-msgid ""
-"^3score^7 Total score\n"
-"\n"
+#: qcsrc/client/hud.qc:1871
+msgid "^1You killed your own dumb self!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:275
-msgid ""
-"Before a field you can put a + or - sign, then a comma separated list\n"
-"of game types, then a slash, to make the field show up only in these\n"
-"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.\n"
-"\n"
+#: qcsrc/client/hud.qc:1876
+#, c-format
+msgid "^1Moron! You went against ^7%s^1, a team mate!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:280
-msgid ""
-"The special game type names 'teams' and 'noteams' can be used to\n"
-"include/exclude ALL teams/noteams game modes.\n"
-"\n"
+#: qcsrc/client/hud.qc:1878
+#, c-format
+msgid "^1Moron! You fragged ^7%s^1, a team mate!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:283
-msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
+#: qcsrc/client/hud.qc:1882
+msgid "^1First score"
msgstr ""
-#: qcsrc/client/scoreboard.qc:284
-msgid ""
-"will display name, ping and pl aligned to the left, and the fields\n"
-"right of the vertical bar aligned to the right.\n"
+#: qcsrc/client/hud.qc:1884
+msgid "^1First blood"
msgstr ""
-#: qcsrc/client/scoreboard.qc:286
-msgid ""
-"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
-"other gamemodes except DM.\n"
+#: qcsrc/client/hud.qc:1888
+msgid "^1First casualty"
msgstr ""
-#: qcsrc/client/scoreboard.qc:432 qcsrc/client/scoreboard.qc:447
-#: qcsrc/client/scoreboard.qc:457 qcsrc/client/scoreboard.qc:466
-#: qcsrc/client/scoreboard.qc:475
+#: qcsrc/client/hud.qc:1890
+msgid "^1First victim"
+msgstr ""
+
+#: qcsrc/client/hud.qc:1894
#, c-format
-msgid "fixed missing field '%s'\n"
+msgid "^1You scored against ^7%s^1 who was typing!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:515 qcsrc/client/scoreboard.qc:522
-msgid "N/A"
+#: qcsrc/client/hud.qc:1896
+#, c-format
+msgid "^1You typefragged ^7%s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:951
+#: qcsrc/client/hud.qc:1900
#, c-format
-msgid "Accuracy stats (average %d%%)"
+msgid "^1You were scored against by ^7%s^1 while you were typing!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1016
+#: qcsrc/client/hud.qc:1902
#, c-format
-msgid "%d%%"
+msgid "^1You were typefragged by ^7%s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1076
-msgid "Rankings"
+#: qcsrc/client/hud.qc:1906
+#, c-format
+msgid "^4You scored against ^7%s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1167 qcsrc/client/scoreboard.qc:1169
-msgid "Scoreboard"
+#: qcsrc/client/hud.qc:1908
+#, c-format
+msgid "^4You fragged ^7%s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1210
+#: qcsrc/client/hud.qc:1912
#, c-format
-msgid "Speed award: %d ^7(%s^7)"
+msgid "^1You were scored against by ^7%s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1214
+#: qcsrc/client/hud.qc:1914
#, c-format
-msgid "All-time fastest: %d ^7(%s^7)"
+msgid "^1You were fragged by ^7%s"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1241 qcsrc/client/teamplay.qc:55
-msgid "Spectators"
+#: qcsrc/client/hud.qc:1919
+msgid "^1Watch your step!"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1248
+#: qcsrc/client/hud.qc:1988 qcsrc/client/hud.qc:1989 qcsrc/client/hud.qc:2474
#, c-format
-msgid "playing on ^2%s^7"
+msgid "Player %d"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1255 qcsrc/client/scoreboard.qc:1260
-#, c-format
-msgid " for up to ^1%1.0f minutes^7"
+#: qcsrc/client/hud.qc:2779
+msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1264 qcsrc/client/scoreboard.qc:1283
-msgid " or"
+#: qcsrc/client/hud.qc:2781 qcsrc/client/hud.qc:2823 qcsrc/client/hud.qc:2864
+#, c-format
+msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1267 qcsrc/client/scoreboard.qc:1274
+#: qcsrc/client/hud.qc:2866
#, c-format
-msgid " until ^3%s %s^7"
+msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1268 qcsrc/client/scoreboard.qc:1275
-#: qcsrc/client/scoreboard.qc:1287 qcsrc/client/scoreboard.qc:1294
-msgid "SCO^points"
+#: qcsrc/client/hud.qc:2894
+msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1269 qcsrc/client/scoreboard.qc:1276
-#: qcsrc/client/scoreboard.qc:1288 qcsrc/client/scoreboard.qc:1295
-msgid "SCO^is beaten"
+#: qcsrc/client/hud.qc:2897
+msgid "^2Name ^7instead of \"^1Unregistered player^7\" in stats"
msgstr ""
-#: qcsrc/client/scoreboard.qc:1286 qcsrc/client/scoreboard.qc:1293
-#, c-format
-msgid " until a lead of ^3%s %s^7"
+#: qcsrc/client/hud.qc:2979
+msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/miscfunctions.qc:23
-msgid "^1Begin!"
+#: qcsrc/client/hud.qc:2981
+msgid "Allow servers to store and display your name?"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2985
+msgid "^1Configure the HUD"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2989
+#, c-format
+msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/miscfunctions.qc:34
+#: qcsrc/client/hud.qc:2991
#, c-format
-msgid "^1Game starts in %d seconds"
+msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/miscfunctions.qc:113
-msgid "^1RED^7 flag"
+#: qcsrc/client/hud.qc:3494 qcsrc/client/hud.qc:3497 qcsrc/client/hud.qc:3499
+msgid "Personal best"
msgstr ""
-#: qcsrc/client/miscfunctions.qc:118
-msgid "^4BLUE^7 flag"
+#: qcsrc/client/hud.qc:3512 qcsrc/client/hud.qc:3515 qcsrc/client/hud.qc:3517
+msgid "Server best"
msgstr ""
-#: qcsrc/client/miscfunctions.qc:126
-#, c-format
-msgid "You picked up the %s!"
+#: qcsrc/client/hud.qc:3861
+msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/miscfunctions.qc:130
+#: qcsrc/client/hud.qc:3929
#, c-format
-msgid "You got the %s!"
+msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/miscfunctions.qc:283
-msgid "Trying to remove a team which is not in the teamlist!"
+#: qcsrc/client/hud.qc:3996
+msgid "^1Observing"
msgstr ""
-#: qcsrc/client/ctf.qc:35
-msgid "----- Order Menu -----"
+#: qcsrc/client/hud.qc:3998
+#, c-format
+msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/ctf.qc:36
+#: qcsrc/client/hud.qc:4002
#, c-format
-msgid "Order: %s"
+msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/ctf.qc:37
-msgid "1) ^3previous page"
+#: qcsrc/client/hud.qc:4004
+#, c-format
+msgid "^1Press ^3%s^1 for another player"
msgstr ""
-#: qcsrc/client/ctf.qc:38
-msgid "2) ^3next page"
+#: qcsrc/client/hud.qc:4008
+#, c-format
+msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/ctf.qc:55 qcsrc/client/ctf.qc:161
-msgid "ESC) Exit Menu"
+#: qcsrc/client/hud.qc:4010
+#, c-format
+msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/ctf.qc:126
+#: qcsrc/client/hud.qc:4013
#, c-format
-msgid "Couldn't find player %d\n"
+msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/ctf.qc:154
-msgid "----- Command Menu -----"
+#: qcsrc/client/hud.qc:4017
+msgid "^1Wait for your turn to join"
msgstr ""
-#: qcsrc/client/ctf.qc:155
-msgid "Issue orders:"
+#: qcsrc/client/hud.qc:4023
+msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/ctf.qc:156
-msgid " 1) Attack"
+#: qcsrc/client/hud.qc:4025
+msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/ctf.qc:158
-msgid " 2) Defend"
+#: qcsrc/client/hud.qc:4027 qcsrc/client/hud.qc:4030
+#, c-format
+msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/ctf.qc:160
-msgid "3) Resign from command."
+#: qcsrc/client/hud.qc:4038
+#, c-format
+msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/ctf.qc:212
-msgid "You're commander!"
+#: qcsrc/client/hud.qc:4045
+msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/ctf.qc:215
-msgid "Awaiting orders..."
+#: qcsrc/client/hud.qc:4060
+#, c-format
+msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/teamplay.qc:56
-msgid "Red Team"
+#: qcsrc/client/hud.qc:4062
+#, c-format
+msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/teamplay.qc:57
-msgid "Blue Team"
+#: qcsrc/client/hud.qc:4067
+msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/teamplay.qc:58
-msgid "Yellow Team"
+#: qcsrc/client/hud.qc:4069
+msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/teamplay.qc:59
-msgid "Pink Team"
+#: qcsrc/client/hud.qc:4075
+#, c-format
+msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/server/w_fireball.qc:2
-msgid "Fireball"
+#: qcsrc/client/hud.qc:4096
+msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/server/w_fireball.qc:417
+#: qcsrc/client/hud.qc:4101
#, c-format
-msgid "%s forgot about some firemine"
+msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240
-#, c-format
-msgid "%s should have used a smaller gun"
+#: qcsrc/client/hud.qc:4109
+msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/server/w_fireball.qc:426
-#, c-format
-msgid "%s tried to catch %s's firemine"
+#: qcsrc/client/hud.qc:4111
+msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/server/w_fireball.qc:428
-#, c-format
-msgid "%s fatefully ignored %s's firemine"
+#: qcsrc/client/hud.qc:4113
+msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/server/w_fireball.qc:435
-#, c-format
-msgid "%s could not hide from %s's fireball"
+#: qcsrc/client/hud.qc:4115
+msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/server/w_fireball.qc:437
-#, c-format
-msgid "%s saw the pretty lights of %s's fireball"
+#: qcsrc/client/hud.qc:4153
+msgid " qu/s"
msgstr ""
-#: qcsrc/server/w_fireball.qc:440
-#, c-format
-msgid "%s got too close to %s's fireball"
+#: qcsrc/client/hud.qc:4157
+msgid " m/s"
msgstr ""
-#: qcsrc/server/w_fireball.qc:442
-#, c-format
-msgid "%s tasted %s's fireball"
+#: qcsrc/client/hud.qc:4161
+msgid " km/h"
msgstr ""
-#: qcsrc/server/w_nex.qc:2
-msgid "Nex"
+#: qcsrc/client/hud.qc:4165
+msgid " mph"
msgstr ""
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_shotgun.qc:203
-#: qcsrc/server/w_uzi.qc:317 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_porto.qc:296 qcsrc/server/w_hook.qc:266
-#, c-format
-msgid "%s did the impossible"
+#: qcsrc/client/hud.qc:4169
+msgid " knots"
msgstr ""
-#: qcsrc/server/w_nex.qc:269 qcsrc/server/w_minstanex.qc:292
-#, c-format
-msgid "%s has been vaporized by %s"
+#: qcsrc/client/hud.qc:4814
+msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"
msgstr ""
-#: qcsrc/server/w_laser.qc:2
-msgid "Laser"
+#: qcsrc/client/target_music.qc:93 qcsrc/client/target_music.qc:181
+#, c-format
+msgid "Cannot initialize sound %s\n"
msgstr ""
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s lasered themself to hell"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s was cut in half by %s's gauntlet"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s was lasered to death by %s"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_uzi.qc:2
-msgid "Machine Gun"
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
msgstr ""
-#: qcsrc/server/w_uzi.qc:321 qcsrc/server/w_sniperrifle.qc:254
+#: qcsrc/server/w_uzi.qc:317 qcsrc/server/w_shotgun.qc:215
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s is now thinking with portals"
msgstr ""
#: qcsrc/server/w_uzi.qc:323
msgid "%s was riddled full of holes by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr ""
-
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rocketlauncher.qc:501 qcsrc/server/w_minelayer.qc:523
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s died in %s's bullet hail"
+msgid "%s ate %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_porto.qc:296 qcsrc/server/w_hook.qc:266
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s did the impossible"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_porto.qc:298
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_minstanex.qc:2
-msgid "MinstaNex"
+#: qcsrc/server/w_hook.qc:2
+msgid "Grappling Hook"
msgstr ""
-#: qcsrc/server/w_electro.qc:2
-msgid "Electro"
+#: qcsrc/server/w_hook.qc:268
+#, c-format
+msgid "%s has run into %s's gravity bomb"
msgstr ""
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
-#: qcsrc/server/w_tuba.qc:2
+#: qcsrc/server/w_laser.qc:311
#, c-format
-msgid "@!#%'n Tuba"
+msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_laser.qc:315
#, c-format
-msgid "%s hurt his own ears with the @!#%%'n Tuba"
+msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_laser.qc:317
#, c-format
-msgid "%s died of %s's great playing on the @!#%%'n Tuba"
+msgid "%s was lasered to death by %s"
msgstr ""
-#: qcsrc/server/w_porto.qc:2
-msgid "Port-O-Launch"
+#: qcsrc/server/w_shotgun.qc:219
+#, c-format
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_porto.qc:298
+#: qcsrc/server/w_shotgun.qc:221
#, c-format
-msgid "%s felt %s doing the impossible to him"
+msgid "%s was gunned by %s"
msgstr ""
-#: qcsrc/server/w_hagar.qc:2
-msgid "Hagar"
+#: qcsrc/server/w_tuba.qc:2
+#, c-format
+msgid "@!#%'n Tuba"
msgstr ""
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_tuba.qc:252
#, c-format
-msgid "%s played with tiny rockets"
+msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_tuba.qc:256
#, c-format
-msgid "%s hoped %s's missiles wouldn't bounce"
+msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
-#, c-format
-msgid "%s was pummeled by %s"
+#: qcsrc/server/w_minstanex.qc:2
+msgid "MinstaNex"
msgstr ""
-#: qcsrc/server/w_crylink.qc:2
-msgid "Crylink"
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
+#, c-format
+msgid "%s has been vaporized by %s"
msgstr ""
#: qcsrc/server/w_crylink.qc:664
msgid "%s took a close look at %s's Crylink"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
+#: qcsrc/server/w_hlac.qc:2
+msgid "Heavy Laser Assault Cannon"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:500 qcsrc/server/w_minelayer.qc:495
+#: qcsrc/server/w_hlac.qc:240 qcsrc/server/w_fireball.qc:419
#, c-format
-msgid "%s exploded"
+msgid "%s should have used a smaller gun"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_hlac.qc:242
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s was cut down by %s"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s detonated"
msgstr ""
-#: qcsrc/server/w_hook.qc:2
-msgid "Grappling Hook"
+#: qcsrc/server/w_grenadelauncher.qc:391
+#, c-format
+msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_hook.qc:268
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
-msgid "%s has run into %s's gravity bomb"
+msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:2
-msgid "Mine Layer"
+#: qcsrc/server/w_grenadelauncher.qc:395
+#, c-format
+msgid "%s ate %s's grenade"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
-msgid "%s got too close to %s's mine"
+msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_hagar.qc:386
#, c-format
-msgid "%s almost dodged %s's mine"
+msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
-msgid "%s stepped on %s's mine"
+msgid "%s was pummeled by %s"
msgstr ""
#: qcsrc/server/w_seeker.qc:2
msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:2
-msgid "Mortar"
+#: qcsrc/server/w_fireball.qc:417
+#, c-format
+msgid "%s forgot about some firemine"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_fireball.qc:426
#, c-format
-msgid "%s tried out his own grenade"
+msgid "%s tried to catch %s's firemine"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_fireball.qc:428
#, c-format
-msgid "%s detonated"
+msgid "%s fatefully ignored %s's firemine"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_fireball.qc:435
#, c-format
-msgid "%s didn't see %s's grenade"
+msgid "%s could not hide from %s's fireball"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_fireball.qc:437
#, c-format
-msgid "%s almost dodged %s's grenade"
+msgid "%s saw the pretty lights of %s's fireball"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_fireball.qc:440
#, c-format
-msgid "%s ate %s's grenade"
+msgid "%s got too close to %s's fireball"
msgstr ""
-#: qcsrc/server/w_hlac.qc:2
-msgid "Heavy Laser Assault Cannon"
+#: qcsrc/server/w_fireball.qc:442
+#, c-format
+msgid "%s tasted %s's fireball"
msgstr ""
-#: qcsrc/server/w_hlac.qc:242
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
-msgid "%s was cut down by %s"
+msgid "%s got too close to %s's mine"
+msgstr ""
+
+#: qcsrc/server/w_minelayer.qc:529
+#, c-format
+msgid "%s almost dodged %s's mine"
+msgstr ""
+
+#: qcsrc/server/w_minelayer.qc:531
+#, c-format
+msgid "%s stepped on %s's mine"
msgstr ""
// e.g. Xonotic 1.5.1 RC1 will be 15101
set g_xonoticversion git "Xonotic version (formatted for humans)"
-gameversion 100 // 0.1.0
+gameversion 500 // 0.5.0
gameversion_min 0 // git builds see all versions
gameversion_max 65535 // git builds see all versions
// other aliases
alias +hook +button6
alias -hook -button6
+alias use "impulse 21"
alias ready "cmd ready"
alias lockteams "sv_cmd lockteams"
alias unlockteams "sv_cmd unlockteams"
seta crosshair_seeker_color "1 0.35 0.35" "crosshair color to display when wielding the TAG seeker"
seta crosshair_seeker_alpha 0.9 "crosshair alpha value to display when wielding the TAG seeker"
seta crosshair_seeker_size 0.8 "crosshair size when wielding the TAG seeker"
-seta crosshair_sniperrifle "" "crosshair to display when wielding the sniperrifle"
-seta crosshair_sniperrifle_color "0.85 0.5 0.25" "crosshair color to display when wielding the sniperrifle"
-seta crosshair_sniperrifle_alpha 1 "crosshair alpha value to display when wielding the sniperrifle"
-seta crosshair_sniperrifle_size 0.65 "crosshair size when wielding the sniperrifle"
+seta crosshair_rifle "" "crosshair to display when wielding the rifle"
+seta crosshair_rifle_color "0.85 0.5 0.25" "crosshair color to display when wielding the rifle"
+seta crosshair_rifle_alpha 1 "crosshair alpha value to display when wielding the rifle"
+seta crosshair_rifle_size 0.65 "crosshair size when wielding the rifle"
seta crosshair_tuba "" "crosshair to display when wielding the tuba"
seta crosshair_tuba_color "0.85 0.5 0.25" "crosshair color to display when wielding the tuba"
seta crosshair_tuba_alpha 1 "crosshair alpha value to display when wielding the tuba"
v_kicktime 0 // how long damage kicks of the view last, default is 0 seconds
gl_polyblend 0 // whether to use screen tints, this has now been replaced by a better system in CSQC
r_motionblur 0 // motion blur value, default is 0
-r_damageblur 0 // motion blur when damaged, default is 0
+r_damageblur 0 // motion blur when damaged, default is 0 (removed in Xonotic)
-r_bloom_blur 8
-r_bloom_brighten 3
+r_bloom_blur 16
+r_bloom_brighten 2.5
r_bloom_colorexponent 1
r_bloom_colorscale 1
-r_bloom_colorsubtract 0.25
+r_bloom_colorsubtract 0.15
r_bloom_resolution 320
r_hdr_range 4
seta cl_hitsound 1 "play a hit notifier sound when you have hit an enemy"
set cl_hitsound_antispam_time 0.05 "don't play the hitsound more often than this"
-seta cl_eventchase_death 0 "camera goes into 3rd person mode when the player is dead"
-seta cl_eventchase_intermission 0 "camera goes into 3rd person mode when the match ends"
+seta cl_eventchase_death 1 "camera goes into 3rd person mode when the player is dead"
seta cl_eventchase_distance 140 "final camera distance"
seta cl_eventchase_speed 1.3 "how fast the camera slides back, 0 is instant"
set bot_ai_aimskill_offset 0.3 "Amount of error induced to the bots aim"
set bot_ai_aimskill_think 1 "Aiming velocity. Use values below 1 for slower aiming"
set bot_ai_custom_weapon_priority_distances "300 850" "Define close and far distances in any order. Based on the distance to the enemy bots will choose different weapons"
-set bot_ai_custom_weapon_priority_far "minstanex nex sniperrifle electro rocketlauncher grenadelauncher hagar hlac crylink laser uzi fireball seeker shotgun tuba minelayer" "Desired weapons for far distances ordered by priority"
-set bot_ai_custom_weapon_priority_mid "minstanex rocketlauncher nex fireball seeker grenadelauncher electro uzi sniperrifle crylink hlac hagar shotgun laser tuba minelayer" "Desired weapons for middle distances ordered by priority"
-set bot_ai_custom_weapon_priority_close "minstanex shotgun nex uzi hlac tuba seeker hagar crylink grenadelauncher electro sniperrifle rocketlauncher laser fireball minelayer" "Desired weapons for close distances ordered by priority"
+set bot_ai_custom_weapon_priority_far "minstanex nex rifle electro rocketlauncher grenadelauncher hagar hlac crylink laser uzi fireball seeker shotgun tuba minelayer" "Desired weapons for far distances ordered by priority"
+set bot_ai_custom_weapon_priority_mid "minstanex rocketlauncher nex fireball seeker grenadelauncher electro uzi crylink hlac hagar shotgun laser rifle tuba minelayer" "Desired weapons for middle distances ordered by priority"
+set bot_ai_custom_weapon_priority_close "minstanex shotgun nex uzi hlac tuba seeker hagar crylink grenadelauncher electro rocketlauncher laser fireball rifle minelayer" "Desired weapons for close distances ordered by priority"
set bot_ai_weapon_combo 1 "Enable bots to do weapon combos"
set bot_ai_weapon_combo_threshold 0.4 "Try to make a combo N seconds after the last attack"
set bot_ai_friends_aware_pickup_radius "500" "Bots will not pickup items if a team mate is this distance near the item"
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)"
set g_antilag_nudge 0 "don't touch"
set g_antilag_bullets 1 "Bullets AntiLag (0 = no AntiLag, 1 = server side hit scan in the past) - DO NOT TOUCH (severely changes weapon balance)"
-set g_shootfromclient 1 "let client decide if it has the gun left or right; if set to 2, center handedness is allowed, and defaulted to, too; see also cl_gunalign"
+set g_shootfromclient 2 "let client decide if it has the gun left or right; if set to 2, center handedness is allowed; see also cl_gunalign"
set g_shootfromeye 0 "shots are fired from your eye/crosshair; visual gun position can still be influenced by cl_gunalign 1 and 2"
set g_shootfromcenter 0 "weapon gets moved to the center, shots still come from the barrel of your weapon; visual gun position can still be influenced by cl_gunalign 1 and 2"
set g_shootfromfixedorigin "" "if set to a string like 0 y z, the gun is moved to the given y and z coordinates. If set to a string like x y z, the whole shot origin is used"
set g_ctf_fullbrightflags 0
set g_ctf_dynamiclights 0
set g_ctf_allow_drop 1 "dropping allows circumventing carrierkill score, so enable this with care!"
-set g_ctf_reverse 0 "when 1, bases/flags are switched :P you have to capture your OWN flag by bringing it to the ENEMY's"
+set g_ctf_reverse 0 "if enabled, flags positions are switched: you have to capture the enemy's flag from your own base by bringing it to your own flag in the enemy base"
set g_balance_ctf_delay_collect 1.0
set g_balance_ctf_damageforcescale 1
set g_multijump_speed -999999 "Minimum vertical speed a player must have in order to jump again"
// effects
+r_glsl_vertextextureblend_usebothalphas 1 // allows to abuse texture blending as detail texture
+r_glsl_postprocess 1
r_picmipsprites 0 // Xonotic uses sprites that should never be picmipped (team mate, typing, waypoints)
r_picmipworld 1
gl_picmip_world 0
seta r_ambient 4
cl_decals_fadetime 5
cl_decals_time 2
-seta cl_gunalign 3 "Gun alignment; 1 = right, 2 = left, 3 = center or right, 4 = center or left"
+seta cl_gunalign 3 "Gun alignment; 1 = center (if allowed by g_shootfromclient) or right, 2 = center (if allowed by g_shootfromclient) or left, 3 = right only, 4 = left only"
seta cl_nogibs 0 "reduce number of violence effects, or remove them totally"
seta cl_particlegibs 0 "simpler gibs"
seta cl_gibs_damageforcescale 3.5 "force to push around gibs"
bind SPACE +jump
// weapons
-bind 1 "impulse 1"
-bind 2 "impulse 2"
-bind 3 "impulse 3"
-bind 4 "impulse 4"
-bind 5 "impulse 5"
-bind 6 "impulse 6"
-bind 7 "impulse 7"
-bind 8 "impulse 8"
-bind 9 "impulse 9"
-bind 0 "impulse 14" // cycles the superweapons
+alias weapon_group_1 "impulse 1"
+alias weapon_group_2 "impulse 2"
+alias weapon_group_3 "impulse 3"
+alias weapon_group_4 "impulse 4"
+alias weapon_group_5 "impulse 5"
+alias weapon_group_6 "impulse 6"
+alias weapon_group_7 "impulse 7"
+alias weapon_group_8 "impulse 8"
+alias weapon_group_9 "impulse 9"
+alias weapon_group_0 "impulse 14" // cycles the superweapons
+bind 0 weapon_group_0
+bind 1 weapon_group_1
+bind 2 weapon_group_2
+bind 3 weapon_group_3
+bind 4 weapon_group_4
+bind 5 weapon_group_5
+bind 6 weapon_group_6
+bind 7 weapon_group_7
+bind 8 weapon_group_8
+bind 9 weapon_group_9
bind q weaplast
bind MOUSE1 +fire
bind MOUSE2 +fire2
-bind MOUSE3 +zoom
+bind MOUSE3 togglezoom
bind MOUSE4 weaplast
bind MOUSE5 +hook
bind MWHEELUP weapnext
bind r reload
bind BACKSPACE dropweapon
bind g dropweapon
+// TODO change this to "use" once we can
bind f +use
// misc
alias cl_fbskin_red "playermodel models/player/erebus.iqm; playerskin 1; color 4 4"
alias cl_fbskin_orange "playermodel models/player/erebus.iqm; playerskin 1; color 14 14"
alias cl_fbskin_off "playermodel models/player/erebus.iqm; playerskin 0"
-alias sv_fbskin_green "sv_defaultcharacter 1; sv_defaultplayermodel models/player/erebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 51"
-alias sv_fbskin_red "sv_defaultcharacter 1; sv_defaultplayermodel models/player/erebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 68"
-alias sv_fbskin_orange "sv_defaultcharacter 1; sv_defaultplayermodel models/player/erebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 238"
+alias sv_fbskin_green "sv_defaultcharacter 1; sv_defaultplayermodel models/player/megaerebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 51"
+alias sv_fbskin_red "sv_defaultcharacter 1; sv_defaultplayermodel models/player/megaerebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 68"
+alias sv_fbskin_orange "sv_defaultcharacter 1; sv_defaultplayermodel models/player/megaerebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 238"
alias sv_fbskin_off "sv_defaultcharacter 0; sv_defaultplayerskin 0; sv_defaultplayercolors \"\""
seta sv_servermodelsonly 1
cl_curl_enabled 1
-cl_curl_maxspeed 300
-sv_curl_defaulturl "http://www.xonotic.com/contentdownload/getmap.php?file="
+cl_curl_maxspeed 400
+sv_curl_defaulturl "http://www.xonotic.org/contentdownload/getmap.php?file="
set sv_curl_serverpackages_auto 1 "automatically add packs with *.serverpackage files to sv_curl_serverpackages"
set sv_motd ""
-set g_waypoints_for_items 1 "make waypoints out of items, values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always"
+set g_waypoints_for_items 0 "make waypoints out of items, values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always"
seta g_maplist_votable 6 "number of maps that are shown in the map voting at the end of a match"
seta g_maplist_votable_keeptwotime 15
set g_nick_flood_penalty_yellow 3 "number of changes to allow before warning and movement blocking"
set g_nick_flood_penalty_red 30 "number of changes to allow before totally disorienting the player"
+seta g_waypointsprite_uppercase 1
set g_waypointsprite_normdistance 512
set g_waypointsprite_minscale 0.5
set g_waypointsprite_minalpha 0.4
set g_waypointsprite_limitedrange 5120
set g_waypointsprite_stuffbinds 0
seta g_waypointsprite_scale 1
+seta g_waypointsprite_fontsize 12
seta g_waypointsprite_alpha 1 "This allows the client to control transparency of the waypoint"
seta g_waypointsprite_edgefadealpha 0.5 "alpha multiplier near the edge"
seta g_waypointsprite_edgefadescale 1 "scale multiplier near the edge"
seta g_waypointsprite_edgefadedistance 50 "distance in virtual pixels from edge where to start fading"
+seta g_waypointsprite_edgeoffset_bottom 0 "offset of how close the waypoint can be to the bottom edge of the screen"
+seta g_waypointsprite_edgeoffset_left 0 "offset of how close the waypoint can be to the left edge of the screen"
+seta g_waypointsprite_edgeoffset_right 0 "offset of how close the waypoint can be to the right edge of the screen"
+seta g_waypointsprite_edgeoffset_top 0 "offset of how close the waypoint can be to the top edge of the screen"
seta g_waypointsprite_crosshairfadealpha 0.25 "alpha multiplier near crosshair"
seta g_waypointsprite_crosshairfadescale 1 "scale multiplier near the crosshair"
seta g_waypointsprite_crosshairfadedistance 150 "distance in virtual pixels from crosshair where to start fading"
seta g_waypointsprite_distancefadealpha 1 "alpha multiplier near distance"
seta g_waypointsprite_distancefadescale 0.7 "scale multiplier near the distance"
seta g_waypointsprite_distancefadedistancemultiplier 0.5 "distance in map sizes from distance where to stop fading"
+set g_waypointsprite_spam 0 "Debugging feature. Set to 10 and load courtfun in race mode to test."
alias "g_waypointsprite_personal" "impulse 30"
alias "g_waypointsprite_personal_p" "impulse 31"
alias "g_waypointsprite_personal_d" "impulse 32"
alias "g_waypointsprite_team_danger_d" "impulse 39"
alias "g_waypointsprite_clear_personal" "impulse 47"
alias "g_waypointsprite_clear" "impulse 48"
-alias "g_waypointsprite_toggle" "impulse 49"
+alias "g_waypointsprite_toggle" "toggle cl_hidewaypoints"
// key for that?
seta cl_hidewaypoints 0 "disable static waypoints, only show team waypoints"
set g_balance_keyhunt_delay_tracking 10
set g_balance_keyhunt_delay_fadeout 2
set g_balance_keyhunt_delay_collect 1.5
-set g_balance_keyhunt_delay_drop 0.4
set g_balance_keyhunt_maxdist 150
set g_balance_keyhunt_score_collect 3
set g_balance_keyhunt_score_carrierfrag 2
seta "userbind12_press" "say_team killed flagcarrier (l:%y^7); g_waypointsprite_team_p"; seta "userbind12_release" ""; seta "userbind12_description" "team: killed flag, icon"
seta "userbind13_press" "say_team dropped flag (l:%d^7); g_waypointsprite_team_here_d"; seta "userbind13_release" ""; seta "userbind13_description" "team: dropped flag, icon"
seta "userbind14_press" "say_team dropped gun %w^7 (l:%l^7); g_waypointsprite_team_here; wait; dropweapon"; seta "userbind14_release" ""; seta "userbind14_description" "team: drop gun, icon"
+// TODO change this to "use" once we can
seta "userbind15_press" "say_team dropped flag/key %w^7 (l:%l^7); g_waypointsprite_team_here; wait; +use"; seta "userbind15_release" "-use"; seta "userbind15_description" "team: drop flag/key, icon"
seta "userbind16_press" "say :-) / nice one"; seta "userbind16_release" ""; seta "userbind16_description" "chat: nice one"
seta "userbind17_press" "say good game"; seta "userbind17_release" ""; seta "userbind17_description" "chat: good game"
seta hud_colorflash_alpha 0.5 "starting alpha of the color flash"
seta hud_damage 0.55 "an improved version of gl_polyblend for damage, draw an image instead when hurt"
+seta hud_damage_blur 10 "Use postprocessing to blur the screen when you have taken damage. This can be paired with current hud damage or just used alone. Higher values = more blur"
+seta hud_damage_blur_alpha 0.5 "Amount of alpha to use when merging the blurred layers back into the render. Turning this up higher will remove bloom, so it's best to find a balance"
seta hud_damage_gentle_alpha_multiplier 0.10 "how much to multiply alpha of flash when using the cl_gentle version, it's much more opaque than the non-gentle version"
seta hud_damage_gentle_color "1 0.7 1" "color of flash for cl_gentle version"
seta hud_damage_color "1 0 0" "color of flash"
seta hud_damage_pain_threshold_pulsating_min 0.6 "minimum value when calculating the pulse: max(pulsating_min, fabs(sin(PI * time / period))"
seta hud_damage_pain_threshold_pulsating_period 0.8 "one pulse every X seconds"
+seta hud_powerup 0 "power of the sharpen effect when owning the shield or strength powerups, default is 0.5"
+
+seta hud_postprocessing 1 "enables the ability for effects such as hud_damage_blur and hud_contents to apply a postprocessing method upon the screen - enabling this disables manual editing of the postprocess cvars"
+seta hud_postprocessing_maxbluralpha 0 "maximum alpha which the blur postprocess can be, default is 0.5"
+seta hud_postprocessing_maxblurradius 8 "maximum radius which the blur postprocess can be, default is 8"
+
seta hud_contents 1 "an improved version of gl_polyblend for liquids such as water/lava/slime, draw a filler when inside the liquid"
+seta hud_contents_blur 10 "Use postprocessing to blur the screen when you are inside a liquid. Higher values = more blur"
+seta hud_contents_blur_alpha 0.5 "Amount of alpha to use when merging the blurred layers back into the render. Turning this up higher will remove bloom, so it's best to find a balance"
seta hud_contents_factor 1 "factor at which to multiply the current faded value."
seta hud_contents_fadeintime 0.02 "factor of time it takes for the alpha level to reach normal value when entering the liquid"
seta hud_contents_fadeouttime 0.1 "factor of time it takes for the alpha level to reach normal value when leaving the liquid"
seta cl_port $cl_port
seta r_showsurfaces $r_showsurfaces
seta r_ambient $r_ambient
-seta skill $skill
+seta skill 4
seta gl_finish $gl_finish
seta v_kicktime $v_kicktime
seta r_subdivisions_tolerance $r_subdivisions_tolerance
// ticrate
-sys_ticrate 0.0166667
-cl_netfps 60 // should match
+//sys_ticrate 0.0166667
+sys_ticrate 0.0333333
+cl_netfps 60 // should match or be a multiple
sv_gameplayfix_delayprojectiles 0
sv_gameplayfix_q2airaccelerate 1
sv_gameplayfix_stepmultipletimes 1
// hud: font size
seta hud_fontsize 11
-seta scr_centersize 12
seta hud_width 560
// these entities are not referenced by anything directly, they just represent
alias allready "sv_cmd allready"
-seta cl_weaponpriority "minstanex rocketlauncher nex grenadelauncher minelayer fireball hlac hagar seeker crylink sniperrifle uzi electro tuba shotgun laser hook porto" "weapon priority list"
+seta cl_weaponpriority "minstanex rocketlauncher nex grenadelauncher minelayer fireball hlac hagar seeker crylink rifle uzi electro tuba shotgun laser hook porto" "weapon priority list"
seta cl_weaponpriority_useforcycling 0 "when set, weapon cycling by the mouse wheel makes use of the weapon priority list (the special value 2 uses the weapon ID list for cycling)"
seta cl_weaponpriority0 "rocketlauncher grenadelauncher hagar seeker fireball" "use impulse 200 for prev gun from this list, 210 for best gun, 220 for next gun. Default value: explosives"
seta cl_weaponpriority1 "minstanex nex crylink hlac electro laser" "use impulse 201 for prev gun from this list, 211 for best gun, 221 for next gun. Default value: energy"
-seta cl_weaponpriority2 "minstanex nex sniperrifle" "use impulse 202 for prev gun from this list, 212 for best gun, 222 for next gun. Default value: hitscan exact"
-seta cl_weaponpriority3 "minstanex nex sniperrifle uzi shotgun" "use impulse 203 for prev gun from this list, 213 for best gun, 223 for next gun. Default value: hitscan all"
+seta cl_weaponpriority2 "minstanex nex rifle" "use impulse 202 for prev gun from this list, 212 for best gun, 222 for next gun. Default value: hitscan exact"
+seta cl_weaponpriority3 "minstanex nex rifle uzi shotgun" "use impulse 203 for prev gun from this list, 213 for best gun, 223 for next gun. Default value: hitscan all"
seta cl_weaponpriority4 "grenadelauncher minelayer hlac hagar crylink seeker shotgun" "use impulse 204 for prev gun from this list, 214 for best gun, 224 for next gun. Default value: spam weapons"
seta cl_weaponpriority5 "laser hook porto" "use impulse 205 for prev gun from this list, 215 for best gun, 225 for next gun. Default value: weapons for moving"
seta cl_weaponpriority6 "" "use impulse 206 for prev gun from this list, 216 for best gun, 226 for next gun"
set sv_clones 0 "number of clones a player may make (reset by the \"kill\" command)"
-set cl_handicap 1 "the higher, the more damage you will receive (client setting)"
+set cl_handicap 1 "the higher, the more damage you will receive (client setting) NOTE: reconnect or use sendcvar command to update the choice."
+
+seta cl_clippedspectating 1 "movement collision for spectators so that you can't pass through walls and such. (client setting) NOTE: reconnect or use sendcvar command to update the choice."
// must be at the bottom of this file:
// alias for switching the teamselect menu
seta cl_vehicle_spiderbot_cross_size 1
//cl_gunalign calculator
-seta menu_cl_gunalign 3 "Gun alignment; 1 = right, 2 = left, 3 = center or right, 4 = center or left"
+seta menu_cl_gunalign 3 "Gun alignment; 1 = center (if allowed by g_shootfromclient) or right, 2 = center (if allowed by g_shootfromclient) or left, 3 = right only, 4 = left only"
alias _gunalign_01 "cl_gunalign 1"
alias _gunalign_02 "cl_gunalign 2"
alias _gunalign_03 "cl_gunalign 3"
set developer_shtest 0 "experimental speedhack detection"
set waypoint_benchmark 0 "quit after waypoint loading to benchmark bot navigation code"
set g_debug_bot_commands 0 "print scripted bot commands before executing"
+set g_debug_defaultsounds 0 "always use default sounds"
// debug cvars for keyhunt attaching
set _angles "0 0 0"
set g_weaponreplace_minstanex ""
set g_weaponreplace_hook ""
set g_weaponreplace_hlac ""
-set g_weaponreplace_sniperrifle ""
+set g_weaponreplace_rifle ""
set g_weaponreplace_tuba ""
set g_weaponreplace_fireball ""
set g_weaponreplace_seeker ""
scr_infobar_height 12
// DP cannot properly detect this, so rather turn off the detection
-r_texture_dds_load_dxt1_noalpha 1
-r_texture_dds_load_swdecode 1 // SW decode to quarter res if we want to load DDS but don't support the extension for it
+r_texture_dds_load_alphamode 2
+r_texture_dds_swdecode 1 // SW decode to quarter res if we want to load DDS but don't support the extension for it
r_texture_dds_load_logfailure 0 // this engine feature SUCKS
set vid_netwmfullscreen 0 // doesn't support non-native res
r_cullentities_trace 0
// less "lagging" of other players, but also less PL tolerant... let's try this
-sv_clmovement_inputtimeout 0.05
+sv_clmovement_inputtimeout 0.07 // more than 2, less than 3 server frames
// exact gloss looks better, e.g. on g-23
r_shadow_glossexact 1
+r_shadow_glossintensity 1
// use fake light if map has no lightmaps
r_fakelight 1
// create this cvar in case the engine did not
set snd_soundradius 1200
+// declare the channels we use
+seta snd_channel8volume 1 "QuakeC controlled background music volume"
+seta snd_channel9volume 1 "QuakeC controlled ambient sound volume"
+
// loading screen
scr_loadingscreen_background 0
scr_loadingscreen_barcolor "0 0.5 1"
scr_loadingscreen_barheight 12
-scr_loadingscreen_count 12
+scr_loadingscreen_count 13
scr_loadingscreen_scale 999
scr_loadingscreen_scale_base 1
scr_loadingscreen_scale_limit 2
exec effects-normal.cfg
exec physicsX.cfg
exec turrets.cfg
+exec vehicles.cfg
// hud cvar descriptions
exec _hud_descriptions.cfg
velocityjitter 100 100 100
velocitymultiplier -0.31
+// --------------- vehicles
+
+effect spiderbot_minigun_trail
+notunderwater
+trailspacing 10
+type smoke
+color 0xd0d0a0 0xffffff
+tex 0 8
+size 1 2
+alpha 20 50 100
+sizeincrease 2
+velocityjitter 5 5 5
+gravity -0.03
+airfriction 1
+
+effect spiderbot_minigun_muzzleflash
+count 3
+type spark
+color 0xff9c00 0xff8400
+tex 48 55
+size 10 15
+alpha 256 512 6280
+airfriction 10
+originjitter 2 2 2
+velocityjitter 150 150 150
+velocitymultiplier 0.35
+sizeincrease -100
+stretchfactor 1.3
+rotate -180 180 4000 -4000
+// fire
+effect spiderbot_minigun_muzzleflash
+count 6
+type spark
+color 0xff9c00 0xff8400
+tex 8 15
+size 5 7
+alpha 256 512 6280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 200 200 200
+velocitymultiplier 0.2
+sizeincrease -10
+stretchfactor 0.8
+effect spiderbot_minigun_muzzleflash
+countabsolute 2
+type static
+tex 48 55
+color 0xff9c00 0xff8400
+size 32 32
+alpha 256 512 6680
+sizeincrease -100
+stretchfactor 0.1
+rotate -180 180 4000 -4000
+lightradius 120
+lightradiusfade 8000
+lightcolor 3 3 0
+
+effect spiderbot_minigun_impact
+countabsolute 1
+type static
+tex 65 65
+color 0xff9c00 0xf6ff00
+size 52 52
+alpha 50 100 1680
+sizeincrease -100
+stretchfactor 0.1
+rotate -180 180 4000 -4000
+// fire
+effect spiderbot_minigun_impact
+count 7
+type spark
+color 0xff9c00 0xff8400
+tex 48 55
+size 9 15
+alpha 256 512 6280
+airfriction 10
+originjitter 2 2 2
+velocityjitter 250 250 150
+velocitymultiplier 0.2
+sizeincrease 100
+stretchfactor 3
+airfriction 6
+rotate -180 180 4000 -4000
+// smoke
+effect spiderbot_minigun_impact
+count 6
+type smoke
+color 0xd0d0a0 0xffffff
+tex 0 8
+size 10 20
+alpha 50 50 190
+sizeincrease 80
+velocityjitter 100 100 250
+velocitymultiplier 0.49
+gravity 1.3
+airfriction 10
+rotate -180 180 0 0
+// smoke 2
+effect spiderbot_minigun_impact
+count 7
+type spark
+color 0xd0d0a0 0xffffff
+tex 0 8
+size 15 19
+alpha 25 51 128
+airfriction 6
+originjitter 2 2 2
+velocityjitter 250 250 150
+velocitymultiplier 0.2
+sizeincrease 100
+stretchfactor 7.6
+// derbis
+effect spiderbot_minigun_impact
+notunderwater
+count 3
+type alphastatic
+tex 66 68
+color 0x99977D 0xFFFFFF
+size 6 8
+alpha 644 756 1484
+gravity 1.1
+airfriction 0.4
+sizeincrease -10
+velocitymultiplier 0.15
+originjitter 16 16 16
+velocityjitter 124 124 224
+rotate -180 180 -1000 1000
+// decal
+effect spiderbot_minigun_impact
+countabsolute 1
+type decal
+tex 56 59
+size 20 25
+alpha 256 256 0
+originjitter 16 16 16
+rotate -180 180 0 0
+
+effect spiderbot_rocket_explode
+countabsolute 1
+type decal
+tex 8 16
+size 72 72
+alpha 256 256 0
+originjitter 23 23 23
+lightradius 300
+lightradiusfade 1750
+lightcolor 8 4 0
+// shockwave
+effect spiderbot_rocket_explode
+countabsolute 1
+type static
+tex 33 33
+size 22 22
+alpha 56 56 230
+color 0x8f0d00 0xff5a00
+sizeincrease 2400
+// glow
+effect spiderbot_rocket_explode
+countabsolute 1
+type static
+tex 64 64
+size 120 120
+alpha 156 156 830
+color 0x8f0d00 0xff5a00
+sizeincrease 240
+// fire effect
+effect spiderbot_rocket_explode
+notunderwater
+count 32
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 12 21
+sizeincrease 495
+alpha 200 256 812
+airfriction 8
+liquidfriction 8
+originjitter 100 100 100
+velocityjitter 512 512 512
+rotate -180 180 -50 50
+// fire effect 2
+effect spiderbot_rocket_explode
+notunderwater
+count 16
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 3 3
+sizeincrease 120
+alpha 200 256 912
+airfriction -2
+liquidfriction 8
+velocityjitter 412 412 412
+rotate -180 180 -150 150
+stretchfactor 10
+// fire rays
+effect spiderbot_rocket_explode
+notunderwater
+count 10
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 13 54
+sizeincrease 120
+alpha 200 256 1600
+airfriction -3
+liquidfriction 8
+originjitter 40 40 40
+velocityjitter 712 712 712
+stretchfactor 10
+// smoke
+effect spiderbot_rocket_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 10
+size 10 15
+sizeincrease 280
+alpha 300 650 756
+originjitter 100 100 100
+velocityjitter 200 200 200
+airfriction 3
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+// smoke2
+effect spiderbot_rocket_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 3
+size 100 150
+sizeincrease 30
+alpha 300 650 556
+originjitter 10 10 10
+velocityjitter 200 200 200
+airfriction 2
+gravity -0.5
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+// underwater bubbles
+effect spiderbot_rocket_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 160 160 160
+velocityjitter 144 144 144
+// underwatershockwave
+effect spiderbot_rocket_explode
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 1200
+alpha 40 40 300
+
+
+effect spiderbot_rocket_thrust
+notunderwater
+count 3
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 5 10
+sizeincrease -40
+alpha 200 256 1600
+velocityjitter 20 20 20
+velocitymultiplier -1.4
+stretchfactor 0.9
+effect spiderbot_rocket_thrust
+notunderwater
+count 4
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 25 25
+sizeincrease -3000
+alpha 200 200 9000
+velocityjitter 60 60 60
+velocitymultiplier -1.4
+stretchfactor 1
+rotate -180 180 -500 500
+
+
+
+// long lasting smoke
+effect spiderbot_rocket_launch
+notunderwater
+count 8
+type smoke
+tex 0 8
+color 0xFFFFFF 0xD9C4B0
+size 30 30
+sizeincrease 20
+alpha 100 156 60
+velocityjitter 60 60 60
+velocitymultiplier -0.1
+airfriction 0.3
+gravity -0.01
+// fast smoke
+effect spiderbot_rocket_launch
+notunderwater
+count 14
+type smoke
+tex 0 8
+color 0xFFFFFF 0xD9C4B0
+size 30 30
+sizeincrease 20
+alpha 100 156 260
+gravity -0.3
+velocityjitter 160 160 60
+airfriction 0.3
+// fire
+effect spiderbot_rocket_launch
+notunderwater
+count 14
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 30 30
+sizeincrease 40
+velocitymultiplier 0.5
+alpha 200 256 1960
+velocityjitter 60 60 60
+airfriction 0.3
+stretchfactor 3
+airfriction 0.3
+//sparks
+effect spiderbot_rocket_launch
+notunderwater
+count 10
+type spark
+tex 40 40
+color 0xFFFFFF 0xD9C4B0
+size 1 4
+alpha 200 256 1000
+velocityjitter 160 160 160
+velocitymultiplier -0.5
+
+effect wakizashi_gun_impact
+count 15
+type spark
+color 0xff0000 0xc03535
+tex 41 41
+size 4 7
+alpha 256 512 1180
+airfriction 4
+gravity 3
+originjitter 40 40 10
+velocityjitter 350 350 550
+velocityoffset 0 0 700
+stretchfactor 0.9
+effect wakizashi_gun_impact
+type smoke
+count 24
+color 0xd0d0a0 0xc03535
+tex 0 8
+size 10 20
+alpha 50 90 150
+sizeincrease 80
+velocityjitter 250 250 450
+velocityoffset 0 0 600
+originjitter 40 40 10
+airfriction 4
+sizeincrease 80
+rotate -180 180 0 0
+effect wakizashi_gun_impact
+countabsolute 1
+type smoke
+tex 65 65
+color 0xff0000 0xc03535
+size 82 82
+alpha 250 300 680
+sizeincrease -180
+effect wakizashi_gun_impact
+countabsolute 1
+type smoke
+tex 33 33
+color 0xff0000 0xc03535
+size 40 40
+alpha 50 100 620
+sizeincrease 900
+rotate -180 180 400 -400
+effect wakizashi_gun_impact
+countabsolute 1
+type decal
+tex 59 59
+size 14 14
+alpha 256 256 0
+originjitter 16 16 16
+rotate -180 180 0 0
+
+effect wakizashi_gun_muzzleflash
+count 16
+type spark
+color 0xff0000 0xc03535
+tex 8 15
+size 5 7
+alpha 256 512 6280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 200 200 200
+velocitymultiplier 0.2
+sizeincrease -10
+stretchfactor 0.7
+
+effect wakizashi_rocket_explode
+countabsolute 1
+type decal
+tex 8 16
+size 72 72
+alpha 256 256 0
+originjitter 23 23 23
+lightradius 300
+lightradiusfade 1750
+lightcolor 8 4 0
+// shockwave
+effect wakizashi_rocket_explode
+countabsolute 1
+type static
+tex 33 33
+size 22 22
+alpha 56 56 230
+color 0x8f0d00 0xff5a00
+sizeincrease 2400
+// glow
+effect wakizashi_rocket_explode
+countabsolute 1
+type static
+tex 64 64
+size 120 120
+alpha 156 156 830
+color 0x8f0d00 0xff5a00
+sizeincrease 240
+// fire effect
+effect wakizashi_rocket_explode
+notunderwater
+count 64
+type static
+tex 48 55
+color 0xFFAE00 0xff5a00
+size 12 21
+sizeincrease 195
+alpha 200 256 512
+airfriction 2
+liquidfriction 8
+originjitter 10 10 10
+velocityjitter 512 512 512
+rotate -180 180 -50 50
+// fire rays
+effect wakizashi_rocket_explode
+notunderwater
+count 10
+type spark
+tex 48 55
+color 0xFFEA00 0xff5a00
+size 43 54
+sizeincrease 120
+alpha 200 256 1600
+airfriction -3
+liquidfriction 8
+originjitter 40 40 40
+velocityjitter 512 512 512
+stretchfactor 10
+// smoke
+effect wakizashi_rocket_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 32
+size 10 15
+sizeincrease 230
+alpha 300 450 556
+originjitter 100 100 100
+velocityjitter 200 200 200
+airfriction 3
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+// bouncing sparks
+effect wakizashi_rocket_explode
+notunderwater
+count 14
+type spark
+tex 40 40
+color 0xffa35b 0xfff2be
+size 1 2
+alpha 644 956 884
+gravity 1
+airfriction 1
+liquidfriction 0.8
+velocityoffset 0 0 170
+originjitter 60 60 60
+velocityjitter 524 524 524
+// underwater bubbles
+effect wakizashi_rocket_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 160 160 160
+velocityjitter 144 144 144
+// underwatershockwave
+effect wakizashi_rocket_explode
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 1200
+alpha 40 40 300
+
+effect wakizashi_rocket_thrust
+notunderwater
+countabsolute 3
+type spark
+tex 48 55
+color 0x00FFDD 0x6200FF
+size 14 19
+sizeincrease -2
+alpha 200 256 1600
+velocityjitter 60 60 60
+velocitymultiplier -1.1
+stretchfactor 1
+effect wakizashi_rocket_thrust
+notunderwater
+countabsolute 2
+type spark
+tex 48 55
+color 0xFFFF33 0xFFEE00
+size 5 10
+sizeincrease -2
+alpha 200 256 1900
+velocityjitter 60 60 60
+velocitymultiplier -0.3
+stretchfactor 3
+
+// long lasting smoke
+effect wakizashi_rocket_launch
+notunderwater
+count 8
+type smoke
+tex 0 8
+color 0xFFFFFF 0xD9C4B0
+size 3 30
+sizeincrease 20
+alpha 100 156 60
+velocityjitter 160 160 60
+velocitymultiplier -0.1
+airfriction 0.3
+// fast smoke
+effect wakizashi_rocket_launch
+notunderwater
+count 14
+type smoke
+tex 0 8
+color 0xFFFFFF 0xD9C4B0
+size 30 30
+sizeincrease 20
+alpha 100 156 260
+velocityjitter 160 160 60
+velocitymultiplier 0.4
+airfriction 0.3
+//sparks
+effect wakizashi_rocket_launch
+notunderwater
+count 10
+type spark
+tex 40 40
+color 0xFFFFFF 0xD9C4B0
+size 1 4
+alpha 200 256 1000
+velocityjitter 60 60 60
+velocitymultiplier -1.5
+
+effect wakizashi_booster_smoke
+type alphastatic
+notunderwater
+tex 0 8
+count 3
+size 60 100
+sizeincrease 10
+gravity -0.1
+alpha 200 750 200
+velocityjitter 40 40 40
+originjitter 60 60 60
+airfriction 2
+color 0xA69A80 0xB3B39F
+rotate -180 180 -20 20
+
+// decal
+effect raptor_cannon_impact
+countabsolute 1
+type decal
+tex 47 47
+size 24 24
+alpha 256 256 0
+originjitter 16 16 16
+rotate -180 180 0 0
+//spark
+effect raptor_cannon_impact
+notunderwater
+count 6
+type spark
+tex 40 40
+color 0xD400FF 0x571863
+size 1 1
+alpha 644 956 784
+gravity 1
+airfriction 0.2
+velocityoffset 0 0 150
+originjitter 16 16 16
+velocityjitter 124 124 524
+// smoke
+effect raptor_cannon_impact
+count 4
+type alphastatic
+tex 0 7
+size 50 50
+color 0x646364 0x151515
+alpha 428 428 600
+rotate -180 180 0 0
+velocityjitter 200 200 300
+velocityoffset 0 0 340
+gravity 0.7
+airfriction 2
+// fire
+effect raptor_cannon_impact
+notunderwater
+count 10
+type static
+tex 48 55
+color 0xD400FF 0x571863
+size 33 44
+sizeincrease 25
+alpha 200 256 812
+bounce 1.5
+airfriction 8
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 312 312 312
+
+
+effect raptor_cannon_muzzleflash
+count 16
+type spark
+color 0xD400FF 0x571863
+tex 8 15
+size 10 17
+alpha 1256 1512 56280
+airfriction 12
+originjitter 2 2 2
+velocityjitter 200 200 200
+velocitymultiplier 0.2
+sizeincrease -10
+stretchfactor 0.6
+effect raptor_cannon_muzzleflash
+countabsolute 1
+type static
+tex 48 55
+color 0xD400FF 0x571863
+size 32 32
+alpha 6056 20112 406280
+sizeincrease -100
+stretchfactor 0.1
+rotate -180 180 4000 -4000
+lightradius 150
+lightradiusfade 6000
+lightcolor 3 0 6
+
+// decal
+effect raptor_bomb_impact
+countabsolute 1
+type decal
+tex 8 16
+size 84 84
+alpha 256 256 0
+originjitter 16 16 16
+rotate -180 180 0 0
+
+//spark vertical
+effect raptor_bomb_impact
+count 3
+type spark
+color 0xff9c00 0xff3c00
+tex 48 55
+size 20 40
+alpha 300 300 600
+originjitter 10 10 10
+velocityjitter 40 40 120
+stretchfactor 210
+sizeincrease 50
+
+//fire
+effect raptor_bomb_impact
+count 4
+type static
+color 0xff9c00 0xff3c00
+tex 48 55
+size 30 120
+alpha 300 300 500
+originjitter 10 10 10
+velocityjitter 950 950 0
+sizeincrease 230
+airfriction 2
+
+//smoke
+effect raptor_bomb_impact
+count 4
+type spark
+blend alpha
+tex 0 7
+size 120 180
+color 0x646364 0x151515
+alpha 428 428 600
+rotate -180 180 0 0
+velocityjitter 200 200 280
+velocityoffset 0 0 280
+originjitter 30 30 10
+stretchfactor 10
+
+//smoke 2
+effect raptor_bomb_impact
+count 4
+//type alphastatic
+type spark
+blend alpha
+tex 0 7
+size 40 100
+color 0x646364 0x151515
+alpha 328 328 350
+rotate -180 180 0 0
+velocityjitter 200 200 300
+velocityoffset 0 0 580
+originjitter 30 30 10
+sizeincrease 60
+airfriction 0.6
+gravity 2
+
+// sparks
+effect raptor_bomb_impact
+notunderwater
+count 5
+type spark
+tex 40 40
+color 0xffa35b 0xfff2be
+size 3 5
+alpha 644 956 984
+gravity 1
+airfriction 0.3
+velocityoffset 0 0 350
+originjitter 16 16 16
+velocityjitter 174 174 924
+stretchfactor 2
+
+effect raptor_bomb_spread
+notunderwater
+count 34
+type spark
+tex 40 40
+color 0xffa35b 0xfff2be
+size 1 2
+alpha 644 956 1284
+gravity 1
+airfriction 1
+liquidfriction 0.8
+originjitter 110 110 110
+velocityjitter 324 324 324
+
+
+// generic explosion size:big (biggest explosion ever)
+effect explosion_big
+countabsolute 1
+type decal
+tex 8 16
+size 172 172
+alpha 256 256 0
+originjitter 23 23 23
+lightradius 600
+lightradiusfade 1750
+lightcolor 8 4 0
+// shockwave
+effect explosion_big
+countabsolute 1
+type static
+tex 33 33
+size 72 72
+alpha 56 56 330
+color 0x8f0d00 0xff5a00
+sizeincrease 4400
+// fire effect
+effect explosion_big
+notunderwater
+count 64
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 133 144
+sizeincrease 45
+alpha 200 256 712
+airfriction 8
+liquidfriction 8
+originjitter 80 80 80
+velocityjitter 2512 2512 2512
+// fire rays
+effect explosion_big
+notunderwater
+count 64
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 133 144
+sizeincrease 45
+alpha 200 256 800
+airfriction -5
+liquidfriction 8
+originjitter 40 40 40
+velocityjitter 512 512 512
+stretchfactor 10
+// smoke
+effect explosion_big
+type alphastatic
+notunderwater
+tex 0 8
+count 32
+size 50 100
+sizeincrease 244
+alpha 300 650 456
+velocityjitter 3444 3444 3444
+airfriction 8
+color 0x4F4B46 0x000000
+// bouncing sparks
+effect explosion_big
+notunderwater
+count 34
+type spark
+tex 40 40
+color 0xffa35b 0xfff2be
+size 3 4
+alpha 644 956 1284
+gravity 1
+airfriction 1
+liquidfriction 0.8
+velocityoffset 0 0 370
+originjitter 160 160 160
+velocityjitter 924 924 924
+stretchfactor 0.7
+// derbis
+effect explosion_big
+notunderwater
+count 16
+type alphastatic
+tex 66 68
+color 0xFFFFFF 0xcac5b4
+size 10 16
+alpha 444 1356 1184
+gravity 2.3
+airfriction 0.5
+velocityjitter 1800 1800 1800
+velocityoffset 0 0 970
+sizeincrease -5
+rotate -180 180 -1000 1000
+// underwater bubbles
+effect explosion_big
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 160 160 160
+velocityjitter 444 444 444
+// underwatershockwave
+effect explosion_big
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 2900
+alpha 40 40 300
+velocitymultiplier 0.3
+
+
+// generic explosion size:medium (it leaves rising smoke for a longer time)
+// shockwave
+effect explosion_medium
+countabsolute 1
+type static
+tex 33 33
+size 72 72
+alpha 56 56 330
+color 0x8f0d00 0xff5a00
+sizeincrease 2400
+// fire effect
+effect explosion_medium
+notunderwater
+count 32
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 133 144
+sizeincrease 45
+alpha 200 256 712
+airfriction 8
+liquidfriction 8
+originjitter 30 30 30
+velocityjitter 1512 1512 1512
+rotate -180 180 -500 500
+// fire effect 2
+effect explosion_medium
+notunderwater
+count 32
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 73 94
+sizeincrease 40
+gravity -2
+alpha 200 256 612
+airfriction 8
+liquidfriction 8
+originjitter 30 30 30
+velocityjitter 1512 1512 1512
+rotate -180 180 -150 150
+// fire rays
+effect explosion_medium
+notunderwater
+count 14
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 43 74
+sizeincrease 40
+alpha 200 256 800
+airfriction -3
+liquidfriction 8
+originjitter 40 40 40
+velocityjitter 512 512 512
+stretchfactor 8
+// smoke
+effect explosion_medium
+type alphastatic
+notunderwater
+tex 0 8
+count 5
+size 250 300
+sizeincrease -30
+alpha 300 650 756
+originjitter 100 100 100
+velocityjitter 200 200 200
+airfriction 3
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+// smoke 2
+effect explosion_medium
+type alphastatic
+notunderwater
+tex 0 8
+count 10
+size 50 100
+sizeincrease 50
+gravity -0.3
+alpha 300 650 256
+originjitter 100 100 100
+velocityjitter 500 500 500
+velocityoffset 0 0 200
+airfriction 3
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+// smoke rays
+effect explosion_medium
+type spark
+notunderwater
+tex 0 8
+count 13
+size 150 200
+sizeincrease 100
+alpha 140 255 350
+velocityjitter 250 250 250
+originjitter 40 40 40
+color 0x4F4B46 0x000000
+stretchfactor 50
+// bouncing sparks
+effect explosion_medium
+notunderwater
+count 14
+type spark
+tex 40 40
+color 0xffa35b 0xfff2be
+size 2 3
+alpha 644 956 984
+gravity 1
+airfriction 1
+liquidfriction 0.8
+velocityoffset 0 0 370
+originjitter 100 100 100
+velocityjitter 624 624 624
+stretchfactor 0.7
+// underwater bubbles
+effect explosion_medium
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 160 160 160
+velocityjitter 444 444 444
+// underwatershockwave
+effect explosion_medium
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 2900
+alpha 40 40 300
+velocitymultiplier 0.3
+
+// generic explosion size:small (its fire only, made to support other explosions)
+// shockwave
+effect explosion_small
+countabsolute 1
+type static
+tex 33 33
+size 22 22
+alpha 56 56 330
+color 0x8f0d00 0xff5a00
+sizeincrease 2400
+// fire effect
+effect explosion_small
+notunderwater
+count 16
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 1 44
+sizeincrease 45
+alpha 200 256 1212
+airfriction 5
+liquidfriction 8
+velocityjitter 512 512 512
+rotate -180 180 -500 500
+// fire effect 2
+effect explosion_small
+notunderwater
+count 16
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 73 94
+sizeincrease 40
+alpha 200 256 812
+airfriction 8
+liquidfriction 8
+velocityjitter 912 912 912
+rotate -180 180 -150 150
+// fire rays
+effect explosion_small
+notunderwater
+count 14
+type spark
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 13 54
+sizeincrease 30
+alpha 200 256 1300
+airfriction -3
+liquidfriction 8
+originjitter 40 40 40
+velocityjitter 512 512 512
+stretchfactor 8
+// underwater bubbles
+effect explosion_small
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 160 160 160
+velocityjitter 144 144 144
+// underwatershockwave
+effect explosion_small
+underwater
+type smoke
+countabsolute 1
+tex 33 33
+size 30 30
+sizeincrease 1200
+alpha 40 40 300
+
+// big smoke ( for spamming on damaged stuff )
+effect smoke_big
+type alphastatic
+notunderwater
+tex 0 8
+count 3
+size 30 60
+sizeincrease 15
+gravity -0.5
+alpha 200 750 200
+originjitter 55 55 55
+velocityjitter 140 140 200
+velocityoffset 0 0 200
+airfriction 4
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+
+// small smoke ( more precise than big one, for spamming on damaged parts like raptors spinner )
+effect smoke_small
+type alphastatic
+notunderwater
+tex 0 8
+count 3
+size 60 100
+sizeincrease -10
+gravity -0.5
+alpha 200 750 200
+velocityjitter 40 40 400
+velocityoffset 0 0 200
+airfriction 4
+color 0x4F4B46 0x000000
+rotate -180 180 -20 20
+
// tuba does not use the weapon damage effect
// laser damage effect
// porto does not use the weapon damage effect
-// hook does not use the weapon damage effect
\ No newline at end of file
+// hook does not use the weapon damage effect
cl_decals 1
+cl_decals_models 0
cl_decals_time 4
cl_particles_quality 1
gl_flashblend 0
r_bloom 1
r_coronas 1
r_coronas_occlusionquery 1
-r_damageblur 0.4
+hud_postprocessing_maxbluralpha 0.5
+hud_powerup 0
r_depthfirst 2
r_drawdecals_drawdistance 500
r_drawparticles_drawdistance 2000
cl_decals 1
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 0.4
gl_flashblend 1
r_bloom 0
r_coronas 1
r_coronas_occlusionquery 0
-r_damageblur 0
+hud_postprocessing_maxbluralpha 0
+hud_powerup 0
r_depthfirst 0
r_drawdecals_drawdistance 200
r_drawparticles_drawdistance 500
cl_decals 1
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 1
gl_flashblend 0
r_bloom 0
r_coronas 1
r_coronas_occlusionquery 0
-r_damageblur 0
+hud_postprocessing_maxbluralpha 0
+hud_powerup 0
r_depthfirst 0
r_drawdecals_drawdistance 300
r_drawparticles_drawdistance 1000
cl_decals 1
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 1
gl_flashblend 0
r_bloom 0
r_coronas 1
r_coronas_occlusionquery 0
-r_damageblur 0
+hud_postprocessing_maxbluralpha 0
+hud_powerup 0
r_depthfirst 1
r_drawdecals_drawdistance 300
r_drawparticles_drawdistance 1000
cl_decals 0
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 0.4
gl_flashblend 1
r_bloom 0
r_coronas 1
r_coronas_occlusionquery 0
-r_damageblur 0
+hud_postprocessing_maxbluralpha 0.5
+hud_powerup 0.5
r_depthfirst 0
r_drawdecals_drawdistance 100
r_drawparticles_drawdistance 250
cl_decals 1
+cl_decals_models 1
cl_decals_time 10
cl_particles_quality 1
gl_flashblend 0
r_bloom 1
r_coronas 1
r_coronas_occlusionquery 1
-r_damageblur 0.4
+hud_postprocessing_maxbluralpha 0.5
+hud_powerup 0.5
r_depthfirst 2
r_drawdecals_drawdistance 500
r_drawparticles_drawdistance 2000
cl_decals 1
+cl_decals_models 1
cl_decals_time 10
cl_particles_quality 1
gl_flashblend 0
r_bloom 1
r_coronas 1
r_coronas_occlusionquery 1
-r_damageblur 0.4
+hud_postprocessing_maxbluralpha 0.5
+hud_powerup 0.5
r_depthfirst 2
r_drawdecals_drawdistance 500
r_drawparticles_drawdistance 2000
--- /dev/null
+use strict;
+use warnings;
+use Locale::PO;
+
+sub quote($)
+{
+ my $s = shift;
+ $s = '"' . quotemeta($s) . '"';
+ return $s;
+}
+sub unquote($)
+{
+ my $s = shift;
+ $s =~ s/^"//;
+ $s =~ s/"$//;
+ $s =~ s/\\(.)/$1/g;
+ return $s;
+}
+my $po = Locale::PO->load_file_ashash("menu.dat." . $ENV{L} . ".po");
+while(<>)
+{
+ /\\(.*?)\\(.*)/s or do { print; next; };
+ my @s = split /\//, $1;
+ @s = map { $po->{quote($_)} ? unquote($po->{quote($_)}->msgstr()) : $_ } @s;
+ my $s = join "/", @s;
+ $_ = "\\$s\\$2";
+ print "$_";
+}
seta cl_swapattacks_hook 0
seta cl_swapattacks_hlac 0
seta cl_swapattacks_tuba 0
-seta cl_swapattacks_sniperrifle 0
+seta cl_swapattacks_rifle 0
seta cl_swapattacks_fireball 0
seta cl_swapattacks_seeker 0
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 "
+seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.940000 0.180000"
seta hud_panel_weapons_size "0.060000 0.610000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.420000 0.620000"
seta hud_panel_physics_size "0.170000 0.080000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "1"
seta hud_panel_physics_text "1"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 "
+seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.350000 0.940000"
seta hud_panel_weapons_size "0.300000 0.060000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.440000 0.590000"
seta hud_panel_physics_size "0.120000 0.050000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "3"
seta hud_panel_physics_text "2"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 "
+seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.920000 0.090000"
seta hud_panel_weapons_size "0.060000 0.630000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.410000 0.590000"
seta hud_panel_physics_size "0.180000 0.100000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "1"
seta hud_panel_physics_text "1"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 "
+seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.350000 0.940000"
seta hud_panel_weapons_size "0.300000 0.060000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.270000 0.730000"
seta hud_panel_physics_size "0.170000 0.030000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "3"
seta hud_panel_physics_text "2"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.25 1 0.25"
seta hud_progressbar_acceleration_neg_color "1 0.25 0.25"
-seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 "
+seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.01"
seta hud_configure_grid_ysize "0.01"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.370000 0.870000"
seta hud_panel_weapons_size "0.340000 0.060000"
seta hud_panel_infomessages_bg_padding ""
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.430000 0.640000"
seta hud_panel_physics_size "0.140000 0.100000"
seta hud_panel_physics_bg "0"
seta hud_panel_physics_progressbar "3"
seta hud_panel_physics_text "2"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
--- /dev/null
+alias playdemo "set _demo_name \"$1\""
+set _demo_name ""
+set _demo_seeking 0
+set _demo_good 0
+set _demo_time_increasing 0
+set _demo_time 0
+set _demo_time_step 0
+alias seekdemo "_seekdemo_1_$_demo_seeking $1"
+alias _seekdemo_1_0 "cl_cmd rpn time dup \"$1\" add dup /_demo_time exch def le /_demo_time_increasing exch def; _seekdemo_2"
+alias _seekdemo_1_1 "cl_cmd rpn time _demo_time \"$1\" add dup /_demo_time exch def le /_demo_time_increasing exch def; _seekdemo_2"
+alias _seekdemo_2 "_demo_seeking 1; r_render 0; snd_startnonloopingsounds 0; _seekdemo_3_$_demo_time_increasing"
+alias _seekdemo_3_0 "playdemo \"$_demo_name\"; _seekdemo_4; defer 10 _seekdemo_9_2"
+alias _seekdemo_3_1 "_seekdemo_7"
+alias _seekdemo_4 "set _demo_good 0; cl_cmd rpn /_demo_good 1 def; _seekdemo_5"
+alias _seekdemo_5 "_seekdemo_6_$_demo_good"
+alias _seekdemo_6_0 "defer 0.001 _seekdemo_4"
+alias _seekdemo_6_1 "defer clear; _seekdemo_7"
+alias _seekdemo_7 "set _demo_time_step 2; cl_cmd rpn _demo_time time gt /_demo_time_step exch def; _seekdemo_8"
+alias _seekdemo_8 "_seekdemo_9_$_demo_time_step"
+alias _seekdemo_9_0 "slowmo 1; set _demo_seeking 0; r_render 1; snd_startnonloopingsounds 1"
+alias _seekdemo_9_1 "cl_cmd rpn _demo_time time sub 10 mul 1 add /slowmo exch def; defer 0.001 _seekdemo_7"
+alias _seekdemo_9_2 "slowmo 1; set _demo_seeking 0; r_render 1; snd_startnonloopingsounds 1; echo SEEK FAILED"
+bind , "seekdemo -5"
+bind . "seekdemo +5"
+bind m "seekdemo -30"
+bind - "seekdemo +30"
+bind / "seekdemo +30"
+
+// Usage:
+// start a demo
+// use ,. keys to seek -5/+5 seconds
+// use m/ keys (left/right of ,.) to seek -30/+30 seconds
"weaplast" "previously used"
"weapbest" "best"
"reload" "reload"
-"impulse 1" "Laser"
-"impulse 2" "Shotgun"
-"impulse 3" "Machine Gun"
-"impulse 4" "Mortar / Mine Layer"
-"impulse 5" "Electro"
-"impulse 6" "Crylink / HLAC"
-"impulse 7" "Nex / MinstaNex / Rifle"
-"impulse 8" "Hagar / Seeker"
-"impulse 9" "Rocket Launcher / Fireball"
-"impulse 14" "Port-O-Launch / Hook"
+"weapon_group_1" "Laser"
+"weapon_group_2" "Shotgun"
+"weapon_group_3" "Machine Gun"
+"weapon_group_4" "Mortar / Mine Layer"
+"weapon_group_5" "Electro"
+"weapon_group_6" "Crylink / HLAC"
+"weapon_group_7" "Nex / MinstaNex / Rifle"
+"weapon_group_8" "Hagar / Seeker"
+"weapon_group_9" "Rocket Launcher / Fireball"
+"weapon_group_0" "Port-O-Launch / Hook"
"" ""
"" "View"
"+zoom" "hold zoom"
--- /dev/null
+"" "Movimento"
+"+forward" "avanti"
+"+back" "indietro"
+"+moveleft" "a sinistra"
+"+moveright" "a destra"
+"+jump" "salta / nuota"
+"+crouch" "accovacciarsi / abbassarsi"
+"+hook" "uncino / jet pack"
+"" ""
+"" "Attacco"
+"+fire" "fuoco primario"
+"+fire2" "fuoco secondario"
+"" ""
+"" "Cambio d'arma"
+"weapprev" "arma precedente"
+"weapnext" "arma successiva"
+"weaplast" "ultima arma usata"
+"weapbest" "miglior arma"
+"reload" "ricarica"
+"impulse 1" "Laser"
+"impulse 2" "Shotgun"
+"impulse 3" "Machine Gun"
+"impulse 4" "Mortar / Mine Layer"
+"impulse 5" "Electro"
+"impulse 6" "Crylink / HLAC"
+"impulse 7" "Nex / MinstaNex / Fucile"
+"impulse 8" "Hagar / Seeker"
+"impulse 9" "Rocket Launcher / Fireball"
+"impulse 14" "Port-O-Launch / Hook"
+"" ""
+"" "Vista"
+"+zoom" "tieni zoom"
+"togglezoom" "attiva/disattiva zoom"
+"+showscores" "mostra punteggio"
+"screenshot" "cattura schermata"
+"" ""
+"" "Comunicazione"
+"messagemode" "chat pubblica"
+"messagemode2" "chat di squadra"
+"+con_chat_maximize" "mostra storia chat"
+"vyes" "vota SÌ"
+"vno" "vota NO"
+"ready" "pronto"
+"" ""
+"" "Client"
+"+show_info" "info del server"
+"toggleconsole" "apri console"
+"disconnect" "disconnetti"
+"quit" "esci"
+"" ""
+"" "Teamplay"
+"messagemode2" "chat di squadra"
+"team_auto" "auto-unisciti ad una squadra"
+"menu_showteamselect" "selezione della squadra"
+"spec" "entra in modalità spettatore"
+"dropweapon" "rilascia arma"
+"+use" "rilascia chiave / rilascia bandiera"
+"" ""
+"" "Definiti dall'utente"
+"+userbind 1" "$userbind1"
+"+userbind 2" "$userbind2"
+"+userbind 3" "$userbind3"
+"+userbind 4" "$userbind4"
+"+userbind 5" "$userbind5"
+"+userbind 6" "$userbind6"
+"+userbind 7" "$userbind7"
+"+userbind 8" "$userbind8"
+"+userbind 9" "$userbind9"
+"+userbind 10" "$userbind10"
+"+userbind 11" "$userbind11"
+"+userbind 12" "$userbind12"
+"+userbind 13" "$userbind13"
+"+userbind 14" "$userbind14"
+"+userbind 15" "$userbind15"
+"+userbind 16" "$userbind16"
+"+userbind 17" "$userbind17"
+"+userbind 18" "$userbind18"
+"+userbind 19" "$userbind19"
+"+userbind 20" "$userbind20"
+"+userbind 21" "$userbind21"
+"+userbind 22" "$userbind22"
+"+userbind 23" "$userbind23"
+"+userbind 24" "$userbind24"
+"+userbind 25" "$userbind25"
+"+userbind 26" "$userbind26"
+"+userbind 27" "$userbind27"
+"+userbind 28" "$userbind28"
+"+userbind 29" "$userbind29"
+"+userbind 30" "$userbind30"
+"+userbind 31" "$userbind31"
+"+userbind 32" "$userbind32"
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:05+0200\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
"PO-Revision-Date: 2011-04-20 10:46+0200\n"
"Last-Translator: Rudolf Polzer <divVerent@xonotic.org>\n"
"Language-Team: Rudolf Polzer <divVerent@xonotic.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Nur aktuellen Munitionstyp anzeigen"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr "Icon ausrichten:"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
msgstr "Links"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
msgid "Right"
msgstr "Rechts"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
+msgid "Centerprint"
+msgstr "Nachrichten"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+msgid "Message duration:"
+msgstr "Anzeigedauer:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+msgid "Fade time:"
+msgstr "Ausblenden nach:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+msgid "Flip messages order"
+msgstr "Reihenfolge vertauschen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+msgid "Text alignment:"
+msgstr "Textausrichtung:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
+msgid "Center"
+msgstr "Mittig"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+msgid "Font scale:"
+msgstr "Schriftgröße:"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
msgid "Chat Panel"
msgstr "Chat-Panel"
msgid "Entry fadetime:"
msgstr "Eintrags-Ausblendung:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
+msgstr "Physik-Panel"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Panel nicht anzeigen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+msgid "Panel enabled"
+msgstr "Panel anzeigen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled even observing"
+msgstr "Panel auch beim Zuschauen anzeigen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+msgid "Panel enabled only in Race/CTS"
+msgstr "Panel nur in Race und CTS anzeigen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+msgid "Status bar"
+msgstr "Statusleiste"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Links"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Rechts"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+msgid "Inward align"
+msgstr "Innen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Outward align"
+msgstr "Außen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+msgid "Flip speed/acceleration positions"
+msgstr "Geschwindigkeit/Beschleunigung tauschen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+msgid "Speed:"
+msgstr "Geschwindigkeit:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr "Mit vertikaler Geschwindigkeit"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr "Geschwindigkeitseinheit:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "Knoten"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+msgid "Show"
+msgstr "Anzeigen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+msgid "Top speed"
+msgstr "Geschwindigkeitsrekord:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+msgid "Acceleration:"
+msgstr "Beschleunigung:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr "Mit vertikaler Beschleunigung"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Bonus-Panel"
msgid "Pressed Keys Panel"
msgstr "Gedrückte-Tasten-Panel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Panel nicht anzeigen"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Panel beim Zuschauen anzeigen"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Alpha:"
msgid "Score Panel"
msgstr "Punkte-Panel"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr "Punkte:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr "Platzierungen:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Off"
+msgstr "Aus"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr "Auch für mich"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr "Rein"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Zeit-Panel"
msgid "Fade effect:"
msgstr "Ausblendeeffekt:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "keiner"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Schieben"
msgid "Alpha"
msgstr "Alpha"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+msgid "EF^Both"
+msgstr "beide"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Waffensymbole:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Waffen-ID zeigen als:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "nichts"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Zahl"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Taste"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Trefferquote zeigen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Munition zeigen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Muntionsleistenfarbe:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Munitionsleistenalpha:"
msgid "Panel background defaults:"
msgstr "Panel-Standardhintergrund:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Hintergrund:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Aus"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Farbe:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Rahmengröße:"
msgid "Team color:"
msgstr "Teamfarbe:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Teamfarbe bei Konfiguration testen"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Abstand:"
msgid "Player Setup"
msgstr "Spieler-Einstellungen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
msgid "Game type:"
msgstr "Spieltyp"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
msgid "Match settings:"
msgstr "Spieleinstellungen:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
msgid "Time limit:"
msgstr "Zeitlimit:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
msgid "Use map specified default"
msgstr "Standardwert der Map verwenden"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Point limit:"
msgstr "Punktelimit"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
msgid "Player slots:"
msgstr "Spielerplätze:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
msgid "Number of bots:"
msgstr "Anzahl Bots:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
msgid "Bot skill:"
msgstr "Spielstärke:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
msgid "Botlike"
msgstr "Bots halt"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
msgid "Beginner"
msgstr "Anfänger"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
msgid "You will win"
msgstr "Gewinnst schon"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
msgid "You can win"
msgstr "Kannst gewinnen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
msgid "You might win"
msgstr "Könntest gewinnen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
msgid "Advanced"
msgstr "Fortgeschritten"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
msgid "Expert"
msgstr "Experte"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
msgid "Pro"
msgstr "Profi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
msgid "Assassin"
msgstr "Mörder"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
msgid "Unhuman"
msgstr "Übermenschlich"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
msgid "Godlike"
msgstr "Gottgleich"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
msgid "Mutators..."
msgstr "Mutators..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Erweiterte Einstellungen..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
msgid "Map list:"
msgstr "Mapliste:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
msgid "Select all"
msgstr "Alle auswählen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
msgid "Select none"
msgstr "Keine auswählen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
msgid "Start Multiplayer!"
msgstr "Starten!"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
msgid "Capture limit:"
msgstr "Capture-Limit:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
msgid "Lives:"
msgstr "Leben:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
msgid "Laps:"
msgstr "Runden:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
msgid "Goals:"
msgstr "Tore:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Frag limit:"
msgstr "Punktelimit:"
msgid "Game types:"
msgstr "Spieltyp:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
msgid "Close"
msgstr "Schließen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
-msgid "Play"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+msgid "MAP^Play"
msgstr "Start"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
msgid "Timedemo"
msgstr "Timedemo"
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
+msgid "DEMO^Play"
+msgstr "Abspielen"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
msgid "Join"
msgstr "Verbinden"
msgstr "Schadenseffekt:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Sofort anwenden"
msgid "Draw 1st person weapon model"
msgstr "Waffe in 3D anzeigen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Links"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Rechts"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "3D-Ansicht spiegeln"
msgid "Music:"
msgstr "Musik:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr "Umgebung:"
msgid "Info:"
msgstr "Info:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr "Gegenstände:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr "Schmerz:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr "Spieler:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr "Schüsse:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr "Stimme:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr "Waffen:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr "Frequenz:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr "11,025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr "22,05 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr "44,1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr "Kanäle"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr "Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr "Stereokanäle tauschen"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr "Kopfhörer-Modus"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr "Räumliche Sprachnachrichten:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr "keine"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
msgstr "nur Spott"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr "alle"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr "Spott-Radius:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
msgstr "Sehr klein"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr "Klein"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr "Normal"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr "Groß"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr "Sehr groß"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr "Automatischer Spott"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr "Zeitwarnung:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr "keine"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr "1 Minute"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr "5 Minuten"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr "beide"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr "Treffer-Indikator"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr "Menü-Sounds"
msgid "Decals"
msgstr "Einschusslöcher"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+msgid "Decals on models"
+msgstr "auch auf Objekten"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
msgid "Distance:"
msgstr "Distanz:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
msgid "Time:"
msgstr "Zeit:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "Use lightmaps"
msgstr "Lightmaps verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
msgid "Deluxe mapping"
msgstr "Deluxemapping"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
msgid "Gloss"
msgstr "Glanz"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
msgid "Offset mapping"
msgstr "Offsetmapping"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Relief mapping"
msgstr "Reliefmapping"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
msgid "Reflections:"
msgstr "Reflexionen:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
msgid "Blurred"
msgstr "Schwammig"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "REFL^Good"
msgstr "Gut"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
msgid "Sharp"
msgstr "Scharf"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
msgid "Show surfaces"
msgstr "Oberflächen anzeigen"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
msgid "No dynamic lighting"
msgstr "Kein dynamisches Licht"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
msgid "Flash blend approximation"
msgstr "Flash-Blend-Näherung"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
msgid "Realtime dynamic lighting"
msgstr "Dynamisches Licht in Echtzeit"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
msgid "Shadows"
msgstr "Schatten"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
msgid "Realtime world lighting"
msgstr "Map-Licht in Echtzeit"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
msgid "Use normal maps"
msgstr "Normalmaps verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
msgid "Soft shadows"
msgstr "Weiche Schatten"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
msgid "Coronas"
msgstr "Koronas"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
msgid "Use Occlusion Queries"
msgstr "Occlusion Queries verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
msgid "Bloom"
msgstr "Überstrahlung"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
msgid "High Dynamic Range (HDR)"
msgstr "Lichtdynamik (HDR)"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
msgid "Motion blur:"
msgstr "Bewegungsunschärfe:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
-msgstr "Schadensunschärfe:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
+msgid "Blur and sharpen postprocessing"
+msgstr "Schärfeeffekte"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgid "Sensitivity:"
msgstr "Empfindlichkeit:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Mausgeschwindigkeit:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Mausfilterung"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Höhe invertieren"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Joystick verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Mausbeschleunigung deaktivieren"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"Konsole öffnen\" schließt auch"
msgstr "Frames pro Sekunde anzeigen"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Tachometer"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (ohne Einheit)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "Knoten"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Akzelerometer anzeigen"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Akzelerometer-Skalierung:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Eingabelatenz minimieren"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Kontrasterhöhung:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Sättigung:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Umgebungslicht:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Lichtstärke:"
msgid "Update to %s now!"
msgstr "Jetzt auf %s updaten!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1FEHLER: Texturekompression ist notwendig aber nicht unterstützt.\n"
"^1Darstellungsprobleme sind zu erwarten.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Assault"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Capture The Flag"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Domination"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Race"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Runematch"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba-Werfen"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Hintergrund:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Standard"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Standard verwenden"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Teamfarbe:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Panel aktivieren"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s vergaß, wo er das Plasma hingetan hatte"
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s spielte mit Plasma"
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s hat gerade %ss blaue Kugel bemerkt"
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s kam mit %ss blauer Kugel in Kontakt"
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s hat gespürt, wie %ss Combo die Luft elektrisierte"
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s kam zu nah an %ss blauen Strahl"
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s wurde von %ss blauen Strahl erwischt"
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s wollte wissen, ob seine Granate funktioniert"
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s verfing sich in der eigenen Detonation"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s hat %ss Granate nicht gesehen"
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s ist fast %ss Granate ausgewichen"
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s nahm %ss Granate in den Mund"
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s hat mit kleinen Raketen gespielt"
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s hat gehofft, dass %ss Raketen nicht von Wänden abprallen"
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "^1%s^1 wurde von %s^1 erwischt"
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s hat das Unmögliche geschafft"
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr "%s hat sich in die Hölle gelasert"
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr "%s ist von %ss Gauntlet halbiert worden"
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr "^1%s^1 wurde von %s^1 zu Tode gelasert"
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s ist explodiert"
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr "%s ist %ss Mine zu nahe getreten"
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr "%s ist fast %ss Mine ausgewichen"
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr "%s ist auf %ss Mine gelatscht"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:215 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr "%s kann jetzt mit Portalen denken"
+
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "^1%s^1 wurde von %s^1 vernichtet"
msgid "%s felt %s doing the impossible to him"
msgstr "%s hat gespürt, wie %s das Unmögliche für ihn getan hat"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr "Gewehr"
+
+#: qcsrc/server/w_rifle.qc:233
+#, c-format
+msgid "%s shot themself automatically"
+msgstr "%s hat sich vollautomatisch selbst erschossen"
+
+#: qcsrc/server/w_rifle.qc:235
+#, c-format
+msgid "%s sniped themself somehow"
+msgstr "%s hat so scharf geschossen, dass er sich selbst getroffen hat"
+
+#: qcsrc/server/w_rifle.qc:242
+#, c-format
+msgid "%s failed to hide from %s's bullet hail"
+msgstr "%s hat es nicht geschafft, sich vor %ss Kugelhagel zu verstecken"
+
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
+msgstr "%s ist in %ss Kugelhagel gefallen"
+
+#: qcsrc/server/w_rifle.qc:251
+#, c-format
+msgid "%s failed to hide from %s's rifle"
+msgstr "%s hat es nicht geschafft, sich vor %ss Gewehr zu verstecken"
+
+#: qcsrc/server/w_rifle.qc:256
+#, c-format
+msgid "%s got hit in the head by %s"
+msgstr "%s hat ein Loch im Kopf bekommen; schuld war %s"
+
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
+msgstr "^1%s^1 wurde von %s^1 erledigt"
+
#: qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Rocket Launcher"
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
msgid "%s got too close to %s's rocket"
msgstr "%s ist %ss Rakete zu nahe getreten"
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
msgid "%s almost dodged %s's rocket"
msgstr "%s ist fast %ss Rakete ausgewichen"
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
msgid "%s ate %s's rocket"
msgstr "%s hat %ss Rakete in den Mund genommen"
msgid "Shotgun"
msgstr "Shotgun"
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_shotgun.qc:219
#, c-format
msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr "%2$1s ^7hat %1$s ^7ein wenig mit einer großen Schrotflinte geschlagen"
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_shotgun.qc:221
#, c-format
msgid "%s was gunned by %s"
msgstr "^1%s^1 wurde von %s^1 erschossen"
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s hat sich vollautomatisch selbst erschossen"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s hat so scharf geschossen, dass er sich selbst getroffen hat"
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s hat es nicht geschafft, sich vor %ss Kugelhagel zu verstecken"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s ist in %ss Kugelhagel gefallen"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s hat es nicht geschafft, sich vor %ss Gewehr zu verstecken"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s hat ein Loch im Kopf bekommen; schuld war %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "^1%s^1 wurde von %s^1 erledigt"
-
#: qcsrc/server/w_tuba.qc:2
#, c-format
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr ""
"%s haben die Ohren geschmerzt von seinem eigenen Spiel auf der @!#%%'n Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr ""
#, c-format
msgid "%s was riddled full of holes by %s"
msgstr "%s ist von %s durchlöchert worden wie ein Schweizer Käse"
+
+#~ msgid "Powerup sharpen"
+#~ msgstr "Bonus-Schärfe"
+
+#~ msgid "Damage & water blur"
+#~ msgstr "Schadens-Unschärfe"
msgstr ""
"Project-Id-Version: Xonotic 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
"Last-Translator: Rodrigo Mouton Laudin <ratogenesis@gmail.com>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
#: qcsrc/menu/gamecommand.qc:239
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-"Comando no valido. Para una lista de comandos soportados, teclea menu_cmd "
+"Comando no válido. Para una lista de comandos soportados, escriba menu_cmd "
"help\n"
#: qcsrc/menu/item/gecko.c:49
msgid "Browser not initialized!"
-msgstr "navegador no inicializado!"
+msgstr "Navegador no inicializado!"
#: qcsrc/menu/item/label.c:63
#, c-format
msgstr "Personalizado"
#: qcsrc/menu/menu.qc:29
-#, fuzzy, c-format
+#, c-format
msgid "^4MQC Build information: ^1%s\n"
msgstr "^4MQC Información de compilación/build %s\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
"player name to get started. You can change these options later through the "
"menu system."
msgstr ""
-"Bienvenido a Xonotic, por favor seleccióne su Lenguaje preferido y luego "
+"Bienvenido a Xonotic, por favor seleccióne su lenguaje preferido y luego "
"ingrese su nombre de jugador. Estas opciones pueden ser modificadas luego "
"utilizando el menú de configuración"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4
msgid "Ammo Panel"
-msgstr "panel de munición"
+msgstr "Panel de munición"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
msgid "Ammunition display:"
msgid "Show only current ammo type"
msgstr "Mostrar sólo la munición actual"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr "Alinear ícono"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
msgstr "Izquierda"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
msgid "Right"
msgstr "Derecha"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
+msgid "Centerprint"
+msgstr "Mensaje centrado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+msgid "Message duration:"
+msgstr "Duración del mensaje:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+msgid "Fade time:"
+msgstr "Tiempo hasta desaparecer:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+msgid "Flip messages order"
+msgstr "Intercambiar orden de mensajes"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+msgid "Text alignment:"
+msgstr "Alineado de texto"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
+msgid "Center"
+msgstr "Centro"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+msgid "Font scale:"
+msgstr "Escala de fuente:"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
msgid "Chat Panel"
msgstr "Panel de chat"
msgid "Entry fadetime:"
msgstr "Desaparecimento de la entrada:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
+msgstr "Panel de Física"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Panel desactivado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+msgid "Panel enabled"
+msgstr "Panel habilitado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled even observing"
+msgstr "Panel activado aún como espectador"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+msgid "Panel enabled only in Race/CTS"
+msgstr "Panel activo en modo Race/CTS"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+msgid "Status bar"
+msgstr "Barra de estado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Alinear a la izquierda"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Alinear a la derecha"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+msgid "Inward align"
+msgstr "Alineado interior"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Outward align"
+msgstr "Alineado exterior"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+msgid "Flip speed/acceleration positions"
+msgstr "Intercambiar la posición de velocidad/aceleración"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+msgid "Speed:"
+msgstr "Velocidad:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr "Incluir velocidad vertical"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr "Unidad de velocidad"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "nudos"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+msgid "Show"
+msgstr "Mostrar"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+msgid "Top speed"
+msgstr "Máxima velocidad:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+msgid "Acceleration:"
+msgstr "Aceleración:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr "Incluir aceleración vertical"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Panel de Poderes"
msgid "Pressed Keys Panel"
msgstr "Panel de teclas presionadas"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Panel desactivado"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Panel activado cuando este espectador"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Transparencia:"
msgid "Score Panel"
msgstr "Panel de Puntos"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr "Puntaje"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr "Posiciones:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Off"
+msgstr "Desactivado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr "Y yo"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr "Puro"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Panel del Temporizador"
msgid "Fade effect:"
msgstr "Efecto de desvanecimento"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "Ninguno"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Corte"
msgid "Alpha"
msgstr "Transparencia"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+msgid "EF^Both"
+msgstr "Ambos"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "íconos de armas"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Mostra ID de arma como:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
-msgstr "Nenhum"
+msgstr "Ninguno"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Número"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Lazo"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Mostrar precision"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Mostrar munición"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Color de la barra de munición:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Transparencia de la barra de munición:"
msgid "Panel background defaults:"
msgstr "Panel de fondo por defecto:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Fondo:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Desactivar"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Color:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Tamaño de limite:"
msgid "Team color:"
msgstr "Color del equipo:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Probar color del equipo en modo configuración"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Relleno:"
msgstr "Muelle de HUD:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
-#, fuzzy
msgid "DOCK^Disabled"
msgstr "Desactivado"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
-#, fuzzy
msgid "DOCK^Small"
-msgstr "Pequeno"
+msgstr "Chico"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
-#, fuzzy
msgid "DOCK^Medium"
msgstr "Medio"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
-#, fuzzy
msgid "DOCK^Large"
msgstr "Grande"
msgid "Player Setup"
msgstr "Jugador"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
msgid "Game type:"
msgstr "Tipo de juego:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
msgid "Match settings:"
msgstr "Configuración del encuentro:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
msgid "Time limit:"
msgstr "Limite de tiempo:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
msgid "Use map specified default"
msgstr "Usar definicion especifica del mapa"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Point limit:"
msgstr "Limite de puntos:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
msgid "Player slots:"
msgstr "Slots de Jugadores:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
msgid "Number of bots:"
msgstr "Número de bots:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
msgid "Bot skill:"
msgstr "Dificultad del bot:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
msgid "Botlike"
msgstr "Bot"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
msgid "Beginner"
msgstr "Iniciado"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
msgid "You will win"
msgstr "Ganaras"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
msgid "You can win"
msgstr "Puedes ganar"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
msgid "You might win"
msgstr "Podrias ganar ganar"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
msgid "Advanced"
msgstr "Avanzado"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
msgid "Expert"
msgstr "Experto"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
msgid "Pro"
msgstr "Profesional"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
msgid "Assassin"
msgstr "Asesino"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
msgid "Unhuman"
msgstr "No humano"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
msgid "Godlike"
msgstr "Semi-dios"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
msgid "Mutators..."
msgstr "Mutators..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Configuración avanzada..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
msgid "Map list:"
msgstr "Lista de mapas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
msgid "Select all"
msgstr "Seleccionar todos"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
msgid "Select none"
msgstr "Seleccionar ninguno"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
msgid "Start Multiplayer!"
msgstr "Comenzar Multijugador!"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
msgid "Capture limit:"
msgstr "Limite de capturas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
msgid "Lives:"
msgstr "Vidas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
msgid "Laps:"
msgstr "Vueltas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
msgid "Goals:"
msgstr "Metas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Frag limit:"
msgstr "Limite de Frags:"
msgid "Game types:"
msgstr "Modos de juego:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
msgid "Close"
msgstr "Cerrar"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
-msgid "Play"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+msgid "MAP^Play"
msgstr "Jugar"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
msgstr "Jetpack"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
-#, fuzzy
msgid "MUT^None"
msgstr "Ninguno"
msgid "Timedemo"
msgstr "Demo temporizado"
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
+#, fuzzy
+msgid "DEMO^Play"
+msgstr "Jugar"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
msgid "Join"
msgstr "Ingresar"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36
-#, fuzzy
msgid "SRVS^Empty"
msgstr "Vacío"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40
-#, fuzzy
msgid "SRVS^Full"
msgstr "Completo"
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158
#, c-format
msgid "%d/%d, %d free player slots"
-msgstr ""
+msgstr "%d/%d, %d lugares para jugar disponibles"
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
#, c-format
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:140
msgid "By health"
-msgstr ""
+msgstr "Por salud"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143
-#, fuzzy
msgid "Custom"
msgstr "Personalizado"
msgstr "Test de tiro:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:159
-#, fuzzy
msgid "HTST^None"
msgstr "Ninguno"
msgstr "Forzar modelos:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175
-#, fuzzy
msgid "MDL^None"
msgstr "Ninguno"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176
-#, fuzzy
msgid "MDL^Custom"
-msgstr "Modificado"
+msgstr "Personalizado"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177
-#, fuzzy
msgid "MDL^All"
msgstr "Todos"
msgstr "Gibs:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184
-#, fuzzy
msgid "GIBS^None"
msgstr "Ninguno"
msgstr "Pocas"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186
-#, fuzzy
msgid "GIBS^Many"
-msgstr "Muchas"
+msgstr "Muchos"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:187
-#, fuzzy
msgid "GIBS^Lots"
msgstr "Abundante"
msgstr "Daño colateral:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Aplicar imediatamente"
msgid "Draw 1st person weapon model"
msgstr "Dibujar modelo de arma en primera persona"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Alinear a la izquierda"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Alinear a la derecha"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Invertir vista horizontalmente"
msgid "Music:"
msgstr "Musica:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr "Ambiente:"
msgid "Info:"
msgstr "Información:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr "Items:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr "Dolor:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr "Jugador:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr "Disparos:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr "Voz:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr "Armas:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr "Frecuencia:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr "11.025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr "22.05 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr "44.1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr "Canales:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr "Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr "Intercambiar Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr "Modo para auricular"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr "Voces espaciales:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr "Ninguno"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
-msgstr "bromas"
+msgstr "Provocaciones"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr "Todos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr "Nivel de taunts:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
-msgstr "Bien corto"
+msgstr "Muy corto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr "Corto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr "Normal"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr "Alto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr "Total"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr "Taunts Automatico"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr "Aviso de tiempo:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr "Ninguno"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr "1 minuto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr "5 minutos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr "Ambos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr "Indicador de tiro acertado"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr "Sonidos del menú"
msgstr "Predefinición de calidad:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:41
-#, fuzzy
msgid "PRE^OMG!"
msgstr "OMG!"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:42
-#, fuzzy
msgid "PRE^Low"
msgstr "Bajo"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:43
-#, fuzzy
msgid "PRE^Medium"
msgstr "Media"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:44
-#, fuzzy
msgid "PRE^Normal"
msgstr "Normal"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:45
-#, fuzzy
msgid "PRE^High"
msgstr "Alta"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:46
-#, fuzzy
msgid "PRE^Ultra"
msgstr "Ultra"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:48
-#, fuzzy
msgid "PRE^Ultimate"
msgstr "Máxima"
msgstr "Detalles geométricos:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:54
-#, fuzzy
msgid "DET^Lowest"
msgstr "Mínimo"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:55
-#, fuzzy
msgid "DET^Low"
msgstr "Bajo"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:56
-#, fuzzy
msgid "DET^Normal"
msgstr "Normal"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:57
-#, fuzzy
msgid "DET^Good"
msgstr "Bueno"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:58
-#, fuzzy
msgid "DET^Best"
msgstr "Mejor"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:59
-#, fuzzy
msgid "DET^Insane"
msgstr "Insano"
msgstr "Antialiasing:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:64
-#, fuzzy
msgid "AA^Disabled"
msgstr "Deshabilitado"
msgstr "Resolución de textura:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:73
-#, fuzzy
msgid "RES^Leet"
msgstr "Leet"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:74
-#, fuzzy
msgid "RES^Lowest"
msgstr "Mínimo"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:75
-#, fuzzy
msgid "RES^Low"
msgstr "Bajo"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:76
-#, fuzzy
msgid "RES^Normal"
msgstr "Normal"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:77
-#, fuzzy
msgid "RES^Good"
msgstr "Bueno"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:78
-#, fuzzy
msgid "RES^Best"
msgstr "Mejor"
msgstr "Filtro Anisotrópico:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:102
-#, fuzzy
msgid "ANISO^Disabled"
msgstr "Deshabilitado"
msgid "Decals"
msgstr "Símbolos"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+msgid "Decals on models"
+msgstr "Marcas en los jugadores"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
msgid "Distance:"
msgstr "Distancia:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
msgid "Time:"
msgstr "Tiempo:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "Use lightmaps"
msgstr "Usar lightmaps"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
msgid "Deluxe mapping"
msgstr "Mapeado Deluxe"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
msgid "Gloss"
msgstr "Brillo"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
msgid "Offset mapping"
msgstr "Despl. de mapeado"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Relief mapping"
msgstr "Mapeado Relief"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
msgid "Reflections:"
msgstr "Reflejos:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
msgid "Blurred"
msgstr "Borroso"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "REFL^Good"
msgstr "Bueno"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
msgid "Sharp"
msgstr "Ajustado"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
msgid "Show surfaces"
msgstr "Mostrar superficies"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
msgid "No dynamic lighting"
msgstr "Sin iluminación dinámica"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
msgid "Flash blend approximation"
msgstr "Aproximación de flash mezclado"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
msgid "Realtime dynamic lighting"
msgstr "Iluminación dinámica en tiempo real"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
msgid "Shadows"
msgstr "Sombras"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
msgid "Realtime world lighting"
msgstr "Iluminación del mundo en tiempo real"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
msgid "Use normal maps"
msgstr "Usar mapa de normales"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
msgid "Soft shadows"
msgstr "Sombras Suaves"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
msgid "Coronas"
msgstr "Coronas"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
msgid "Use Occlusion Queries"
msgstr "Usar consultas de oclusion"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
msgid "Bloom"
msgstr "Bloom"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
msgid "High Dynamic Range (HDR)"
msgstr "High Dynamic Range (HDR)"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
msgid "Motion blur:"
-msgstr "Distorsión p/ movimiento:"
+msgstr "Difuminado p/ movimiento:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
-msgstr "Distorsión por daño:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
+msgid "Blur and sharpen postprocessing"
+msgstr "Difuminado y postprocesamiento ajustado"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgid "Sensitivity:"
msgstr "Sensibilidad:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Velocidad del puntero:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Filtro del raton"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Invertir eje Y"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Usar entrada de joystick"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Desactivar aceleracion del raton"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"entrar a la consola\" tambien cerrar"
msgstr "Mostrar cuadros por segundo"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Medidor de Velocidad"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (escondido)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "nudos"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Mostrar acelerómetro"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Escala del acelerómetro:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Minimizar retardo de entrada"
msgstr "Tamaño de Font/UI:"
#: qcsrc/menu/xonotic/dialog_settings_video.c:31
-#, fuzzy
msgid "SZ^Unreadable"
msgstr "Ilegible"
#: qcsrc/menu/xonotic/dialog_settings_video.c:32
-#, fuzzy
msgid "SZ^Tiny"
msgstr "Minuscula"
#: qcsrc/menu/xonotic/dialog_settings_video.c:33
-#, fuzzy
msgid "SZ^Little"
msgstr "Muy pequeña"
#: qcsrc/menu/xonotic/dialog_settings_video.c:34
-#, fuzzy
msgid "SZ^Small"
msgstr "Pequeña"
#: qcsrc/menu/xonotic/dialog_settings_video.c:35
-#, fuzzy
msgid "SZ^Medium"
msgstr "Media"
#: qcsrc/menu/xonotic/dialog_settings_video.c:36
-#, fuzzy
msgid "SZ^Large"
msgstr "Grande"
#: qcsrc/menu/xonotic/dialog_settings_video.c:37
-#, fuzzy
msgid "SZ^Huge"
msgstr "Enorme"
#: qcsrc/menu/xonotic/dialog_settings_video.c:38
-#, fuzzy
msgid "SZ^Gigantic"
msgstr "Gigante"
#: qcsrc/menu/xonotic/dialog_settings_video.c:39
-#, fuzzy
msgid "SZ^Colossal"
msgstr "Colossal"
msgstr "Vertex Buffer Objects (VBOs)"
#: qcsrc/menu/xonotic/dialog_settings_video.c:59
-#, fuzzy
msgid "VBO^Off"
msgstr "Desactivado"
msgstr "Profundidad primero:"
#: qcsrc/menu/xonotic/dialog_settings_video.c:69
-#, fuzzy
msgid "DF^Disabled"
msgstr "Desactivado"
#: qcsrc/menu/xonotic/dialog_settings_video.c:70
-#, fuzzy
msgid "DF^World"
msgstr "Mundo"
#: qcsrc/menu/xonotic/dialog_settings_video.c:71
-#, fuzzy
msgid "DF^All"
msgstr "Todos"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Resaltador de contraste"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Saturacion de color:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
-#, fuzzy
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Ambiente:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Intensidad:"
msgstr "%s: %s"
#: qcsrc/menu/xonotic/slider_decibels.c:50
-#, fuzzy
msgid "VOL^OFF"
msgstr "DESACTIVADO"
#: qcsrc/menu/xonotic/slider_decibels.c:52
-#, fuzzy
msgid "VOL^MAX"
msgstr "MAXIMO"
#: qcsrc/menu/xonotic/util.qc:367
#, c-format
msgid "^1%s TEST BUILD"
-msgstr ""
+msgstr "^1%s TEST BUILD"
#: qcsrc/menu/xonotic/util.qc:432
#, c-format
msgid "Update to %s now!"
msgstr "Actualizar para %s ahora!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1ERROR: Se requiere la compresion de texturas, pero no es soportada.\n"
"^1Pueden ocurrir posibles problemas visuales.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Asalto"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Captura la Bandera"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Clan arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Combate a muerte"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Dominación"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Caza de llave"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Ultimo Sobreviviente"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Embestida"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Carrera"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Carrera CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Runamatch"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Combate a muerte por equipos"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Fondo:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Por Defecto"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Usar por defecto"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Color del equipo:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Activar panel"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s no pudo recordar donde dejó su plasma la última vez"
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s jugó con plasma"
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s acaba de percatarse de la bola azul de %s"
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s tuvo un encuentro cercano con la bola azul de %s"
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s sintió el aire electrificante del combo de %s"
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s estuvo demasiado cerca del rayo azul de %s"
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s estuvo en estado critico por el rayo azul de %s"
msgid "Mortar"
msgstr "Mortero"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s probó su propia granada"
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s ha detonado"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s no vió la granada de %s"
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s casi esquivó la granada de %s"
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s se comió la granada de %s"
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s jugó con pequeños cohetes"
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s esperó que no le reboten misiles de %s"
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "%s fue molido por %s"
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s hizo lo imposible"
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr "%s se fué al infierno montado en su laser"
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr "%s fue cortado a la mitad por el gauntlet de %s"
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr "%s fue muerto por el laser de %s"
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s explotó"
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr "%s estuvo cerca de la mina de %s"
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr "%s casi esquivo la mina de %s"
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr "%s caminó encima de la mina de %s"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:215 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr "%s ahora está \"thinking with portals\""
+
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "%s ha sido vaporizado por %s"
msgid "%s felt %s doing the impossible to him"
msgstr "%s sintió a %s hacer lo imposible por él/ella"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr "Rifle"
+
+#: qcsrc/server/w_rifle.qc:233
+#, c-format
+msgid "%s shot themself automatically"
+msgstr "%s se disparó a si mismo"
+
+#: qcsrc/server/w_rifle.qc:235
+#, c-format
+msgid "%s sniped themself somehow"
+msgstr "%s se disparó a si mismo"
+
+#: qcsrc/server/w_rifle.qc:242
+#, c-format
+msgid "%s failed to hide from %s's bullet hail"
+msgstr "%s no logró esconderse del granizo de balas de %s"
+
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
+msgstr "%s murió en el granizo de balas de %s"
+
+#: qcsrc/server/w_rifle.qc:251
+#, c-format
+msgid "%s failed to hide from %s's rifle"
+msgstr "%s no logró esconderse del rifle de %s"
+
+#: qcsrc/server/w_rifle.qc:256
+#, c-format
+msgid "%s got hit in the head by %s"
+msgstr "%s fué disparado en la cabeza por %s"
+
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
+msgstr "%s fué disparado con un rifle por %s"
+
#: qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Rocket Launcher"
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
msgid "%s got too close to %s's rocket"
msgstr "%s estuvo demasiado cerca del cohete de %s"
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
msgid "%s almost dodged %s's rocket"
msgstr "%s casi esquivó el cohete de %s"
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
msgid "%s ate %s's rocket"
msgstr "%s se comió el misil de %s"
msgid "Shotgun"
msgstr "Escopeta"
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_shotgun.qc:219
#, c-format
msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr "%2$s ^7abofeteó %1$s ^7con una gran ^2shotgun"
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_shotgun.qc:221
#, c-format
msgid "%s was gunned by %s"
msgstr "%s fue tiroteado por %s"
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s se disparó a si mismo"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s se disparó a si mismo"
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s no logró esconderse del granizo de balas de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s murió en el granizo de balas de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s no logró esconderse del rifle de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s fué disparado en la cabeza por %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "%s fué disparado con un rifle por %s"
-
#: qcsrc/server/w_tuba.qc:2
#, c-format
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr "%s se lastimó sus propios oídos con la Tuba de @!#%%"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr "%s murió por la gran interpretación de Tuba de @!#%%"
#, c-format
msgid "%s was riddled full of holes by %s"
msgstr "%s fue totalmente acribillado por %s"
-
-#~ msgid "%s ran into %s's flac"
-#~ msgstr "%s se cruzó con el flac de %s"
-
-#~ msgid "Waypoint settings:"
-#~ msgstr "configuración de puntos de camino:"
-
-#~ msgid "%d/%d"
-#~ msgstr "%d/%d"
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-06-27 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Henry 'Exitium' Sanmark <henry.sanmark@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Näytä vain nykyinen ammustyyppi"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
msgid "Entry fadetime:"
msgstr "Sisääntulon häivennyksen kesto"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+#, fuzzy
+msgid "Physics Panel"
+msgstr "Keskustelupaneeli"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Paneeli pois päältä"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#, fuzzy
+msgid "Panel enabled if not observing"
+msgstr "Paneeli päällä kun katsojana"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr "Paneeli aina päällä"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#, fuzzy
+msgid "Status bar"
+msgstr "Ota tilapalkki käyttöön"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Vasen tasaus"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Oikea tasaus"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#, fuzzy
+msgid "Inward align"
+msgstr "Sisäänpäin"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#, fuzzy
+msgid "Outward align"
+msgstr "Ulospäin"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#, fuzzy
+msgid "Flip speed/acceleration positions"
+msgstr "Vaihda elämän ja panssarin paikkaa"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#, fuzzy
+msgid "Speed:"
+msgstr "Nopeus (kb/s)"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "knots"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#, fuzzy
+msgid "Show"
+msgstr "Näytä panokset"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#, fuzzy
+msgid "Top speed"
+msgstr "Tarkennuksen nopeus:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#, fuzzy
+msgid "Acceleration:"
+msgstr "Heijastukset:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Tehonlisäyspaneeli"
msgid "Pressed Keys Panel"
msgstr "Painettujen näppäinten paneeli"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Paneeli pois päältä"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Paneeli päällä kun katsojana"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr "Paneeli aina päällä"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
msgid "Forced aspect:"
msgstr "Pakotettu näkymä:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Alpha:"
msgid "Score Panel"
msgstr "Tulospaneeli"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#, fuzzy
+msgid "Off"
+msgstr "VBO^Pois"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Ajastinpaneeli"
msgid "Fade effect:"
msgstr "Himmennyseffekti:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "EF^Ei mikään"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Liukuminen"
msgid "Alpha"
msgstr "Alpha"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#, fuzzy
+msgid "EF^Both"
+msgstr "WRN^Molemmat"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Aseiden kuvakkeet:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Näytä aseen tunniste:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "SHOWAS^Ei mitään."
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Numero"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Näppäin"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Näytä tarkkuus"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Näytä panokset"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Ammuskotelon väri"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Ammuskotelon alpha"
msgid "Panel background defaults:"
msgstr "Paneelin taustan perusasetukset:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Tausta:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Pois päältä"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Väri:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Reunan koko:"
msgid "Team color:"
msgstr "Joukkueen väri:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Kokeile joukkueen väriä muokkaustilassa"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Pehmustus:"
msgstr "Muokkaukset..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Edistyneet asetukset..."
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Ota heti käyttöön"
msgid "Draw 1st person weapon model"
msgstr "Piirrä ensimmäisen persoonan asemalli"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Vasen tasaus"
-
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Oikea tasaus"
+msgid "Center"
+msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Käännä näkymä horisontaalisesti"
msgid "Motion blur:"
msgstr "Liikesumeus:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+#, fuzzy
+msgid "Damage & water blur"
msgstr "Vahinkosumeus:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+#, fuzzy
+msgid "Powerup sharpen"
+msgstr "Tehonlisäyspaneeli"
+
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgstr "Näppäimet:"
msgid "Sensitivity:"
msgstr "Herkkyys:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Käyttöliittymän hiiren nopeus:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Hiiren suodatin"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Käännä hiiren suunta"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Käytä peliohjainta"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Laita käyttöjärjestelmän hiiren kiihtyvyys pois päältä"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"avaa komentorivi\" myös sulkee komentorivin"
msgstr "Näytä ruudunpäivitysnopeus (FPS)"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Nopeusmittari"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (kätketty)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "knots"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Näytä kiihtyvyysmittari"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Kiihtyvyysmittarin skaala:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Minimoi syötteen viive"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Kontrastin lisäys:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Kylläisyys:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "LIT^Ympäristö:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Intensiivisyys:"
msgid "Update to %s now!"
msgstr "Päivitä versioon %s nyt!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1VIRHE: Tekstuurien pakkaus vaaditaan mutta ei ole tuettuna.\n"
"^1Grafiikkavirheitä odotettavissa.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Areena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Rynnäkkö (Assault)"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Lipunryöstö (CTF)"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Klaaniareena (Clan Arena)"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Mättö (Deathmatch)"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Hallinta (Domination)"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Pakkashippa (Freeze Tag)"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Pakomatka (Keepaway)"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Avaimenmetsästys (Key Hunt)"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Viimeiseen mieheen (Last Man Standing)"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexpallo (Nexball)"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Suurtaistelu (Onslaught)"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Kilpailu (RACE)"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Kilpailu CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Riimu-ottelu (Runematch)"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Joukkuemättö (Team Deatchmatch)"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#% tuubanheitto!"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Tausta:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Perusasetus"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Käytä perusasetusta"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Joukkueen väri"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Ota paneeli käyttöön"
msgid "Electro"
msgstr ""
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:577
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:579
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:586
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:588
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:593
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:595
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:597
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
msgid "Mortar"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:379
#, c-format
msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:381
#, c-format
msgid "%s detonated"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:387
#, c-format
msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:389
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s ate %s's grenade"
msgstr ""
msgid "Hagar"
msgstr ""
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr ""
msgid "Grappling Hook"
msgstr "Köysi"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr ""
msgid "Laser"
msgstr ""
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr ""
msgid "Mine Layer"
msgstr "Yksinpeli"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr ""
msgid "MinstaNex"
msgstr "MinstaGib"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr ""
msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:659
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%s was tagged by %s"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:2
-#, fuzzy
-msgid "Shotgun"
-msgstr "Laukaukset:"
-
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s was sniped by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
+#: qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s ate %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
+#: qcsrc/server/w_seeker.qc:2
+msgid "T.A.G. Seeker"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_seeker.qc:659
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_shotgun.qc:2
+#, fuzzy
+msgid "Shotgun"
+msgstr "Laukaukset:"
+
+#: qcsrc/server/w_shotgun.qc:213
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_shotgun.qc:215
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s was gunned by %s"
msgstr ""
#: qcsrc/server/w_tuba.qc:2
msgid "%s was riddled full of holes by %s"
msgstr ""
+#~ msgid "Speedometer"
+#~ msgstr "Nopeusmittari"
+
+#~ msgid "qu/s (hidden)"
+#~ msgstr "qu/s (kätketty)"
+
+#~ msgid "Show accelerometer"
+#~ msgstr "Näytä kiihtyvyysmittari"
+
+#~ msgid "Accelerometer scale:"
+#~ msgstr "Kiihtyvyysmittarin skaala:"
+
#~ msgid "Waypoint settings:"
#~ msgstr "Välimatkojen asetukset:"
msgstr ""
"Project-Id-Version: Xonotic 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
-"PO-Revision-Date: 2011-03-09 15:48-0500\n"
-"Last-Translator: Maxime Paradis <taximus.micro@gmail.com>\n"
-"Language-Team: French <kde-i18n-doc@kde.org>\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
+"PO-Revision-Date: 2011-08-23 18:51-0400\n"
+"Last-Translator: \n"
+"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
msgstr "personnalisé"
#: qcsrc/menu/menu.qc:29
-#, fuzzy, c-format
+#, c-format
msgid "^4MQC Build information: ^1%s\n"
-msgstr "^4MQC Build information : %s (français)\n"
+msgstr "^4MQC Information de version : %s (français)\n"
#: qcsrc/menu/xonotic/campaign.c:284
#: qcsrc/menu/xonotic/dialog_singleplayer.c:66
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Ne montrer que le type de munition actuel"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr "Aligner l'icône"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
msgstr "Gauche"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
msgid "Right"
msgstr "Droite"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
+msgid "Centerprint"
+msgstr "Écriture du centre"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+msgid "Message duration:"
+msgstr "Durée du message:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+msgid "Fade time:"
+msgstr "Temps d'effacement d'une entrée:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+msgid "Flip messages order"
+msgstr "Inverser l'ordre des notifications"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+msgid "Text alignment:"
+msgstr "Alignement icônes:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
+msgid "Center"
+msgstr "Centre"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+msgid "Font scale:"
+msgstr "Taille de police:"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
msgid "Chat Panel"
msgstr "Panneau de Chat"
msgid "Entry fadetime:"
msgstr "Temps d'effacement d'une entrée:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
+msgstr "Panneau d'effets physiques"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Panneau désactivé"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+msgid "Panel enabled"
+msgstr "Panneau activé"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled even observing"
+msgstr "Panneau activé même en spectateur"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+msgid "Panel enabled only in Race/CTS"
+msgstr "Panneau activé seulement en Race/CTS"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+msgid "Status bar"
+msgstr "Barre de statut"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "À gauche"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "À droite"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+msgid "Inward align"
+msgstr "Aligner vers l'intérieur"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Outward align"
+msgstr "Aligner vers l'extérieur"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+msgid "Flip speed/acceleration positions"
+msgstr "Échanger positions Vitesse/Accélération"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+msgid "Speed:"
+msgstr "Vitesse:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr "Inclure vitesse verticale"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr "Unité de vitesse"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "noeuds"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+msgid "Show"
+msgstr "Montrer"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+msgid "Top speed"
+msgstr "Vitesse maximale:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+msgid "Acceleration:"
+msgstr "Accélération:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr "Inclure accélération verticale"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Panneau des Pouvoirs"
msgid "Pressed Keys Panel"
msgstr "Panneau Touches Pressées"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Panneau désactivé"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Panneau activé en spectateur"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Opacité:"
msgid "Score Panel"
msgstr "Tableau des scores"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr "Score:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr "Rangs:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Off"
+msgstr "Désactivé"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr "Et moi"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr "Pure"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Chronomètre"
msgid "Fade effect:"
msgstr "Effet d'effacement:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "Aucun"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Glisse"
msgid "Alpha"
msgstr "Opacité"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+msgid "EF^Both"
+msgstr "Les deux"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Icônes d'armes:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Montrer le numéro d'arme:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "Aucun"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Numéro"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Touche"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Monter la précision"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Montrer barre de munitions"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Couleur barre de munitions:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Opacité barre de munitions:"
msgid "Panel background defaults:"
msgstr "Fond du Panneau par défaut:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Arrière-plan:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Désactiver"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Couleur:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Taille des bords:"
msgid "Team color:"
msgstr "Couleur d'équipe:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Afficher la couleur d'équipe en mode configuration"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Ajustement:"
msgstr "Contour interface:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
-#, fuzzy
msgid "DOCK^Disabled"
msgstr "Désactivé"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
-#, fuzzy
msgid "DOCK^Small"
msgstr "Petit"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
-#, fuzzy
msgid "DOCK^Medium"
msgstr "Moyen"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
-#, fuzzy
msgid "DOCK^Large"
msgstr "Grand"
msgid "Player Setup"
msgstr "Paramètres Joueur"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
msgid "Game type:"
msgstr "Mode de jeu:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
msgid "Match settings:"
msgstr "Paramètres match:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
msgid "Time limit:"
msgstr "Limite de temps:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
msgid "Use map specified default"
msgstr "Utiliser le paramètre de carte"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Point limit:"
msgstr "Limite de points:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
msgid "Player slots:"
msgstr "Nombre de joueurs max.:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
msgid "Number of bots:"
msgstr "Nombre de robots:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
msgid "Bot skill:"
msgstr "Difficulté robot:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
msgid "Botlike"
msgstr "Nul"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
msgid "Beginner"
msgstr "Jeu d'enfant"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
msgid "You will win"
msgstr "Très Facile"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
msgid "You can win"
msgstr "Facile"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
msgid "You might win"
msgstr "Assez Facile"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
msgid "Advanced"
msgstr "Avancé"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
msgid "Expert"
msgstr "Expert"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
msgid "Pro"
msgstr "Professionnel"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
msgid "Assassin"
msgstr "Assassin"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
msgid "Unhuman"
msgstr "Inhumain"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
msgid "Godlike"
msgstr "Dieu"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
msgid "Mutators..."
msgstr "Spéciales..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Paramètres avancés..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
msgid "Map list:"
msgstr "Liste de cartes:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
msgid "Select all"
msgstr "Tout sélectionner"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
msgid "Select none"
msgstr "Ne rien sélectionner"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
msgid "Start Multiplayer!"
msgstr "Démarrer!"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
msgid "Capture limit:"
msgstr "Limite de captures:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
msgid "Lives:"
msgstr "Vies:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
msgid "Laps:"
msgstr "Tours:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
msgid "Goals:"
msgstr "Buts:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Frag limit:"
msgstr "Limite de tués:"
msgid "Game types:"
msgstr "Modes de jeux:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
msgid "Close"
msgstr "Fermer"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
-msgid "Play"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+msgid "MAP^Play"
msgstr "Jouer"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
msgid "Timedemo"
msgstr "Test Performance"
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
+msgid "DEMO^Play"
+msgstr "Jouer"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
msgid "Join"
msgstr "Joindre"
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158
#, c-format
msgid "%d/%d, %d free player slots"
-msgstr ""
+msgstr "%d/%d, %d Emplacements libres"
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
#, c-format
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:140
msgid "By health"
-msgstr ""
+msgstr "Par vie"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143
-#, fuzzy
msgid "Custom"
-msgstr "personnalisé"
+msgstr "Personnalisé"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148
msgid "Enable center dot"
msgstr "Effet santé faible:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Appliquer maintenant"
msgid "Draw 1st person weapon model"
msgstr "Afficher l'arme à la première personne"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "À gauche"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "À droite"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Vue Miroir"
msgid "Music:"
msgstr "Musique:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr "Ambiance:"
msgid "Info:"
msgstr "Information:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr "Objets:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr "Douleur:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr "Joueur:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr "Tirs:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr "Voix:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr "Armes:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr "Fréquence:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr "11.025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr "22.05 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr "44.1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr "Canaux:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr "Stéréo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr "Échanger les canaux Stéréo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr "Mode casque audio"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr "Voix personnages:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr "Aucun"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
msgstr "Voix"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr "Tout"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr "Distance voix:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
msgstr "Très court"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr "Court"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr "Normal"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr "Long"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr "Tout"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr "Voix automatiques"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr "Avertissement temps:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr "Aucun"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr "1 minute"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr "5 minutes"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr "Les deux"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr "Son tir réussi"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr "Sons du menu"
msgid "Decals"
msgstr "Marques impacts"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+msgid "Decals on models"
+msgstr "Décalques sur les modèles"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
msgid "Distance:"
msgstr "Distance max.:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
msgid "Time:"
msgstr "Temps:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "Use lightmaps"
msgstr "Utiliser les lightmaps"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
msgid "Deluxe mapping"
msgstr "Textures Deluxe"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
msgid "Gloss"
msgstr "Brillance textures"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
msgid "Offset mapping"
msgstr "Textures relief"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Relief mapping"
msgstr "Textures relief avancé"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
msgid "Reflections:"
msgstr "Réflexions:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
msgid "Blurred"
msgstr "Flou"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "REFL^Good"
msgstr "Bon"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
msgid "Sharp"
msgstr "Net"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
msgid "Show surfaces"
msgstr "Textures unies"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
msgid "No dynamic lighting"
msgstr "Pas de lumières dynamiques"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
msgid "Flash blend approximation"
msgstr "Lumières dynamiques rapides"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
msgid "Realtime dynamic lighting"
msgstr "Lumières dynamiques en temps réel"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
msgid "Shadows"
msgstr "Ombres"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
msgid "Realtime world lighting"
msgstr "Lumières carte en temps réel"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
msgid "Use normal maps"
msgstr "Lumières Deluxe"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
msgid "Soft shadows"
msgstr "Ombres avancées"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
msgid "Coronas"
msgstr "Brillance Lumière"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
msgid "Use Occlusion Queries"
msgstr "Utiliser l'Occlusion du rendu"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
msgid "Bloom"
msgstr "Effets d'éblouissement"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
msgid "High Dynamic Range (HDR)"
msgstr "High Dynamic Range (HDR)"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
msgid "Motion blur:"
msgstr "Flou de vitesse:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
-msgstr "Flou de dégâts:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
+msgid "Blur and sharpen postprocessing"
+msgstr "Flou et netteté post-processeur"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgid "Sensitivity:"
msgstr "Sensibilité:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Vitesse souris menus:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Filtre Souris"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Inverser souris (axe Y)"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Utiliser une manette"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Désactiver l'accélération souris de l'OS"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"ouvrir la console\" ferme aussi la console"
msgstr "Montrer les Images Par Seconde"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Speedomètre"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (caché)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "noeuds"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Montrer l'accéléromètre"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Taille accéléromètre:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Minimiser la latence des contrôles"
msgstr "Utiliser GLSL pour gérer les couleurs"
#: qcsrc/menu/xonotic/dialog_settings_video.c:56
-#, fuzzy
msgid "Vertex Buffer Objects (VBOs)"
msgstr "Objets en tampon mémoire (VBOs)"
#: qcsrc/menu/xonotic/dialog_settings_video.c:59
-#, fuzzy
msgid "VBO^Off"
msgstr "Désactivé"
msgstr "Points et Triangles"
#: qcsrc/menu/xonotic/dialog_settings_video.c:67
-#, fuzzy
msgid "Depth first:"
-msgstr "Fixeur profondeur:"
+msgstr "Profondeur d'abord:"
#: qcsrc/menu/xonotic/dialog_settings_video.c:69
-#, fuzzy
msgid "DF^Disabled"
msgstr "Désactivé"
#: qcsrc/menu/xonotic/dialog_settings_video.c:70
-#, fuzzy
msgid "DF^World"
-msgstr "Carte"
+msgstr "Monde"
#: qcsrc/menu/xonotic/dialog_settings_video.c:71
-#, fuzzy
msgid "DF^All"
msgstr "Tout"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Amélioration contraste:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Saturation:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Ambiance:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Intensité:"
#: qcsrc/menu/xonotic/util.qc:367
#, c-format
msgid "^1%s TEST BUILD"
-msgstr ""
+msgstr "VERSION DE TEST ^1%s"
#: qcsrc/menu/xonotic/util.qc:432
#, c-format
msgid "Update to %s now!"
msgstr "Mettez à jour vers %s maintenant !"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1ERROR: La texture de compression est nécessaire mais non supportée.\n"
"^1Attendez vous à voir des problèmes de rendu.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arène Duel"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Assaut"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Capture Du Drapeau"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Arène Équipes"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Match à Mort"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Domination"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Cache-Cache Du Drapeau"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Chasse aux Clés"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Dernier Survivant"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Course"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Course CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Runematch"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Match à Mort Équipe"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "Lancer de @!#%'n Tuba"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Arrière-plan:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Par défaut"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Par défaut"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Couleur d'équipe:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Activer ce panneau"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s ne se souvenait pas où il a tiré du plasma"
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s a joué avec du plasma"
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s vient de remarquer la boule plasma de %s"
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s s'est fait toucher par la boule plasma de %s"
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s se sent électrisé par le combo de %s"
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s a été trop près du rayon plasma de %s"
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s a été désintégré à cause du rayon plasma de %s"
#: qcsrc/server/w_fireball.qc:2
-#, fuzzy
msgid "Fireball"
-msgstr "Fireball"
+msgstr "Boule de Feu"
#: qcsrc/server/w_fireball.qc:417
#, c-format
msgid "Mortar"
msgstr "Mortier"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s a mangé sa propre grenade"
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s a fait boum"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s n'a pas vu la grenade de %s"
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s a presque réussi à esquiver la grenade de %s"
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s a mangé la grenade de %s"
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s a joué avec des petits missiles"
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s a pensé que les petits missiles de %s ne rebondissaient pas"
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "%s a trop mangé de mini-missiles de la part de %s"
msgstr "%s s'est fait couper par %s"
#: qcsrc/server/w_hook.qc:2
-#, fuzzy
msgid "Grappling Hook"
msgstr "Grappin"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s a fait l'impossible"
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr "%s s'est suicidé au laser"
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr "%s s'est fait couper en deux par le laser de %s"
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr "%s a été désintégré par le laser de %s"
#: qcsrc/server/w_minelayer.qc:2
-#, fuzzy
msgid "Mine Layer"
msgstr "Lance-Mines"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s a explosé"
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr "%s s'est trop approché de la mine de %s"
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr "%s a presque esquivé la mine de %s"
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr "%s a marché sur la mine de %s"
#: qcsrc/server/w_minstanex.qc:2
-#, fuzzy
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:215 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr "%s pense maintenant avec les portails"
+
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "%s s'est fait vaporiser par %s"
#: qcsrc/server/w_nex.qc:2
-#, fuzzy
msgid "Nex"
msgstr "Nex"
msgid "%s felt %s doing the impossible to him"
msgstr "%s a eu tort de prendre le portail de %s"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr "Fusil"
+
+#: qcsrc/server/w_rifle.qc:233
+#, c-format
+msgid "%s shot themself automatically"
+msgstr "%s s'est suicidé au sniper"
+
+#: qcsrc/server/w_rifle.qc:235
+#, c-format
+msgid "%s sniped themself somehow"
+msgstr "%s a oublié le cran de sûreté en chargeant"
+
+#: qcsrc/server/w_rifle.qc:242
+#, c-format
+msgid "%s failed to hide from %s's bullet hail"
+msgstr "%s n'a pas pu se cacher de la nuée de balles de %s"
+
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
+msgstr "%s est mort de la nuée de balles de %s"
+
+#: qcsrc/server/w_rifle.qc:251
+#, c-format
+msgid "%s failed to hide from %s's rifle"
+msgstr "%s n'a pas réussi à se cacher du sniper de %s"
+
+#: qcsrc/server/w_rifle.qc:256
+#, c-format
+msgid "%s got hit in the head by %s"
+msgstr "%s s'est fait décapiter au sniper par %s"
+
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
+msgstr "%s s'est fait descendre au sniper par %s"
+
#: qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Lance-Roquettes"
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
msgid "%s got too close to %s's rocket"
msgstr "%s s'est trop approché de la roquette de %s"
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
msgid "%s almost dodged %s's rocket"
msgstr "%s a presque esquivé la roquette de %s"
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
msgid "%s ate %s's rocket"
msgstr "%s a mangé la roquette de %s"
msgstr "%s s'est fait tagguer par %s"
#: qcsrc/server/w_shotgun.qc:2
-#, fuzzy
msgid "Shotgun"
msgstr "Fusil"
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_shotgun.qc:219
#, c-format
msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr "%2$s ^7a baffé %1$s ^7avec un ^2fusil"
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_shotgun.qc:221
#, c-format
msgid "%s was gunned by %s"
msgstr "%s s'est fait fusiller par %s"
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Fusil Sniper"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s s'est suicidé au sniper"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s a oublié le cran de sûreté en chargeant"
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s n'a pas pu se cacher de la nuée de balles de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s est mort de la nuée de balles de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s n'a pas réussi à se cacher du sniper de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s s'est fait décapiter au sniper par %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "%s s'est fait descendre au sniper par %s"
-
#: qcsrc/server/w_tuba.qc:2
-#, fuzzy, c-format
+#, c-format
msgid "@!#%'n Tuba"
-msgstr "@!#%'n Tuba"
+msgstr "@!#% Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr "%s s'est fait casser les tympans par son propre tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr "%s n'a pas aimé la musique de %s et en est mort"
msgid "%s was riddled full of holes by %s"
msgstr "%s s'est fait trouer par %s"
-#~ msgid "%s ran into %s's flac"
-#~ msgstr "%s n'a pas eu peur des missiles de %s"
-
-#~ msgid "Waypoint settings:"
-#~ msgstr "Paramètres Waypoint (flèches 3D sur la carte):"
+#~ msgid "Damage & water blur"
+#~ msgstr "Flou de d�g�ts:"
-#~ msgid "%d/%d"
-#~ msgstr "%d/%d"
+#~ msgid "Powerup sharpen"
+#~ msgstr "Panneau des Pouvoirs"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-06-27 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Csak az aktuális lőszer típus megjelenítése"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
msgid "Entry fadetime:"
msgstr "Bejegyzés halványulási idő:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+#, fuzzy
+msgid "Physics Panel"
+msgstr "Csevely Panel"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Panel kikapcsolva"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#, fuzzy
+msgid "Panel enabled if not observing"
+msgstr "Panel engedélyezett, ha csak néző vagy"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr "Panel mindig látható"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#, fuzzy
+msgid "Status bar"
+msgstr "Állapotsor engedélyezése"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Balra igazítása"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Jobbra igazított"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#, fuzzy
+msgid "Inward align"
+msgstr "Befelé"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#, fuzzy
+msgid "Outward align"
+msgstr "Kifelé"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#, fuzzy
+msgid "Flip speed/acceleration positions"
+msgstr "Életerő és páncél poziciójának cseréje"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#, fuzzy
+msgid "Speed:"
+msgstr "Sebesség (kB/s):"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "csomó"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#, fuzzy
+msgid "Show"
+msgstr "Lőszer mutatása"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#, fuzzy
+msgid "Top speed"
+msgstr "Nagyítás sebesség:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#, fuzzy
+msgid "Acceleration:"
+msgstr "Tükrözödés:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Powerups Panel"
msgid "Pressed Keys Panel"
msgstr "Lenyomott gombok lapja"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Panel kikapcsolva"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Panel engedélyezett, ha csak néző vagy"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr "Panel mindig látható"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
msgid "Forced aspect:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Alpha:"
msgid "Score Panel"
msgstr "Ponttáblázat"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#, fuzzy
+msgid "Off"
+msgstr "VBO^Off"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Időtáblázat"
msgid "Fade effect:"
msgstr "Halványulás hatás:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "EF^Nincs"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Csúszás"
msgid "Alpha"
msgstr "Alpha"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#, fuzzy
+msgid "EF^Both"
+msgstr "Mindkettő"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Fegyver ikonok:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "A Fegyver azonosító megjelenítés eszerint:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "Nincs"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Szám"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Hozzárendelés"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Pontosság mutatása"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Lőszer mutatása"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Lőszer jelző színe:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Lőszer jelző alpha:"
msgid "Panel background defaults:"
msgstr "Panel háttér alapértelmezett:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Háttér:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Letiltás"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Szín:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Keret méret:"
msgid "Team color:"
msgstr "Csapat szín:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Csapat szín ellenörzés konfigurációs módban"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Padding:"
msgstr "Mutatorok..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Különleges beállítások ..."
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Azonnali alkalmazás"
msgid "Draw 1st person weapon model"
msgstr "1.személyű fegyver modell kirajzolása"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Balra igazítása"
-
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Jobbra igazított"
+msgid "Center"
+msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "A nézet horizontális döntése"
msgid "Motion blur:"
msgstr "Mozgási elmosás:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+#, fuzzy
+msgid "Damage & water blur"
msgstr "Sérülés elmosás:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+#, fuzzy
+msgid "Powerup sharpen"
+msgstr "Powerups Panel"
+
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgstr "Billentyű hozzárendelések:"
msgid "Sensitivity:"
msgstr "Érzékenység:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "UI egér sebesség:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Egér szürés"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Forditott egér"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Joystick bemenet használata"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "OS egér gyorsítás kikapcsolása"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"belépés a konzolba\" zár is"
msgstr "A képkocka/s mutatása"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Sebességmérő"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (rejtett)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "csomó"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Gyorsulásmérő mutatása"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Gyorsulásmérő beosztás:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Bemeneti késleltetés minimalizása"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Kontraszt növelés:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Színtelítettség:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Környezet:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Erősség:"
msgid "Update to %s now!"
msgstr "Most frissítsd %s-re!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1Hiba: textúra tömörítés szükséges, de nem támogatott.\n"
"^1Gondok lehetnek a látvánnyal.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Aréna"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Ostrom"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Szerezd meg a zászlót"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Klán Aréna"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Mindenki mindenki ellen"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Uralom"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Kulcs vadászat"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Támadás"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Futam"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Rúnameccs"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Csapatos öldöklés"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Dobás"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Háttér:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Alapértelmezett"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Alapértékek használata"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Csapat színe:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Panel engedélyezés"
msgid "Electro"
msgstr ""
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:577
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:579
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:586
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:588
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:593
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:595
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:597
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
msgid "Mortar"
msgstr "Előre"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:379
#, c-format
msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:381
#, fuzzy, c-format
msgid "%s detonated"
msgstr "néző"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:387
#, c-format
msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:389
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s ate %s's grenade"
msgstr ""
msgid "Hagar"
msgstr ""
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr ""
msgid "Grappling Hook"
msgstr "Ragadós horog"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr ""
msgid "Laser"
msgstr "Mester:"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr ""
msgid "Mine Layer"
msgstr "Egyjátékos"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr ""
msgid "MinstaNex"
msgstr "MinstaGib"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr ""
msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:659
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%s was tagged by %s"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:2
-#, fuzzy
-msgid "Shotgun"
-msgstr "Lövések:"
-
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s was sniped by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
+#: qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s ate %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
+#: qcsrc/server/w_seeker.qc:2
+msgid "T.A.G. Seeker"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_seeker.qc:659
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_shotgun.qc:2
+#, fuzzy
+msgid "Shotgun"
+msgstr "Lövések:"
+
+#: qcsrc/server/w_shotgun.qc:213
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_shotgun.qc:215
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s was gunned by %s"
msgstr ""
#: qcsrc/server/w_tuba.qc:2
msgid "%s was riddled full of holes by %s"
msgstr ""
+#~ msgid "Speedometer"
+#~ msgstr "Sebességmérő"
+
+#~ msgid "qu/s (hidden)"
+#~ msgstr "qu/s (rejtett)"
+
+#~ msgid "Show accelerometer"
+#~ msgstr "Gyorsulásmérő mutatása"
+
+#~ msgid "Accelerometer scale:"
+#~ msgstr "Gyorsulásmérő beosztás:"
+
#~ msgid ""
#~ "Please answer a few initial questions to enhance the game experience."
#~ msgstr ""
-# Xonotic Menu
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Felice Sallustio <fel.sallustio@gmail.com>, 2011.
-# Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: 0.1preview\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-05-01 13:33+0200\n"
-"PO-Revision-Date: 2011-04-29 16:29+0100\n"
-"Last-Translator: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
-"X-Poedit-Language: Italian\n"
-
-#: qcsrc/menu/gamecommand.qc:47
-#, c-format
-msgid "error: status is %d\n"
-msgstr "errore: lo stato è impostato su %d\n"
-
-#: qcsrc/menu/gamecommand.qc:65
-msgid "Usage: menu_cmd command..., where possible commands are:\n"
-msgstr "Uso: menu_cmd command..., dove i possibili comandi sono:\n"
-
-#: qcsrc/menu/gamecommand.qc:66
-msgid " sync - reloads all cvars on the current menu page\n"
-msgstr " sync - ricarica tutte le cvar sulla corrente pagina\n"
-
-#: qcsrc/menu/gamecommand.qc:67
-msgid " directmenu ITEM - select a menu item as main item\n"
-msgstr " directmenu OGGETTO - seleziona un oggetto come il principale\n"
-
-#: qcsrc/menu/gamecommand.qc:193
-msgid "error creating curl handle\n"
-msgstr "error creating curl handle\n"
-
-#: qcsrc/menu/gamecommand.qc:239
-msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
-msgstr ""
-"Comando non valido. Per una lista dei comandi supportati, prova menu_cmd "
-"help.\n"
-
-#: qcsrc/menu/item/gecko.c:49
-msgid "Browser not initialized!"
-msgstr "Browser non inizializzato!"
-
-#: qcsrc/menu/item/label.c:63
-#, c-format
-msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
-msgstr ""
-"NOTA: testo dell'etichetta %s troppo grande per l'etichetta, compresso di un "
-"fattore %f\n"
-
-#: qcsrc/menu/item/listbox.c:300
-#, c-format
-msgid "Item %d"
-msgstr "Oggetto %d"
-
-#: qcsrc/menu/item/slider.c:64
-#, c-format
-msgid "%d (%s)"
-msgstr "%d (%s)"
-
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
-msgid "custom"
-msgstr "personalizzato"
-
-#: qcsrc/menu/menu.qc:29
-#, c-format
-msgid "^4MQC Build information: ^1%s\n"
-msgstr "^4MQC Build information: ^1%s\n"
-
-#: qcsrc/menu/xonotic/campaign.c:284
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:66
-msgid "???"
-msgstr "???"
-
-#: qcsrc/menu/xonotic/campaign.c:285
-#, c-format
-msgid "Level %d: %s"
-msgstr "Livello %d: %s"
-
-#: qcsrc/menu/xonotic/cvarlist.c:85
-msgid "will be saved to config.cfg"
-msgstr "sarà salvato su config.cfg"
-
-#: qcsrc/menu/xonotic/cvarlist.c:87
-msgid "will not be saved"
-msgstr "non sarà salvato"
-
-#: qcsrc/menu/xonotic/cvarlist.c:89
-msgid "private"
-msgstr "privata"
-
-#: qcsrc/menu/xonotic/cvarlist.c:91
-msgid "engine setting"
-msgstr "impostazioni motore"
-
-#: qcsrc/menu/xonotic/cvarlist.c:93
-msgid "read only"
-msgstr "sola lettura"
-
-#: qcsrc/menu/xonotic/dialog_credits.c:5
-msgid "Credits"
-msgstr "Crediti"
-
-#: qcsrc/menu/xonotic/dialog_credits.c:21
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
-#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
-msgid "OK"
-msgstr "OK"
-
-#: qcsrc/menu/xonotic/dialog_firstrun.c:4
-msgid "Welcome"
-msgstr "Benvenuto"
-
-#: qcsrc/menu/xonotic/dialog_firstrun.c:33
-msgid ""
-"Welcome to Xonotic, please select your language preference and enter your "
-"player name to get started. You can change these options later through the "
-"menu system."
-msgstr ""
-"Benvenuto in Xonotic, per favore selezione la tua lingua e inserisci il tuo "
-"nome come giocatore per iniziare. Puoi cambiare queste opzioni più tardi "
-"tramite il menu."
-
-#: qcsrc/menu/xonotic/dialog_firstrun.c:38
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
-msgid "Text language:"
-msgstr "Lingua testo:"
-
-#: qcsrc/menu/xonotic/dialog_firstrun.c:47
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39
-msgid "Name:"
-msgstr "Nome:"
-
-#: qcsrc/menu/xonotic/dialog_firstrun.c:69
-msgid "Save settings"
-msgstr "Salva impostazioni"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4
-msgid "Ammo Panel"
-msgstr "Pannello munizioni"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
-msgid "Ammunition display:"
-msgstr "Mostra munizioni:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
-msgid "Show only current ammo type"
-msgstr "Mostra solo il tipo corrente di munizioni"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Sinistra"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
-msgid "Right"
-msgstr "Destra"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
-msgid "Chat Panel"
-msgstr "Pannello Chat"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
-msgid "Chat entries:"
-msgstr "N° righe della chat:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
-msgid "Chat size:"
-msgstr "Dimensioni chat:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
-msgid "Chat lifetime:"
-msgstr "Durata chat:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
-msgid "Chat beep sound"
-msgstr "Suono della chat"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4
-msgid "Engine Info Panel"
-msgstr "Pannello info motore"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
-msgid "Engine info:"
-msgstr "Info motore:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
-msgid "Use an averaging algorithm for fps"
-msgstr "Usa un algoritmo mediano per gli fps"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4
-msgid "Health/Armor Panel"
-msgstr "Pannello vita/armatura"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
-msgid "Enable status bar"
-msgstr "Abilita barra di stato"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
-msgid "Status bar alignment:"
-msgstr "Allineamento barra di stato:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
-msgid "Inward"
-msgstr "Interno"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
-msgid "Outward"
-msgstr "Esterno"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
-msgid "Icon alignment:"
-msgstr "Allineamento icone:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
-msgid "Flip health and armor positions"
-msgstr "Inverti posizioni di vita e armatura"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4
-msgid "Info Messages Panel"
-msgstr "Pannello delle informazioni"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
-msgid "Info messages:"
-msgstr "Informazioni"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
-msgid "Flip align"
-msgstr "Inverti allineamento"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4
-msgid "Mod Icons Panel"
-msgstr "Pannello delle icone delle Mod"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4
-msgid "Notification Panel"
-msgstr "Pannello di notifica"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
-msgid "Notifications:"
-msgstr "Notifiche:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
-msgid "Also print notifications to the console"
-msgstr "Mostra anche le notifiche sulla console"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
-msgid "Flip notify order"
-msgstr "Inverti ordine delle notifiche"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
-msgid "Entry lifetime:"
-msgstr "Durata notifica:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
-msgid "Entry fadetime:"
-msgstr "Durata dissolvenza:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
-msgid "Powerups Panel"
-msgstr "Pannello dei Powerup"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
-msgid "Flip strength and shield positions"
-msgstr "Inverti posizioni di forza e scudo"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4
-msgid "Pressed Keys Panel"
-msgstr "Pannello dei tasto premuti"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Pannello disabilitato"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
-msgid "Panel enabled when spectating"
-msgstr "Pannello abilitato in modalità spettatore"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr "Pannello sempre abilitato"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
-msgid "Forced aspect:"
-msgstr "Forza aspetto:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4
-msgid "Race Timer Panel"
-msgstr "Pannello tempi Corsa"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4
-msgid "Radar Panel"
-msgstr "Pannello Radar"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
-msgid "Panel enabled in teamgames"
-msgstr "Pannello abilitato nei teamgames"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
-msgid "Radar:"
-msgstr "Radar:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
-msgid "Alpha:"
-msgstr "Opacità:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
-msgid "Rotation:"
-msgstr "Rotazione:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
-msgid "Forward"
-msgstr "Avanti"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
-msgid "West"
-msgstr "Ovest"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
-msgid "South"
-msgstr "Sud"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
-msgid "East"
-msgstr "Est"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
-msgid "North"
-msgstr "Nord"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
-msgid "Scale:"
-msgstr "Scala:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
-msgid "Zoom mode:"
-msgstr "Modalità zoom:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
-msgid "Zoomed in"
-msgstr "Ingrandito"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
-msgid "Zoomed out"
-msgstr "Non ingrandito"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
-msgid "Always zoomed"
-msgstr "Sempre ingrandito"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
-msgid "Never zoomed"
-msgstr "Mai ingrandito"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4
-msgid "Score Panel"
-msgstr "Pannello punteggio"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
-msgid "Timer Panel"
-msgstr "Pannello tempo"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
-msgid "Timer:"
-msgstr "Tempo:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
-msgid "Show elapsed time"
-msgstr "Mostra tempo trascorso"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4
-msgid "Vote Panel"
-msgstr "Pannello di voto"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
-msgid "Alpha after voting:"
-msgstr "Opacità dopo aver votato:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4
-msgid "Weapons Panel"
-msgstr "Pannello armi"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
-msgid "Fade out after:"
-msgstr "Dissolvi dopo:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:36
-msgid "Never"
-msgstr "Mai"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
-#, c-format
-msgid "%ds"
-msgstr "%ds"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
-msgid "Fade effect:"
-msgstr "Effetto dissolvenza:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
-msgid "EF^None"
-msgstr "EF^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
-msgid "Slide"
-msgstr "Slide"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
-msgid "Alpha"
-msgstr "Opacità"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
-msgid "Weapon icons:"
-msgstr "Icone armi:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
-msgid "Show weapon ID as:"
-msgstr "Mostra ID arma come:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
-msgid "SHOWAS^None"
-msgstr "SHOWAS^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
-msgid "Number"
-msgstr "Numero"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
-msgid "Bind"
-msgstr "Bind"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
-msgid "Show Accuracy"
-msgstr "Mostra precisione"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
-msgid "Show Ammo"
-msgstr "Mostra munizioni"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
-msgid "Ammo bar color:"
-msgstr "Colore barra munizioni:"
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
-msgid "Ammo bar alpha:"
-msgstr "Opacità barra munizioni:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4
-msgid "Panel HUD Setup"
-msgstr "Setup del Panel HUD"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
-msgid "Panel background defaults:"
-msgstr "Sfondo del pannello predefinito:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
-msgid "Disable"
-msgstr "Disabilita"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
-msgid "Color:"
-msgstr "Colore:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
-msgid "Border size:"
-msgstr "Dimensioni del bordo:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
-msgid "Team color:"
-msgstr "Colore team:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
-msgid "Test team color in configure mode"
-msgstr "Prova colore team in modalità configurazione"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
-msgid "Padding:"
-msgstr "Riempimento:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
-msgid "HUD Dock:"
-msgstr "Sfondo dell'HUD:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
-msgid "DOCK^Disabled"
-msgstr "DOCK^Disabilitato"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
-msgid "DOCK^Small"
-msgstr "DOCK^Piccolo"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
-msgid "DOCK^Medium"
-msgstr "DOCK^Medio"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
-msgid "DOCK^Large"
-msgstr "DOCK^Largo"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
-msgid "Grid settings:"
-msgstr "Impostazioni griglia:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
-msgid "Snap panels to grid"
-msgstr "Incolla i pannelli alla griglia"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
-msgid "Grid size:"
-msgstr "Dimensioni griglia:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
-msgid "X:"
-msgstr "X:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
-msgid "Y:"
-msgstr "Y:"
-
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
-msgid "Exit setup"
-msgstr "Esci dal setup"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:4
-msgid "Multiplayer"
-msgstr "Multiplayer"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:18
-msgid "Servers"
-msgstr "Server"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:19
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5
-msgid "Create"
-msgstr "Crea"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:20
-msgid "Demos"
-msgstr "Demo"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:21
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5
-msgid "Player Setup"
-msgstr "Setup giocatore"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
-msgid "Game type:"
-msgstr "Tipo di gioco:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
-msgid "Match settings:"
-msgstr "Impostazioni partita:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
-msgid "Time limit:"
-msgstr "Limite di tempo:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
-msgid "Use map specified default"
-msgstr "Usa le impostazioni di default della mappa"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
-msgid "Point limit:"
-msgstr "Limiti di punteggio:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
-msgid "Player slots:"
-msgstr "Posti per giocatori:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
-msgid "Number of bots:"
-msgstr "Numero di bot:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
-msgid "Bot skill:"
-msgstr "Abilità bot:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
-msgid "Botlike"
-msgstr "\"Come un bot\""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
-msgid "Beginner"
-msgstr "Principiante"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
-msgid "You will win"
-msgstr "Vincerai"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
-msgid "You can win"
-msgstr "Puoi vincere"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
-msgid "You might win"
-msgstr "Potresti vincere"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
-msgid "Advanced"
-msgstr "Avanzato"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
-msgid "Expert"
-msgstr "Esperto"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
-msgid "Pro"
-msgstr "Pro"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
-msgid "Assassin"
-msgstr "Assassino"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
-msgid "Unhuman"
-msgstr "Inumano"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
-msgid "Godlike"
-msgstr "\"Come un Dio\""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
-msgid "Mutators..."
-msgstr "Mutatori..."
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
-msgid "Advanced settings..."
-msgstr "Impostazioni avanzate..."
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
-msgid "Map list:"
-msgstr "Lista delle mappe:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
-msgid "Select all"
-msgstr "Seleziona tutto"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
-msgid "Select none"
-msgstr "Deseleziona tutto"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
-msgid "Start Multiplayer!"
-msgstr "Inizia Multiplayer!"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
-msgid "Capture limit:"
-msgstr "Limite catture:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
-msgid "Lives:"
-msgstr "Vite:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
-msgid "Laps:"
-msgstr "Giri:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
-msgid "Goals:"
-msgstr "Goal:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
-msgid "Frag limit:"
-msgstr "Limiti di frag:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6
-msgid "Advanced server settings"
-msgstr "Impostazioni avanzate server"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25
-msgid "Game settings:"
-msgstr "Impostazioni gioco:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28
-msgid "Allow spectating"
-msgstr "Permetti spettatori"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31
-msgid "Spawn shield:"
-msgstr "Protezione nascita:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36
-msgid "Game speed:"
-msgstr "Velocità gioco:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40
-msgid "Teamplay settings:"
-msgstr "Impostazioni Teamplay:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43
-msgid "Friendly fire scale:"
-msgstr "Scala di fuoco amico:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47
-msgid "Virtual friendly fire (effect only)"
-msgstr "Penalità virtuale (solo effetto)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50
-msgid "Friendly fire penalty:"
-msgstr "Penalità fuoco amico:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54
-msgid "Virtual penalty (effect only)"
-msgstr "Penalità virtuale (solo effetto)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57
-msgid "Teams:"
-msgstr "Team:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66
-msgid "Map voting:"
-msgstr "Voto della mappa:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68
-msgid "No voting"
-msgstr "Nessun voto"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69
-msgid "2 choices"
-msgstr "2 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70
-msgid "3 choices"
-msgstr "3 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71
-msgid "4 choices"
-msgstr "4 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72
-msgid "5 choices"
-msgstr "5 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73
-msgid "6 choices"
-msgstr "6 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74
-msgid "7 choices"
-msgstr "7 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75
-msgid "8 choices"
-msgstr "8 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76
-msgid "9 choices"
-msgstr "9 scelte"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79
-msgid "Simple majority wins vcall"
-msgstr "La semplice maggioranza vince il vcall"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5
-msgid "Map Information"
-msgstr "Informazioni mappa"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "Full item placement"
-msgstr "Posizionamento oggetti completo"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Solo MinstaGib"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78
-msgid "Title:"
-msgstr "Titolo:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84
-msgid "Author:"
-msgstr "Autore:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90
-msgid "Features:"
-msgstr "Caratteristiche:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95
-msgid "Game types:"
-msgstr "Tipi di gioco:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
-msgid "Close"
-msgstr "Chiudi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
-msgid "Play"
-msgstr "Gioca"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
-msgid "Mutators"
-msgstr "Mutatori"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33
-msgid "All Weapons Arena"
-msgstr "Arena con tutte le armi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35
-msgid "Most Weapons Arena"
-msgstr "Arena con la maggior parte delle armi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56
-#, c-format
-msgid "%s Arena"
-msgstr "Arena con %s"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167
-msgid "Dodging"
-msgstr "Dodging"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250
-msgid "MinstaGib"
-msgstr "MinstaGib"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253
-msgid "NIX"
-msgstr "NIX"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205
-msgid "Rocket Flying"
-msgstr "Razzo volante"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264
-msgid "No start weapons"
-msgstr "Senza armi all'inizio"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189
-msgid "Low gravity"
-msgstr "Bassa gravità"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170
-msgid "Cloaked"
-msgstr "Invisibile"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
-msgid "Hook"
-msgstr "Hook"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173
-msgid "Midair"
-msgstr "A mezz'aria"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176
-msgid "Vampire"
-msgstr "Vampiro"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
-msgid "Piñata"
-msgstr "Piñata"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211
-msgid "Weapons stay"
-msgstr "Armi rimangono"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180
-msgid "Blood loss"
-msgstr "Perdita di sangue"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202
-msgid "Jet pack"
-msgstr "Jet pack"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
-msgid "MUT^None"
-msgstr "MUT^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164
-msgid "Gameplay mutators:"
-msgstr "Mutatori di gioco:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196
-msgid "Weapon & item mutators:"
-msgstr "Mutatori di armi ed oggetti:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199
-msgid "Grappling hook"
-msgstr "Grappling hook"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215
-msgid "Weapon arenas:"
-msgstr "Arene di armi:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218
-msgid "Regular (no arena)"
-msgstr "Regolare (no arena)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256
-msgid "with laser"
-msgstr "con laser"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247
-msgid "Special arenas:"
-msgstr "Arene speciali:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260
-msgid "Most weapons"
-msgstr "Maggior parte delle armi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4
-msgid "Demo"
-msgstr "Demo"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28
-msgid "Record demos while playing"
-msgstr "Registra demo durante le partite"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28
-msgid "Filter:"
-msgstr "Filtro:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29
-#: qcsrc/menu/xonotic/dialog_settings_input.c:41
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24
-msgid "Clear"
-msgstr "Pulisci"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43
-msgid "Timedemo"
-msgstr "Timedemo"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
-msgid "Join"
-msgstr "Entra"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36
-msgid "SRVS^Empty"
-msgstr "SRVS^Vuoti"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40
-msgid "SRVS^Full"
-msgstr "SRVS^Pieni"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44
-msgid "Pause"
-msgstr "In pausa"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56
-msgid "Address:"
-msgstr "Indirizzo:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:67
-msgid "Info..."
-msgstr "Info..."
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:72
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:317
-msgid "Join!"
-msgstr "Entra!"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5
-msgid "Server Information"
-msgstr "Informazioni del server"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:189
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199
-msgid "N/A"
-msgstr "N/A"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158
-#, c-format
-msgid "%d/%d, %d free player slots"
-msgstr "%d/%d, %d slot liberi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
-#, c-format
-msgid "%d modified settings"
-msgstr "%d impostazioni modificate"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
-msgid "Official settings"
-msgstr "Impostazioni ufficiali"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:197
-msgid "N/A (can't connect)"
-msgstr "N/A (impossibile connettersi)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205
-msgid "not supported (can't connect)"
-msgstr "non supportato (impossibile connettersi)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207
-msgid "not supported (won't encrypt)"
-msgstr "non supportato (non criptato)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211
-msgid "supported (will encrypt)"
-msgstr "supportato (criptato)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213
-msgid "supported (won't encrypt)"
-msgstr "supportato (non criptato)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217
-msgid "requested (will encrypt)"
-msgstr "richiesto (criptato)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219
-msgid "requested (won't encrypt)"
-msgstr "richiesto (non criptato)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:223
-msgid "required (can't connect)"
-msgstr "richiesto (impossibile connettersi)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:225
-msgid "required (will encrypt)"
-msgstr "richiesto (criptato)"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:246
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:269
-msgid "Players:"
-msgstr "Giocatori:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:254
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38
-msgid "Type:"
-msgstr "Tipo:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:259
-msgid "Map:"
-msgstr "Mappa:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:264
-msgid "Gameplay:"
-msgstr "Gameplay:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:274
-msgid "Bots:"
-msgstr "Bot:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:279
-msgid "Mod:"
-msgstr "Mod:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:284
-msgid "Version:"
-msgstr "Versione:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289
-msgid "Ping:"
-msgstr "Ping:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295
-msgid "CA:"
-msgstr "CA:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301
-msgid "Key:"
-msgstr "Chiave:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:307
-msgid "Encryption:"
-msgstr "Crittografia:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63
-msgid "Model:"
-msgstr "Modello:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88
-msgid "Field of view:"
-msgstr "Campo di vista:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92
-msgid "View bobbing:"
-msgstr "Ondeggiamento vista:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96
-msgid "Zoom factor:"
-msgstr "Moltiplicatore zoom:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100
-msgid "Zoom speed:"
-msgstr "Velocità zoom:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103
-msgid "Weapon settings..."
-msgstr "Impostazioni arma..."
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110
-msgid "Crosshair:"
-msgstr "Mirino:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:139
-msgid "Per weapon"
-msgstr "Per singola arma"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130
-msgid "Crosshair size:"
-msgstr "Dimensioni mirino:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134
-msgid "Crosshair alpha:"
-msgstr "Opacità mirino:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138
-msgid "Crosshair color:"
-msgstr "Colore mirino:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:140
-msgid "By health"
-msgstr "In base alla vita"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143
-msgid "Custom"
-msgstr "Personalizzato"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148
-msgid "Enable center dot"
-msgstr "Abilita puntino al centro"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151
-msgid "Size:"
-msgstr "Dimensioni:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158
-msgid "Hit test:"
-msgstr "Test colpi:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:159
-msgid "HTST^None"
-msgstr "HTST^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:160
-msgid "TrueAim"
-msgstr "TrueAim"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161
-msgid "Enemies"
-msgstr "Nemici"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:164
-msgid "Waypoints setup..."
-msgstr "Setup dei waypoint..."
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:169
-msgid "Enter HUD editor"
-msgstr "Apri HUD editor"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174
-msgid "Force models:"
-msgstr "Forza modelli:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175
-msgid "MDL^None"
-msgstr "MDL^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176
-msgid "MDL^Custom"
-msgstr "MDL^Personalizzato"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177
-msgid "MDL^All"
-msgstr "MDL^Tutti"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:180
-msgid "Disable gore effects"
-msgstr "Disabilita effetti sangue"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:182
-msgid "Gibs:"
-msgstr "Gib:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184
-msgid "GIBS^None"
-msgstr "GIBS^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185
-msgid "GIBS^Few"
-msgstr "GIBS^Pochi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186
-msgid "GIBS^Many"
-msgstr "GIBS^Molti"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:187
-msgid "GIBS^Lots"
-msgstr "GIBS^Parecchi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:191
-msgid "Damage splash:"
-msgstr "Schizzo del danno:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
-msgid "Apply immediately"
-msgstr "Applica immediatamente"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5
-msgid "Waypoints"
-msgstr "Waypoint"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23
-msgid "Show base waypoints"
-msgstr "Mostra i waypoint della base"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:25
-msgid "Waypoint scale:"
-msgstr "Grandezza dei waypoint:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29
-msgid "Waypoint alpha:"
-msgstr "Opacità dei waypoint"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34
-msgid "Show names:"
-msgstr "Mostra nomi:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:37
-msgid "Teammates"
-msgstr "Compagni del team"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:38
-msgid "All players"
-msgstr "Tutti i giocatori"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
-msgid "Weapon settings"
-msgstr "Impostazioni arma"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
-msgid "Weapon priority list:"
-msgstr "Lista priorità armi:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34
-msgid "Up"
-msgstr "Su"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37
-msgid "Down"
-msgstr "Giù"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
-msgid "Use priority list for weapon cycling"
-msgstr "Usa la lista di priorità per ciclare le armi"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
-msgid "Auto switch weapons on pickup"
-msgstr "Cambia automaticamente armi dopo raccolta"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45
-msgid "Draw 1st person weapon model"
-msgstr "Mostra modello arma in 1ª persona"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Allinea a sinistra"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Allinea a destra"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
-msgid "Flip view horizontally"
-msgstr "Capovolgi la vista orizzontalmente"
-
-#: qcsrc/menu/xonotic/dialog_news.c:4
-msgid "News"
-msgstr "Notizie"
-
-#: qcsrc/menu/xonotic/dialog_news.c:18
-msgid "http://www.xonotic.org/team/blog/"
-msgstr "http://www.xonotic.org/team/blog/"
-
-#: qcsrc/menu/xonotic/dialog_quit.c:4
-msgid "Quit"
-msgstr "Esci"
-
-#: qcsrc/menu/xonotic/dialog_quit.c:17
-msgid "Are you sure you want to quit?"
-msgstr "Sei sicuro di voler uscire?"
-
-#: qcsrc/menu/xonotic/dialog_quit.c:20
-msgid "Yes"
-msgstr "Si"
-
-#: qcsrc/menu/xonotic/dialog_quit.c:21
-msgid "No"
-msgstr "No"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:4
-msgid "Settings"
-msgstr "Impostazioni"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:18
-#: qcsrc/menu/xonotic/dialog_settings_input.c:4
-msgid "Input"
-msgstr "Comandi"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:19
-#: qcsrc/menu/xonotic/dialog_settings_video.c:4
-msgid "Video"
-msgstr "Video"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:20
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:4
-msgid "Effects"
-msgstr "Effetti"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:21
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:4
-msgid "Audio"
-msgstr "Audio"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:22
-#: qcsrc/menu/xonotic/dialog_settings_network.c:4
-msgid "Network"
-msgstr "Rete"
-
-#: qcsrc/menu/xonotic/dialog_settings.c:23
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:4
-msgid "Misc"
-msgstr "Altro"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:27
-msgid "Master:"
-msgstr "Master:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:33
-msgid "Music:"
-msgstr "Musica:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
-msgid "VOL^Ambient:"
-msgstr "VOL^Ambiente:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:48
-msgid "Info:"
-msgstr "Info:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
-msgid "Items:"
-msgstr "Oggetti:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
-msgid "Pain:"
-msgstr "Dolore:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
-msgid "Player:"
-msgstr "Giocatore:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
-msgid "Shots:"
-msgstr "Spari:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
-msgid "Voice:"
-msgstr "Voce:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
-msgid "Weapons:"
-msgstr "Armi:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
-msgid "Frequency:"
-msgstr "Frequenza:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
-msgid "11.025 kHz"
-msgstr "11.025 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
-msgid "16 kHz"
-msgstr "16 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
-msgid "22.05 kHz"
-msgstr "22.05 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
-msgid "24 kHz"
-msgstr "24 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
-msgid "32 kHz"
-msgstr "32 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
-msgid "44.1 kHz"
-msgstr "44.1 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
-msgid "Channels:"
-msgstr "Canali:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
-msgid "Mono"
-msgstr "Mono"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
-msgid "Stereo"
-msgstr "Stereo"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
-msgid "2.1"
-msgstr "2.1"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
-msgid "4"
-msgstr "4"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
-msgid "5"
-msgstr "5"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
-msgid "5.1"
-msgstr "5.1"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
-msgid "6.1"
-msgstr "6.1"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
-msgid "7.1"
-msgstr "7.1"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
-msgid "Swap Stereo"
-msgstr "Scambia canali stereo"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
-msgid "Headphone friendly mode"
-msgstr "Modalità cuffie"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
-msgid "Spatial voices:"
-msgstr "Voci spaziali:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
-msgid "VOCS^None"
-msgstr "VOCS^Nessuna"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
-msgid "VOCS^Taunts"
-msgstr "VOCS^Insulti"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
-msgid "VOCS^All"
-msgstr "VOCS^Tutte"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
-msgid "Taunt range:"
-msgstr "Range di insulti:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
-msgid "RNG^Very short"
-msgstr "RNG^Molto ristretto"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
-msgid "RNG^Short"
-msgstr "RNG^Ristretto"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
-msgid "RNG^Normal"
-msgstr "RNG^Normale"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
-msgid "RNG^Long"
-msgstr "RNG^Lungo"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
-msgid "RNG^Full"
-msgstr "RNG^Pieno"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
-msgid "Automatic taunts"
-msgstr "Insulti automatici"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
-msgid "Time warning:"
-msgstr "Avvertimento di tempo:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
-msgid "WRN^None"
-msgstr "WRN^Nessuno"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
-msgid "1 minute"
-msgstr "1 minuto"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
-msgid "5 minutes"
-msgstr "5 minuti"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
-msgid "WRN^Both"
-msgstr "WNR^Entrambi"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
-msgid "Hit indicator"
-msgstr "Indicatore di colpo"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
-msgid "Menu sounds"
-msgstr "Suoni del menu"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:38
-msgid "Quality preset:"
-msgstr "Preset qualità:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:41
-msgid "PRE^OMG!"
-msgstr "PRE^Oh mio dio!"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:42
-msgid "PRE^Low"
-msgstr "PRE^Bassa"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:43
-msgid "PRE^Medium"
-msgstr "PRE^Media"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:44
-msgid "PRE^Normal"
-msgstr "PRE^Normale"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:45
-msgid "PRE^High"
-msgstr "PRE^Alta"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:46
-msgid "PRE^Ultra"
-msgstr "PRE^Ultra"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:48
-msgid "PRE^Ultimate"
-msgstr "PRE^Massima"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:52
-msgid "Geometry detail:"
-msgstr "Dettagli geometrici:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:54
-msgid "DET^Lowest"
-msgstr "DET^Molto bassi"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:55
-msgid "DET^Low"
-msgstr "DET^Bassi"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:56
-msgid "DET^Normal"
-msgstr "DET^Normali"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:57
-msgid "DET^Good"
-msgstr "DET^Buoni"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:58
-msgid "DET^Best"
-msgstr "DET^Ottimi"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:59
-msgid "DET^Insane"
-msgstr "DET^Bestiali"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:62
-msgid "Antialiasing:"
-msgstr "Antialiasing:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:64
-msgid "AA^Disabled"
-msgstr "AA^Disabilitato"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:65
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:103
-msgid "2x"
-msgstr "2x"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:66
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:104
-msgid "4x"
-msgstr "4x"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:70
-msgid "Texture resolution:"
-msgstr "Risoluzione texture:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:73
-msgid "RES^Leet"
-msgstr "RES^Leet"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:74
-msgid "RES^Lowest"
-msgstr "RES^Molto bassa"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:75
-msgid "RES^Low"
-msgstr "RES^Bassa"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:76
-msgid "RES^Normal"
-msgstr "RES^Normale"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:77
-msgid "RES^Good"
-msgstr "RES^Buona"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:78
-msgid "RES^Best"
-msgstr "RES^Ottima"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:91
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:94
-msgid "Avoid lossy texture compression"
-msgstr "Evita compressione texture con perdita"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:100
-msgid "Anisotropy:"
-msgstr "Anisotropia:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:102
-msgid "ANISO^Disabled"
-msgstr "ANISO^Disabilitato"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:105
-msgid "8x"
-msgstr "8x"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:106
-msgid "16x"
-msgstr "16x"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:110
-msgid "Particle quality:"
-msgstr "Qualità dei particolari:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:113
-msgid "Particle distance:"
-msgstr "Distanza dei particolari:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:117
-msgid "Decals"
-msgstr "Segni"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
-msgid "Distance:"
-msgstr "Distanza:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
-msgid "Time:"
-msgstr "Tempo:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
-msgid "Use lightmaps"
-msgstr "Usa lightmaps"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
-msgid "Deluxe mapping"
-msgstr "Mappaggio Deluxe"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
-msgid "Gloss"
-msgstr "Lucentezza"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
-msgid "Offset mapping"
-msgstr "Mappaggio in offset"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
-msgid "Relief mapping"
-msgstr "Mappaggio in rilievo"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
-msgid "Reflections:"
-msgstr "Riflessioni:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
-msgid "Blurred"
-msgstr "Sfocate"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
-msgid "REFL^Good"
-msgstr "REFL^Buone"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
-msgid "Sharp"
-msgstr "Nitide"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
-msgid "Show surfaces"
-msgstr "Mostra superfici"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
-msgid "No dynamic lighting"
-msgstr "Nessuna illuminazione dinamica"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
-msgid "Flash blend approximation"
-msgstr "Approssimazione Flash blend"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
-msgid "Realtime dynamic lighting"
-msgstr "Illuminazione dinamica in tempo reale"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
-msgid "Shadows"
-msgstr "Ombre"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
-msgid "Realtime world lighting"
-msgstr "Illuminazione globale in tempo reale"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
-msgid "Use normal maps"
-msgstr "Usa mappe normali"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
-msgid "Soft shadows"
-msgstr "Ombre morbide"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
-msgid "Coronas"
-msgstr "Corone"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
-msgid "Use Occlusion Queries"
-msgstr "Usa le Occlusion Queries"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
-msgid "Bloom"
-msgstr "Bloom"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
-msgid "High Dynamic Range (HDR)"
-msgstr "High Dynamic Range (HDR)"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
-msgid "Motion blur:"
-msgstr "Sfocatura da movimento:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
-msgstr "Sfocatura da danno:"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:26
-msgid "Key bindings:"
-msgstr "Associazione tasti (bind):"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:31
-msgid "Change key..."
-msgstr "Cambia tasto..."
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:35
-msgid "Edit..."
-msgstr "Modifica..."
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:46
-msgid "Sensitivity:"
-msgstr "Sensibilità:"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
-msgid "UI mouse speed:"
-msgstr "Velocità UI mouse:"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
-msgid "Mouse filter"
-msgstr "Filtro mouse"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
-msgid "Invert mouse"
-msgstr "Inverti mouse"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
-msgid "Use joystick input"
-msgstr "Usa joystick"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
-msgid "Turn off OS mouse acceleration"
-msgstr "Disattiva l'accelerazione mouse dell'OS"
-
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
-msgid "\"enter console\" also closes"
-msgstr "\"apri console\" chiude anche"
-
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5
-msgid "User defined key bind"
-msgstr "Tasti \"bind\" definiti dall'utente"
-
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42
-msgid "Command when pressed:"
-msgstr "Comando quando premuto:"
-
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45
-msgid "Command when released:"
-msgstr "Comando quando rilasciato:"
-
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48
-msgid "Save"
-msgstr "Salva"
-
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51
-msgid "Cancel"
-msgstr "Annulla"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:26
-msgid "Menu skins:"
-msgstr "Temi del menu:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:47
-msgid "Show current time"
-msgstr "Mostra orario corrente"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:49
-msgid "Show current date"
-msgstr "Mostra data corrente"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:51
-msgid "Show frames per second"
-msgstr "Mostra fotogrammi al secondo"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Tachimetro"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (nascosto)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "nodi"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Mostra accelerometro"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Scala accelerometro:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
-msgid "Minimize input latency"
-msgstr "Minimizza latenza in entrata"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
-msgid "Advanced settings"
-msgstr "Impostazioni avanzate"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23
-msgid "Cvar filter:"
-msgstr "Filtro delle cvar:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34
-msgid "Setting:"
-msgstr "Impostazioni:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42
-msgid "Value:"
-msgstr "Valore:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:56
-msgid "Description:"
-msgstr "Descrizione:"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:26
-msgid "Client-side movement prediction"
-msgstr "Predizione del movimento lato client"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:30
-msgid "Show netgraph"
-msgstr "Mostra grafico di rete"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:33
-msgid "Network speed:"
-msgstr "Velocità rete:"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:35
-msgid "56k"
-msgstr "56k"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:36
-msgid "ISDN"
-msgstr "ISDN"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:37
-msgid "Slow ADSL"
-msgstr "ADSL lenta"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:38
-msgid "Fast ADSL"
-msgstr "ADSL veloce"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:39
-msgid "Broadband"
-msgstr "Banda larga"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:42
-msgid "Input packets/s:"
-msgstr "Pacchetti/sec in entrata:"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:46
-msgid "HTTP downloads:"
-msgstr "Download via HTTP:"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:49
-msgid "Downloads:"
-msgstr "N° di download:"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:53
-msgid "Speed (kB/s):"
-msgstr "Velocità (kB/s):"
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:57
-msgid "Client UDP port:"
-msgstr "Porta UDP del client:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:26
-msgid "Resolution:"
-msgstr "Risoluzione:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:29
-msgid "Font/UI size:"
-msgstr "Dimensioni caratteri:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:31
-msgid "SZ^Unreadable"
-msgstr "SZ^Illeggibile"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:32
-msgid "SZ^Tiny"
-msgstr "SZ^Minuscolo"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:33
-msgid "SZ^Little"
-msgstr "SZ^Molto piccolo"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:34
-msgid "SZ^Small"
-msgstr "SZ^Piccolo"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:35
-msgid "SZ^Medium"
-msgstr "SZ^Medio"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:36
-msgid "SZ^Large"
-msgstr "SZ^Largo"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:37
-msgid "SZ^Huge"
-msgstr "SZ^Enorme"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:38
-msgid "SZ^Gigantic"
-msgstr "SZ^Gigante"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:39
-msgid "SZ^Colossal"
-msgstr "SZ^Colossale"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:42
-msgid "Color depth:"
-msgstr "Profondità colore:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:45
-msgid "Full screen"
-msgstr "Schermo intero"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:46
-msgid "Vertical Synchronization"
-msgstr "Sincronizzazione verticale"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:49
-msgid "Use OpenGL 2.0 shaders (GLSL)"
-msgstr "Usa gli shader OpenGL 2.0 (GLSL)"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:52
-msgid "Use GLSL to handle color control"
-msgstr "Usa GLSL per gestire il controllo del colore"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:56
-msgid "Vertex Buffer Objects (VBOs)"
-msgstr "Vertex Buffer Objects (VBOs)"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:59
-msgid "VBO^Off"
-msgstr "VBO^Off"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:60
-msgid "Vertices, some Tris (compatible)"
-msgstr "Vertici, alcuni Triangoli (compatibile)"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:63
-msgid "Vertices"
-msgstr "Vertici"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:64
-msgid "Vertices and Triangles"
-msgstr "Vertici e Triangoli"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:67
-msgid "Depth first:"
-msgstr "Profondità prima:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:69
-msgid "DF^Disabled"
-msgstr "DF^Disabilitata"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:70
-msgid "DF^World"
-msgstr "DF^Globale"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:71
-msgid "DF^All"
-msgstr "DF^Tutto"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:75
-msgid "Disable multithreaded OpenGL"
-msgstr "Disabilita il multithreading OpenGL"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:77
-msgid "Wait for GPU to finish each frame"
-msgstr "Attendi che la GPU finisca di elaborare ogni frame"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:80
-msgid "Brightness:"
-msgstr "Luminosità:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:83
-msgid "Contrast:"
-msgstr "Contrasto:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:86
-msgid "Gamma:"
-msgstr "Gamma:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
-msgid "Contrast boost:"
-msgstr "Aumenta contrasto:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
-msgid "Saturation:"
-msgstr "Saturazione:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
-msgid "LIT^Ambient:"
-msgstr "LIT^Ambiente:"
-
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
-msgid "Intensity:"
-msgstr "Intensità:"
-
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:4
-msgid "Singleplayer"
-msgstr "Giocatore singolo"
-
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:59
-msgid "Instant action! (random map with bots)"
-msgstr "Inizia ora! (mappa casuale con bot)"
-
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:80
-msgid "Start Singleplayer!"
-msgstr "Inizia modalità Giocatore Singolo!"
-
-#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4
-msgid "Winner"
-msgstr "Vincitore"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:5
-msgid "Team Selection"
-msgstr "Selezione team"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
-msgid "join 'best' team (auto-select)"
-msgstr "entra nel 'miglior' team (auto-selezione)"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
-msgid "red"
-msgstr "rosso"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
-msgid "blue"
-msgstr "blu"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
-msgid "yellow"
-msgstr "giallo"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
-msgid "pink"
-msgstr "rosa"
-
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
-msgid "spectate"
-msgstr "spettatore"
-
-#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38
-msgid "Do not press this button again!"
-msgstr "Non premere questo tasto di nuovo!"
-
-#: qcsrc/menu/xonotic/maplist.c:278
-msgid ""
-"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
-msgstr ""
-"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
-
-#: qcsrc/menu/xonotic/maplist.c:286
-#, c-format
-msgid "%s's Xonotic Server"
-msgstr "Server Xonotic di %s"
-
-#: qcsrc/menu/xonotic/maplist.c:291
-msgid ""
-"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
-"again.\n"
-msgstr ""
-"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
-"again.\n"
-
-#: qcsrc/menu/xonotic/playermodel.c:174
-msgid "<no model found>"
-msgstr "<nessun modello trovato>"
-
-#: qcsrc/menu/xonotic/serverlist.c:185
-msgid "Remove"
-msgstr "Rimuovi"
-
-#: qcsrc/menu/xonotic/serverlist.c:187
-msgid "Bookmark"
-msgstr "Aggiungi tra i preferiti"
-
-#: qcsrc/menu/xonotic/serverlist.c:523
-msgid "Ping"
-msgstr "Ping"
-
-#: qcsrc/menu/xonotic/serverlist.c:524
-msgid "Host name"
-msgstr "Nome dell'host"
-
-#: qcsrc/menu/xonotic/serverlist.c:525
-msgid "Map"
-msgstr "Mappa"
-
-#: qcsrc/menu/xonotic/serverlist.c:526
-msgid "Type"
-msgstr "Tipo"
-
-#: qcsrc/menu/xonotic/serverlist.c:527
-msgid "Players"
-msgstr "Giocatori"
-
-#: qcsrc/menu/xonotic/skinlist.c:105
-msgid "<TITLE>"
-msgstr "<TITOLO>"
-
-#: qcsrc/menu/xonotic/skinlist.c:106
-msgid "<AUTHOR>"
-msgstr "<AUTORE>"
-
-#: qcsrc/menu/xonotic/skinlist.c:163
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
-
-#: qcsrc/menu/xonotic/slider_decibels.c:50
-msgid "VOL^OFF"
-msgstr "VOL^OFF"
-
-#: qcsrc/menu/xonotic/slider_decibels.c:52
-msgid "VOL^MAX"
-msgstr "VOL^MAX"
-
-#: qcsrc/menu/xonotic/slider_decibels.c:53
-#, c-format
-msgid "%s dB"
-msgstr "%s dB"
-
-#: qcsrc/menu/xonotic/slider_resolution.c:65
-#, c-format
-msgid "%dx%d"
-msgstr "%dx%d"
-
-#: qcsrc/menu/xonotic/util.qc:270
-#, c-format
-msgid "Received HTTP request data for an invalid id %d.\n"
-msgstr "Ricevuta richiesta HTTP per un invalido id %d.\n"
-
-#: qcsrc/menu/xonotic/util.qc:285
-#, c-format
-msgid "error receiving update notification: status is %d\n"
-msgstr ""
-"errore durante la notifica d'aggiornamento: lo stato è impostato su %d\n"
-
-#: qcsrc/menu/xonotic/util.qc:290
-msgid "error: received HTML instead of an update notification\n"
-msgstr "errore: ricevuto HTML invece di una notifica d'aggiornamento\n"
-
-#: qcsrc/menu/xonotic/util.qc:295
-msgid "error: received carriage returns from update notification server\n"
-msgstr "error: received carriage returns from update notification server\n"
-
-#: qcsrc/menu/xonotic/util.qc:316
-#, c-format
-msgid ""
-"Update can be downloaded at:\n"
-"%s\n"
-msgstr ""
-"L'aggiornamento può essere scaricato da:\n"
-"%s\n"
-
-#: qcsrc/menu/xonotic/util.qc:337
-msgid "Autogenerating mapinfo for newly added maps..."
-msgstr "Autogenerando le mapinfo per le nuove mappe..."
-
-#: qcsrc/menu/xonotic/util.qc:367
-#, c-format
-msgid "^1%s TEST BUILD"
-msgstr "^1%s TEST BUILD"
-
-#: qcsrc/menu/xonotic/util.qc:432
-#, c-format
-msgid "Update to %s now!"
-msgstr "Aggiorna a %s ora!"
-
-#: qcsrc/menu/xonotic/util.qc:509
-msgid ""
-"^1ERROR: Texture compression is required but not supported.\n"
-"^1Expect visual problems.\n"
-msgstr ""
-"^1ERRORE: La compressione texture è richiesta ma non supportata.\n"
-"^1Previsti problemi visuali.\n"
-
-#: qcsrc/menu/xonotic/util.qc:531
-msgid "Arena"
-msgstr "Arena"
-
-#: qcsrc/menu/xonotic/util.qc:532
-msgid "Assault"
-msgstr "Assalto"
-
-#: qcsrc/menu/xonotic/util.qc:533
-msgid "Capture The Flag"
-msgstr "Capture The Flag"
-
-#: qcsrc/menu/xonotic/util.qc:534
-msgid "Clan Arena"
-msgstr "Clan Arena"
-
-#: qcsrc/menu/xonotic/util.qc:535
-msgid "Deathmatch"
-msgstr "Deathmatch"
-
-#: qcsrc/menu/xonotic/util.qc:536
-msgid "Domination"
-msgstr "Dominazione"
-
-#: qcsrc/menu/xonotic/util.qc:537
-msgid "Freeze Tag"
-msgstr "Freeze Tag"
-
-#: qcsrc/menu/xonotic/util.qc:538
-msgid "Keepaway"
-msgstr "Keepaway"
-
-#: qcsrc/menu/xonotic/util.qc:539
-msgid "Key Hunt"
-msgstr "Key Hunt"
-
-#: qcsrc/menu/xonotic/util.qc:540
-msgid "Last Man Standing"
-msgstr "Last Man Standing"
-
-#: qcsrc/menu/xonotic/util.qc:541
-msgid "Nexball"
-msgstr "Nexball"
-
-#: qcsrc/menu/xonotic/util.qc:542
-msgid "Onslaught"
-msgstr "Onslaught"
-
-#: qcsrc/menu/xonotic/util.qc:543
-msgid "Race"
-msgstr "Corsa"
-
-#: qcsrc/menu/xonotic/util.qc:544
-msgid "Race CTS"
-msgstr "Corsa CTS"
-
-#: qcsrc/menu/xonotic/util.qc:545
-msgid "Runematch"
-msgstr "Runematch"
-
-#: qcsrc/menu/xonotic/util.qc:546
-msgid "Team Deathmatch"
-msgstr "Team Deathmatch"
-
-#: qcsrc/menu/xonotic/util.qc:565
-#, c-format
-msgid "@!#%'n Tuba Throwing"
-msgstr "@!#%'n Tuba Throwing"
-
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Sfondo:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
-msgid "Default"
-msgstr "Predefinito"
-
-#: qcsrc/menu/xonotic/util.qc:596
-msgid "Use default"
-msgstr "Usa predefinito"
-
-#: qcsrc/menu/xonotic/util.qc:616
-msgid "Team Color:"
-msgstr "Colore Team:"
-
-#: qcsrc/menu/xonotic/util.qh:49
-msgid "Enable panel"
-msgstr "Abilita pannello"
-
-#: qcsrc/server/w_crylink.qc:2
-msgid "Crylink"
-msgstr "Crylink"
-
-#: qcsrc/server/w_crylink.qc:664
-#, c-format
-msgid "%s succeeded at self-destructing themself with the Crylink"
-msgstr "%s è riuscito ad autodistrugersi col Crylink"
-
-#: qcsrc/server/w_crylink.qc:669
-#, c-format
-msgid "%s could not hide from %s's Crylink"
-msgstr "%s non s'è potuto nascondere dal Crylink di %s"
-
-#: qcsrc/server/w_crylink.qc:671
-#, c-format
-msgid "%s was too close to %s's Crylink"
-msgstr "%s era troppo vicino al Crylink di %s"
-
-#: qcsrc/server/w_crylink.qc:673
-#, c-format
-msgid "%s took a close look at %s's Crylink"
-msgstr "%s ha visto da vicino il Crylink di %s"
-
-#: qcsrc/server/w_electro.qc:2
-msgid "Electro"
-msgstr "Electro"
-
-#: qcsrc/server/w_electro.qc:571
-#, c-format
-msgid "%s could not remember where they put plasma"
-msgstr "%s non s'è ricordato dove aveva messo il plasma"
-
-#: qcsrc/server/w_electro.qc:573
-#, c-format
-msgid "%s played with plasma"
-msgstr "%s ha giocato col plasma"
-
-#: qcsrc/server/w_electro.qc:580
-#, c-format
-msgid "%s just noticed %s's blue ball"
-msgstr "%s ha appena notato la palla blu di %s"
-
-#: qcsrc/server/w_electro.qc:582
-#, c-format
-msgid "%s got in touch with %s's blue ball"
-msgstr "%s è entrato in contatto con la palla blu di %s"
-
-#: qcsrc/server/w_electro.qc:587
-#, c-format
-msgid "%s felt the electrifying air of %s's combo"
-msgstr "%s ha sentito l'aria elettrificata della combo di %s"
-
-#: qcsrc/server/w_electro.qc:589
-#, c-format
-msgid "%s got too close to %s's blue beam"
-msgstr "%s s'è avvicinato troppo al raggio blu di %s"
-
-#: qcsrc/server/w_electro.qc:591
-#, c-format
-msgid "%s was blasted by %s's blue beam"
-msgstr "%s è stato fatto saltare in aria dal raggio blu di %s"
-
-#: qcsrc/server/w_fireball.qc:2
-msgid "Fireball"
-msgstr "Fireball"
-
-#: qcsrc/server/w_fireball.qc:417
-#, c-format
-msgid "%s forgot about some firemine"
-msgstr "%s s'è dimenticato di alcune mine infuocate"
-
-#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240
-#, c-format
-msgid "%s should have used a smaller gun"
-msgstr "%s avrebbe dovuto usare un'arma più piccola"
-
-#: qcsrc/server/w_fireball.qc:426
-#, c-format
-msgid "%s tried to catch %s's firemine"
-msgstr "%s ha provato a catturare la mina infuocata di %s"
-
-#: qcsrc/server/w_fireball.qc:428
-#, c-format
-msgid "%s fatefully ignored %s's firemine"
-msgstr "%s ha fatalmente ignorato la mina infuocata di %s"
-
-#: qcsrc/server/w_fireball.qc:435
-#, c-format
-msgid "%s could not hide from %s's fireball"
-msgstr "%s non è riuscito a nascondersi dalla fireball di %s"
-
-#: qcsrc/server/w_fireball.qc:437
-#, c-format
-msgid "%s saw the pretty lights of %s's fireball"
-msgstr "%s ha visto le belle luci della fireball di %s"
-
-#: qcsrc/server/w_fireball.qc:440
-#, c-format
-msgid "%s got too close to %s's fireball"
-msgstr "%s s'è avvicinato troppo alla fireball di %s"
-
-#: qcsrc/server/w_fireball.qc:442
-#, c-format
-msgid "%s tasted %s's fireball"
-msgstr "%s ha assaggiato la fireball di %s"
-
-#: qcsrc/server/w_grenadelauncher.qc:2
-msgid "Mortar"
-msgstr "Mortar"
-
-#: qcsrc/server/w_grenadelauncher.qc:378
-#, c-format
-msgid "%s tried out his own grenade"
-msgstr "%s ha provato da solo la propria granata"
-
-#: qcsrc/server/w_grenadelauncher.qc:380
-#, c-format
-msgid "%s detonated"
-msgstr "%s è detonato"
-
-#: qcsrc/server/w_grenadelauncher.qc:386
-#, c-format
-msgid "%s didn't see %s's grenade"
-msgstr "%s non ha visto la granata di %s"
-
-#: qcsrc/server/w_grenadelauncher.qc:388
-#, c-format
-msgid "%s almost dodged %s's grenade"
-msgstr "%s ha quasi schivato la granata di %s"
-
-#: qcsrc/server/w_grenadelauncher.qc:390
-#, c-format
-msgid "%s ate %s's grenade"
-msgstr "%s ha mangiato la granata di %s"
-
-#: qcsrc/server/w_hagar.qc:2
-msgid "Hagar"
-msgstr "Hagar"
-
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
-#, c-format
-msgid "%s played with tiny rockets"
-msgstr "%s ha giocato con piccoli razzi"
-
-#: qcsrc/server/w_hagar.qc:213
-#, c-format
-msgid "%s hoped %s's missiles wouldn't bounce"
-msgstr "%s ha sperato che il missile di %s non rimbalzasse"
-
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
-#, c-format
-msgid "%s was pummeled by %s"
-msgstr "%s è stato preso a pugni da %s"
-
-#: qcsrc/server/w_hlac.qc:2
-msgid "Heavy Laser Assault Cannon"
-msgstr "Heavy Laser Assault Cannon"
-
-#: qcsrc/server/w_hlac.qc:242
-#, c-format
-msgid "%s was cut down by %s"
-msgstr "%s è stato abbattuto da %s"
-
-#: qcsrc/server/w_hook.qc:2
-msgid "Grappling Hook"
-msgstr "Grappling Hook"
-
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
-#, c-format
-msgid "%s did the impossible"
-msgstr "%s ha fatto l'impossibile"
-
-#: qcsrc/server/w_hook.qc:268
-#, c-format
-msgid "%s has run into %s's gravity bomb"
-msgstr "%s è corso nella bomba di gravità di %s"
-
-#: qcsrc/server/w_laser.qc:2
-msgid "Laser"
-msgstr "Laser"
-
-#: qcsrc/server/w_laser.qc:305
-#, c-format
-msgid "%s lasered themself to hell"
-msgstr "%s si è \"laserato\" all'inferno"
-
-#: qcsrc/server/w_laser.qc:309
-#, c-format
-msgid "%s was cut in half by %s's gauntlet"
-msgstr "%s è stato tagliato a metà dal guanto di %s"
-
-#: qcsrc/server/w_laser.qc:311
-#, c-format
-msgid "%s was lasered to death by %s"
-msgstr "%s è stato \"laserato\" alla morte da %s"
-
-#: qcsrc/server/w_minelayer.qc:2
-msgid "Mine Layer"
-msgstr "Mine Layer"
-
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
-#, c-format
-msgid "%s exploded"
-msgstr "%s è esploso"
-
-#: qcsrc/server/w_minelayer.qc:499
-#, c-format
-msgid "%s got too close to %s's mine"
-msgstr "%s s'è avvicinato troppo alla mina di %s"
-
-#: qcsrc/server/w_minelayer.qc:501
-#, c-format
-msgid "%s almost dodged %s's mine"
-msgstr "%s ha quasi schivato la mina di %s"
-
-#: qcsrc/server/w_minelayer.qc:503
-#, c-format
-msgid "%s stepped on %s's mine"
-msgstr "%s è passato sopra la mina di %s"
-
-#: qcsrc/server/w_minstanex.qc:2
-msgid "MinstaNex"
-msgstr "MinstaNex"
-
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
-#, c-format
-msgid "%s has been vaporized by %s"
-msgstr "%s è stato vaporizzato da %s"
-
-#: qcsrc/server/w_nex.qc:2
-msgid "Nex"
-msgstr "Nex"
-
-#: qcsrc/server/w_porto.qc:2
-msgid "Port-O-Launch"
-msgstr "Port-O-Launch"
-
-#: qcsrc/server/w_porto.qc:298
-#, c-format
-msgid "%s felt %s doing the impossible to him"
-msgstr "%s ha sentito %s fargli l'impossibile"
-
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
-msgstr "Rocket Launcher"
-
-#: qcsrc/server/w_rocketlauncher.qc:504
-#, c-format
-msgid "%s got too close to %s's rocket"
-msgstr "%s s'è avvicinato troppo al razzo di %s"
-
-#: qcsrc/server/w_rocketlauncher.qc:506
-#, c-format
-msgid "%s almost dodged %s's rocket"
-msgstr "%s ha quasi schivato il razzo di %s"
-
-#: qcsrc/server/w_rocketlauncher.qc:508
-#, c-format
-msgid "%s ate %s's rocket"
-msgstr "%s ha mangiato il razzo di %s"
-
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
-msgstr "T.A.G. Seeker"
-
-#: qcsrc/server/w_seeker.qc:659
-#, c-format
-msgid "%s was tagged by %s"
-msgstr "%s è stato contrassegnato da %s"
-
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
-msgstr "Shotgun"
-
-#: qcsrc/server/w_shotgun.qc:207
-#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
-msgstr "%2$s ^7ha schiaffeggiato %1$s ^7un pò con un grosso ^2shotgun"
-
-#: qcsrc/server/w_shotgun.qc:209
-#, c-format
-msgid "%s was gunned by %s"
-msgstr "%s è stato sparato da %s"
-
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s si è sparato da solo automaticamente"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s si è fucilato da solo in qualche modo"
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s non è riuscito a nascondersi dalla raffica di proiettili di %s"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s è morto nella raffica di proiettili di %s"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s non è riuscito a nascondersi dal fucile di %s"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s ha preso un colpo in testa da %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "%s è stato fucilato da %s"
-
-#: qcsrc/server/w_tuba.qc:2
-#, c-format
-msgid "@!#%'n Tuba"
-msgstr "@!#%'n Tuba"
-
-#: qcsrc/server/w_tuba.qc:263
-#, c-format
-msgid "%s hurt his own ears with the @!#%%'n Tuba"
-msgstr "%s s'è fatto male alle orecchie con la @!#%%'n Tuba"
-
-#: qcsrc/server/w_tuba.qc:267
-#, c-format
-msgid "%s died of %s's great playing on the @!#%%'n Tuba"
-msgstr "%s è morto nella gran esibizione di %s con la @!#%%'n Tuba"
-
-#: qcsrc/server/w_uzi.qc:2
-msgid "Machine Gun"
-msgstr "Machine Gun"
-
-#: qcsrc/server/w_uzi.qc:323
-#, c-format
-msgid "%s was riddled full of holes by %s"
-msgstr "%s è stato riempito di buchi da %s"
-
-#~ msgid "%d/%d"
-#~ msgstr "%d/%d"
-
-#~ msgid ""
-#~ "Please answer a few initial questions to enhance the game experience."
-#~ msgstr ""
-#~ "Per favore rispondi a poche domande iniziali per migliorare l'esperienza "
-#~ "di gioco."
-
-#~ msgid "Waypoint settings:"
-#~ msgstr "Impostazioni dei waypoint"
+# Xonotic Menu\r
+# Copyright (C) 2011 Team Xonotic\r
+# This file is distributed under the same license as the PACKAGE package.\r
+# Felice Sallustio <fel.sallustio@gmail.com>, 2011.\r
+# Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011.\r
+#\r
+msgid ""\r
+msgstr ""\r
+"Project-Id-Version: 0.1preview\n"\r
+"Report-Msgid-Bugs-To: \n"\r
+"POT-Creation-Date: 2011-08-19 16:25+0200\n"\r
+"PO-Revision-Date: 2011-08-19 17:20+0100\n"\r
+"Last-Translator: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"\r
+"Language-Team: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"\r
+"MIME-Version: 1.0\n"\r
+"Content-Type: text/plain; charset=UTF-8\n"\r
+"Content-Transfer-Encoding: 8bit\n"\r
+"Language: it\n"\r
+"X-Poedit-Language: Italian\n"\r
+\r
+#: qcsrc/menu/gamecommand.qc:47\r
+#, c-format\r
+msgid "error: status is %d\n"\r
+msgstr "errore: lo stato è impostato su %d\n"\r
+\r
+#: qcsrc/menu/gamecommand.qc:65\r
+msgid "Usage: menu_cmd command..., where possible commands are:\n"\r
+msgstr "Uso: menu_cmd comando..., dove i possibili comandi sono:\n"\r
+\r
+#: qcsrc/menu/gamecommand.qc:66\r
+msgid " sync - reloads all cvars on the current menu page\n"\r
+msgstr " sync - ricarica tutte le cvar sulla corrente pagina\n"\r
+\r
+#: qcsrc/menu/gamecommand.qc:67\r
+msgid " directmenu ITEM - select a menu item as main item\n"\r
+msgstr " directmenu OGGETTO - seleziona un oggetto come il principale\n"\r
+\r
+#: qcsrc/menu/gamecommand.qc:193\r
+msgid "error creating curl handle\n"\r
+msgstr "error creating curl handle\n"\r
+\r
+#: qcsrc/menu/gamecommand.qc:239\r
+msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"\r
+msgstr ""\r
+"Comando non valido. Per una lista dei comandi supportati, prova menu_cmd "\r
+"help.\n"\r
+\r
+#: qcsrc/menu/item/gecko.c:49\r
+msgid "Browser not initialized!"\r
+msgstr "Browser non inizializzato!"\r
+\r
+#: qcsrc/menu/item/label.c:63\r
+#, c-format\r
+msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"\r
+msgstr ""\r
+"NOTA: testo dell'etichetta %s troppo grande per l'etichetta, compresso di un "\r
+"fattore %f\n"\r
+\r
+#: qcsrc/menu/item/listbox.c:300\r
+#, c-format\r
+msgid "Item %d"\r
+msgstr "Oggetto %d"\r
+\r
+#: qcsrc/menu/item/slider.c:64\r
+#, c-format\r
+msgid "%d (%s)"\r
+msgstr "%d (%s)"\r
+\r
+#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31\r
+msgid "custom"\r
+msgstr "personalizzato"\r
+\r
+#: qcsrc/menu/menu.qc:29\r
+#, c-format\r
+msgid "^4MQC Build information: ^1%s\n"\r
+msgstr "^4MQC Build information: ^1%s\n"\r
+\r
+#: qcsrc/menu/xonotic/campaign.c:284\r
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:66\r
+msgid "???"\r
+msgstr "???"\r
+\r
+#: qcsrc/menu/xonotic/campaign.c:285\r
+#, c-format\r
+msgid "Level %d: %s"\r
+msgstr "Livello %d: %s"\r
+\r
+#: qcsrc/menu/xonotic/cvarlist.c:85\r
+msgid "will be saved to config.cfg"\r
+msgstr "sarà salvato su config.cfg"\r
+\r
+#: qcsrc/menu/xonotic/cvarlist.c:87\r
+msgid "will not be saved"\r
+msgstr "non sarà salvato"\r
+\r
+#: qcsrc/menu/xonotic/cvarlist.c:89\r
+msgid "private"\r
+msgstr "privata"\r
+\r
+#: qcsrc/menu/xonotic/cvarlist.c:91\r
+msgid "engine setting"\r
+msgstr "impostazioni motore"\r
+\r
+#: qcsrc/menu/xonotic/cvarlist.c:93\r
+msgid "read only"\r
+msgstr "sola lettura"\r
+\r
+#: qcsrc/menu/xonotic/dialog_credits.c:5\r
+msgid "Credits"\r
+msgstr "Crediti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_credits.c:21\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61\r
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21\r
+msgid "OK"\r
+msgstr "OK"\r
+\r
+#: qcsrc/menu/xonotic/dialog_firstrun.c:4\r
+msgid "Welcome"\r
+msgstr "Benvenuto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_firstrun.c:33\r
+msgid ""\r
+"Welcome to Xonotic, please select your language preference and enter your "\r
+"player name to get started. You can change these options later through the "\r
+"menu system."\r
+msgstr ""\r
+"Benvenuto in Xonotic, per favore selezione la tua lingua e inserisci il tuo "\r
+"nome come giocatore per iniziare. Puoi cambiare queste opzioni più tardi "\r
+"tramite il menu."\r
+\r
+#: qcsrc/menu/xonotic/dialog_firstrun.c:38\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:35\r
+msgid "Text language:"\r
+msgstr "Lingua testo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_firstrun.c:47\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40\r
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39\r
+msgid "Name:"\r
+msgstr "Nome:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_firstrun.c:69\r
+msgid "Save settings"\r
+msgstr "Salva impostazioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4\r
+msgid "Ammo Panel"\r
+msgstr "Pannello munizioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22\r
+msgid "Ammunition display:"\r
+msgstr "Mostra munizioni:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25\r
+msgid "Show only current ammo type"\r
+msgstr "Mostra solo il tipo corrente di munizioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28\r
+msgid "Align icon:"\r
+msgstr "Allinea icone:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40\r
+msgid "Left"\r
+msgstr "Sinistra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41\r
+msgid "Right"\r
+msgstr "Destra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4\r
+msgid "Centerprint"\r
+msgstr "Centerprint"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23\r
+msgid "Message duration:"\r
+msgstr "Durata messaggi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27\r
+msgid "Fade time:"\r
+msgstr "Durata dissolvenza:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31\r
+msgid "Flip messages order"\r
+msgstr "Inverti ordine messaggi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33\r
+msgid "Text alignment:"\r
+msgstr "Allineamento testo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50\r
+msgid "Center"\r
+msgstr "Centro"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41\r
+msgid "Font scale:"\r
+msgstr "Scala testo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4\r
+msgid "Chat Panel"\r
+msgstr "Pannello Chat"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22\r
+msgid "Chat entries:"\r
+msgstr "N° righe della chat:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25\r
+msgid "Chat size:"\r
+msgstr "Dimensioni chat:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29\r
+msgid "Chat lifetime:"\r
+msgstr "Durata chat:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33\r
+msgid "Chat beep sound"\r
+msgstr "Suono della chat"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4\r
+msgid "Engine Info Panel"\r
+msgstr "Pannello info motore"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22\r
+msgid "Engine info:"\r
+msgstr "Info motore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25\r
+msgid "Use an averaging algorithm for fps"\r
+msgstr "Usa un algoritmo mediano per gli fps"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4\r
+msgid "Health/Armor Panel"\r
+msgstr "Pannello vita/armatura"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22\r
+msgid "Enable status bar"\r
+msgstr "Abilita barra di stato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24\r
+msgid "Status bar alignment:"\r
+msgstr "Allineamento barra di stato:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42\r
+msgid "Inward"\r
+msgstr "Interno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43\r
+msgid "Outward"\r
+msgstr "Esterno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37\r
+msgid "Icon alignment:"\r
+msgstr "Allineamento icone:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45\r
+msgid "Flip health and armor positions"\r
+msgstr "Inverti posizioni di vita e armatura"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4\r
+msgid "Info Messages Panel"\r
+msgstr "Pannello delle informazioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22\r
+msgid "Info messages:"\r
+msgstr "Informazioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25\r
+msgid "Flip align"\r
+msgstr "Inverti allineamento"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4\r
+msgid "Mod Icons Panel"\r
+msgstr "Pannello delle icone delle Mod"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4\r
+msgid "Notification Panel"\r
+msgstr "Pannello di notifica"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22\r
+msgid "Notifications:"\r
+msgstr "Notifiche:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25\r
+msgid "Also print notifications to the console"\r
+msgstr "Mostra anche le notifiche sulla console"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28\r
+msgid "Flip notify order"\r
+msgstr "Inverti ordine notifiche"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31\r
+msgid "Entry lifetime:"\r
+msgstr "Durata notifica:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35\r
+msgid "Entry fadetime:"\r
+msgstr "Durata dissolvenza:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4\r
+msgid "Physics Panel"\r
+msgstr "Pannello Fisica"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21\r
+msgid "Panel disabled"\r
+msgstr "Pannello disabilitato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23\r
+msgid "Panel enabled"\r
+msgstr "Pannello abilitato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24\r
+msgid "Panel enabled even observing"\r
+msgstr "Pannello abilitato anche osservando"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25\r
+msgid "Panel enabled only in Race/CTS"\r
+msgstr "Pannello abilitato solo in Corsa/CTS"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31\r
+msgid "Status bar"\r
+msgstr "Barra di stato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48\r
+msgid "Left align"\r
+msgstr "Allinea a sinistra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52\r
+msgid "Right align"\r
+msgstr "Allinea a destra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35\r
+msgid "Inward align"\r
+msgstr "Allinea all'interno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36\r
+msgid "Outward align"\r
+msgstr "Allinea all'esterno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40\r
+msgid "Flip speed/acceleration positions"\r
+msgstr "Inverti posizioni velocità/accelerazione"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44\r
+msgid "Speed:"\r
+msgstr "Velocità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45\r
+msgid "Include vertical speed"\r
+msgstr "Includi velocità verticale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56\r
+msgid "Speed unit:"\r
+msgstr "Unità di velocità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58\r
+msgid "qu/s"\r
+msgstr "qu/s"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59\r
+msgid "m/s"\r
+msgstr "m/s"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60\r
+msgid "km/h"\r
+msgstr "km/h"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61\r
+msgid "mph"\r
+msgstr "mph"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62\r
+msgid "knots"\r
+msgstr "nodi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64\r
+msgid "Show"\r
+msgstr "Mostra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67\r
+msgid "Top speed"\r
+msgstr "Velocità massima"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73\r
+msgid "Acceleration:"\r
+msgstr "Accelerazione:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74\r
+msgid "Include vertical acceleration"\r
+msgstr "Includi accelerazione verticale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4\r
+msgid "Powerups Panel"\r
+msgstr "Pannello dei Powerup"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45\r
+msgid "Flip strength and shield positions"\r
+msgstr "Inverti posizioni di forza e scudo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4\r
+msgid "Pressed Keys Panel"\r
+msgstr "Pannello dei tasto premuti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22\r
+msgid "Panel enabled when spectating"\r
+msgstr "Pannello abilitato quando spettatore"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23\r
+msgid "Panel always enabled"\r
+msgstr "Pannello sempre abilitato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30\r
+msgid "Forced aspect:"\r
+msgstr "Forza aspetto:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4\r
+msgid "Race Timer Panel"\r
+msgstr "Pannello tempi Corsa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4\r
+msgid "Radar Panel"\r
+msgstr "Pannello Radar"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22\r
+msgid "Panel enabled in teamgames"\r
+msgstr "Pannello abilitato nei teamgames"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29\r
+msgid "Radar:"\r
+msgstr "Radar:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154\r
+#: qcsrc/menu/xonotic/util.qc:600\r
+msgid "Alpha:"\r
+msgstr "Opacità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36\r
+msgid "Rotation:"\r
+msgstr "Rotazione:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38\r
+msgid "Forward"\r
+msgstr "Avanti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39\r
+msgid "West"\r
+msgstr "Ovest"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40\r
+msgid "South"\r
+msgstr "Sud"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41\r
+msgid "East"\r
+msgstr "Est"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42\r
+msgid "North"\r
+msgstr "Nord"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46\r
+msgid "Scale:"\r
+msgstr "Scala:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50\r
+msgid "Zoom mode:"\r
+msgstr "Modalità zoom:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52\r
+msgid "Zoomed in"\r
+msgstr "Ingrandito"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53\r
+msgid "Zoomed out"\r
+msgstr "Non ingrandito"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54\r
+msgid "Always zoomed"\r
+msgstr "Sempre ingrandito"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55\r
+msgid "Never zoomed"\r
+msgstr "Mai ingrandito"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4\r
+msgid "Score Panel"\r
+msgstr "Pannello punteggio"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22\r
+msgid "Score:"\r
+msgstr "Punteggi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25\r
+msgid "Rankings:"\r
+msgstr "Classifica:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26\r
+msgid "Off"\r
+msgstr "Off"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27\r
+msgid "And me"\r
+msgstr "E me"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28\r
+msgid "Pure"\r
+msgstr "Puro"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4\r
+msgid "Timer Panel"\r
+msgstr "Pannello tempo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22\r
+msgid "Timer:"\r
+msgstr "Tempo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25\r
+msgid "Show elapsed time"\r
+msgstr "Mostra tempo trascorso"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4\r
+msgid "Vote Panel"\r
+msgstr "Pannello di voto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22\r
+msgid "Alpha after voting:"\r
+msgstr "Opacità dopo aver votato:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4\r
+msgid "Weapons Panel"\r
+msgstr "Pannello armi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24\r
+msgid "Fade out after:"\r
+msgstr "Dissolvi dopo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:36\r
+msgid "Never"\r
+msgstr "Mai"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28\r
+#, c-format\r
+msgid "%ds"\r
+msgstr "%ds"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32\r
+msgid "Fade effect:"\r
+msgstr "Effetto dissolvenza:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35\r
+msgid "EF^None"\r
+msgstr "EF^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36\r
+msgid "Slide"\r
+msgstr "Slide"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37\r
+msgid "Alpha"\r
+msgstr "Opacità"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38\r
+msgid "EF^Both"\r
+msgstr "EF^Entrambi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42\r
+msgid "Weapon icons:"\r
+msgstr "Icone armi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45\r
+msgid "Show weapon ID as:"\r
+msgstr "Mostra ID arma come:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46\r
+msgid "SHOWAS^None"\r
+msgstr "SHOWAS^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47\r
+msgid "Number"\r
+msgstr "Numero"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48\r
+msgid "Bind"\r
+msgstr "Tasto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51\r
+msgid "Show Accuracy"\r
+msgstr "Mostra precisione"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52\r
+msgid "Show Ammo"\r
+msgstr "Mostra munizioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55\r
+msgid "Ammo bar color:"\r
+msgstr "Colore barra munizioni:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61\r
+msgid "Ammo bar alpha:"\r
+msgstr "Opacità barra munizioni:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4\r
+msgid "Panel HUD Setup"\r
+msgstr "Setup del Panel HUD"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21\r
+msgid "Panel background defaults:"\r
+msgstr "Predefiniti dello sfondo del pannello :"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575\r
+msgid "Background:"\r
+msgstr "Sfondo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578\r
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611\r
+msgid "Disable"\r
+msgstr "Disabilita"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583\r
+msgid "Color:"\r
+msgstr "Colore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591\r
+msgid "Border size:"\r
+msgstr "Dimensioni bordo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89\r
+msgid "Team color:"\r
+msgstr "Colore team:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617\r
+msgid "Test team color in configure mode"\r
+msgstr "Prova colore team in modalità configurazione"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620\r
+msgid "Padding:"\r
+msgstr "Riempimento:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68\r
+msgid "HUD Dock:"\r
+msgstr "Sfondo dell'HUD:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70\r
+msgid "DOCK^Disabled"\r
+msgstr "DOCK^Disabilitato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71\r
+msgid "DOCK^Small"\r
+msgstr "DOCK^Piccolo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72\r
+msgid "DOCK^Medium"\r
+msgstr "DOCK^Medio"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73\r
+msgid "DOCK^Large"\r
+msgstr "DOCK^Largo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96\r
+msgid "Grid settings:"\r
+msgstr "Impostazioni griglia:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99\r
+msgid "Snap panels to grid"\r
+msgstr "Incolla i pannelli alla griglia"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102\r
+msgid "Grid size:"\r
+msgstr "Dimensioni griglia:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103\r
+msgid "X:"\r
+msgstr "X:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109\r
+msgid "Y:"\r
+msgstr "Y:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117\r
+msgid "Exit setup"\r
+msgstr "Esci dal setup"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:4\r
+msgid "Multiplayer"\r
+msgstr "Multiplayer"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:18\r
+msgid "Servers"\r
+msgstr "Server"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:19\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5\r
+msgid "Create"\r
+msgstr "Crea"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:20\r
+msgid "Demos"\r
+msgstr "Demo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:21\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5\r
+msgid "Player Setup"\r
+msgstr "Setup giocatore"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34\r
+msgid "Game type:"\r
+msgstr "Tipo di gioco:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46\r
+msgid "Match settings:"\r
+msgstr "Impostazioni partita:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49\r
+msgid "Time limit:"\r
+msgstr "Limite di tempo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61\r
+msgid "Use map specified default"\r
+msgstr "Usa le impostazioni di default della mappa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163\r
+msgid "Point limit:"\r
+msgstr "Limite di punteggio:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64\r
+msgid "Player slots:"\r
+msgstr "Posti per giocatori:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67\r
+msgid "Number of bots:"\r
+msgstr "Numero di bot:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71\r
+msgid "Bot skill:"\r
+msgstr "Abilità bot:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74\r
+msgid "Botlike"\r
+msgstr "\"Come un bot\""\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75\r
+msgid "Beginner"\r
+msgstr "Principiante"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76\r
+msgid "You will win"\r
+msgstr "Vincerai"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77\r
+msgid "You can win"\r
+msgstr "Puoi vincere"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78\r
+msgid "You might win"\r
+msgstr "Potresti vincere"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79\r
+msgid "Advanced"\r
+msgstr "Avanzato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80\r
+msgid "Expert"\r
+msgstr "Esperto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81\r
+msgid "Pro"\r
+msgstr "Pro"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82\r
+msgid "Assassin"\r
+msgstr "Assassino"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83\r
+msgid "Unhuman"\r
+msgstr "Inumano"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84\r
+msgid "Godlike"\r
+msgstr "\"Come un Dio\""\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88\r
+msgid "Mutators..."\r
+msgstr "Mutatori..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57\r
+msgid "Advanced settings..."\r
+msgstr "Impostazioni avanzate..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104\r
+msgid "Map list:"\r
+msgstr "Lista delle mappe:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110\r
+msgid "Select all"\r
+msgstr "Seleziona tutto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113\r
+msgid "Select none"\r
+msgstr "Deseleziona tutto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119\r
+msgid "Start Multiplayer!"\r
+msgstr "Inizia Multiplayer!"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154\r
+msgid "Capture limit:"\r
+msgstr "Limite catture:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158\r
+msgid "Lives:"\r
+msgstr "Vite:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159\r
+msgid "Laps:"\r
+msgstr "Giri:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160\r
+msgid "Goals:"\r
+msgstr "Goal:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164\r
+msgid "Frag limit:"\r
+msgstr "Limite di frag:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6\r
+msgid "Advanced server settings"\r
+msgstr "Impostazioni avanzate server"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25\r
+msgid "Game settings:"\r
+msgstr "Impostazioni gioco:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28\r
+msgid "Allow spectating"\r
+msgstr "Permetti spettatori"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31\r
+msgid "Spawn shield:"\r
+msgstr "Protezione nascita:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36\r
+msgid "Game speed:"\r
+msgstr "Velocità gioco:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40\r
+msgid "Teamplay settings:"\r
+msgstr "Impostazioni Teamplay:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43\r
+msgid "Friendly fire scale:"\r
+msgstr "Scala di fuoco amico:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47\r
+msgid "Virtual friendly fire (effect only)"\r
+msgstr "Penalità virtuale (solo effetto)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50\r
+msgid "Friendly fire penalty:"\r
+msgstr "Penalità fuoco amico:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54\r
+msgid "Virtual penalty (effect only)"\r
+msgstr "Penalità virtuale (solo effetto)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57\r
+msgid "Teams:"\r
+msgstr "Team:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66\r
+msgid "Map voting:"\r
+msgstr "Voto della mappa:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68\r
+msgid "No voting"\r
+msgstr "Nessun voto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69\r
+msgid "2 choices"\r
+msgstr "2 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70\r
+msgid "3 choices"\r
+msgstr "3 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71\r
+msgid "4 choices"\r
+msgstr "4 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72\r
+msgid "5 choices"\r
+msgstr "5 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73\r
+msgid "6 choices"\r
+msgstr "6 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74\r
+msgid "7 choices"\r
+msgstr "7 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75\r
+msgid "8 choices"\r
+msgstr "8 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76\r
+msgid "9 choices"\r
+msgstr "9 scelte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79\r
+msgid "Simple majority wins vcall"\r
+msgstr "La semplice maggioranza vince il vcall"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5\r
+msgid "Map Information"\r
+msgstr "Informazioni mappa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49\r
+msgid "Full item placement"\r
+msgstr "Posizionamento oggetti completo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49\r
+msgid "MinstaGib only"\r
+msgstr "Solo MinstaGib"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78\r
+msgid "Title:"\r
+msgstr "Titolo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84\r
+msgid "Author:"\r
+msgstr "Autore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90\r
+msgid "Features:"\r
+msgstr "Caratteristiche:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95\r
+msgid "Game types:"\r
+msgstr "Tipi di gioco:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314\r
+msgid "Close"\r
+msgstr "Chiudi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121\r
+msgid "MAP^Play"\r
+msgstr "Gioca"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7\r
+msgid "Mutators"\r
+msgstr "Mutatori"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33\r
+msgid "All Weapons Arena"\r
+msgstr "Arena con tutte le armi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35\r
+msgid "Most Weapons Arena"\r
+msgstr "Arena con la maggior parte delle armi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56\r
+#, c-format\r
+msgid "%s Arena"\r
+msgstr "Arena con %s"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167\r
+msgid "Dodging"\r
+msgstr "Schivamento"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250\r
+msgid "MinstaGib"\r
+msgstr "MinstaGib"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253\r
+msgid "NIX"\r
+msgstr "NIX"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205\r
+msgid "Rocket Flying"\r
+msgstr "Razzo volante"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264\r
+msgid "No start weapons"\r
+msgstr "Senza armi all'inizio"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189\r
+msgid "Low gravity"\r
+msgstr "Bassa gravità"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170\r
+msgid "Cloaked"\r
+msgstr "Invisibile"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84\r
+msgid "Hook"\r
+msgstr "Hook"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173\r
+msgid "Midair"\r
+msgstr "A mezz'aria"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176\r
+msgid "Vampire"\r
+msgstr "Vampiro"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208\r
+msgid "Piñata"\r
+msgstr "Piñata"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211\r
+msgid "Weapons stay"\r
+msgstr "Armi rimangono"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180\r
+msgid "Blood loss"\r
+msgstr "Perdita di sangue"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202\r
+msgid "Jet pack"\r
+msgstr "Jet pack"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98\r
+msgid "MUT^None"\r
+msgstr "MUT^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164\r
+msgid "Gameplay mutators:"\r
+msgstr "Mutatori di gioco:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196\r
+msgid "Weapon & item mutators:"\r
+msgstr "Mutatori di armi ed oggetti:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199\r
+msgid "Grappling hook"\r
+msgstr "Grappling hook"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215\r
+msgid "Weapon arenas:"\r
+msgstr "Arene di armi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218\r
+msgid "Regular (no arena)"\r
+msgstr "Regolare (no arena)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256\r
+msgid "with laser"\r
+msgstr "con laser"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247\r
+msgid "Special arenas:"\r
+msgstr "Arene speciali:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260\r
+msgid "Most weapons"\r
+msgstr "Maggior parte delle armi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4\r
+msgid "Demo"\r
+msgstr "Demo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28\r
+msgid "Record demos while playing"\r
+msgstr "Registra demo durante le partite"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28\r
+msgid "Filter:"\r
+msgstr "Filtro:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:41\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24\r
+msgid "Clear"\r
+msgstr "Pulisci"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43\r
+msgid "Timedemo"\r
+msgstr "Timedemo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46\r
+msgid "DEMO^Play"\r
+msgstr "Riproduci"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4\r
+msgid "Join"\r
+msgstr "Entra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36\r
+msgid "SRVS^Empty"\r
+msgstr "SRVS^Vuoti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40\r
+msgid "SRVS^Full"\r
+msgstr "SRVS^Pieni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44\r
+msgid "Pause"\r
+msgstr "In pausa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56\r
+msgid "Address:"\r
+msgstr "Indirizzo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:67\r
+msgid "Info..."\r
+msgstr "Info..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:72\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:317\r
+msgid "Join!"\r
+msgstr "Entra!"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5\r
+msgid "Server Information"\r
+msgstr "Informazioni del server"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:189\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199\r
+msgid "N/A"\r
+msgstr "N/D"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158\r
+#, c-format\r
+msgid "%d/%d, %d free player slots"\r
+msgstr "%d/%d, %d slot liberi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172\r
+#, c-format\r
+msgid "%d modified settings"\r
+msgstr "%d impostazioni modificate"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172\r
+msgid "Official settings"\r
+msgstr "Impostazioni ufficiali"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:197\r
+msgid "N/A (can't connect)"\r
+msgstr "N/D (impossibile connettersi)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205\r
+msgid "not supported (can't connect)"\r
+msgstr "non supportato (impossibile connettersi)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207\r
+msgid "not supported (won't encrypt)"\r
+msgstr "non supportato (non criptato)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211\r
+msgid "supported (will encrypt)"\r
+msgstr "supportato (criptato)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213\r
+msgid "supported (won't encrypt)"\r
+msgstr "supportato (non criptato)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217\r
+msgid "requested (will encrypt)"\r
+msgstr "richiesto (criptato)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219\r
+msgid "requested (won't encrypt)"\r
+msgstr "richiesto (non criptato)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:223\r
+msgid "required (can't connect)"\r
+msgstr "richiesto (impossibile connettersi)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:225\r
+msgid "required (will encrypt)"\r
+msgstr "richiesto (criptato)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:246\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:269\r
+msgid "Players:"\r
+msgstr "Giocatori:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:254\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38\r
+msgid "Type:"\r
+msgstr "Tipo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:259\r
+msgid "Map:"\r
+msgstr "Mappa:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:264\r
+msgid "Gameplay:"\r
+msgstr "Gameplay:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:274\r
+msgid "Bots:"\r
+msgstr "Bot:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:279\r
+msgid "Mod:"\r
+msgstr "Mod:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:284\r
+msgid "Version:"\r
+msgstr "Versione:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289\r
+msgid "Ping:"\r
+msgstr "Ping:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295\r
+msgid "CA:"\r
+msgstr "CA:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301\r
+msgid "Key:"\r
+msgstr "Chiave:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:307\r
+msgid "Encryption:"\r
+msgstr "Crittografia:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63\r
+msgid "Model:"\r
+msgstr "Modello:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88\r
+msgid "Field of view:"\r
+msgstr "Campo di vista:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92\r
+msgid "View bobbing:"\r
+msgstr "Ondeggiamento:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96\r
+msgid "Zoom factor:"\r
+msgstr "Fattore zoom:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100\r
+msgid "Zoom speed:"\r
+msgstr "Velocità zoom:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103\r
+msgid "Weapon settings..."\r
+msgstr "Impostazioni arma..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110\r
+msgid "Crosshair:"\r
+msgstr "Mirino:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:139\r
+msgid "Per weapon"\r
+msgstr "Per singola arma"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130\r
+msgid "Crosshair size:"\r
+msgstr "Dimensioni mirino:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134\r
+msgid "Crosshair alpha:"\r
+msgstr "Opacità mirino:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138\r
+msgid "Crosshair color:"\r
+msgstr "Colore mirino:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:140\r
+msgid "By health"\r
+msgstr "In base alla vita"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143\r
+msgid "Custom"\r
+msgstr "Personalizzato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148\r
+msgid "Enable center dot"\r
+msgstr "Abilita puntino al centro"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151\r
+msgid "Size:"\r
+msgstr "Dimensioni:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158\r
+msgid "Hit test:"\r
+msgstr "Test colpi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:159\r
+msgid "HTST^None"\r
+msgstr "HTST^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:160\r
+msgid "TrueAim"\r
+msgstr "TrueAim"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161\r
+msgid "Enemies"\r
+msgstr "Nemici"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:164\r
+msgid "Waypoints setup..."\r
+msgstr "Setup dei waypoint..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:169\r
+msgid "Enter HUD editor"\r
+msgstr "Apri HUD editor"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174\r
+msgid "Force models:"\r
+msgstr "Forza modelli:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175\r
+msgid "MDL^None"\r
+msgstr "MDL^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176\r
+msgid "MDL^Custom"\r
+msgstr "MDL^Personalizzato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177\r
+msgid "MDL^All"\r
+msgstr "MDL^Tutti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:180\r
+msgid "Disable gore effects"\r
+msgstr "Disabilita effetti sangue"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:182\r
+msgid "Gibs:"\r
+msgstr "Gib:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184\r
+msgid "GIBS^None"\r
+msgstr "GIBS^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185\r
+msgid "GIBS^Few"\r
+msgstr "GIBS^Pochi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186\r
+msgid "GIBS^Many"\r
+msgstr "GIBS^Molti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:187\r
+msgid "GIBS^Lots"\r
+msgstr "GIBS^Parecchi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:191\r
+msgid "Damage splash:"\r
+msgstr "Schizzo del danno:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:193\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:30\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:41\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109\r
+msgid "Apply immediately"\r
+msgstr "Applica immediatamente"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5\r
+msgid "Waypoints"\r
+msgstr "Waypoint"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23\r
+msgid "Show base waypoints"\r
+msgstr "Mostra i waypoint della base"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:25\r
+msgid "Waypoint scale:"\r
+msgstr "Grandezza dei waypoint:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29\r
+msgid "Waypoint alpha:"\r
+msgstr "Opacità dei waypoint"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34\r
+msgid "Show names:"\r
+msgstr "Mostra nomi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:37\r
+msgid "Teammates"\r
+msgstr "Compagni del team"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:38\r
+msgid "All players"\r
+msgstr "Tutti i giocatori"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6\r
+msgid "Weapon settings"\r
+msgstr "Impostazioni arma"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29\r
+msgid "Weapon priority list:"\r
+msgstr "Lista priorità armi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34\r
+msgid "Up"\r
+msgstr "Su"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37\r
+msgid "Down"\r
+msgstr "Giù"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41\r
+msgid "Use priority list for weapon cycling"\r
+msgstr "Usa la lista di priorità per ciclare le armi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43\r
+msgid "Auto switch weapons on pickup"\r
+msgstr "Cambia automaticamente armi dopo raccolta"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45\r
+msgid "Draw 1st person weapon model"\r
+msgstr "Mostra modello arma in 1ª persona"\r
+\r
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55\r
+msgid "Flip view horizontally"\r
+msgstr "Capovolgi la vista orizzontalmente"\r
+\r
+#: qcsrc/menu/xonotic/dialog_news.c:4\r
+msgid "News"\r
+msgstr "Notizie"\r
+\r
+#: qcsrc/menu/xonotic/dialog_news.c:18\r
+msgid "http://www.xonotic.org/team/blog/"\r
+msgstr "http://www.xonotic.org/team/blog/"\r
+\r
+#: qcsrc/menu/xonotic/dialog_quit.c:4\r
+msgid "Quit"\r
+msgstr "Esci"\r
+\r
+#: qcsrc/menu/xonotic/dialog_quit.c:17\r
+msgid "Are you sure you want to quit?"\r
+msgstr "Sei sicuro di voler uscire?"\r
+\r
+#: qcsrc/menu/xonotic/dialog_quit.c:20\r
+msgid "Yes"\r
+msgstr "Sì"\r
+\r
+#: qcsrc/menu/xonotic/dialog_quit.c:21\r
+msgid "No"\r
+msgstr "No"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:4\r
+msgid "Settings"\r
+msgstr "Impostazioni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:18\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:4\r
+msgid "Input"\r
+msgstr "Comandi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:19\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:4\r
+msgid "Video"\r
+msgstr "Video"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:20\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:4\r
+msgid "Effects"\r
+msgstr "Effetti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:21\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:4\r
+msgid "Audio"\r
+msgstr "Audio"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:22\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:4\r
+msgid "Network"\r
+msgstr "Rete"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings.c:23\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:4\r
+msgid "Misc"\r
+msgstr "Altro"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:27\r
+msgid "Master:"\r
+msgstr "Master:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:33\r
+msgid "Music:"\r
+msgstr "Musica:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41\r
+msgid "VOL^Ambient:"\r
+msgstr "VOL^Ambiente:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:48\r
+msgid "Info:"\r
+msgstr "Info:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55\r
+msgid "Items:"\r
+msgstr "Oggetti:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62\r
+msgid "Pain:"\r
+msgstr "Dolore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69\r
+msgid "Player:"\r
+msgstr "Giocatore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76\r
+msgid "Shots:"\r
+msgstr "Spari:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83\r
+msgid "Voice:"\r
+msgstr "Voce:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91\r
+msgid "Weapons:"\r
+msgstr "Armi:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156\r
+msgid "Frequency:"\r
+msgstr "Frequenza:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100\r
+msgid "8 kHz"\r
+msgstr "8 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101\r
+msgid "11.025 kHz"\r
+msgstr "11.025 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102\r
+msgid "16 kHz"\r
+msgstr "16 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103\r
+msgid "22.05 kHz"\r
+msgstr "22.05 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104\r
+msgid "24 kHz"\r
+msgstr "24 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105\r
+msgid "32 kHz"\r
+msgstr "32 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106\r
+msgid "44.1 kHz"\r
+msgstr "44.1 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107\r
+msgid "48 kHz"\r
+msgstr "48 kHz"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110\r
+msgid "Channels:"\r
+msgstr "Canali:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112\r
+msgid "Mono"\r
+msgstr "Mono"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113\r
+msgid "Stereo"\r
+msgstr "Stereo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114\r
+msgid "2.1"\r
+msgstr "2.1"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115\r
+msgid "4"\r
+msgstr "4"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116\r
+msgid "5"\r
+msgstr "5"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117\r
+msgid "5.1"\r
+msgstr "5.1"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118\r
+msgid "6.1"\r
+msgstr "6.1"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119\r
+msgid "7.1"\r
+msgstr "7.1"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123\r
+msgid "Swap Stereo"\r
+msgstr "Scambia canali stereo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127\r
+msgid "Headphone friendly mode"\r
+msgstr "Modalità cuffie"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131\r
+msgid "Spatial voices:"\r
+msgstr "Voci spaziali:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132\r
+msgid "VOCS^None"\r
+msgstr "VOCS^Nessuna"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133\r
+msgid "VOCS^Taunts"\r
+msgstr "VOCS^Insulti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134\r
+msgid "VOCS^All"\r
+msgstr "VOCS^Tutte"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137\r
+msgid "Taunt range:"\r
+msgstr "Range di insulti:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140\r
+msgid "RNG^Very short"\r
+msgstr "RNG^Molto ristretto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141\r
+msgid "RNG^Short"\r
+msgstr "RNG^Ristretto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142\r
+msgid "RNG^Normal"\r
+msgstr "RNG^Normale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143\r
+msgid "RNG^Long"\r
+msgstr "RNG^Lungo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144\r
+msgid "RNG^Full"\r
+msgstr "RNG^Pieno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151\r
+msgid "Automatic taunts"\r
+msgstr "Insulti automatici"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160\r
+msgid "Time warning:"\r
+msgstr "Avvertimento di tempo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162\r
+msgid "WRN^None"\r
+msgstr "WRN^Nessuno"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163\r
+msgid "1 minute"\r
+msgstr "1 minuto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164\r
+msgid "5 minutes"\r
+msgstr "5 minuti"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165\r
+msgid "WRN^Both"\r
+msgstr "WNR^Entrambi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168\r
+msgid "Hit indicator"\r
+msgstr "Indicatore di colpo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170\r
+msgid "Menu sounds"\r
+msgstr "Suoni del menu"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:38\r
+msgid "Quality preset:"\r
+msgstr "Preset qualità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:41\r
+msgid "PRE^OMG!"\r
+msgstr "PRE^Oh mio dio!"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:42\r
+msgid "PRE^Low"\r
+msgstr "PRE^Bassa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:43\r
+msgid "PRE^Medium"\r
+msgstr "PRE^Media"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:44\r
+msgid "PRE^Normal"\r
+msgstr "PRE^Normale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:45\r
+msgid "PRE^High"\r
+msgstr "PRE^Alta"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:46\r
+msgid "PRE^Ultra"\r
+msgstr "PRE^Ultra"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:48\r
+msgid "PRE^Ultimate"\r
+msgstr "PRE^Massima"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:52\r
+msgid "Geometry detail:"\r
+msgstr "Dettagli geometrici:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:54\r
+msgid "DET^Lowest"\r
+msgstr "DET^Molto bassi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:55\r
+msgid "DET^Low"\r
+msgstr "DET^Bassi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:56\r
+msgid "DET^Normal"\r
+msgstr "DET^Normali"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:57\r
+msgid "DET^Good"\r
+msgstr "DET^Buoni"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:58\r
+msgid "DET^Best"\r
+msgstr "DET^Ottimi"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:59\r
+msgid "DET^Insane"\r
+msgstr "DET^Bestiali"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:62\r
+msgid "Antialiasing:"\r
+msgstr "Antialiasing:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:64\r
+msgid "AA^Disabled"\r
+msgstr "AA^Disabilitato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:65\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:103\r
+msgid "2x"\r
+msgstr "2x"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:66\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:104\r
+msgid "4x"\r
+msgstr "4x"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:70\r
+msgid "Texture resolution:"\r
+msgstr "Risoluzione texture:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:73\r
+msgid "RES^Leet"\r
+msgstr "RES^Leet"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:74\r
+msgid "RES^Lowest"\r
+msgstr "RES^Molto bassa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:75\r
+msgid "RES^Low"\r
+msgstr "RES^Bassa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:76\r
+msgid "RES^Normal"\r
+msgstr "RES^Normale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:77\r
+msgid "RES^Good"\r
+msgstr "RES^Buona"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:78\r
+msgid "RES^Best"\r
+msgstr "RES^Ottima"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:91\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:94\r
+msgid "Avoid lossy texture compression"\r
+msgstr "Evita compressione texture con perdita"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:100\r
+msgid "Anisotropy:"\r
+msgstr "Anisotropia:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:102\r
+msgid "ANISO^Disabled"\r
+msgstr "ANISO^Disabilitato"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:105\r
+msgid "8x"\r
+msgstr "8x"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:106\r
+msgid "16x"\r
+msgstr "16x"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:110\r
+msgid "Particle quality:"\r
+msgstr "Qualità particelle:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:113\r
+msgid "Particle distance:"\r
+msgstr "Distanza particelle:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:117\r
+msgid "Decals"\r
+msgstr "Decal"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118\r
+msgid "Decals on models"\r
+msgstr "Decal sui modelli"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122\r
+msgid "Distance:"\r
+msgstr "Distanza:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128\r
+msgid "Time:"\r
+msgstr "Tempo:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134\r
+msgid "Use lightmaps"\r
+msgstr "Usa mappe di luce"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135\r
+msgid "Deluxe mapping"\r
+msgstr "Mappaggio Deluxe"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137\r
+msgid "Gloss"\r
+msgstr "Lucentezza"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140\r
+msgid "Offset mapping"\r
+msgstr "Mappaggio in offset"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142\r
+msgid "Relief mapping"\r
+msgstr "Mappaggio in rilievo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145\r
+msgid "Reflections:"\r
+msgstr "Riflessioni:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148\r
+msgid "Blurred"\r
+msgstr "Sfocate"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149\r
+msgid "REFL^Good"\r
+msgstr "REFL^Buone"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150\r
+msgid "Sharp"\r
+msgstr "Nitide"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155\r
+msgid "Show surfaces"\r
+msgstr "Mostra superfici"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157\r
+msgid "No dynamic lighting"\r
+msgstr "Nessuna illuminazione dinamica"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159\r
+msgid "Flash blend approximation"\r
+msgstr "Approssimazione Flash blend"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161\r
+msgid "Realtime dynamic lighting"\r
+msgstr "Illuminazione dinamica in tempo reale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166\r
+msgid "Shadows"\r
+msgstr "Ombre"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165\r
+msgid "Realtime world lighting"\r
+msgstr "Illuminazione globale in tempo reale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170\r
+msgid "Use normal maps"\r
+msgstr "Usa mappe normali"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172\r
+msgid "Soft shadows"\r
+msgstr "Ombre morbide"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175\r
+msgid "Coronas"\r
+msgstr "Corone"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176\r
+msgid "Use Occlusion Queries"\r
+msgstr "Usa le Occlusion Queries"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178\r
+msgid "Bloom"\r
+msgstr "Bloom"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180\r
+msgid "High Dynamic Range (HDR)"\r
+msgstr "High Dynamic Range (HDR)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184\r
+msgid "Motion blur:"\r
+msgstr "Sfocatura movimento:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189\r
+msgid "Damage & water blur"\r
+msgstr "Sfocatura da danno & acqua:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:190\r
+msgid "Powerup sharpen"\r
+msgstr "Powerup nitido"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:26\r
+msgid "Key bindings:"\r
+msgstr "Associazione tasti (bind):"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:31\r
+msgid "Change key..."\r
+msgstr "Cambia tasto..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:35\r
+msgid "Edit..."\r
+msgstr "Modifica..."\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:46\r
+msgid "Sensitivity:"\r
+msgstr "Sensibilità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51\r
+msgid "UI mouse speed:"\r
+msgstr "Velocità UI mouse:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55\r
+msgid "Mouse filter"\r
+msgstr "Filtro mouse"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57\r
+msgid "Invert mouse"\r
+msgstr "Inverti mouse"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62\r
+msgid "Use joystick input"\r
+msgstr "Usa joystick"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67\r
+msgid "Turn off OS mouse acceleration"\r
+msgstr "Disattiva l'accelerazione mouse dell'OS"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69\r
+msgid "\"enter console\" also closes"\r
+msgstr "\"apri console\" chiude anche"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5\r
+msgid "User defined key bind"\r
+msgstr "Tasti \"bind\" definiti dall'utente"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42\r
+msgid "Command when pressed:"\r
+msgstr "Comando quando premuto:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45\r
+msgid "Command when released:"\r
+msgstr "Comando quando rilasciato:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48\r
+msgid "Save"\r
+msgstr "Salva"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51\r
+msgid "Cancel"\r
+msgstr "Annulla"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:26\r
+msgid "Menu skins:"\r
+msgstr "Temi del menu:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:47\r
+msgid "Show current time"\r
+msgstr "Mostra orario corrente"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:49\r
+msgid "Show current date"\r
+msgstr "Mostra data corrente"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:51\r
+msgid "Show frames per second"\r
+msgstr "Mostra fotogrammi al secondo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:53\r
+msgid "Minimize input latency"\r
+msgstr "Minimizza latenza in entrata"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5\r
+msgid "Advanced settings"\r
+msgstr "Impostazioni avanzate"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23\r
+msgid "Cvar filter:"\r
+msgstr "Filtro delle cvar:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34\r
+msgid "Setting:"\r
+msgstr "Impostazioni:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42\r
+msgid "Value:"\r
+msgstr "Valore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:56\r
+msgid "Description:"\r
+msgstr "Descrizione:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:26\r
+msgid "Client-side movement prediction"\r
+msgstr "Predizione del movimento lato client"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:30\r
+msgid "Show netgraph"\r
+msgstr "Mostra grafico di rete"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:33\r
+msgid "Network speed:"\r
+msgstr "Velocità rete:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:35\r
+msgid "56k"\r
+msgstr "56k"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:36\r
+msgid "ISDN"\r
+msgstr "ISDN"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:37\r
+msgid "Slow ADSL"\r
+msgstr "ADSL lenta"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:38\r
+msgid "Fast ADSL"\r
+msgstr "ADSL veloce"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:39\r
+msgid "Broadband"\r
+msgstr "Banda larga"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:42\r
+msgid "Input packets/s:"\r
+msgstr "Pacchetti/s in entrata:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:46\r
+msgid "HTTP downloads:"\r
+msgstr "Download via HTTP:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:49\r
+msgid "Downloads:"\r
+msgstr "N° di download:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:53\r
+msgid "Speed (kB/s):"\r
+msgstr "Velocità (kB/s):"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_network.c:57\r
+msgid "Client UDP port:"\r
+msgstr "Porta UDP del client:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:26\r
+msgid "Resolution:"\r
+msgstr "Risoluzione:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:29\r
+msgid "Font/UI size:"\r
+msgstr "Dimensioni caratteri:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:31\r
+msgid "SZ^Unreadable"\r
+msgstr "SZ^Illeggibile"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:32\r
+msgid "SZ^Tiny"\r
+msgstr "SZ^Minuscolo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:33\r
+msgid "SZ^Little"\r
+msgstr "SZ^Molto piccolo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:34\r
+msgid "SZ^Small"\r
+msgstr "SZ^Piccolo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:35\r
+msgid "SZ^Medium"\r
+msgstr "SZ^Medio"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:36\r
+msgid "SZ^Large"\r
+msgstr "SZ^Largo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:37\r
+msgid "SZ^Huge"\r
+msgstr "SZ^Enorme"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:38\r
+msgid "SZ^Gigantic"\r
+msgstr "SZ^Gigante"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:39\r
+msgid "SZ^Colossal"\r
+msgstr "SZ^Colossale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:42\r
+msgid "Color depth:"\r
+msgstr "Profondità colore:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:45\r
+msgid "Full screen"\r
+msgstr "Schermo intero"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:46\r
+msgid "Vertical Synchronization"\r
+msgstr "Sincronizzazione verticale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:49\r
+msgid "Use OpenGL 2.0 shaders (GLSL)"\r
+msgstr "Usa gli shader OpenGL 2.0 (GLSL)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:52\r
+msgid "Use GLSL to handle color control"\r
+msgstr "Usa GLSL per gestire il controllo del colore"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:56\r
+msgid "Vertex Buffer Objects (VBOs)"\r
+msgstr "Vertex Buffer Objects (VBOs)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:59\r
+msgid "VBO^Off"\r
+msgstr "VBO^Off"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:60\r
+msgid "Vertices, some Tris (compatible)"\r
+msgstr "Vertici, alcuni Triangoli (compatibile)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:63\r
+msgid "Vertices"\r
+msgstr "Vertici"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:64\r
+msgid "Vertices and Triangles"\r
+msgstr "Vertici e Triangoli"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:67\r
+msgid "Depth first:"\r
+msgstr "Profondità prima:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:69\r
+msgid "DF^Disabled"\r
+msgstr "DF^Disabilitata"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:70\r
+msgid "DF^World"\r
+msgstr "DF^Globale"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:71\r
+msgid "DF^All"\r
+msgstr "DF^Tutto"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:75\r
+msgid "Disable multithreaded OpenGL"\r
+msgstr "Disabilita il multithreading OpenGL"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:77\r
+msgid "Wait for GPU to finish each frame"\r
+msgstr "Attendi che la GPU finisca di elaborare ogni frame"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:80\r
+msgid "Brightness:"\r
+msgstr "Luminosità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:83\r
+msgid "Contrast:"\r
+msgstr "Contrasto:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:86\r
+msgid "Gamma:"\r
+msgstr "Gamma:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91\r
+msgid "Contrast boost:"\r
+msgstr "Aumenta contrasto:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96\r
+msgid "Saturation:"\r
+msgstr "Saturazione:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102\r
+msgid "LIT^Ambient:"\r
+msgstr "LIT^Ambiente:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105\r
+msgid "Intensity:"\r
+msgstr "Intensità:"\r
+\r
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:4\r
+msgid "Singleplayer"\r
+msgstr "Giocatore singolo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:59\r
+msgid "Instant action! (random map with bots)"\r
+msgstr "Inizia ora! (mappa casuale con bot)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:80\r
+msgid "Start Singleplayer!"\r
+msgstr "Inizia modalità Giocatore Singolo!"\r
+\r
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4\r
+msgid "Winner"\r
+msgstr "Vincitore"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:5\r
+msgid "Team Selection"\r
+msgstr "Selezione team"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:41\r
+msgid "join 'best' team (auto-select)"\r
+msgstr "entra nel 'miglior' team (auto-selezione)"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:45\r
+msgid "red"\r
+msgstr "rosso"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46\r
+msgid "blue"\r
+msgstr "blu"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47\r
+msgid "yellow"\r
+msgstr "giallo"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48\r
+msgid "pink"\r
+msgstr "rosa"\r
+\r
+#: qcsrc/menu/xonotic/dialog_teamselect.c:51\r
+msgid "spectate"\r
+msgstr "spettatore"\r
+\r
+#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38\r
+msgid "Do not press this button again!"\r
+msgstr "Non premere questo tasto di nuovo!"\r
+\r
+#: qcsrc/menu/xonotic/maplist.c:278\r
+msgid ""\r
+"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"\r
+msgstr ""\r
+"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"\r
+\r
+#: qcsrc/menu/xonotic/maplist.c:286\r
+#, c-format\r
+msgid "%s's Xonotic Server"\r
+msgstr "Server Xonotic di %s"\r
+\r
+#: qcsrc/menu/xonotic/maplist.c:291\r
+msgid ""\r
+"Huh? Can't play this (invalid game type). Refiltering so this won't happen "\r
+"again.\n"\r
+msgstr ""\r
+"Huh? Can't play this (invalid game type). Refiltering so this won't happen "\r
+"again.\n"\r
+\r
+#: qcsrc/menu/xonotic/playermodel.c:174\r
+msgid "<no model found>"\r
+msgstr "<nessun modello trovato>"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:185\r
+msgid "Remove"\r
+msgstr "Rimuovi"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:187\r
+msgid "Bookmark"\r
+msgstr "Aggiungi tra i preferiti"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:523\r
+msgid "Ping"\r
+msgstr "Ping"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:524\r
+msgid "Host name"\r
+msgstr "Nome dell'host"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:525\r
+msgid "Map"\r
+msgstr "Mappa"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:526\r
+msgid "Type"\r
+msgstr "Tipo"\r
+\r
+#: qcsrc/menu/xonotic/serverlist.c:527\r
+msgid "Players"\r
+msgstr "Giocatori"\r
+\r
+#: qcsrc/menu/xonotic/skinlist.c:105\r
+msgid "<TITLE>"\r
+msgstr "<TITOLO>"\r
+\r
+#: qcsrc/menu/xonotic/skinlist.c:106\r
+msgid "<AUTHOR>"\r
+msgstr "<AUTORE>"\r
+\r
+#: qcsrc/menu/xonotic/skinlist.c:163\r
+#, c-format\r
+msgid "%s: %s"\r
+msgstr "%s: %s"\r
+\r
+#: qcsrc/menu/xonotic/slider_decibels.c:50\r
+msgid "VOL^OFF"\r
+msgstr "VOL^OFF"\r
+\r
+#: qcsrc/menu/xonotic/slider_decibels.c:52\r
+msgid "VOL^MAX"\r
+msgstr "VOL^MAX"\r
+\r
+#: qcsrc/menu/xonotic/slider_decibels.c:53\r
+#, c-format\r
+msgid "%s dB"\r
+msgstr "%s dB"\r
+\r
+#: qcsrc/menu/xonotic/slider_resolution.c:65\r
+#, c-format\r
+msgid "%dx%d"\r
+msgstr "%dx%d"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:270\r
+#, c-format\r
+msgid "Received HTTP request data for an invalid id %d.\n"\r
+msgstr "Ricevuta richiesta HTTP per un invalido id %d.\n"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:285\r
+#, c-format\r
+msgid "error receiving update notification: status is %d\n"\r
+msgstr ""\r
+"errore durante la notifica d'aggiornamento: lo stato è impostato su %d\n"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:290\r
+msgid "error: received HTML instead of an update notification\n"\r
+msgstr "errore: ricevuto HTML invece di una notifica d'aggiornamento\n"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:295\r
+msgid "error: received carriage returns from update notification server\n"\r
+msgstr "error: received carriage returns from update notification server\n"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:316\r
+#, c-format\r
+msgid ""\r
+"Update can be downloaded at:\n"\r
+"%s\n"\r
+msgstr ""\r
+"L'aggiornamento può essere scaricato da:\n"\r
+"%s\n"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:337\r
+msgid "Autogenerating mapinfo for newly added maps..."\r
+msgstr "Autogenerando le mapinfo per le nuove mappe..."\r
+\r
+#: qcsrc/menu/xonotic/util.qc:367\r
+#, c-format\r
+msgid "^1%s TEST BUILD"\r
+msgstr "^1%s TEST BUILD"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:432\r
+#, c-format\r
+msgid "Update to %s now!"\r
+msgstr "Aggiorna a %s ora!"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:501\r
+msgid ""\r
+"^1ERROR: Texture compression is required but not supported.\n"\r
+"^1Expect visual problems.\n"\r
+msgstr ""\r
+"^1ERRORE: La compressione texture è richiesta ma non supportata.\n"\r
+"^1Previsti problemi visuali.\n"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:523\r
+msgid "Arena"\r
+msgstr "Arena"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:524\r
+msgid "Assault"\r
+msgstr "Assalto"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:525\r
+msgid "Capture The Flag"\r
+msgstr "Capture The Flag"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:526\r
+msgid "Clan Arena"\r
+msgstr "Clan Arena"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:527\r
+msgid "Deathmatch"\r
+msgstr "Deathmatch"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:528\r
+msgid "Domination"\r
+msgstr "Dominazione"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:529\r
+msgid "Freeze Tag"\r
+msgstr "Freeze Tag"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:530\r
+msgid "Keepaway"\r
+msgstr "Keepaway"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:531\r
+msgid "Key Hunt"\r
+msgstr "Key Hunt"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:532\r
+msgid "Last Man Standing"\r
+msgstr "Last Man Standing"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:533\r
+msgid "Nexball"\r
+msgstr "Nexball"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:534\r
+msgid "Onslaught"\r
+msgstr "Onslaught"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:535\r
+msgid "Race"\r
+msgstr "Corsa"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:536\r
+msgid "Race CTS"\r
+msgstr "Corsa CTS"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:537\r
+msgid "Runematch"\r
+msgstr "Runematch"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:538\r
+msgid "Team Deathmatch"\r
+msgstr "Team Deathmatch"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:557\r
+#, c-format\r
+msgid "@!#%'n Tuba Throwing"\r
+msgstr "@!#%'n Tuba Throwing"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593\r
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610\r
+#: qcsrc/menu/xonotic/util.qc:622\r
+msgid "Default"\r
+msgstr "Predefinito"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:588\r
+msgid "Use default"\r
+msgstr "Usa predefinito"\r
+\r
+#: qcsrc/menu/xonotic/util.qc:608\r
+msgid "Team Color:"\r
+msgstr "Colore Team:"\r
+\r
+#: qcsrc/menu/xonotic/util.qh:47\r
+msgid "Enable panel"\r
+msgstr "Abilita pannello"\r
+\r
+#: qcsrc/server/w_crylink.qc:2\r
+msgid "Crylink"\r
+msgstr "Crylink"\r
+\r
+#: qcsrc/server/w_crylink.qc:664\r
+#, c-format\r
+msgid "%s succeeded at self-destructing themself with the Crylink"\r
+msgstr "%s è riuscito ad autodistruggersi col Crylink"\r
+\r
+#: qcsrc/server/w_crylink.qc:669\r
+#, c-format\r
+msgid "%s could not hide from %s's Crylink"\r
+msgstr "%s non s'è potuto nascondere dal Crylink di %s"\r
+\r
+#: qcsrc/server/w_crylink.qc:671\r
+#, c-format\r
+msgid "%s was too close to %s's Crylink"\r
+msgstr "%s era troppo vicino al Crylink di %s"\r
+\r
+#: qcsrc/server/w_crylink.qc:673\r
+#, c-format\r
+msgid "%s took a close look at %s's Crylink"\r
+msgstr "%s ha visto da vicino il Crylink di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:2\r
+msgid "Electro"\r
+msgstr "Electro"\r
+\r
+#: qcsrc/server/w_electro.qc:574\r
+#, c-format\r
+msgid "%s could not remember where they put plasma"\r
+msgstr "%s non s'è ricordato dove aveva messo il plasma"\r
+\r
+#: qcsrc/server/w_electro.qc:576\r
+#, c-format\r
+msgid "%s played with plasma"\r
+msgstr "%s ha giocato col plasma"\r
+\r
+#: qcsrc/server/w_electro.qc:583\r
+#, c-format\r
+msgid "%s just noticed %s's blue ball"\r
+msgstr "%s ha appena notato la palla blu di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:585\r
+#, c-format\r
+msgid "%s got in touch with %s's blue ball"\r
+msgstr "%s è entrato in contatto con la palla blu di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:590\r
+#, c-format\r
+msgid "%s felt the electrifying air of %s's combo"\r
+msgstr "%s ha sentito l'aria elettrificata della combo di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:592\r
+#, c-format\r
+msgid "%s got too close to %s's blue beam"\r
+msgstr "%s s'è avvicinato troppo al raggio blu di %s"\r
+\r
+#: qcsrc/server/w_electro.qc:594\r
+#, c-format\r
+msgid "%s was blasted by %s's blue beam"\r
+msgstr "%s è stato fatto saltare in aria dal raggio blu di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:2\r
+msgid "Fireball"\r
+msgstr "Fireball"\r
+\r
+#: qcsrc/server/w_fireball.qc:417\r
+#, c-format\r
+msgid "%s forgot about some firemine"\r
+msgstr "%s s'è dimenticato di alcune mine infuocate"\r
+\r
+#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240\r
+#, c-format\r
+msgid "%s should have used a smaller gun"\r
+msgstr "%s avrebbe dovuto usare un'arma più piccola"\r
+\r
+#: qcsrc/server/w_fireball.qc:426\r
+#, c-format\r
+msgid "%s tried to catch %s's firemine"\r
+msgstr "%s ha provato a catturare la mina infuocata di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:428\r
+#, c-format\r
+msgid "%s fatefully ignored %s's firemine"\r
+msgstr "%s ha fatalmente ignorato la mina infuocata di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:435\r
+#, c-format\r
+msgid "%s could not hide from %s's fireball"\r
+msgstr "%s non è riuscito a nascondersi dalla fireball di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:437\r
+#, c-format\r
+msgid "%s saw the pretty lights of %s's fireball"\r
+msgstr "%s ha visto le belle luci della fireball di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:440\r
+#, c-format\r
+msgid "%s got too close to %s's fireball"\r
+msgstr "%s s'è avvicinato troppo alla fireball di %s"\r
+\r
+#: qcsrc/server/w_fireball.qc:442\r
+#, c-format\r
+msgid "%s tasted %s's fireball"\r
+msgstr "%s ha assaggiato la fireball di %s"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:2\r
+msgid "Mortar"\r
+msgstr "Mortar"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:383\r
+#, c-format\r
+msgid "%s tried out his own grenade"\r
+msgstr "%s ha provato da solo la propria granata"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:385\r
+#, c-format\r
+msgid "%s detonated"\r
+msgstr "%s è detonato"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:391\r
+#, c-format\r
+msgid "%s didn't see %s's grenade"\r
+msgstr "%s non ha visto la granata di %s"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:393\r
+#, c-format\r
+msgid "%s almost dodged %s's grenade"\r
+msgstr "%s ha quasi schivato la granata di %s"\r
+\r
+#: qcsrc/server/w_grenadelauncher.qc:395\r
+#, c-format\r
+msgid "%s ate %s's grenade"\r
+msgstr "%s ha mangiato la granata di %s"\r
+\r
+#: qcsrc/server/w_hagar.qc:2\r
+msgid "Hagar"\r
+msgstr "Hagar"\r
+\r
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655\r
+#, c-format\r
+msgid "%s played with tiny rockets"\r
+msgstr "%s ha giocato con piccoli razzi"\r
+\r
+#: qcsrc/server/w_hagar.qc:386\r
+#, c-format\r
+msgid "%s hoped %s's missiles wouldn't bounce"\r
+msgstr "%s ha sperato che i missili di %s non rimbalzassero"\r
+\r
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661\r
+#, c-format\r
+msgid "%s was pummeled by %s"\r
+msgstr "%s è stato preso a pugni da %s"\r
+\r
+#: qcsrc/server/w_hlac.qc:2\r
+msgid "Heavy Laser Assault Cannon"\r
+msgstr "Heavy Laser Assault Cannon"\r
+\r
+#: qcsrc/server/w_hlac.qc:242\r
+#, c-format\r
+msgid "%s was cut down by %s"\r
+msgstr "%s è stato abbattuto da %s"\r
+\r
+#: qcsrc/server/w_hook.qc:2\r
+msgid "Grappling Hook"\r
+msgstr "Grappling Hook"\r
+\r
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296\r
+#, c-format\r
+msgid "%s did the impossible"\r
+msgstr "%s ha fatto l'impossibile"\r
+\r
+#: qcsrc/server/w_hook.qc:268\r
+#, c-format\r
+msgid "%s has run into %s's gravity bomb"\r
+msgstr "%s si è imbattuto nella bomba di gravità di %s"\r
+\r
+#: qcsrc/server/w_laser.qc:2\r
+msgid "Laser"\r
+msgstr "Laser"\r
+\r
+#: qcsrc/server/w_laser.qc:311\r
+#, c-format\r
+msgid "%s lasered themself to hell"\r
+msgstr "%s si è \"laserato\" all'inferno"\r
+\r
+#: qcsrc/server/w_laser.qc:315\r
+#, c-format\r
+msgid "%s was cut in half by %s's gauntlet"\r
+msgstr "%s è stato tagliato a metà dal guanto di %s"\r
+\r
+#: qcsrc/server/w_laser.qc:317\r
+#, c-format\r
+msgid "%s was lasered to death by %s"\r
+msgstr "%s è stato \"laserato\" a morte da %s"\r
+\r
+#: qcsrc/server/w_minelayer.qc:2\r
+msgid "Mine Layer"\r
+msgstr "Mine Layer"\r
+\r
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501\r
+#, c-format\r
+msgid "%s exploded"\r
+msgstr "%s è esploso"\r
+\r
+#: qcsrc/server/w_minelayer.qc:527\r
+#, c-format\r
+msgid "%s got too close to %s's mine"\r
+msgstr "%s s'è avvicinato troppo alla mina di %s"\r
+\r
+#: qcsrc/server/w_minelayer.qc:529\r
+#, c-format\r
+msgid "%s almost dodged %s's mine"\r
+msgstr "%s ha quasi schivato la mina di %s"\r
+\r
+#: qcsrc/server/w_minelayer.qc:531\r
+#, c-format\r
+msgid "%s stepped on %s's mine"\r
+msgstr "%s è passato sopra la mina di %s"\r
+\r
+#: qcsrc/server/w_minstanex.qc:2\r
+msgid "MinstaNex"\r
+msgstr "MinstaNex"\r
+\r
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253\r
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317\r
+#, c-format\r
+msgid "%s is now thinking with portals"\r
+msgstr "%s sta ora pensando con i portali"\r
+\r
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255\r
+#, c-format\r
+msgid "%s has been vaporized by %s"\r
+msgstr "%s è stato vaporizzato da %s"\r
+\r
+#: qcsrc/server/w_nex.qc:2\r
+msgid "Nex"\r
+msgstr "Nex"\r
+\r
+#: qcsrc/server/w_porto.qc:2\r
+msgid "Port-O-Launch"\r
+msgstr "Port-O-Launch"\r
+\r
+#: qcsrc/server/w_porto.qc:298\r
+#, c-format\r
+msgid "%s felt %s doing the impossible to him"\r
+msgstr "%s ha sentito %s fargli l'impossibile"\r
+\r
+#: qcsrc/server/w_rifle.qc:2\r
+msgid "Rifle"\r
+msgstr "Fucile"\r
+\r
+#: qcsrc/server/w_rifle.qc:233\r
+#, c-format\r
+msgid "%s shot themself automatically"\r
+msgstr "%s si è sparato da solo automaticamente"\r
+\r
+#: qcsrc/server/w_rifle.qc:235\r
+#, c-format\r
+msgid "%s sniped themself somehow"\r
+msgstr "%s si è fucilato da solo in qualche modo"\r
+\r
+#: qcsrc/server/w_rifle.qc:242\r
+#, c-format\r
+msgid "%s failed to hide from %s's bullet hail"\r
+msgstr "%s non è riuscito a nascondersi dalla raffica di proiettili di %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:244\r
+#, c-format\r
+msgid "%s died in %s's bullet hail"\r
+msgstr "%s è morto nella raffica di proiettili di %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:251\r
+#, c-format\r
+msgid "%s failed to hide from %s's rifle"\r
+msgstr "%s non è riuscito a nascondersi dal fucile di %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:256\r
+#, c-format\r
+msgid "%s got hit in the head by %s"\r
+msgstr "%s ha preso un colpo in testa da %s"\r
+\r
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321\r
+#, c-format\r
+msgid "%s was sniped by %s"\r
+msgstr "%s è stato fucilato da %s"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:2\r
+msgid "Rocket Launcher"\r
+msgstr "Rocket Launcher"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:505\r
+#, c-format\r
+msgid "%s got too close to %s's rocket"\r
+msgstr "%s s'è avvicinato troppo al razzo di %s"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:507\r
+#, c-format\r
+msgid "%s almost dodged %s's rocket"\r
+msgstr "%s ha quasi schivato il razzo di %s"\r
+\r
+#: qcsrc/server/w_rocketlauncher.qc:509\r
+#, c-format\r
+msgid "%s ate %s's rocket"\r
+msgstr "%s ha mangiato il razzo di %s"\r
+\r
+#: qcsrc/server/w_seeker.qc:2\r
+msgid "T.A.G. Seeker"\r
+msgstr "T.A.G. Seeker"\r
+\r
+#: qcsrc/server/w_seeker.qc:659\r
+#, c-format\r
+msgid "%s was tagged by %s"\r
+msgstr "%s è stato contrassegnato da %s"\r
+\r
+#: qcsrc/server/w_shotgun.qc:2\r
+msgid "Shotgun"\r
+msgstr "Shotgun"\r
+\r
+#: qcsrc/server/w_shotgun.qc:213\r
+#, c-format\r
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"\r
+msgstr "%2$s ^7ha schiaffeggiato %1$s ^7un pò con un grosso ^2shotgun"\r
+\r
+#: qcsrc/server/w_shotgun.qc:215\r
+#, c-format\r
+msgid "%s was gunned by %s"\r
+msgstr "%s è stato sparato da %s"\r
+\r
+#: qcsrc/server/w_tuba.qc:2\r
+#, c-format\r
+msgid "@!#%'n Tuba"\r
+msgstr "@!#%'n Tuba"\r
+\r
+#: qcsrc/server/w_tuba.qc:252\r
+#, c-format\r
+msgid "%s hurt his own ears with the @!#%%'n Tuba"\r
+msgstr "%s s'è fatto male alle orecchie con la @!#%%'n Tuba"\r
+\r
+#: qcsrc/server/w_tuba.qc:256\r
+#, c-format\r
+msgid "%s died of %s's great playing on the @!#%%'n Tuba"\r
+msgstr "%s è morto nella gran esibizione di %s con la @!#%%'n Tuba"\r
+\r
+#: qcsrc/server/w_uzi.qc:2\r
+msgid "Machine Gun"\r
+msgstr "Machine Gun"\r
+\r
+#: qcsrc/server/w_uzi.qc:323\r
+#, c-format\r
+msgid "%s was riddled full of holes by %s"\r
+msgstr "%s è stato riempito di buchi da %s"\r
+\r
+#~ msgid "Waypoint settings:"\r
+#~ msgstr "Impostazioni dei waypoint"\r
+\r
+#~ msgid ""\r
+#~ "Please answer a few initial questions to enhance the game experience."\r
+#~ msgstr ""\r
+#~ "Per favore rispondi a poche domande iniziali per migliorare l'esperienza "\r
+#~ "di gioco."\r
+\r
+#~ msgid "%d/%d"\r
+#~ msgstr "%d/%d"\r
+\r
+#~ msgid "Sniper Rifle"\r
+#~ msgstr "Sniper Rifle"\r
+\r
+#~ msgid "Accelerometer scale:"\r
+#~ msgstr "Scala accelerometro:"\r
+\r
+#~ msgid "Show accelerometer"\r
+#~ msgstr "Mostra accelerometro"\r
+\r
+#~ msgid "qu/s (hidden)"\r
+#~ msgstr "qu/s (nascosto)"\r
+\r
+#~ msgid "Speedometer"\r
+#~ msgstr "Tachimetro"\r
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-06-27 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Laat alleen huidig ammunitietype zien"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
msgid "Entry fadetime:"
msgstr "Post vervaagtijd:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+#, fuzzy
+msgid "Physics Panel"
+msgstr "Chat Paneel"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Paneel uitgeschakeld"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#, fuzzy
+msgid "Panel enabled if not observing"
+msgstr "Paneel activeren tijdens observeren"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr "Paneel altijd actief"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#, fuzzy
+msgid "Status bar"
+msgstr "Activeer status balk"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Links"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Rechts"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#, fuzzy
+msgid "Inward align"
+msgstr "Binnenkant"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#, fuzzy
+msgid "Outward align"
+msgstr "Buitenkant"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#, fuzzy
+msgid "Flip speed/acceleration positions"
+msgstr "Keer health en armor posities om"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#, fuzzy
+msgid "Speed:"
+msgstr "Snelheid (kB/s):"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "knopen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#, fuzzy
+msgid "Show"
+msgstr "Ammunitie tonen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#, fuzzy
+msgid "Top speed"
+msgstr "Zoom snelheid:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#, fuzzy
+msgid "Acceleration:"
+msgstr "Reflecties"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Powerups paneel"
msgid "Pressed Keys Panel"
msgstr "Ingedrukte Toetsen Paneel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Paneel uitgeschakeld"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Paneel activeren tijdens observeren"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr "Paneel altijd actief"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
msgid "Forced aspect:"
msgstr "Aspect ratio:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Alpha:"
msgid "Score Panel"
msgstr "Score Paneel"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#, fuzzy
+msgid "Off"
+msgstr "VBO^Uit"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Tijd Paneel"
msgid "Fade effect:"
msgstr "Vervagingseffect:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "EF^Geen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Schuiven"
msgid "Alpha"
msgstr "Alpha"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#, fuzzy
+msgid "EF^Both"
+msgstr "WRN^Beiden"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Wapeniconen:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Toon wapen-ID als:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "SHOWAS^Geen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Nummer"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Binden"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Nauwkeurigheid tonen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Ammunitie tonen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Ammunitie balk kleur:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Ammunitie alpha:"
msgid "Panel background defaults:"
msgstr "Paneel achtergrond standaards:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Achtergrond"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Uitschakelen"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Kleur:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Grootte rand:"
msgid "Team color:"
msgstr "Teamkleur:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Test teamkleur in aanpassingsmodus"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Opvulling:"
msgstr "Mutaties..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Geavanceerde instellingen..."
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Meteen toepassen"
msgid "Draw 1st person weapon model"
msgstr "Wapen positie"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Links"
-
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Rechts"
+msgid "Center"
+msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Spiegel zicht horizontaal"
msgid "Motion blur:"
msgstr "Bewegingsonscherpte:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+#, fuzzy
+msgid "Damage & water blur"
msgstr "Schadeonscherpte"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+#, fuzzy
+msgid "Powerup sharpen"
+msgstr "Powerups paneel"
+
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgstr "Toetsen:"
msgid "Sensitivity:"
msgstr "Gevoeligheid:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "UI muis snelheid:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Muis filter"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Invert muis"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Gebruik joystick input"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Gebruik joystick input"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"console activeren\" sluit deze ook weer"
msgstr "Laat frames per seconde zien"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Snelheidsmeter"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (verborgen)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "knopen"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Laat versnellingsmeter zien"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Versnellingsmeter schaal"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Minimaliseer input latentie"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Verhoog contrast:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Verzadiging:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "LIT^Omgevingslicht"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Intensiteit:"
msgid "Update to %s now!"
msgstr "Update nu naar %s!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1ERROR: Textuurcompressie is nodig maar niet ondersteund.\n"
"^1Verwacht grafische problemen.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Assault"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Capture The Flag"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Domination"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Race"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Runematch"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Smijten"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Achtergrond"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Standaard"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Gebruik standaard"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Team Kleur:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Activeer paneel"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:577
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:579
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:586
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:588
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:593
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:595
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:597
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:379
#, c-format
msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:381
#, c-format
msgid "%s detonated"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:387
#, c-format
msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:389
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s ate %s's grenade"
msgstr ""
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr ""
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr ""
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr ""
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr ""
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr ""
msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
-msgstr "Rocket Launcher"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
-msgstr "T.A.G. Seeker"
-
-#: qcsrc/server/w_seeker.qc:659
+#: qcsrc/server/w_rifle.qc:244
#, c-format
-msgid "%s was tagged by %s"
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
-msgstr "Shotgun"
-
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s was sniped by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
+msgstr "Rocket Launcher"
+
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s died in %s's bullet hail"
+msgid "%s ate %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_seeker.qc:2
+msgid "T.A.G. Seeker"
+msgstr "T.A.G. Seeker"
+
+#: qcsrc/server/w_seeker.qc:659
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_shotgun.qc:2
+msgid "Shotgun"
+msgstr "Shotgun"
+
+#: qcsrc/server/w_shotgun.qc:213
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_shotgun.qc:215
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s was gunned by %s"
msgstr ""
#: qcsrc/server/w_tuba.qc:2
msgid "%s was riddled full of holes by %s"
msgstr ""
+#~ msgid "Speedometer"
+#~ msgstr "Snelheidsmeter"
+
+#~ msgid "qu/s (hidden)"
+#~ msgstr "qu/s (verborgen)"
+
+#~ msgid "Show accelerometer"
+#~ msgstr "Laat versnellingsmeter zien"
+
+#~ msgid "Accelerometer scale:"
+#~ msgstr "Versnellingsmeter schaal"
+
+#~ msgid "Sniper Rifle"
+#~ msgstr "Sniper Rifle"
+
#~ msgid "Waypoint settings:"
#~ msgstr "Wegwijzer instellingen"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: qcsrc/menu/menu.qc:29
-#, c-format
-msgid "^4MQC Build information: ^1%s\n"
-msgstr ""
-
-#: qcsrc/menu/item/slider.c:64
-#, c-format
-msgid "%d (%s)"
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4
+msgid "Engine Info Panel"
msgstr ""
-#: qcsrc/menu/item/label.c:63
-#, c-format
-msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+msgid "Engine info:"
msgstr ""
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
-msgid "custom"
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+msgid "Use an averaging algorithm for fps"
msgstr ""
-#: qcsrc/menu/item/gecko.c:49
-msgid "Browser not initialized!"
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:4
+msgid "Singleplayer"
msgstr ""
-#: qcsrc/menu/item/listbox.c:300
-#, c-format
-msgid "Item %d"
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:59
+msgid "Instant action! (random map with bots)"
msgstr ""
-#: qcsrc/menu/gamecommand.qc:47
-#, c-format
-msgid "error: status is %d\n"
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:66
+#: qcsrc/menu/xonotic/campaign.c:284
+msgid "???"
msgstr ""
-#: qcsrc/menu/gamecommand.qc:65
-msgid "Usage: menu_cmd command..., where possible commands are:\n"
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:80
+msgid "Start Singleplayer!"
msgstr ""
-#: qcsrc/menu/gamecommand.qc:66
-msgid " sync - reloads all cvars on the current menu page\n"
+#: qcsrc/menu/xonotic/util.qc:270
+#, c-format
+msgid "Received HTTP request data for an invalid id %d.\n"
msgstr ""
-#: qcsrc/menu/gamecommand.qc:67
-msgid " directmenu ITEM - select a menu item as main item\n"
+#: qcsrc/menu/xonotic/util.qc:285
+#, c-format
+msgid "error receiving update notification: status is %d\n"
msgstr ""
-#: qcsrc/menu/gamecommand.qc:193
-msgid "error creating curl handle\n"
+#: qcsrc/menu/xonotic/util.qc:290
+msgid "error: received HTML instead of an update notification\n"
msgstr ""
-#: qcsrc/menu/gamecommand.qc:239
-msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
+#: qcsrc/menu/xonotic/util.qc:295
+msgid "error: received carriage returns from update notification server\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:4
-#: qcsrc/menu/xonotic/dialog_settings.c:19
-msgid "Video"
+#: qcsrc/menu/xonotic/util.qc:316
+#, c-format
+msgid ""
+"Update can be downloaded at:\n"
+"%s\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:26
-msgid "Resolution:"
+#: qcsrc/menu/xonotic/util.qc:337
+msgid "Autogenerating mapinfo for newly added maps..."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:29
-msgid "Font/UI size:"
+#: qcsrc/menu/xonotic/util.qc:367
+#, c-format
+msgid "^1%s TEST BUILD"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:31
-msgid "SZ^Unreadable"
+#: qcsrc/menu/xonotic/util.qc:432
+#, c-format
+msgid "Update to %s now!"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:32
-msgid "SZ^Tiny"
+#: qcsrc/menu/xonotic/util.qc:501
+msgid ""
+"^1ERROR: Texture compression is required but not supported.\n"
+"^1Expect visual problems.\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:33
-msgid "SZ^Little"
+#: qcsrc/menu/xonotic/util.qc:523
+msgid "Arena"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:34
-msgid "SZ^Small"
+#: qcsrc/menu/xonotic/util.qc:524
+msgid "Assault"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:35
-msgid "SZ^Medium"
+#: qcsrc/menu/xonotic/util.qc:525
+msgid "Capture The Flag"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:36
-msgid "SZ^Large"
+#: qcsrc/menu/xonotic/util.qc:526
+msgid "Clan Arena"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:37
-msgid "SZ^Huge"
+#: qcsrc/menu/xonotic/util.qc:527
+msgid "Deathmatch"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:38
-msgid "SZ^Gigantic"
+#: qcsrc/menu/xonotic/util.qc:528
+msgid "Domination"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:39
-msgid "SZ^Colossal"
+#: qcsrc/menu/xonotic/util.qc:529
+msgid "Freeze Tag"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:42
-msgid "Color depth:"
+#: qcsrc/menu/xonotic/util.qc:530
+msgid "Keepaway"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:45
-msgid "Full screen"
+#: qcsrc/menu/xonotic/util.qc:531
+msgid "Key Hunt"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:46
-msgid "Vertical Synchronization"
+#: qcsrc/menu/xonotic/util.qc:532
+msgid "Last Man Standing"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:49
-msgid "Use OpenGL 2.0 shaders (GLSL)"
+#: qcsrc/menu/xonotic/util.qc:533
+msgid "Nexball"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:52
-msgid "Use GLSL to handle color control"
+#: qcsrc/menu/xonotic/util.qc:534
+msgid "Onslaught"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:56
-msgid "Vertex Buffer Objects (VBOs)"
+#: qcsrc/menu/xonotic/util.qc:535
+msgid "Race"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:59
-msgid "VBO^Off"
+#: qcsrc/menu/xonotic/util.qc:536
+msgid "Race CTS"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:60
-msgid "Vertices, some Tris (compatible)"
+#: qcsrc/menu/xonotic/util.qc:537
+msgid "Runematch"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:63
-msgid "Vertices"
+#: qcsrc/menu/xonotic/util.qc:538
+msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:64
-msgid "Vertices and Triangles"
+#: qcsrc/menu/xonotic/util.qc:557
+#, c-format
+msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:67
-msgid "Depth first:"
+#: qcsrc/menu/xonotic/util.qc:575 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23
+msgid "Background:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:69
-msgid "DF^Disabled"
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
+msgid "Default"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:70
-msgid "DF^World"
+#: qcsrc/menu/xonotic/util.qc:578 qcsrc/menu/xonotic/util.qc:594
+#: qcsrc/menu/xonotic/util.qc:611 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91
+msgid "Disable"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:71
-msgid "DF^All"
+#: qcsrc/menu/xonotic/util.qc:583 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77
+msgid "Color:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:75
-msgid "Disable multithreaded OpenGL"
+#: qcsrc/menu/xonotic/util.qc:588
+msgid "Use default"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:77
-msgid "Wait for GPU to finish each frame"
+#: qcsrc/menu/xonotic/util.qc:591 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35
+msgid "Border size:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:80
-msgid "Brightness:"
+#: qcsrc/menu/xonotic/util.qc:600 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
+msgid "Alpha:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:83
-msgid "Contrast:"
+#: qcsrc/menu/xonotic/util.qc:608
+msgid "Team Color:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:86
-msgid "Gamma:"
+#: qcsrc/menu/xonotic/util.qc:617 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58
+msgid "Test team color in configure mode"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
-msgid "Contrast boost:"
+#: qcsrc/menu/xonotic/util.qc:620 qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61
+msgid "Padding:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
-msgid "Saturation:"
+#: qcsrc/menu/xonotic/dialog_news.c:4
+msgid "News"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
-msgid "LIT^Ambient:"
+#: qcsrc/menu/xonotic/dialog_news.c:18
+msgid "http://www.xonotic.org/team/blog/"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
-msgid "Intensity:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4
+msgid "Weapons Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-msgid "Apply immediately"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+msgid "Fade out after:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4
-msgid "Panel HUD Setup"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:36
+msgid "Never"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
-msgid "Panel background defaults:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#, c-format
+msgid "%ds"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
-msgid "Disable"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+msgid "Fade effect:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
-msgid "Color:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+msgid "EF^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
-msgid "Border size:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+msgid "Slide"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
-msgid "Alpha:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+msgid "Alpha"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
-msgid "Team color:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+msgid "EF^Both"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
-msgid "Test team color in configure mode"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+msgid "Weapon icons:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
-msgid "Padding:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+msgid "Show weapon ID as:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
-msgid "HUD Dock:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+msgid "SHOWAS^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
-msgid "DOCK^Disabled"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
+msgid "Number"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
-msgid "DOCK^Small"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+msgid "Bind"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
-msgid "DOCK^Medium"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+msgid "Show Accuracy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
-msgid "DOCK^Large"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
+msgid "Show Ammo"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
-msgid "Grid settings:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+msgid "Ammo bar color:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
-msgid "Snap panels to grid"
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
+msgid "Ammo bar alpha:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
-msgid "Grid size:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5
+msgid "Server Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:189
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199
+msgid "N/A"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158
+#, c-format
+msgid "%d/%d, %d free player slots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
+msgid "Official settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
+#, c-format
+msgid "%d modified settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:197
+msgid "N/A (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205
+msgid "not supported (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207
+msgid "not supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211
+msgid "supported (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213
+msgid "supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217
+msgid "requested (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219
+msgid "requested (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:223
+msgid "required (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:225
+msgid "required (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:246
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:269
+msgid "Players:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:254
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38
+msgid "Type:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:259
+msgid "Map:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:264
+msgid "Gameplay:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:274
+msgid "Bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:279
+msgid "Mod:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:284
+msgid "Version:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289
+msgid "Ping:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295
+msgid "CA:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301
+msgid "Key:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:307
+msgid "Encryption:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118
+msgid "Close"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:317
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:72
+msgid "Join!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
+msgid "Weapon settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
+msgid "Weapon priority list:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34
+msgid "Up"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37
+msgid "Down"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
+msgid "Use priority list for weapon cycling"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
+msgid "Auto switch weapons on pickup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45
+msgid "Draw 1st person weapon model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+msgid "Left align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+msgid "Center"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+msgid "Right align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+msgid "Flip view horizontally"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
+#: qcsrc/menu/xonotic/dialog_credits.c:21
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
+msgid "OK"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4
+msgid "Panel HUD Setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+msgid "Panel background defaults:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+msgid "Team color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+msgid "HUD Dock:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+msgid "DOCK^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+msgid "DOCK^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+msgid "DOCK^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+msgid "DOCK^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+msgid "Grid settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+msgid "Snap panels to grid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+msgid "Grid size:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
msgid "Exit setup"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4
-msgid "Vote Panel"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5
+msgid "Map Information"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
-msgid "Alpha after voting:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
+msgid "Full item placement"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4
-msgid "Mod Icons Panel"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
+msgid "MinstaGib only"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4
-msgid "Info Messages Panel"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78
+msgid "Title:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
-msgid "Info messages:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84
+msgid "Author:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
-msgid "Flip align"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90
+msgid "Features:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5
-msgid "Waypoints"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95
+msgid "Game types:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23
-msgid "Show base waypoints"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+msgid "MAP^Play"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:25
-msgid "Waypoint scale:"
+#: qcsrc/menu/xonotic/campaign.c:285
+#, c-format
+msgid "Level %d: %s"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29
-msgid "Waypoint alpha:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4
+msgid "Health/Armor Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34
-msgid "Show names:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+msgid "Enable status bar"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
-msgid "Never"
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+msgid "Status bar alignment:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:37
-msgid "Teammates"
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
+msgid "Left"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:38
-msgid "All players"
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_credits.c:21
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
-#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
-msgid "OK"
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+msgid "Inward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+msgid "Outward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+msgid "Icon alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+msgid "Flip health and armor positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4
+msgid "Demo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28
+msgid "Record demos while playing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28
+msgid "Filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29
+#: qcsrc/menu/xonotic/dialog_settings_input.c:41
+msgid "Clear"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43
+msgid "Timedemo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
+msgid "DEMO^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4
+msgid "Pressed Keys Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
+msgid "Panel disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+msgid "Panel enabled when spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+msgid "Forced aspect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:5
+msgid "Team Selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+msgid "join 'best' team (auto-select)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+msgid "red"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+msgid "blue"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+msgid "yellow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+msgid "pink"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+msgid "spectate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
+msgid "Mutators"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33
+msgid "All Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35
+msgid "Most Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56
+#, c-format
+msgid "%s Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167
+msgid "Dodging"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250
+msgid "MinstaGib"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253
+msgid "NIX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205
+msgid "Rocket Flying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264
+msgid "No start weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189
+msgid "Low gravity"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170
+msgid "Cloaked"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
+msgid "Hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173
+msgid "Midair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176
+msgid "Vampire"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_credits.c:5
-msgid "Credits"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
+msgid "Piñata"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
-msgid "Advanced settings"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211
+msgid "Weapons stay"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23
-msgid "Cvar filter:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180
+msgid "Blood loss"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24
-#: qcsrc/menu/xonotic/dialog_settings_input.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33
-msgid "Clear"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202
+msgid "Jet pack"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34
-msgid "Setting:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
+msgid "MUT^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:254
-msgid "Type:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164
+msgid "Gameplay mutators:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42
-msgid "Value:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196
+msgid "Weapon & item mutators:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:56
-msgid "Description:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199
+msgid "Grappling hook"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4
-msgid "Pressed Keys Panel"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215
+msgid "Weapon arenas:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218
+msgid "Regular (no arena)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
-msgid "Panel enabled when spectating"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256
+msgid "with laser"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247
+msgid "Special arenas:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
-msgid "Forced aspect:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260
+msgid "Most weapons"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:5
-msgid "Team Selection"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6
+msgid "Advanced server settings"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
-msgid "join 'best' team (auto-select)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25
+msgid "Game settings:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
-msgid "red"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28
+msgid "Allow spectating"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
-msgid "blue"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31
+msgid "Spawn shield:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
-msgid "yellow"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36
+msgid "Game speed:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
-msgid "pink"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40
+msgid "Teamplay settings:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
-msgid "spectate"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43
+msgid "Friendly fire scale:"
msgstr ""
-#: qcsrc/menu/xonotic/slider_resolution.c:65
-#, c-format
-msgid "%dx%d"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47
+msgid "Virtual friendly fire (effect only)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings.c:4
-msgid "Settings"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50
+msgid "Friendly fire penalty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings.c:18
-#: qcsrc/menu/xonotic/dialog_settings_input.c:4
-msgid "Input"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54
+msgid "Virtual penalty (effect only)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings.c:20
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:4
-msgid "Effects"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57
+msgid "Teams:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings.c:21
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:4
-msgid "Audio"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66
+msgid "Map voting:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings.c:22
-#: qcsrc/menu/xonotic/dialog_settings_network.c:4
-msgid "Network"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68
+msgid "No voting"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings.c:23
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:4
-msgid "Misc"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69
+msgid "2 choices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_firstrun.c:4
-msgid "Welcome"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70
+msgid "3 choices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_firstrun.c:33
-msgid ""
-"Welcome to Xonotic, please select your language preference and enter your "
-"player name to get started. You can change these options later through the "
-"menu system."
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71
+msgid "4 choices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_firstrun.c:38
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
-msgid "Text language:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72
+msgid "5 choices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_firstrun.c:47
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40
-msgid "Name:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73
+msgid "6 choices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_firstrun.c:69
-msgid "Save settings"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74
+msgid "7 choices"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.c:284
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:66
-msgid "???"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75
+msgid "8 choices"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.c:285
-#, c-format
-msgid "Level %d: %s"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76
+msgid "9 choices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:26
-msgid "Key bindings:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79
+msgid "Simple majority wins vcall"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:31
-msgid "Change key..."
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
+msgid "Chat Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:35
-msgid "Edit..."
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+msgid "Chat entries:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:46
-msgid "Sensitivity:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+msgid "Chat size:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
-msgid "UI mouse speed:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+msgid "Chat lifetime:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
-msgid "Mouse filter"
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+msgid "Chat beep sound"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
-msgid "Invert mouse"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4
+msgid "Ammo Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
-msgid "Use joystick input"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+msgid "Ammunition display:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
-msgid "Turn off OS mouse acceleration"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+msgid "Show only current ammo type"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
-msgid "\"enter console\" also closes"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4
-msgid "Weapons Panel"
+#: qcsrc/menu/xonotic/dialog_settings.c:4
+msgid "Settings"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
-msgid "Fade out after:"
+#: qcsrc/menu/xonotic/dialog_settings.c:18
+#: qcsrc/menu/xonotic/dialog_settings_input.c:4
+msgid "Input"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
-#, c-format
-msgid "%ds"
+#: qcsrc/menu/xonotic/dialog_settings.c:19
+#: qcsrc/menu/xonotic/dialog_settings_video.c:4
+msgid "Video"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
-msgid "Fade effect:"
+#: qcsrc/menu/xonotic/dialog_settings.c:20
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:4
+msgid "Effects"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
-msgid "EF^None"
+#: qcsrc/menu/xonotic/dialog_settings.c:21
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:4
+msgid "Audio"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
-msgid "Slide"
+#: qcsrc/menu/xonotic/dialog_settings.c:22
+#: qcsrc/menu/xonotic/dialog_settings_network.c:4
+msgid "Network"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
-msgid "Alpha"
+#: qcsrc/menu/xonotic/dialog_settings.c:23
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:4
+msgid "Misc"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
-msgid "Weapon icons:"
+#: qcsrc/menu/xonotic/playermodel.c:174
+msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
-msgid "Show weapon ID as:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4
+msgid "Score Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
-msgid "SHOWAS^None"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
-msgid "Number"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
-msgid "Bind"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Off"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
-msgid "Show Accuracy"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
-msgid "Show Ammo"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
-msgid "Ammo bar color:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4
+msgid "Mod Icons Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
-msgid "Ammo bar alpha:"
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
+msgid "Advanced settings"
msgstr ""
-#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38
-msgid "Do not press this button again!"
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23
+msgid "Cvar filter:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4
-msgid "Engine Info Panel"
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34
+msgid "Setting:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
-msgid "Engine info:"
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42
+msgid "Value:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
-msgid "Use an averaging algorithm for fps"
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:56
+msgid "Description:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_quit.c:4
-msgid "Quit"
+#: qcsrc/menu/xonotic/slider_decibels.c:50
+msgid "VOL^OFF"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_quit.c:17
-msgid "Are you sure you want to quit?"
+#: qcsrc/menu/xonotic/slider_decibels.c:52
+msgid "VOL^MAX"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_quit.c:20
-msgid "Yes"
+#: qcsrc/menu/xonotic/slider_decibels.c:53
+#, c-format
+msgid "%s dB"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_quit.c:21
-msgid "No"
+#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38
+msgid "Do not press this button again!"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
-msgid "Join"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:26
+msgid "Resolution:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32
-msgid "Filter:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:29
+msgid "Font/UI size:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36
-msgid "SRVS^Empty"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:31
+msgid "SZ^Unreadable"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40
-msgid "SRVS^Full"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:32
+msgid "SZ^Tiny"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44
-msgid "Pause"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:33
+msgid "SZ^Little"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56
-msgid "Address:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:34
+msgid "SZ^Small"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:67
-msgid "Info..."
+#: qcsrc/menu/xonotic/dialog_settings_video.c:35
+msgid "SZ^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:72
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:317
-msgid "Join!"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:36
+msgid "SZ^Large"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4
-msgid "Notification Panel"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:37
+msgid "SZ^Huge"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
-msgid "Notifications:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:38
+msgid "SZ^Gigantic"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
-msgid "Also print notifications to the console"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:39
+msgid "SZ^Colossal"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
-msgid "Flip notify order"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:42
+msgid "Color depth:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
-msgid "Entry lifetime:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:45
+msgid "Full screen"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
-msgid "Entry fadetime:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:46
+msgid "Vertical Synchronization"
msgstr ""
-#: qcsrc/menu/xonotic/util.qh:49
-msgid "Enable panel"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:49
+msgid "Use OpenGL 2.0 shaders (GLSL)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:26
-msgid "Menu skins:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:52
+msgid "Use GLSL to handle color control"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:47
-msgid "Show current time"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:56
+msgid "Vertex Buffer Objects (VBOs)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:49
-msgid "Show current date"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:59
+msgid "VBO^Off"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:51
-msgid "Show frames per second"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:60
+msgid "Vertices, some Tris (compatible)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:63
+msgid "Vertices"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:64
+msgid "Vertices and Triangles"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:67
+msgid "Depth first:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:69
+msgid "DF^Disabled"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:70
+msgid "DF^World"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:71
+msgid "DF^All"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:75
+msgid "Disable multithreaded OpenGL"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:77
+msgid "Wait for GPU to finish each frame"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:80
+msgid "Brightness:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
-msgid "Minimize input latency"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:83
+msgid "Contrast:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-msgid "Advanced settings..."
+#: qcsrc/menu/xonotic/dialog_settings_video.c:86
+msgid "Gamma:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:4
-msgid "Singleplayer"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
+msgid "Contrast boost:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:59
-msgid "Instant action! (random map with bots)"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
+msgid "Saturation:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:80
-msgid "Start Singleplayer!"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
+msgid "LIT^Ambient:"
msgstr ""
-#: qcsrc/menu/xonotic/skinlist.c:105
-msgid "<TITLE>"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+msgid "Intensity:"
msgstr ""
-#: qcsrc/menu/xonotic/skinlist.c:106
-msgid "<AUTHOR>"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+msgid "Apply immediately"
msgstr ""
-#: qcsrc/menu/xonotic/skinlist.c:163
-#, c-format
-msgid "%s: %s"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
+msgid "Join"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_news.c:4
-msgid "News"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36
+msgid "SRVS^Empty"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_news.c:18
-msgid "http://www.xonotic.org/team/blog/"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40
+msgid "SRVS^Full"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5
-msgid "Server Information"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44
+msgid "Pause"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:189
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199
-msgid "N/A"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56
+msgid "Address:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158
-#, c-format
-msgid "%d/%d, %d free player slots"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:67
+msgid "Info..."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
-msgid "Official settings"
+#: qcsrc/menu/xonotic/dialog_credits.c:5
+msgid "Credits"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
-#, c-format
-msgid "%d modified settings"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:26
+msgid "Menu skins:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:197
-msgid "N/A (can't connect)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
+#: qcsrc/menu/xonotic/dialog_firstrun.c:38
+msgid "Text language:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205
-msgid "not supported (can't connect)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:47
+msgid "Show current time"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207
-msgid "not supported (won't encrypt)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:49
+msgid "Show current date"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211
-msgid "supported (will encrypt)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:51
+msgid "Show frames per second"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213
-msgid "supported (won't encrypt)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
+msgid "Minimize input latency"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217
-msgid "requested (will encrypt)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
+msgid "Advanced settings..."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219
-msgid "requested (won't encrypt)"
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4
+msgid "Notification Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:223
-msgid "required (can't connect)"
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+msgid "Notifications:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:225
-msgid "required (will encrypt)"
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+msgid "Also print notifications to the console"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:246
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:269
-msgid "Players:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+msgid "Flip notify order"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:259
-msgid "Map:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+msgid "Entry lifetime:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:264
-msgid "Gameplay:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+msgid "Entry fadetime:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:274
-msgid "Bots:"
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5
+msgid "User defined key bind"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:279
-msgid "Mod:"
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40
+#: qcsrc/menu/xonotic/dialog_firstrun.c:47
+msgid "Name:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:284
-msgid "Version:"
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42
+msgid "Command when pressed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45
+msgid "Command when released:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289
-msgid "Ping:"
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48
+msgid "Save"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295
-msgid "CA:"
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51
+msgid "Cancel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301
-msgid "Key:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4
+msgid "Vote Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:307
-msgid "Encryption:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+msgid "Alpha after voting:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119
-msgid "Close"
+#: qcsrc/menu/xonotic/util.qh:47
+msgid "Enable panel"
msgstr ""
-#: qcsrc/menu/xonotic/slider_decibels.c:50
-msgid "VOL^OFF"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:19
+msgid "Create"
msgstr ""
-#: qcsrc/menu/xonotic/slider_decibels.c:52
-msgid "VOL^MAX"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
+msgid "Game type:"
msgstr ""
-#: qcsrc/menu/xonotic/slider_decibels.c:53
-#, c-format
-msgid "%s dB"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
+msgid "Match settings:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
-msgid "Mutators"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
+msgid "Time limit:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33
-msgid "All Weapons Arena"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
+msgid "Use map specified default"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35
-msgid "Most Weapons Arena"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
+msgid "Point limit:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56
-#, c-format
-msgid "%s Arena"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
+msgid "Player slots:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167
-msgid "Dodging"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
+msgid "Number of bots:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250
-msgid "MinstaGib"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
+msgid "Bot skill:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253
-msgid "NIX"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
+msgid "Botlike"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205
-msgid "Rocket Flying"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+msgid "Beginner"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264
-msgid "No start weapons"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+msgid "You will win"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189
-msgid "Low gravity"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+msgid "You can win"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170
-msgid "Cloaked"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+msgid "You might win"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
-msgid "Hook"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+msgid "Advanced"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173
-msgid "Midair"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+msgid "Expert"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176
-msgid "Vampire"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+msgid "Pro"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
-msgid "Piñata"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+msgid "Assassin"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211
-msgid "Weapons stay"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+msgid "Unhuman"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180
-msgid "Blood loss"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+msgid "Godlike"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202
-msgid "Jet pack"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
+msgid "Mutators..."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
-msgid "MUT^None"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
+msgid "Map list:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164
-msgid "Gameplay mutators:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
+msgid "Select all"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196
-msgid "Weapon & item mutators:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
+msgid "Select none"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199
-msgid "Grappling hook"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
+msgid "Start Multiplayer!"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215
-msgid "Weapon arenas:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
+msgid "Capture limit:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218
-msgid "Regular (no arena)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+msgid "Lives:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256
-msgid "with laser"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+msgid "Laps:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247
-msgid "Special arenas:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+msgid "Goals:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260
-msgid "Most weapons"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
+msgid "Frag limit:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4
msgid "Never zoomed"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4
-msgid "Race Timer Panel"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
-msgid "Chat Panel"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
-msgid "Chat entries:"
+#: qcsrc/menu/xonotic/maplist.c:278
+msgid ""
+"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
-msgid "Chat size:"
+#: qcsrc/menu/xonotic/maplist.c:286
+#, c-format
+msgid "%s's Xonotic Server"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
-msgid "Chat lifetime:"
+#: qcsrc/menu/xonotic/maplist.c:291
+msgid ""
+"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
+"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
-msgid "Chat beep sound"
+#: qcsrc/menu/xonotic/slider_resolution.c:65
+#, c-format
+msgid "%dx%d"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:19
-msgid "Create"
+#: qcsrc/menu/xonotic/dialog_quit.c:4
+msgid "Quit"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
-msgid "Game type:"
+#: qcsrc/menu/xonotic/dialog_quit.c:17
+msgid "Are you sure you want to quit?"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
-msgid "Match settings:"
+#: qcsrc/menu/xonotic/dialog_quit.c:20
+msgid "Yes"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
-msgid "Time limit:"
+#: qcsrc/menu/xonotic/dialog_quit.c:21
+msgid "No"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
-msgid "Use map specified default"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:26
+msgid "Key bindings:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
-msgid "Point limit:"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:31
+msgid "Change key..."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
-msgid "Player slots:"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:35
+msgid "Edit..."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
-msgid "Number of bots:"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:46
+msgid "Sensitivity:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
-msgid "Bot skill:"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
+msgid "UI mouse speed:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
-msgid "Botlike"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
+msgid "Mouse filter"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
-msgid "Beginner"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
+msgid "Invert mouse"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
-msgid "You will win"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
+msgid "Use joystick input"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
-msgid "You can win"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
+msgid "Turn off OS mouse acceleration"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
-msgid "You might win"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
+msgid "\"enter console\" also closes"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
-msgid "Advanced"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:26
+msgid "Client-side movement prediction"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
-msgid "Expert"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:30
+msgid "Show netgraph"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
-msgid "Pro"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:33
+msgid "Network speed:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
-msgid "Assassin"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:35
+msgid "56k"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
-msgid "Unhuman"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:36
+msgid "ISDN"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
-msgid "Godlike"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:37
+msgid "Slow ADSL"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
-msgid "Mutators..."
+#: qcsrc/menu/xonotic/dialog_settings_network.c:38
+msgid "Fast ADSL"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
-msgid "Map list:"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:39
+msgid "Broadband"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
-msgid "Select all"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:42
+msgid "Input packets/s:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
-msgid "Select none"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:46
+msgid "HTTP downloads:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
-msgid "Start Multiplayer!"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:49
+msgid "Downloads:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
-msgid "Capture limit:"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:53
+msgid "Speed (kB/s):"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
-msgid "Lives:"
+#: qcsrc/menu/xonotic/dialog_settings_network.c:57
+msgid "Client UDP port:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
-msgid "Laps:"
+#: qcsrc/menu/xonotic/cvarlist.c:85
+msgid "will be saved to config.cfg"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
-msgid "Goals:"
+#: qcsrc/menu/xonotic/cvarlist.c:87
+msgid "will not be saved"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
-msgid "Frag limit:"
+#: qcsrc/menu/xonotic/cvarlist.c:89
+msgid "private"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4
-msgid "Winner"
+#: qcsrc/menu/xonotic/cvarlist.c:91
+msgid "engine setting"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5
-msgid "User defined key bind"
+#: qcsrc/menu/xonotic/cvarlist.c:93
+msgid "read only"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42
-msgid "Command when pressed:"
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4
+msgid "Winner"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45
-msgid "Command when released:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
+msgid "Timer Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48
-msgid "Save"
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+msgid "Timer:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51
-msgid "Cancel"
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+msgid "Show elapsed time"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5
msgid "Damage splash:"
msgstr ""
-#: qcsrc/menu/xonotic/cvarlist.c:85
-msgid "will be saved to config.cfg"
-msgstr ""
-
-#: qcsrc/menu/xonotic/cvarlist.c:87
-msgid "will not be saved"
-msgstr ""
-
-#: qcsrc/menu/xonotic/cvarlist.c:89
-msgid "private"
-msgstr ""
-
-#: qcsrc/menu/xonotic/cvarlist.c:91
-msgid "engine setting"
-msgstr ""
-
-#: qcsrc/menu/xonotic/cvarlist.c:93
-msgid "read only"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4
-msgid "Score Panel"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
-msgid "Timer Panel"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
-msgid "Timer:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
-msgid "Show elapsed time"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5
-msgid "Map Information"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "Full item placement"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78
-msgid "Title:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84
-msgid "Author:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90
-msgid "Features:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95
-msgid "Game types:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
-msgid "Play"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6
-msgid "Advanced server settings"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25
-msgid "Game settings:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28
-msgid "Allow spectating"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31
-msgid "Spawn shield:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36
-msgid "Game speed:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40
-msgid "Teamplay settings:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43
-msgid "Friendly fire scale:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47
-msgid "Virtual friendly fire (effect only)"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50
-msgid "Friendly fire penalty:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54
-msgid "Virtual penalty (effect only)"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57
-msgid "Teams:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66
-msgid "Map voting:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68
-msgid "No voting"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69
-msgid "2 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70
-msgid "3 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71
-msgid "4 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72
-msgid "5 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73
-msgid "6 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74
-msgid "7 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75
-msgid "8 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76
-msgid "9 choices"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79
-msgid "Simple majority wins vcall"
-msgstr ""
-
-#: qcsrc/menu/xonotic/util.qc:270
-#, c-format
-msgid "Received HTTP request data for an invalid id %d.\n"
-msgstr ""
-
-#: qcsrc/menu/xonotic/util.qc:285
-#, c-format
-msgid "error receiving update notification: status is %d\n"
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4
+msgid "Info Messages Panel"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:290
-msgid "error: received HTML instead of an update notification\n"
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+msgid "Info messages:"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:295
-msgid "error: received carriage returns from update notification server\n"
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+msgid "Flip align"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:316
-#, c-format
-msgid ""
-"Update can be downloaded at:\n"
-"%s\n"
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:4
+msgid "Multiplayer"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:337
-msgid "Autogenerating mapinfo for newly added maps..."
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:18
+msgid "Servers"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:367
-#, c-format
-msgid "^1%s TEST BUILD"
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:20
+msgid "Demos"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:432
-#, c-format
-msgid "Update to %s now!"
+#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4
+msgid "Race Timer Panel"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:509
-msgid ""
-"^1ERROR: Texture compression is required but not supported.\n"
-"^1Expect visual problems.\n"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:531
-msgid "Arena"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+msgid "Panel enabled"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:532
-msgid "Assault"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled even observing"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:533
-msgid "Capture The Flag"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+msgid "Panel enabled only in Race/CTS"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:534
-msgid "Clan Arena"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+msgid "Status bar"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:535
-msgid "Deathmatch"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+msgid "Inward align"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:536
-msgid "Domination"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Outward align"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:537
-msgid "Freeze Tag"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+msgid "Flip speed/acceleration positions"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:538
-msgid "Keepaway"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+msgid "Speed:"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:539
-msgid "Key Hunt"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:540
-msgid "Last Man Standing"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:541
-msgid "Nexball"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:542
-msgid "Onslaught"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:543
-msgid "Race"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:544
-msgid "Race CTS"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:545
-msgid "Runematch"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:546
-msgid "Team Deathmatch"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+msgid "Show"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:565
-#, c-format
-msgid "@!#%'n Tuba Throwing"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+msgid "Top speed"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+msgid "Acceleration:"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
-msgid "Default"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:596
-msgid "Use default"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5
+msgid "Waypoints"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:616
-msgid "Team Color:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23
+msgid "Show base waypoints"
msgstr ""
-#: qcsrc/menu/xonotic/playermodel.c:174
-msgid "<no model found>"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:25
+msgid "Waypoint scale:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4
-msgid "Ammo Panel"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29
+msgid "Waypoint alpha:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
-msgid "Ammunition display:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34
+msgid "Show names:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
-msgid "Show only current ammo type"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:37
+msgid "Teammates"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-msgid "Left"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:38
+msgid "All players"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-msgid "Right"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
+msgid "Centerprint"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
-msgid "Weapon settings"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+msgid "Message duration:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
-msgid "Weapon priority list:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+msgid "Fade time:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34
-msgid "Up"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+msgid "Flip messages order"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37
-msgid "Down"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+msgid "Text alignment:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
-msgid "Use priority list for weapon cycling"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+msgid "Font scale:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
-msgid "Auto switch weapons on pickup"
+#: qcsrc/menu/xonotic/dialog_firstrun.c:4
+msgid "Welcome"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45
-msgid "Draw 1st person weapon model"
+#: qcsrc/menu/xonotic/dialog_firstrun.c:33
+msgid ""
+"Welcome to Xonotic, please select your language preference and enter your "
+"player name to get started. You can change these options later through the "
+"menu system."
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
+#: qcsrc/menu/xonotic/dialog_firstrun.c:69
+msgid "Save settings"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
+msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
-msgid "Flip view horizontally"
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+msgid "Flip strength and shield positions"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_effects.c:38
msgid "Decals"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+msgid "Decals on models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
msgid "Distance:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
msgid "Time:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "Use lightmaps"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
msgid "Deluxe mapping"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
msgid "Gloss"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
msgid "Offset mapping"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Relief mapping"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
msgid "Reflections:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
msgid "Blurred"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "REFL^Good"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
msgid "Sharp"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
msgid "Show surfaces"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
msgid "No dynamic lighting"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
msgid "Flash blend approximation"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
msgid "Realtime dynamic lighting"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
msgid "Shadows"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
msgid "Realtime world lighting"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
msgid "Use normal maps"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
msgid "Soft shadows"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
msgid "Coronas"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
msgid "Use Occlusion Queries"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
msgid "Bloom"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
msgid "High Dynamic Range (HDR)"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
msgid "Motion blur:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:26
-msgid "Client-side movement prediction"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:30
-msgid "Show netgraph"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:33
-msgid "Network speed:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:35
-msgid "56k"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:36
-msgid "ISDN"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:37
-msgid "Slow ADSL"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:38
-msgid "Fast ADSL"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:39
-msgid "Broadband"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:42
-msgid "Input packets/s:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_network.c:46
-msgid "HTTP downloads:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
+msgid "Blur and sharpen postprocessing"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_network.c:49
-msgid "Downloads:"
+#: qcsrc/menu/xonotic/skinlist.c:105
+msgid "<TITLE>"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_network.c:53
-msgid "Speed (kB/s):"
+#: qcsrc/menu/xonotic/skinlist.c:106
+msgid "<AUTHOR>"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_network.c:57
-msgid "Client UDP port:"
+#: qcsrc/menu/xonotic/skinlist.c:163
+#, c-format
+msgid "%s: %s"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:185
msgid "Players"
msgstr ""
-#: qcsrc/menu/xonotic/maplist.c:278
-msgid ""
-"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
-msgstr ""
-
-#: qcsrc/menu/xonotic/maplist.c:286
-#, c-format
-msgid "%s's Xonotic Server"
-msgstr ""
-
-#: qcsrc/menu/xonotic/maplist.c:291
-msgid ""
-"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
-"again.\n"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4
-msgid "Demo"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28
-msgid "Record demos while playing"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43
-msgid "Timedemo"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
-msgid "Powerups Panel"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-msgid "Enable status bar"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-msgid "Status bar alignment:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-msgid "Inward"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-msgid "Outward"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-msgid "Icon alignment:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_settings_audio.c:27
msgid "Master:"
msgstr ""
msgid "Music:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr ""
msgid "Info:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:4
-msgid "Multiplayer"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:18
-msgid "Servers"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_multiplayer.c:20
-msgid "Demos"
+#: qcsrc/menu/gamecommand.qc:47
+#, c-format
+msgid "error: status is %d\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4
-msgid "Health/Armor Panel"
+#: qcsrc/menu/gamecommand.qc:65
+msgid "Usage: menu_cmd command..., where possible commands are:\n"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
-msgid "Flip health and armor positions"
+#: qcsrc/menu/gamecommand.qc:66
+msgid " sync - reloads all cvars on the current menu page\n"
msgstr ""
-#: qcsrc/server/w_fireball.qc:2
-msgid "Fireball"
+#: qcsrc/menu/gamecommand.qc:67
+msgid " directmenu ITEM - select a menu item as main item\n"
msgstr ""
-#: qcsrc/server/w_fireball.qc:417
-#, c-format
-msgid "%s forgot about some firemine"
+#: qcsrc/menu/gamecommand.qc:193
+msgid "error creating curl handle\n"
msgstr ""
-#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240
-#, c-format
-msgid "%s should have used a smaller gun"
+#: qcsrc/menu/gamecommand.qc:239
+msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/server/w_fireball.qc:426
+#: qcsrc/menu/menu.qc:29
#, c-format
-msgid "%s tried to catch %s's firemine"
+msgid "^4MQC Build information: ^1%s\n"
msgstr ""
-#: qcsrc/server/w_fireball.qc:428
+#: qcsrc/menu/item/listbox.c:300
#, c-format
-msgid "%s fatefully ignored %s's firemine"
+msgid "Item %d"
msgstr ""
-#: qcsrc/server/w_fireball.qc:435
-#, c-format
-msgid "%s could not hide from %s's fireball"
+#: qcsrc/menu/item/gecko.c:49
+msgid "Browser not initialized!"
msgstr ""
-#: qcsrc/server/w_fireball.qc:437
+#: qcsrc/menu/item/label.c:63
#, c-format
-msgid "%s saw the pretty lights of %s's fireball"
+msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
msgstr ""
-#: qcsrc/server/w_fireball.qc:440
+#: qcsrc/menu/item/slider.c:64
#, c-format
-msgid "%s got too close to %s's fireball"
+msgid "%d (%s)"
msgstr ""
-#: qcsrc/server/w_fireball.qc:442
-#, c-format
-msgid "%s tasted %s's fireball"
+#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+msgid "custom"
msgstr ""
-#: qcsrc/server/w_nex.qc:2
-msgid "Nex"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
msgstr ""
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_shotgun.qc:203
-#: qcsrc/server/w_uzi.qc:317 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_porto.qc:296 qcsrc/server/w_hook.qc:266
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s did the impossible"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_nex.qc:269 qcsrc/server/w_minstanex.qc:292
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s has been vaporized by %s"
-msgstr ""
-
-#: qcsrc/server/w_laser.qc:2
-msgid "Laser"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s lasered themself to hell"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_rifle.qc:244
#, c-format
-msgid "%s was cut in half by %s's gauntlet"
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%s was lasered to death by %s"
-msgstr ""
-
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s was sniped by %s"
msgstr ""
#: qcsrc/server/w_uzi.qc:2
msgid "Machine Gun"
msgstr ""
-#: qcsrc/server/w_uzi.qc:321 qcsrc/server/w_sniperrifle.qc:254
+#: qcsrc/server/w_uzi.qc:317 qcsrc/server/w_shotgun.qc:215
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s is now thinking with portals"
msgstr ""
#: qcsrc/server/w_uzi.qc:323
msgid "%s was riddled full of holes by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
+#: qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rocketlauncher.qc:501 qcsrc/server/w_minelayer.qc:523
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s died in %s's bullet hail"
+msgid "%s ate %s's rocket"
+msgstr ""
+
+#: qcsrc/server/w_porto.qc:2
+msgid "Port-O-Launch"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_porto.qc:296 qcsrc/server/w_hook.qc:266
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s did the impossible"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_porto.qc:298
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_minstanex.qc:2
-msgid "MinstaNex"
+#: qcsrc/server/w_hook.qc:2
+msgid "Grappling Hook"
+msgstr ""
+
+#: qcsrc/server/w_hook.qc:268
+#, c-format
+msgid "%s has run into %s's gravity bomb"
msgstr ""
#: qcsrc/server/w_electro.qc:2
msgid "Electro"
msgstr ""
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
-#: qcsrc/server/w_tuba.qc:2
+#: qcsrc/server/w_laser.qc:2
+msgid "Laser"
+msgstr ""
+
+#: qcsrc/server/w_laser.qc:311
#, c-format
-msgid "@!#%'n Tuba"
+msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_laser.qc:315
#, c-format
-msgid "%s hurt his own ears with the @!#%%'n Tuba"
+msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_laser.qc:317
#, c-format
-msgid "%s died of %s's great playing on the @!#%%'n Tuba"
+msgid "%s was lasered to death by %s"
msgstr ""
-#: qcsrc/server/w_porto.qc:2
-msgid "Port-O-Launch"
+#: qcsrc/server/w_shotgun.qc:2
+msgid "Shotgun"
msgstr ""
-#: qcsrc/server/w_porto.qc:298
+#: qcsrc/server/w_shotgun.qc:219
#, c-format
-msgid "%s felt %s doing the impossible to him"
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_hagar.qc:2
-msgid "Hagar"
+#: qcsrc/server/w_shotgun.qc:221
+#, c-format
+msgid "%s was gunned by %s"
msgstr ""
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_tuba.qc:2
#, c-format
-msgid "%s played with tiny rockets"
+msgid "@!#%'n Tuba"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_tuba.qc:252
#, c-format
-msgid "%s hoped %s's missiles wouldn't bounce"
+msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_tuba.qc:256
#, c-format
-msgid "%s was pummeled by %s"
+msgid "%s died of %s's great playing on the @!#%%'n Tuba"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:2
+msgid "MinstaNex"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
+#, c-format
+msgid "%s has been vaporized by %s"
msgstr ""
#: qcsrc/server/w_crylink.qc:2
msgid "%s took a close look at %s's Crylink"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
+#: qcsrc/server/w_hlac.qc:2
+msgid "Heavy Laser Assault Cannon"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:500 qcsrc/server/w_minelayer.qc:495
+#: qcsrc/server/w_hlac.qc:240 qcsrc/server/w_fireball.qc:419
#, c-format
-msgid "%s exploded"
+msgid "%s should have used a smaller gun"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_hlac.qc:242
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s was cut down by %s"
+msgstr ""
+
+#: qcsrc/server/w_grenadelauncher.qc:2
+msgid "Mortar"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s detonated"
msgstr ""
-#: qcsrc/server/w_hook.qc:2
-msgid "Grappling Hook"
+#: qcsrc/server/w_grenadelauncher.qc:391
+#, c-format
+msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_hook.qc:268
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
-msgid "%s has run into %s's gravity bomb"
+msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:2
-msgid "Mine Layer"
+#: qcsrc/server/w_grenadelauncher.qc:395
+#, c-format
+msgid "%s ate %s's grenade"
+msgstr ""
+
+#: qcsrc/server/w_hagar.qc:2
+msgid "Hagar"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
-msgid "%s got too close to %s's mine"
+msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_hagar.qc:386
#, c-format
-msgid "%s almost dodged %s's mine"
+msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
-msgid "%s stepped on %s's mine"
+msgid "%s was pummeled by %s"
msgstr ""
#: qcsrc/server/w_seeker.qc:2
msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:2
-msgid "Mortar"
+#: qcsrc/server/w_fireball.qc:2
+msgid "Fireball"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_fireball.qc:417
#, c-format
-msgid "%s tried out his own grenade"
+msgid "%s forgot about some firemine"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_fireball.qc:426
#, c-format
-msgid "%s detonated"
+msgid "%s tried to catch %s's firemine"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_fireball.qc:428
#, c-format
-msgid "%s didn't see %s's grenade"
+msgid "%s fatefully ignored %s's firemine"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_fireball.qc:435
#, c-format
-msgid "%s almost dodged %s's grenade"
+msgid "%s could not hide from %s's fireball"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_fireball.qc:437
#, c-format
-msgid "%s ate %s's grenade"
+msgid "%s saw the pretty lights of %s's fireball"
msgstr ""
-#: qcsrc/server/w_hlac.qc:2
-msgid "Heavy Laser Assault Cannon"
+#: qcsrc/server/w_fireball.qc:440
+#, c-format
+msgid "%s got too close to %s's fireball"
msgstr ""
-#: qcsrc/server/w_hlac.qc:242
+#: qcsrc/server/w_fireball.qc:442
#, c-format
-msgid "%s was cut down by %s"
+msgid "%s tasted %s's fireball"
+msgstr ""
+
+#: qcsrc/server/w_minelayer.qc:2
+msgid "Mine Layer"
+msgstr ""
+
+#: qcsrc/server/w_minelayer.qc:527
+#, c-format
+msgid "%s got too close to %s's mine"
+msgstr ""
+
+#: qcsrc/server/w_minelayer.qc:529
+#, c-format
+msgid "%s almost dodged %s's mine"
+msgstr ""
+
+#: qcsrc/server/w_minelayer.qc:531
+#, c-format
+msgid "%s stepped on %s's mine"
+msgstr ""
+
+#: qcsrc/server/w_nex.qc:2
+msgid "Nex"
msgstr ""
msgstr ""
"Project-Id-Version: Xontoic 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-08-21 14:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Ricardo 'Hellgardia' Silva <ricardo.mccs@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgstr "modificado"
#: qcsrc/menu/menu.qc:29
-#, fuzzy, c-format
+#, c-format
msgid "^4MQC Build information: ^1%s\n"
msgstr "^4MQC Informação da Build %s\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Mostrar apenas o tipo de munição actual"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr "Alinhar icones"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
msgstr "Esquerda"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
msgid "Right"
msgstr "Direita"
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
+msgid "Centerprint"
+msgstr "Centro"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+msgid "Message duration:"
+msgstr "Duração da mensagem:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+msgid "Fade time:"
+msgstr "Desaparecimento de cada entrada:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+msgid "Flip messages order"
+msgstr "Trocar ordem de notificações"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+msgid "Text alignment:"
+msgstr "Alinhamento do Texto"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
+msgid "Center"
+msgstr "Centro"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+msgid "Font scale:"
+msgstr "Tamanho de letra:"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
msgid "Chat Panel"
msgstr "Painel de Conversa"
msgid "Entry fadetime:"
msgstr "Desaparecimento de cada entrada:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
+msgstr "Painel de Física"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Painel desactivado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+msgid "Panel enabled"
+msgstr "Painel activado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled even observing"
+msgstr "Painel activado quando espectador"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+msgid "Panel enabled only in Race/CTS"
+msgstr "Painel activo apenas em jogos de Corrida/CTS"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+msgid "Status bar"
+msgstr "Barra de estado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Alinhamento à esquerda"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Alinhamento à direita"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+msgid "Inward align"
+msgstr "Para Dentro"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Outward align"
+msgstr "Para Fora"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+msgid "Flip speed/acceleration positions"
+msgstr "Trocar posição da velocidade e aceleração"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+msgid "Speed:"
+msgstr "Velocidade:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr "Incluir velocidade vertical"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr "Unidade de velocidade:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "nós"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+msgid "Show"
+msgstr "Mostrar"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+msgid "Top speed"
+msgstr "Velocidade Máxima:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+msgid "Acceleration:"
+msgstr "Aceleração:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr "Incluir aceleração vertical"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Painel de Powerups"
msgid "Pressed Keys Panel"
msgstr "Painel das Teclas Pressionadas"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Painel desactivado"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Painel activado quando espectador"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Alfa:"
msgid "Score Panel"
msgstr "Painel de Pontos"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr "Pontuação:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr "Tabela Classficativa:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Off"
+msgstr "Desligado"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr "E eu"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr "Puro"
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Painel Temporizador"
msgid "Fade effect:"
msgstr "Efeito de desaparecimento"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "Nenhum"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Deslocador"
msgid "Alpha"
msgstr "Alfa"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+msgid "EF^Both"
+msgstr "Ambos"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Icones das armas"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Mostra o ID da arma como:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "Nenhum"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Número"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Ligar"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Mostrar Pontaria"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Mostrar Munições"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Cor da barra de munições:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Cor da barra alfa:"
msgid "Panel background defaults:"
msgstr "Fundo do painel por defeito:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Fundo:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Desactivar"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Cor:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Tamanho do limite:"
msgid "Team color:"
msgstr "Cor da Equipa:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Testa cor da equipa no modo de configuração"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Padding:"
msgid "Player Setup"
msgstr "Configuração do Jogador"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
msgid "Game type:"
msgstr "Tipo de jogo:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
msgid "Match settings:"
msgstr "Definições de jogo:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
msgid "Time limit:"
msgstr "Tempo limite:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
msgid "Use map specified default"
msgstr "Usar definição específica do mapa"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Point limit:"
msgstr "Limite de pontos:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
msgid "Player slots:"
msgstr "Slots para Jogadores:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
msgid "Number of bots:"
msgstr "Número de jogadores controlados pelo computador:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
msgid "Bot skill:"
msgstr "Nível de dificuldade:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
msgid "Botlike"
msgstr "Bot"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
msgid "Beginner"
msgstr "Iniciado"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
msgid "You will win"
msgstr "Vais ganhar"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
msgid "You can win"
msgstr "Podes ganhar"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
msgid "You might win"
msgstr "Talvez ganhes"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
msgid "Advanced"
msgstr "Avançado"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
msgid "Expert"
msgstr "Perito"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
msgid "Pro"
msgstr "Profissional"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
msgid "Assassin"
msgstr "Assassino"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
msgid "Unhuman"
msgstr "Desumano"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
msgid "Godlike"
msgstr "Divinal"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
msgid "Mutators..."
msgstr "Mutators..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Definições avançadas..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
msgid "Map list:"
msgstr "Lista de mapas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
msgid "Select all"
msgstr "Seleccionar todos"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
msgid "Select none"
msgstr "Seleccionar nenhum"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
msgid "Start Multiplayer!"
msgstr "Começar Multijogador!"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
msgid "Capture limit:"
msgstr "Limite de capturas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
msgid "Lives:"
msgstr "Vidas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
msgid "Laps:"
msgstr "Voltas:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
msgid "Goals:"
msgstr "Golos:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Frag limit:"
msgstr "Limite de Frags:"
msgid "Game types:"
msgstr "Modos de jogo:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
msgid "Close"
msgstr "Fechar"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
-msgid "Play"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+msgid "MAP^Play"
msgstr "Jogar"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
msgid "Timedemo"
msgstr "Demo temporizado"
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
+#, fuzzy
+msgid "DEMO^Play"
+msgstr "Jogar"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
msgid "Join"
msgstr "Juntar"
msgstr "Dano Colateral:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Aplicar imediatamente"
msgid "Draw 1st person weapon model"
msgstr "Desenhar modelo da arma na 1a pessoa"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Alinhamento à esquerda"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Alinhamento à direita"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Trocar vista horizontal"
msgid "Music:"
msgstr "Música:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr "Som Ambiente:"
msgid "Info:"
msgstr "Informação:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr "Items:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr "Dor:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr "Jogador:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr "Tiros:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr "Voz:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr "Armas:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr "Frequência:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr "11.025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr "22.05 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr "44.1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr "Canais:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr "Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr "Trocar Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr "Modo de Headphones"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr "Vozes espaciais:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr "Nenhum"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
msgstr "Taunts"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr "Todos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr "Nível dos taunts:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
msgstr "Muito baixo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr "Baixo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr "Normal"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr "Alto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr "Total"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr "Taunts Automáticos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr "Aviso de tempo:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr "Nenhum"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr "1 minuto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr "5 minutos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr "Ambos"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr "Indicador de tiro acertado"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr "Sons do menu"
msgid "Decals"
msgstr "Símbolos"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+msgid "Decals on models"
+msgstr "Marcas nos modelos"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
msgid "Distance:"
msgstr "Distância:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
msgid "Time:"
msgstr "Tempo:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "Use lightmaps"
msgstr "Usar lightmaps"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
msgid "Deluxe mapping"
msgstr "Mapeamento Deluxe"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
msgid "Gloss"
msgstr "Lustro"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
msgid "Offset mapping"
msgstr "Mapeamento Offset"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Relief mapping"
msgstr "Mapeamento Relief"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
msgid "Reflections:"
msgstr "Reflexos:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
msgid "Blurred"
msgstr "Grau de Blur"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "REFL^Good"
msgstr "Bom"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
msgid "Sharp"
msgstr "Grau de Definição"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
msgid "Show surfaces"
msgstr "Mostrar superfícies"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
msgid "No dynamic lighting"
msgstr "Iluminação dinâmica desligada"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
msgid "Flash blend approximation"
msgstr "Aproximação Flash Blend"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
msgid "Realtime dynamic lighting"
msgstr "Iluminação dinâmica em tempo real"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
msgid "Shadows"
msgstr "Sombras"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
msgid "Realtime world lighting"
msgstr "Iluminação do mundo em tempo real"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
msgid "Use normal maps"
msgstr "Usar mapas normais"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
msgid "Soft shadows"
msgstr "Sombras Suaves"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
msgid "Coronas"
msgstr "Coronas"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
msgid "Use Occlusion Queries"
msgstr "Usar Consultas Oclusão"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
msgid "Bloom"
msgstr "Bloom"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
msgid "High Dynamic Range (HDR)"
msgstr "High Dynamic Range (HDR)"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
msgid "Motion blur:"
msgstr "Distorção por movimento:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
-msgstr "Distorção por dano:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
+msgid "Blur and sharpen postprocessing"
+msgstr "Blur e postprocessing"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgid "Sensitivity:"
msgstr "Sensibilidade:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Velocidade do rato:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Filtro do Rato"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Inverter Rato"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Usar input do joystick"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Desligar aceleração de Rato do SO"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"entrar na consola\" também fecha"
msgstr "Mostrar Frames por Segundo"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Medidor de Velocidade"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (escondido)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "nós"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Mostrar accelerómetro"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Escala do accelerómetro:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Minimizar latência de entrada"
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Contraste - Boost"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Saturação da Cor:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Som Ambiente:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Intensidade:"
#: qcsrc/menu/xonotic/util.qc:367
#, c-format
msgid "^1%s TEST BUILD"
-msgstr ""
+msgstr "^1%s VERSAO DE TESTE"
#: qcsrc/menu/xonotic/util.qc:432
#, c-format
msgid "Update to %s now!"
msgstr "Actualize para %s agora!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1ERRO: A compressão de texturas é necessária mas não é suportada.\n"
"^1Possíveis problemas visuais.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Assalto"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Captura a Bandeira"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Combate até à Morte"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Domínio"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Procura da Chave"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "O Ultimo a Cair"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Investida"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Corrida"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Corrida CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Luta de Runas"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Combate até à Morte por Equipas"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Fundo:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Por Defeito"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Usar defeito"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Cor da Equipa:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Actival painel"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s não se conseguiu lembrar onde pôs a plasma"
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s brincou com plasma"
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s acabou de reparar na bola azul de %s"
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s esteve em contacto com a bola azul de %s"
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s sentiu o ar electrizante do combo de %s"
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s estava perto demais do raio azul de %s"
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s foi atingido pelo raio azul de %s"
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s experimentou a sua própria granada"
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s foi detonado"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s não viu a granada de %s"
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s quase se desviou da granada de %s"
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s comeu a granada de %s"
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s brincou com pequenos foguetes"
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s rezou para que os misseis de %s não resaltassem"
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "%s foi serrado por %s"
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s fez o impossível"
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr "%s laserou-se até à morte"
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr "%s foi cortado ao meio pela gauntlet de %s"
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr "%s foi lasereado até à morte por %s"
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s explodiu"
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr "%s estava perto demais da mina de %s"
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr "%s quase se desviou da mina de %s"
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr "%s pisou a mina de %s"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:293 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:215 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr "%s está agora a pensar com portais"
+
+#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "%s foi vaporizado por %s"
msgid "%s felt %s doing the impossible to him"
msgstr "%s sentiu %s fazer-lhe o impossível"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr "Espingarda"
+
+#: qcsrc/server/w_rifle.qc:233
+#, c-format
+msgid "%s shot themself automatically"
+msgstr "%s disparou em si próprio"
+
+#: qcsrc/server/w_rifle.qc:235
+#, c-format
+msgid "%s sniped themself somehow"
+msgstr "%s snipou-se de alguma forma..."
+
+#: qcsrc/server/w_rifle.qc:242
+#, c-format
+msgid "%s failed to hide from %s's bullet hail"
+msgstr "%s não se conseguiu esconder da chuva de balas de %s"
+
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
+msgstr "%s morreu na chuva de balas de %s"
+
+#: qcsrc/server/w_rifle.qc:251
+#, c-format
+msgid "%s failed to hide from %s's rifle"
+msgstr "%s não se conseguiu esconder da espingarda de %s"
+
+#: qcsrc/server/w_rifle.qc:256
+#, c-format
+msgid "%s got hit in the head by %s"
+msgstr "%s foi atingido na cabeça por %s"
+
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
+msgstr "%s foi snipado por %s"
+
#: qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Rocket Launcher"
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
msgid "%s got too close to %s's rocket"
msgstr "%s estava demasiado perto do foguete de %s"
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
msgid "%s almost dodged %s's rocket"
msgstr "%s quase se desviou do foguete de %s"
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
msgid "%s ate %s's rocket"
msgstr "%s comeu o foguete de %s"
msgid "Shotgun"
msgstr "Shotgun"
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_shotgun.qc:219
#, c-format
msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr "%2$s ^7maltratou %1$s ^7com uma grande ^2caçadeira"
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_shotgun.qc:221
#, c-format
msgid "%s was gunned by %s"
msgstr "%s foi atingido por %s"
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s disparou em si próprio"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s snipou-se de alguma forma..."
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s não se conseguiu esconder da chuva de balas de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s morreu na chuva de balas de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s não se conseguiu esconder da espingarda de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s foi atingido na cabeça por %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "%s foi snipado por %s"
-
#: qcsrc/server/w_tuba.qc:2
#, c-format
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr "%s magoou-se a si próprio com a Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr "%s morreu por causa da grande actuação de %s"
#, c-format
msgid "%s was riddled full of holes by %s"
msgstr "%s foi enchido de buracos por %s"
-
-#~ msgid "%d/%d"
-#~ msgstr "%d/%d"
-
-#~ msgid "Waypoint settings:"
-#~ msgstr "Definições dos caminhos:"
msgstr ""
"Project-Id-Version: Xonotic 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-06-27 18:26+0200\n"
"PO-Revision-Date: 2011-01-18 11:53+0100\t\n"
"Last-Translator: MirceaKitsune <sonichedgehog_hyperblast00@yahoo.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Afiseaza numai munitia armei selectate"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
msgid "Entry fadetime:"
msgstr "Durata atenuare notificatie:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+#, fuzzy
+msgid "Physics Panel"
+msgstr "Fereastra Chat"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Dezactivata"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#, fuzzy
+msgid "Panel enabled if not observing"
+msgstr "Activa pentru spectatori"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr "Mereu activa"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#, fuzzy
+msgid "Status bar"
+msgstr "Activare bara de statut"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Aliniere stanga"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Aliniere dreapta"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#, fuzzy
+msgid "Inward align"
+msgstr "Interior"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#, fuzzy
+msgid "Outward align"
+msgstr "Exterior"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#, fuzzy
+msgid "Flip speed/acceleration positions"
+msgstr "Oglindire pozitie viata/armura"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#, fuzzy
+msgid "Speed:"
+msgstr "Viteza (kB/s):"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "m/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "km/h"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "mph"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "noduri"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#, fuzzy
+msgid "Show"
+msgstr "Afisaj Munitie"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#, fuzzy
+msgid "Top speed"
+msgstr "Viteza Zoom:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#, fuzzy
+msgid "Acceleration:"
+msgstr "Reflectii:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Fereastra Powerup"
msgid "Pressed Keys Panel"
msgstr "Fereastra Taste Apasate"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Dezactivata"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Activa pentru spectatori"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr "Mereu activa"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
msgid "Forced aspect:"
msgstr "Aspect fortat:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Opacitate:"
msgid "Score Panel"
msgstr "Fereastra Scor"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#, fuzzy
+msgid "Off"
+msgstr "Dezactivat"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Fereastra Timp"
msgid "Fade effect:"
msgstr "Atenuare opacitate:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "Nici una"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Glisare"
msgid "Alpha"
msgstr "Opacitate"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#, fuzzy
+msgid "EF^Both"
+msgstr "Ambele"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Iconuri arme:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Afisaj ID arme ca:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "Nici una"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Numar"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Tasta"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Afisaj Acuratete"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Afisaj Munitie"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Culoare bara munitie:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Opacitate bara munitie:"
msgid "Panel background defaults:"
msgstr "Setari normale fond:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Fundal:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Dezactivat"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Culoare:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Marime borduri:"
msgid "Team color:"
msgstr "Culoare echipa:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Testare culoare echipa in timpul configurarii"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Ajustare:"
msgstr "Modificari speciale..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Setari avansate..."
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Aplica imediat"
msgid "Draw 1st person weapon model"
msgstr "Afisaj model 1st person"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Aliniere stanga"
-
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Aliniere dreapta"
+msgid "Center"
+msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Oglindire orizontala ecran"
msgid "Motion blur:"
msgstr "Blurare viteza:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+#, fuzzy
+msgid "Damage & water blur"
msgstr "Blurare ranire:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+#, fuzzy
+msgid "Powerup sharpen"
+msgstr "Fereastra Powerup"
+
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgstr "Taste:"
msgid "Sensitivity:"
msgstr "Sensitivitate:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Viteza mouse in meniu:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Filtrare mouse"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Inversare mouse"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Utilizare joystick"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Dezactivare acceleratie mouse din OS"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"enter\" inchide si consola"
msgstr "Afisaj cadre pe secunda"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Vitezometru"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (ascuns)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "m/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "km/h"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "mph"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "noduri"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Afisaj metru acceleratie"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Marime metru acceleratie:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Minimizare latenta control"
msgid "Gamma:"
msgstr "Gama:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Exagerare contrast:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Saturatie:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Ambianta:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Intensitate:"
msgid "Update to %s now!"
msgstr "Updatati la %s acum!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1EROARE: Comprimarea texturilor este necesara dar nu si suportata.\n"
"^1Asteptati-va la probleme vizuale.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Asalt"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Captureaza Steagul"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Meciul Mortii"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Dominatie"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Inghet"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Vanatoarea Cheilor"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Ultimul Supravietuitor"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Cursa"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Cursa CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Runematch"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Meciul Mortii (in echipa)"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "Arunca @!#%'n Tuba"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Fundal:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Setare normala"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Utilizare setare normala"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Culoare echipa:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Activare panou"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:577
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s a uitat unde a pus plasma"
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:579
#, c-format
msgid "%s played with plasma"
msgstr "%s s-a jucat cu plasma"
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:586
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s tocmai a observat bilele albastre ale lui %s"
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:588
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s a intrat in contact cu bila albastra a lui %s"
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:593
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s a simtit forta electrica a combinatiei lui %s"
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:595
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s s-a apropiat prea mult de raza albastra a lui %s"
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:597
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s a fost lovit de raza albastra a lui %s"
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:379
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s si-a incercat propria grenada"
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:381
#, c-format
msgid "%s detonated"
msgstr "%s a detonat"
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:387
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s nu a vazut grenada lui %s"
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:389
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s aproape ca s-a ferit de grenada lui %s"
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s a mancat grenada lui %s"
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s s-a jucat cu rachete"
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s a sperat ca rachetele lui %s nu vor ricosa"
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "%s a fost batut mar de %s"
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s a reusit imposibilul"
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr "%s s-a lovit prea mult cu laserul"
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr "%s a fost taiat in doua de socul lui %s"
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr "%s a fost omorat cu laser de %s"
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s a explodat"
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr "%s s-a apropiat prea mult de mina lui %s"
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr "%s aproape ca s-a ferit de mina lui %s"
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr "%s a calcat pe mina lui %s"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "%s a fost vaporizat de %s"
msgid "%s felt %s doing the impossible to him"
msgstr "%s a simtit cum %s a reusit imposibilul"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr ""
+
+#: qcsrc/server/w_rifle.qc:233
+#, c-format
+msgid "%s shot themself automatically"
+msgstr "%s s-a impuscat automat"
+
+#: qcsrc/server/w_rifle.qc:235
+#, c-format
+msgid "%s sniped themself somehow"
+msgstr "%s s-a impuscat oarecum cu luneta"
+
+#: qcsrc/server/w_rifle.qc:242
+#, c-format
+msgid "%s failed to hide from %s's bullet hail"
+msgstr "%s nu a reusit sa se ascunda de ploaia de gloante a lui %s"
+
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
+msgstr "%s a murit in ploaia de gloante a lui %s"
+
+#: qcsrc/server/w_rifle.qc:251
+#, c-format
+msgid "%s failed to hide from %s's rifle"
+msgstr "%s nu a reusit sa se ascunda de luneta lui %s"
+
+#: qcsrc/server/w_rifle.qc:256
+#, c-format
+msgid "%s got hit in the head by %s"
+msgstr "%s a fost lovit in cap de %s"
+
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#, c-format
+msgid "%s was sniped by %s"
+msgstr "%s a fost nimerit cu luneta de %s"
+
#: qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Rocket Launcher"
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
msgid "%s got too close to %s's rocket"
msgstr "%s s-a apropiat prea mult de racheta lui %s"
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
msgid "%s almost dodged %s's rocket"
msgstr "%s aproape ca s-a ferit de racheta lui %s"
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
msgid "%s ate %s's rocket"
msgstr "%s a mancat racheta lui %s"
msgid "Shotgun"
msgstr "Shotgun"
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_shotgun.qc:213
#, c-format
msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr "%2$s ^7l-a plesnit pe %1$s ^7cu o ^2Pusca ^7foarte mare"
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_shotgun.qc:215
#, c-format
msgid "%s was gunned by %s"
msgstr "%s a fost impuscat de %s"
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s s-a impuscat automat"
-
-#: qcsrc/server/w_sniperrifle.qc:231
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s s-a impuscat oarecum cu luneta"
-
-#: qcsrc/server/w_sniperrifle.qc:238
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s nu a reusit sa se ascunda de ploaia de gloante a lui %s"
-
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s a murit in ploaia de gloante a lui %s"
-
-#: qcsrc/server/w_sniperrifle.qc:247
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s nu a reusit sa se ascunda de luneta lui %s"
-
-#: qcsrc/server/w_sniperrifle.qc:252
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s a fost lovit in cap de %s"
-
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "%s a fost nimerit cu luneta de %s"
-
#: qcsrc/server/w_tuba.qc:2
#, c-format
msgid "@!#%'n Tuba"
msgid "%s was riddled full of holes by %s"
msgstr "%s a fost gaurit de %s"
+#~ msgid "Speedometer"
+#~ msgstr "Vitezometru"
+
+#~ msgid "qu/s (hidden)"
+#~ msgstr "qu/s (ascuns)"
+
+#~ msgid "Show accelerometer"
+#~ msgstr "Afisaj metru acceleratie"
+
+#~ msgid "Accelerometer scale:"
+#~ msgstr "Marime metru acceleratie:"
+
+#~ msgid "Sniper Rifle"
+#~ msgstr "Sniper Rifle"
+
#~ msgid "Waypoint settings:"
#~ msgstr "Setari indicatoare:"
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:07+0200\n"
+"POT-Creation-Date: 2011-06-27 18:26+0200\n"
"PO-Revision-Date: 2011-01-20 13:16+0300\n"
"Last-Translator: Nikoli <nikoli@lavabit.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr "Показывать только текущий вид боеприпасов"
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
msgid "Entry fadetime:"
msgstr "Время исчезновения:"
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+#, fuzzy
+msgid "Physics Panel"
+msgstr "Панель чата"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr "Отключена"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#, fuzzy
+msgid "Panel enabled if not observing"
+msgstr "Включена при наблюдении"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr "Всегда включена"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#, fuzzy
+msgid "Status bar"
+msgstr "Включить полосу состояния"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr "Слева"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr "Справа"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#, fuzzy
+msgid "Inward align"
+msgstr "Внутрь"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#, fuzzy
+msgid "Outward align"
+msgstr "Наружу"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#, fuzzy
+msgid "Flip speed/acceleration positions"
+msgstr "Поменять местами здоровье и броню"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#, fuzzy
+msgid "Speed:"
+msgstr "Скорость (кБ/с):"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr "qu/s"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr "м/с"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr "км/ч"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr "м/ч"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr "узлы"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#, fuzzy
+msgid "Show"
+msgstr "Показывать Боеприпасы"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#, fuzzy
+msgid "Top speed"
+msgstr "Скорость увеличения:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#, fuzzy
+msgid "Acceleration:"
+msgstr "Отражения:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr "Панель бонусов"
msgid "Pressed Keys Panel"
msgstr "Панель нажатых кнопок"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr "Отключена"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr "Включена при наблюдении"
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr "Всегда включена"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
msgid "Forced aspect:"
msgstr "Соотношение:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Прозрачность:"
msgid "Score Panel"
msgstr "Таблица Очков"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#, fuzzy
+msgid "Off"
+msgstr "Отключено"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Панель таймера"
msgid "Fade effect:"
msgstr "Эффект исчезновения:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr "Отсутствует"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Скольжение"
msgid "Alpha"
msgstr "Исчезновение"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#, fuzzy
+msgid "EF^Both"
+msgstr "1 и 5 минут"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Иконки оружия:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Показывать ID оружия как:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr "Не показывать"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Число"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Привязка"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Показывать Точность"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Показывать Боеприпасы"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Цвет полосы боеприпасов"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Прозрачность полосы боеприпасов:"
msgid "Panel background defaults:"
msgstr "Фон по умолчанию:"
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Фон:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Отключить"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Цвет:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Ширина краёв:"
msgid "Team color:"
msgstr "Цвет команды:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Проверить цвет команды в режиме настройки"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Промежуток:"
msgstr "Мутаторы..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Доп. настройки..."
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Применить"
msgid "Draw 1st person weapon model"
msgstr "Показывать модель оружия в руках"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr "Слева"
-
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
-msgstr "Справа"
+msgid "Center"
+msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr "Перевернуть изображение по горизонтали"
msgid "Motion blur:"
msgstr "Размытие от движения:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+#, fuzzy
+msgid "Damage & water blur"
msgstr "Размытие от урона:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+#, fuzzy
+msgid "Powerup sharpen"
+msgstr "Панель бонусов"
+
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgstr "Привязки клавиш:"
msgid "Sensitivity:"
msgstr "Чувствительность:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr "Скорость мыши в UI:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr "Фильтр мыши"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr "Обратить мышь"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr "Использовать ввод с джойстика"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr "Отключить ускорение OS мыши"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr "\"открыть консоль\" также закрывает"
msgstr "Показывать кадры/с (FPS)"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr "Спидометр"
-
-# "quake units per second"
-# you can also translate it as inch/second
-# as it is roughly the same
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr "qu/s (без назв.)"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr "qu/s"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr "м/с"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr "км/ч"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr "м/ч"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr "узлы"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr "Показывать акселерометр"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr "Размер акселерометра:"
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr "Уменьшить задержку ввода"
msgid "Gamma:"
msgstr "Гамма:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr "Усиление контраста:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr "Насыщенность:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
msgid "LIT^Ambient:"
msgstr "Окружающее освещение:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr "Мощность:"
msgid "Update to %s now!"
msgstr "Обновитесь до %s сейчас же!"
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"1^ОШИБКА: Сжатие текстур требуется, но не поддерживается.\n"
"1^Ожидайте проблемы с отображением.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Assault"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Capture The Flag"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Domination"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Race"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr "Runematch"
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Швыряние Тубой"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Фон:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "По умолчанию"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Исп. настройки по умолчанию"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Цвет команды:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr "Включить панель"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:577
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:579
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:586
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:588
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:593
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:595
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:597
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:379
#, c-format
msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:381
#, c-format
msgid "%s detonated"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:387
#, c-format
msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:389
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s ate %s's grenade"
msgstr ""
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr ""
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr ""
msgid "Laser"
msgstr "Laser"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr ""
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr ""
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr ""
msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
-msgstr "Rocket Launcher"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
+msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
-msgstr "T.A.G. Seeker"
-
-#: qcsrc/server/w_seeker.qc:659
+#: qcsrc/server/w_rifle.qc:244
#, c-format
-msgid "%s was tagged by %s"
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
-msgstr "Shotgun"
-
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
-msgstr "Sniper Rifle"
-
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s was sniped by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
+msgstr "Rocket Launcher"
+
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s died in %s's bullet hail"
+msgid "%s ate %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_seeker.qc:2
+msgid "T.A.G. Seeker"
+msgstr "T.A.G. Seeker"
+
+#: qcsrc/server/w_seeker.qc:659
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_shotgun.qc:2
+msgid "Shotgun"
+msgstr "Shotgun"
+
+#: qcsrc/server/w_shotgun.qc:213
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_shotgun.qc:215
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s was gunned by %s"
msgstr ""
#: qcsrc/server/w_tuba.qc:2
msgid "%s was riddled full of holes by %s"
msgstr ""
+#~ msgid "Speedometer"
+#~ msgstr "Спидометр"
+
+# "quake units per second"
+# you can also translate it as inch/second
+# as it is roughly the same
+#~ msgid "qu/s (hidden)"
+#~ msgstr "qu/s (без назв.)"
+
+#~ msgid "Show accelerometer"
+#~ msgstr "Показывать акселерометр"
+
+#~ msgid "Accelerometer scale:"
+#~ msgstr "Размер акселерометра:"
+
+#~ msgid "Sniper Rifle"
+#~ msgstr "Sniper Rifle"
+
#~ msgid "Waypoint settings:"
#~ msgstr "Настройки отметок:"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 10:06+0200\n"
+"POT-Creation-Date: 2011-06-27 18:24+0200\n"
"PO-Revision-Date: 2011-01-11 22:51+ZONE\n"
"Last-Translator: marcus256 <marcus256@users.sourceforge.net>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:57
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgid "Show only current ammo type"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+msgid "Align icon:"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
msgid "Entry fadetime:"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+msgid "Panel disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled if not observing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel always enabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+msgid "Status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+msgid "Left align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+msgid "Right align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+msgid "Inward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Outward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+msgid "Flip speed/acceleration positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#, fuzzy
+msgid "Speed:"
+msgstr "Hastighet (kB/s):"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+msgid "qu/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "m/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "km/h"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "mph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "knots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#, fuzzy
+msgid "Show"
+msgstr "Visa Ammunition"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#, fuzzy
+msgid "Top speed"
+msgstr "Nätverkshastighet:"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+msgid "Acceleration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Include vertical acceleration"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
msgstr ""
msgid "Pressed Keys Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
-msgid "Panel disabled"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
msgid "Panel enabled when spectating"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
-msgid "Panel always enabled"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
msgid "Forced aspect:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:154
-#: qcsrc/menu/xonotic/util.qc:608
+#: qcsrc/menu/xonotic/util.qc:600
msgid "Alpha:"
msgstr "Alfa:"
msgid "Score Panel"
msgstr "Poängpanel"
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "Pure"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr ""
msgid "Fade effect:"
msgstr "Uttoningseffekt:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
msgstr "Ingen"
msgid "Alpha"
msgstr "Alfa"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#, fuzzy
+msgid "EF^Both"
+msgstr "Både och"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgstr "Vapenikoner:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
msgid "Show weapon ID as:"
msgstr "Visa vapen-ID som:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
msgid "SHOWAS^None"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
msgid "Number"
msgstr "Nummer"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Bind"
msgstr "Koppla"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Show Accuracy"
msgstr "Visa Noggrannhet"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
msgid "Show Ammo"
msgstr "Visa Ammunition"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Ammo bar color:"
msgstr "Färg på ammoraden:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
msgid "Ammo bar alpha:"
msgstr "Alfa på ammoraden:"
msgid "Panel background defaults:"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+msgid "Background:"
+msgstr "Bakgrund:"
+
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Inaktivera"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Färg:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Ramstorlek:"
msgid "Team color:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Testa lagfärg i konfigureringsläge"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Utfyllnad:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Apply immediately"
msgstr "Tillämpa nu"
msgid "Draw 1st person weapon model"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
-msgid "Left align"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
-msgid "Right align"
+msgid "Center"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
msgstr ""
msgid "Motion blur:"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+msgid "Damage & water blur"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-msgid "Damage blur:"
+msgid "Powerup sharpen"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Sensitivity:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:49
+#: qcsrc/menu/xonotic/dialog_settings_input.c:51
msgid "UI mouse speed:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:52
+#: qcsrc/menu/xonotic/dialog_settings_input.c:55
msgid "Mouse filter"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:54
+#: qcsrc/menu/xonotic/dialog_settings_input.c:57
msgid "Invert mouse"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-#: qcsrc/menu/xonotic/dialog_settings_input.c:59
+#: qcsrc/menu/xonotic/dialog_settings_input.c:60
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
msgid "Use joystick input"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:62
-#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+#: qcsrc/menu/xonotic/dialog_settings_input.c:67
msgid "Turn off OS mouse acceleration"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_input.c:66
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
msgid "\"enter console\" also closes"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Speedometer"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
-msgid "qu/s (hidden)"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:58
-msgid "qu/s"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
-msgid "m/s"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:64
-msgid "km/h"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
-msgid "mph"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:68
-msgid "knots"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:71
-msgid "Show accelerometer"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
-msgid "Accelerometer scale:"
-msgstr ""
-
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:80
msgid "Minimize input latency"
msgstr ""
msgid "Gamma:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:89
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
msgid "Contrast boost:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:92
+#: qcsrc/menu/xonotic/dialog_settings_video.c:96
msgid "Saturation:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_settings_video.c:98
+#: qcsrc/menu/xonotic/dialog_settings_video.c:102
#, fuzzy
msgid "LIT^Ambient:"
msgstr "Bakgrund"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:101
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Intensity:"
msgstr ""
msgid "Update to %s now!"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:509
+#: qcsrc/menu/xonotic/util.qc:501
msgid ""
"^1ERROR: Texture compression is required but not supported.\n"
"^1Expect visual problems.\n"
"^1FEL: Texturkompression krävs men stöds ej.\n"
"^1Räkna med visuella problem.\n"
-#: qcsrc/menu/xonotic/util.qc:531
+#: qcsrc/menu/xonotic/util.qc:523
msgid "Arena"
msgstr "Arena"
-#: qcsrc/menu/xonotic/util.qc:532
+#: qcsrc/menu/xonotic/util.qc:524
msgid "Assault"
msgstr "Anfall"
-#: qcsrc/menu/xonotic/util.qc:533
+#: qcsrc/menu/xonotic/util.qc:525
msgid "Capture The Flag"
msgstr "Erövra Flaggan"
-#: qcsrc/menu/xonotic/util.qc:534
+#: qcsrc/menu/xonotic/util.qc:526
msgid "Clan Arena"
msgstr "Klan Arena"
-#: qcsrc/menu/xonotic/util.qc:535
+#: qcsrc/menu/xonotic/util.qc:527
msgid "Deathmatch"
msgstr "Dödsmatch"
-#: qcsrc/menu/xonotic/util.qc:536
+#: qcsrc/menu/xonotic/util.qc:528
msgid "Domination"
msgstr "Dominering"
-#: qcsrc/menu/xonotic/util.qc:537
+#: qcsrc/menu/xonotic/util.qc:529
msgid "Freeze Tag"
msgstr "Frys-Kull"
-#: qcsrc/menu/xonotic/util.qc:538
+#: qcsrc/menu/xonotic/util.qc:530
msgid "Keepaway"
msgstr "Håll Dig Undan"
-#: qcsrc/menu/xonotic/util.qc:539
+#: qcsrc/menu/xonotic/util.qc:531
msgid "Key Hunt"
msgstr "Nyckeljakt"
-#: qcsrc/menu/xonotic/util.qc:540
+#: qcsrc/menu/xonotic/util.qc:532
msgid "Last Man Standing"
msgstr "Herre På Täppan"
-#: qcsrc/menu/xonotic/util.qc:541
+#: qcsrc/menu/xonotic/util.qc:533
msgid "Nexball"
msgstr "Nexboll"
-#: qcsrc/menu/xonotic/util.qc:542
+#: qcsrc/menu/xonotic/util.qc:534
msgid "Onslaught"
msgstr "Stormning"
-#: qcsrc/menu/xonotic/util.qc:543
+#: qcsrc/menu/xonotic/util.qc:535
msgid "Race"
msgstr "Lopp"
-#: qcsrc/menu/xonotic/util.qc:544
+#: qcsrc/menu/xonotic/util.qc:536
msgid "Race CTS"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:545
+#: qcsrc/menu/xonotic/util.qc:537
msgid "Runematch"
msgstr ""
-#: qcsrc/menu/xonotic/util.qc:546
+#: qcsrc/menu/xonotic/util.qc:538
msgid "Team Deathmatch"
msgstr "Dödsmatch i Lag"
-#: qcsrc/menu/xonotic/util.qc:565
+#: qcsrc/menu/xonotic/util.qc:557
#, c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tubakastning"
-#: qcsrc/menu/xonotic/util.qc:583
-msgid "Background:"
-msgstr "Bakgrund:"
-
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
-#: qcsrc/menu/xonotic/util.qc:630
+#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Standard"
-#: qcsrc/menu/xonotic/util.qc:596
+#: qcsrc/menu/xonotic/util.qc:588
msgid "Use default"
msgstr "Använd standard"
-#: qcsrc/menu/xonotic/util.qc:616
+#: qcsrc/menu/xonotic/util.qc:608
msgid "Team Color:"
msgstr "Lagfärg:"
-#: qcsrc/menu/xonotic/util.qh:49
+#: qcsrc/menu/xonotic/util.qh:47
msgid "Enable panel"
msgstr ""
msgid "Electro"
msgstr ""
-#: qcsrc/server/w_electro.qc:571
+#: qcsrc/server/w_electro.qc:577
#, c-format
msgid "%s could not remember where they put plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:573
+#: qcsrc/server/w_electro.qc:579
#, c-format
msgid "%s played with plasma"
msgstr ""
-#: qcsrc/server/w_electro.qc:580
+#: qcsrc/server/w_electro.qc:586
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:582
+#: qcsrc/server/w_electro.qc:588
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr ""
-#: qcsrc/server/w_electro.qc:587
+#: qcsrc/server/w_electro.qc:593
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr ""
-#: qcsrc/server/w_electro.qc:589
+#: qcsrc/server/w_electro.qc:595
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr ""
-#: qcsrc/server/w_electro.qc:591
+#: qcsrc/server/w_electro.qc:597
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr ""
msgid "Mortar"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:378
+#: qcsrc/server/w_grenadelauncher.qc:379
#, c-format
msgid "%s tried out his own grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:380
+#: qcsrc/server/w_grenadelauncher.qc:381
#, c-format
msgid "%s detonated"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:386
+#: qcsrc/server/w_grenadelauncher.qc:387
#, c-format
msgid "%s didn't see %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:388
+#: qcsrc/server/w_grenadelauncher.qc:389
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr ""
-#: qcsrc/server/w_grenadelauncher.qc:390
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s ate %s's grenade"
msgstr ""
msgid "Hagar"
msgstr ""
-#: qcsrc/server/w_hagar.qc:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr ""
-#: qcsrc/server/w_hagar.qc:213
+#: qcsrc/server/w_hagar.qc:386
#, c-format
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr ""
-#: qcsrc/server/w_hagar.qc:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr ""
msgid "Grappling Hook"
msgstr ""
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr ""
msgid "Laser"
msgstr "Master:"
-#: qcsrc/server/w_laser.qc:305
+#: qcsrc/server/w_laser.qc:311
#, c-format
msgid "%s lasered themself to hell"
msgstr ""
-#: qcsrc/server/w_laser.qc:309
+#: qcsrc/server/w_laser.qc:315
#, c-format
msgid "%s was cut in half by %s's gauntlet"
msgstr ""
-#: qcsrc/server/w_laser.qc:311
+#: qcsrc/server/w_laser.qc:317
#, c-format
msgid "%s was lasered to death by %s"
msgstr ""
msgid "Mine Layer"
msgstr "En Spelare"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:499
+#: qcsrc/server/w_minelayer.qc:527
#, c-format
msgid "%s got too close to %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:501
+#: qcsrc/server/w_minelayer.qc:529
#, c-format
msgid "%s almost dodged %s's mine"
msgstr ""
-#: qcsrc/server/w_minelayer.qc:503
+#: qcsrc/server/w_minelayer.qc:531
#, c-format
msgid "%s stepped on %s's mine"
msgstr ""
msgid "MinstaNex"
msgstr ""
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#, c-format
+msgid "%s is now thinking with portals"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr ""
msgid "%s felt %s doing the impossible to him"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
+#: qcsrc/server/w_rifle.qc:2
+msgid "Rifle"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:504
+#: qcsrc/server/w_rifle.qc:233
#, c-format
-msgid "%s got too close to %s's rocket"
+msgid "%s shot themself automatically"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:506
+#: qcsrc/server/w_rifle.qc:235
#, c-format
-msgid "%s almost dodged %s's rocket"
+msgid "%s sniped themself somehow"
msgstr ""
-#: qcsrc/server/w_rocketlauncher.qc:508
+#: qcsrc/server/w_rifle.qc:242
#, c-format
-msgid "%s ate %s's rocket"
+msgid "%s failed to hide from %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
+#: qcsrc/server/w_rifle.qc:244
+#, c-format
+msgid "%s died in %s's bullet hail"
msgstr ""
-#: qcsrc/server/w_seeker.qc:659
+#: qcsrc/server/w_rifle.qc:251
#, c-format
-msgid "%s was tagged by %s"
+msgid "%s failed to hide from %s's rifle"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:2
-#, fuzzy
-msgid "Shotgun"
-msgstr "Kort"
-
-#: qcsrc/server/w_shotgun.qc:207
+#: qcsrc/server/w_rifle.qc:256
#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+msgid "%s got hit in the head by %s"
msgstr ""
-#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
#, c-format
-msgid "%s was gunned by %s"
+msgid "%s was sniped by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:2
-msgid "Sniper Rifle"
+#: qcsrc/server/w_rocketlauncher.qc:2
+msgid "Rocket Launcher"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:229
+#: qcsrc/server/w_rocketlauncher.qc:505
#, c-format
-msgid "%s shot themself automatically"
+msgid "%s got too close to %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:231
+#: qcsrc/server/w_rocketlauncher.qc:507
#, c-format
-msgid "%s sniped themself somehow"
+msgid "%s almost dodged %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:238
+#: qcsrc/server/w_rocketlauncher.qc:509
#, c-format
-msgid "%s failed to hide from %s's bullet hail"
+msgid "%s ate %s's rocket"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:240
-#, c-format
-msgid "%s died in %s's bullet hail"
+#: qcsrc/server/w_seeker.qc:2
+msgid "T.A.G. Seeker"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:247
+#: qcsrc/server/w_seeker.qc:659
#, c-format
-msgid "%s failed to hide from %s's rifle"
+msgid "%s was tagged by %s"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:252
+#: qcsrc/server/w_shotgun.qc:2
+#, fuzzy
+msgid "Shotgun"
+msgstr "Kort"
+
+#: qcsrc/server/w_shotgun.qc:213
#, c-format
-msgid "%s got hit in the head by %s"
+msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
msgstr ""
-#: qcsrc/server/w_sniperrifle.qc:254 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_shotgun.qc:215
#, c-format
-msgid "%s was sniped by %s"
+msgid "%s was gunned by %s"
msgstr ""
#: qcsrc/server/w_tuba.qc:2
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
+++ /dev/null
-erebus,erebusfullbright
-erebus.001,shadowhead
+++ /dev/null
-//TAG: soldier
-//affirmative sound/player/carni-lycan/player/affirmative 0
-attack sound/player/soldier/coms/attack 0
-//attacking sound/player/carni-lycan/player/attacking 0
-attackinfive sound/player/soldier/coms/attackinfive 0
-coverme sound/player/soldier/coms/coverme 0
-defend sound/player/soldier/coms/defend 0
-//defending sound/player/carni-lycan/player/defending 0
-//droppedflag sound/player/carni-lycan/player/droppedflag 0
-flagcarriertakingdamage sound/player/soldier/coms/flagcarriertakingdamage 0
-freelance sound/player/soldier/coms/freelance 2
-getflag sound/player/soldier/coms/getflag 0
-incoming sound/player/soldier/coms/incoming 0
-meet sound/player/soldier/coms/meet 0
-needhelp sound/player/soldier/coms/needhelp 2
-//negative sound/player/carni-lycan/player/negative 0
-//onmyway sound/player/carni-lycan/player/onmyway 0
-//roaming sound/player/carni-lycan/player/roaming 0
-//seenenemy sound/player/carni-lycan/player/seenenemy 0
-seenflag sound/player/soldier/coms/seenflag 0
-taunt sound/player/soldier/coms/taunt 3
-teamshoot sound/player/soldier/coms/teamshoot 3
-death sound/player/soldier/player/death 3
-drown sound/player/soldier/player/drown 0
-fall sound/player/soldier/player/fall 0
-falling sound/player/soldier/player/falling 0
-gasp sound/player/soldier/player/gasp 0
-jump sound/player/soldier/player/jump 0
-pain25 sound/player/soldier/player/pain25 0
-pain50 sound/player/soldier/player/pain50 0
-pain75 sound/player/soldier/player/pain75 0
-pain100 sound/player/soldier/player/pain100 0
+++ /dev/null
-name Glowing Erebus
-species human
-sex Male
-weight 106
-age 26
-
-Heavyweight Xonotic Solider with LEDs
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
+++ /dev/null
-erebus,erebusfullbright
-erebus.001,shadowhead
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
+++ /dev/null
-erebus,erebusfullbright
-erebus.001,shadowhead
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
-0 36 15.000000 0 // dieone
-36 20 15.000000 0 // dietwo
-56 15 15.000000 1 // draw
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
71 20 15.000000 1 // duck
91 21 30.000000 1 // duckwalk
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
--- /dev/null
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
+71 20 15.000000 1 // duck
+91 21 30.000000 1 // duckwalk
+112 16 15.000000 0 // duckjump
+128 15 5.000000 1 // duckidle
+143 41 5.000000 1 // idle
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
--- /dev/null
+erebus,erebusfullbright
+erebus.001,shadowhead
--- /dev/null
+//TAG: soldier
+//affirmative sound/player/carni-lycan/player/affirmative 0
+attack sound/player/soldier/coms/attack 0
+//attacking sound/player/carni-lycan/player/attacking 0
+attackinfive sound/player/soldier/coms/attackinfive 0
+coverme sound/player/soldier/coms/coverme 0
+defend sound/player/soldier/coms/defend 0
+//defending sound/player/carni-lycan/player/defending 0
+//droppedflag sound/player/carni-lycan/player/droppedflag 0
+flagcarriertakingdamage sound/player/soldier/coms/flagcarriertakingdamage 0
+freelance sound/player/soldier/coms/freelance 2
+getflag sound/player/soldier/coms/getflag 0
+incoming sound/player/soldier/coms/incoming 0
+meet sound/player/soldier/coms/meet 0
+needhelp sound/player/soldier/coms/needhelp 2
+//negative sound/player/carni-lycan/player/negative 0
+//onmyway sound/player/carni-lycan/player/onmyway 0
+//roaming sound/player/carni-lycan/player/roaming 0
+//seenenemy sound/player/carni-lycan/player/seenenemy 0
+seenflag sound/player/soldier/coms/seenflag 0
+taunt sound/player/soldier/coms/taunt 3
+teamshoot sound/player/soldier/coms/teamshoot 3
+death sound/player/soldier/player/death 3
+drown sound/player/soldier/player/drown 0
+fall sound/player/soldier/player/fall 0
+falling sound/player/soldier/player/falling 0
+gasp sound/player/soldier/player/gasp 0
+jump sound/player/soldier/player/jump 0
+pain25 sound/player/soldier/player/pain25 0
+pain50 sound/player/soldier/player/pain50 0
+pain75 sound/player/soldier/player/pain75 0
+pain100 sound/player/soldier/player/pain100 0
--- /dev/null
+name Mega Erebus
+species human
+sex Male
+weight 210
+age 26
+
+Heavyweight Xonotic Solider
--- /dev/null
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
+71 20 15.000000 1 // duck
+91 21 30.000000 1 // duckwalk
+112 16 15.000000 0 // duckjump
+128 15 5.000000 1 // duckidle
+143 41 5.000000 1 // idle
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
--- /dev/null
+erebus,erebusfullbright
+erebus.001,shadowhead
--- /dev/null
+0 36 30.000000 0 // dieone
+36 20 25.000000 0 // dietwo
+56 15 30.000000 1 // draw
+71 20 15.000000 1 // duck
+91 21 30.000000 1 // duckwalk
+112 16 15.000000 0 // duckjump
+128 15 5.000000 1 // duckidle
+143 41 5.000000 1 // idle
+184 160 25.000000 0 // jump
+344 15 24.000000 0 // painone
+359 17 34.000000 0 // paintwo
+376 3 3.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 20 29.000000 1 // run
+421 20 29.000000 1 // runbackwards
+442 20 29.000000 1 // strafeleft
+463 20 29.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 20 29.000000 1 // forwardright
+509 20 29.000000 1 // forwardleft
+530 20 29.000000 1 // backright
+551 20 29.000000 1 // backleft
+572 21 20.000000 0 // melee
--- /dev/null
+erebus,erebusfullbright
+erebus.001,shadowhead
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
109 16 15.000000 0 // duckjump
125 15 5.000000 1 // duckidle
140 16 5.000000 1 // idle
-156 16 15.000000 0 // jump
-172 15 15.000000 0 // painone
-187 17 15.000000 0 // paintwo
-204 5 15.000000 0 // shoot
-209 21 15.000000 1 // taunt
-230 21 40.000000 1 // run
-251 21 40.000000 1 // runbackwards
-272 21 40.000000 1 // strafeleft
-293 21 40.000000 1 // straferight
-314 2 15.000000 0 // deadone
-316 2 15.000000 0 // deadtwo
-318 21 40.000000 1 // forwardright
-339 21 40.000000 1 // forwardleft
-360 21 40.000000 1 // backright
-381 21 40.000000 1 // backleft
-402 21 20.000000 0 // melee
\ No newline at end of file
+156 160 25.000000 0 // jump
+316 15 15.000000 0 // painone
+331 17 15.000000 0 // paintwo
+348 5 15.000000 0 // shoot
+353 21 15.000000 1 // taunt
+374 21 40.000000 1 // run
+395 21 40.000000 1 // runbackwards
+416 21 40.000000 1 // strafeleft
+437 21 40.000000 1 // straferight
+458 2 15.000000 0 // deadone
+460 2 15.000000 0 // deadtwo
+462 21 40.000000 1 // forwardright
+483 21 40.000000 1 // forwardleft
+504 21 40.000000 1 // backright
+525 21 40.000000 1 // backleft
+546 21 20.000000 0 // melee
\ No newline at end of file
109 16 15.000000 0 // duckjump
125 15 5.000000 1 // duckidle
140 16 5.000000 1 // idle
-156 16 15.000000 0 // jump
-172 15 15.000000 0 // painone
-187 17 15.000000 0 // paintwo
-204 5 15.000000 0 // shoot
-209 21 15.000000 1 // taunt
-230 21 40.000000 1 // run
-251 21 40.000000 1 // runbackwards
-272 21 40.000000 1 // strafeleft
-293 21 40.000000 1 // straferight
-314 2 15.000000 0 // deadone
-316 2 15.000000 0 // deadtwo
-318 21 40.000000 1 // forwardright
-339 21 40.000000 1 // forwardleft
-360 21 40.000000 1 // backright
-381 21 40.000000 1 // backleft
-402 21 20.000000 0 // melee
\ No newline at end of file
+156 160 25.000000 0 // jump
+316 15 15.000000 0 // painone
+331 17 15.000000 0 // paintwo
+348 5 15.000000 0 // shoot
+353 21 15.000000 1 // taunt
+374 21 40.000000 1 // run
+395 21 40.000000 1 // runbackwards
+416 21 40.000000 1 // strafeleft
+437 21 40.000000 1 // straferight
+458 2 15.000000 0 // deadone
+460 2 15.000000 0 // deadtwo
+462 21 40.000000 1 // forwardright
+483 21 40.000000 1 // forwardleft
+504 21 40.000000 1 // backright
+525 21 40.000000 1 // backleft
+546 21 20.000000 0 // melee
\ No newline at end of file
109 16 15.000000 0 // duckjump
125 15 5.000000 1 // duckidle
140 16 5.000000 1 // idle
-156 16 15.000000 0 // jump
-172 15 15.000000 0 // painone
-187 17 15.000000 0 // paintwo
-204 5 15.000000 0 // shoot
-209 21 15.000000 1 // taunt
-230 21 40.000000 1 // run
-251 21 40.000000 1 // runbackwards
-272 21 40.000000 1 // strafeleft
-293 21 40.000000 1 // straferight
-314 2 15.000000 0 // deadone
-316 2 15.000000 0 // deadtwo
-318 21 40.000000 1 // forwardright
-339 21 40.000000 1 // forwardleft
-360 21 40.000000 1 // backright
-381 21 40.000000 1 // backleft
-402 21 20.000000 0 // melee
\ No newline at end of file
+156 160 25.000000 0 // jump
+316 15 15.000000 0 // painone
+331 17 15.000000 0 // paintwo
+348 5 15.000000 0 // shoot
+353 21 15.000000 1 // taunt
+374 21 40.000000 1 // run
+395 21 40.000000 1 // runbackwards
+416 21 40.000000 1 // strafeleft
+437 21 40.000000 1 // straferight
+458 2 15.000000 0 // deadone
+460 2 15.000000 0 // deadtwo
+462 21 40.000000 1 // forwardright
+483 21 40.000000 1 // forwardleft
+504 21 40.000000 1 // backright
+525 21 40.000000 1 // backleft
+546 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
112 16 15.000000 0 // duckjump
128 15 5.000000 1 // duckidle
143 41 5.000000 1 // idle
-184 21 25.000000 0 // jump
-205 15 15.000000 0 // painone
-220 17 15.000000 0 // paintwo
-237 3 15.000000 0 // shoot
-240 21 15.000000 1 // taunt
-261 21 35.000000 1 // run
-282 21 35.000000 1 // runbackwards
-303 21 35.000000 1 // strafeleft
-324 21 35.000000 1 // straferight
-345 2 15.000000 0 // deadone
-347 2 15.000000 0 // deadtwo
-349 21 35.000000 1 // forwardright
-370 21 35.000000 1 // forwardleft
-391 21 35.000000 1 // backright
-412 21 30.000000 1 // backleft
-433 21 20.000000 0 // melee
\ No newline at end of file
+184 160 25.000000 0 // jump
+344 15 15.000000 0 // painone
+359 17 15.000000 0 // paintwo
+376 3 15.000000 0 // shoot
+379 21 15.000000 1 // taunt
+400 21 35.000000 1 // run
+421 21 35.000000 1 // runbackwards
+442 21 35.000000 1 // strafeleft
+463 21 35.000000 1 // straferight
+484 2 15.000000 0 // deadone
+486 2 15.000000 0 // deadtwo
+488 21 35.000000 1 // forwardright
+598 21 35.000000 1 // forwardleft
+530 21 35.000000 1 // backright
+551 21 30.000000 1 // backleft
+572 21 20.000000 0 // melee
\ No newline at end of file
109 16 15.000000 0 // duckjump
125 15 5.000000 1 // duckidle
140 16 5.000000 1 // idle
-156 16 15.000000 0 // jump
-172 15 15.000000 0 // painone
-187 17 15.000000 0 // paintwo
-204 5 15.000000 0 // shoot
-209 21 15.000000 1 // taunt
-230 21 40.000000 1 // run
-251 21 40.000000 1 // runbackwards
-272 21 40.000000 1 // strafeleft
-293 21 40.000000 1 // straferight
-314 2 15.000000 0 // deadone
-316 2 15.000000 0 // deadtwo
-318 21 40.000000 1 // forwardright
-339 21 40.000000 1 // forwardleft
-360 21 40.000000 1 // backright
-381 21 40.000000 1 // backleft
-402 21 20.000000 0 // melee
\ No newline at end of file
+156 160 25.000000 0 // jump
+316 15 15.000000 0 // painone
+331 17 15.000000 0 // paintwo
+348 5 15.000000 0 // shoot
+353 21 15.000000 1 // taunt
+374 21 40.000000 1 // run
+395 21 40.000000 1 // runbackwards
+416 21 40.000000 1 // strafeleft
+437 21 40.000000 1 // straferight
+458 2 15.000000 0 // deadone
+460 2 15.000000 0 // deadtwo
+462 21 40.000000 1 // forwardright
+483 21 40.000000 1 // forwardleft
+504 21 40.000000 1 // backright
+525 21 40.000000 1 // backleft
+546 21 20.000000 0 // melee
\ No newline at end of file
109 16 15.000000 0 // duckjump
125 15 5.000000 1 // duckidle
140 16 5.000000 1 // idle
-156 16 15.000000 0 // jump
-172 15 15.000000 0 // painone
-187 17 15.000000 0 // paintwo
-204 5 15.000000 0 // shoot
-209 21 15.000000 1 // taunt
-230 21 40.000000 1 // run
-251 21 40.000000 1 // runbackwards
-272 21 40.000000 1 // strafeleft
-293 21 40.000000 1 // straferight
-314 2 15.000000 0 // deadone
-316 2 15.000000 0 // deadtwo
-318 21 40.000000 1 // forwardright
-339 21 40.000000 1 // forwardleft
-360 21 40.000000 1 // backright
-381 21 40.000000 1 // backleft
-402 21 20.000000 0 // melee
\ No newline at end of file
+156 160 25.000000 0 // jump
+316 15 15.000000 0 // painone
+331 17 15.000000 0 // paintwo
+348 5 15.000000 0 // shoot
+353 21 15.000000 1 // taunt
+374 21 40.000000 1 // run
+395 21 40.000000 1 // runbackwards
+416 21 40.000000 1 // strafeleft
+437 21 40.000000 1 // straferight
+458 2 15.000000 0 // deadone
+460 2 15.000000 0 // deadtwo
+462 21 40.000000 1 // forwardright
+483 21 40.000000 1 // forwardleft
+504 21 40.000000 1 // backright
+525 21 40.000000 1 // backleft
+546 21 20.000000 0 // melee
\ No newline at end of file
109 16 15.000000 0 // duckjump
125 15 5.000000 1 // duckidle
140 16 5.000000 1 // idle
-156 16 15.000000 0 // jump
-172 15 15.000000 0 // painone
-187 17 15.000000 0 // paintwo
-204 5 15.000000 0 // shoot
-209 21 15.000000 1 // taunt
-230 21 40.000000 1 // run
-251 21 40.000000 1 // runbackwards
-272 21 40.000000 1 // strafeleft
-293 21 40.000000 1 // straferight
-314 2 15.000000 0 // deadone
-316 2 15.000000 0 // deadtwo
-318 21 40.000000 1 // forwardright
-339 21 40.000000 1 // forwardleft
-360 21 40.000000 1 // backright
-381 21 40.000000 1 // backleft
-402 21 20.000000 0 // melee
\ No newline at end of file
+156 160 25.000000 0 // jump
+316 15 15.000000 0 // painone
+331 17 15.000000 0 // paintwo
+348 5 15.000000 0 // shoot
+353 21 15.000000 1 // taunt
+374 21 40.000000 1 // run
+395 21 40.000000 1 // runbackwards
+416 21 40.000000 1 // strafeleft
+437 21 40.000000 1 // straferight
+458 2 15.000000 0 // deadone
+460 2 15.000000 0 // deadtwo
+462 21 40.000000 1 // forwardright
+483 21 40.000000 1 // forwardleft
+504 21 40.000000 1 // backright
+525 21 40.000000 1 // backleft
+546 21 20.000000 0 // melee
\ No newline at end of file
-1 30 20 1 // forward
-32 30 20 1 // backward
-63 30 20 1 // left
-94 30 20 1 // right
-125 30 20 0 // jump
-0 1 20 0 // idle
+/*
+Generated framegroups file for spiderbot
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 31 30 1 // spiderbot forward
+32 31 30 1 // spiderbot backwards
+63 31 20 1 // spiderbot left
+94 31 20 1 // spiderbot right
+125 31 20 0 // spiderbot jump
+156 1 1 0 // spiderbot idle
+157 12 20 0 // spiderbot jump2
+169 7 20 0 // spiderbot jump_charge
+176 11 15 0 // spiderbot jump_fly
+187 21 20 0 // spiderbot jump_land
+208 51 15 0 // spiderbot death
+259 3 1 0 // spiderbot dead
// actually, what we want is 266.6666 for 180bpm
// but 260 takes same amount of frames and is nicer to mappers
+// jump height == sv_jumpvelocity^2 / (2*sv_gravity)
+// in this case: 42.25 qu
+// player: 24+45 qu
+// total: 111.25qu
+// this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
+// the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
sv_jumpvelocity 260
sv_wateraccelerate -1
sv_waterfriction -1
string w_deathtypestring;
vector w_org, w_backoff;
-float sniperrifle_scope;
+float rifle_scope;
float nex_scope;
float minelayer_maxmines;
void CSQC_Init(void)
{
prvm_language = cvar_string("prvm_language");
-
+
#ifdef USE_FTE
#pragma target ID
__engine_check = checkextension("DP_SV_WRITEPICTURE");
GibSplash_Precache();
Casings_Precache();
DamageInfo_Precache();
+ Vehicles_Precache();
+ turrets_precache();
+
if(autocvar_cl_announcer != cl_announcer_prev) {
Announcer_Precache();
if(cl_announcer_prev)
if(newspectatee_status != spectatee_status)
{
- float i;
-
// clear race stuff
race_laptime = 0;
race_checkpointtime = 0;
{
float nags, i, j, b, f;
- nags = ReadByte();
+ nags = ReadByte(); // NAGS NAGS NAGS NAGS NAGS NAGS NADZ NAGS NAGS NAGS
+
+ if(!(nags & 4))
+ {
+ if(vote_called_vote)
+ strunzone(vote_called_vote);
+ vote_called_vote = string_null;
+ vote_active = 0;
+ }
+ else
+ {
+ vote_active = 1;
+ }
+
+ if(nags & 64)
+ {
+ vote_yescount = ReadByte();
+ vote_nocount = ReadByte();
+ vote_needed = ReadByte();
+ vote_highlighted = ReadChar();
+ }
if(nags & 128)
{
weapon_accuracy[w] = -1;
return;
}
-
+
for(w = 0, f = 1; w <= WEP_LAST - WEP_FIRST; ++w, f *= 2)
{
if(sf & f)
case ENT_CLIENT_LGBEAM: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_LGBEAM); break;
case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); break;
case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break;
+ case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break;
+ case ENT_CLIENT_TURRET: ent_turret(); break;
case ENT_CLIENT_DAMAGEEFFECT: Ent_DamageEffect(); break;
default:
//error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
g_balance_electro_secondary_bouncestop = ReadCoord();
nex_scope = !ReadByte();
- sniperrifle_scope = !ReadByte();
+ rifle_scope = !ReadByte();
serverflags = ReadByte();
playerslots[e].ping_movementloss = ml / 255.0;
}
-void Net_VoteDialog(float highlight) {
- if(highlight) {
- vote_highlighted = ReadByte();
- return;
- }
-
- vote_yescount = ReadByte();
- vote_nocount = ReadByte();
- vote_needed = ReadByte();
- vote_active = 1;
-}
-
-void Net_VoteDialogReset() {
- vote_active = 0;
-}
-
void Net_Notify() {
float type;
type = ReadByte();
{
HUD_Centerprint(ReadString(), ReadString(), ReadShort(), ReadByte());
}
+ else if(type == CSQC_CENTERPRINT_GENERIC)
+ {
+ float id;
+ string s;
+ id = ReadByte();
+ s = ReadString();
+ if (id != 0 && s != "")
+ centerprint_generic(id, s, ReadByte(), ReadByte());
+ else
+ centerprint_generic(id, s, 0, 0);
+ }
}
void Net_WeaponComplain() {
Net_TeamNagger();
bHandled = true;
break;
- case TE_CSQC_VOTE:
- Net_VoteDialog(ReadByte());
- bHandled = true;
- break;
- case TE_CSQC_VOTERESET:
- Net_VoteDialogReset();
- bHandled = true;
- break;
case TE_CSQC_LIGHTNINGARC:
Net_ReadLightningarc();
bHandled = true;
Net_WeaponComplain();
bHandled = true;
break;
+ case TE_CSQC_VEHICLESETUP:
+ Net_VehicleSetup();
+ bHandled = true;
+ break;
default:
// No special logic for this temporary entity; return 0 so the engine can handle it
bHandled = false;
-#define spider_rocket_icon "gfx/vehicles/rocket_ico.tga"
-#define spider_rocket_targ "gfx/vehicles/target.tga"
-#define SPIDER_CROSS "textures/spiderbot/cross.tga"
-#define rkt_size 32
-#define rld_size_x 256
-#define rld_size_y 16
-
-void CSQC_WAKIZASHI_HUD();
-
entity porto;
vector polyline[16];
-float trace_dphitcontents;
-float trace_networkentity;
float Q3SURFACEFLAG_SLICK = 2; // low friction surface
float DPCONTENTS_SOLID = 1; // blocks player movement
float DPCONTENTS_BODY = 32; // blocks player movement
if (previous_game_starttime != startTime) {
if ((time + 5.0) < startTime) {
//if connecting to server while restart was active don't always play prepareforbattle
- sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/prepareforbattle.wav"), VOL_BASEVOICE, ATTN_NONE);
}
if (time < startTime) {
restartAnnouncer = spawn();
zoomspeed = 3.5;
zoomdir = button_zoom;
- if((getstati(STAT_ACTIVEWEAPON) == WEP_NEX && nex_scope) || (getstati(STAT_ACTIVEWEAPON) == WEP_SNIPERRIFLE && sniperrifle_scope)) // do NOT use switchweapon here
+ if(hud == HUD_NORMAL)
+ if((getstati(STAT_ACTIVEWEAPON) == WEP_NEX && nex_scope) || (getstati(STAT_ACTIVEWEAPON) == WEP_RIFLE && rifle_scope)) // do NOT use switchweapon here
zoomdir += button_attack2;
if(spectatee_status > 0 || isdemo())
{
if(spectatorbutton_zoom)
- zoomdir = 0 + !zoomdir;
- // do not even THINK about removing this 0
- // _I_ know what I am doing
- // fteqcc does not
+ {
+ if(zoomdir)
+ zoomdir = 0;
+ else
+ zoomdir = 1;
+ }
+ // fteqcc failed twice here already, don't optimize this
}
if(zoomdir)
else
setsensitivityscale(1);
- velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoomtime), 1);
- avgspeed = avgspeed * (1 - velocityzoom) + (vlen(pmove_vel) / 1000) * velocityzoom;
- velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1);
-
- //print(ftos(avgspeed), " avgspeed, ", ftos(autocvar_cl_velocityzoom), " cvar, ", ftos(velocityzoom), " return\n"); // for debugging
+ if (autocvar_cl_velocityzoom)
+ {
+ velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoomtime), 1);
+ avgspeed = avgspeed * (1 - velocityzoom) + (vlen(pmove_vel) / 1000) * velocityzoom;
+ velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1);
+ //print(ftos(avgspeed), " avgspeed, ", ftos(autocvar_cl_velocityzoom), " cvar, ", ftos(velocityzoom), " return\n"); // for debugging
+ }
+ else
+ velocityzoom = 1;
float frustumx, frustumy, fovx, fovy;
frustumy = tan(fov * M_PI / 360.0) * 0.75 * current_viewzoom * velocityzoom;
case WEP_MINSTANEX:
mv = MOVE_NORMAL;
break;
- case WEP_SNIPERRIFLE:
+ case WEP_RIFLE:
ta = trueaim_rifle;
mv = MOVE_NORMAL;
if(zoomscript_caught)
void PostInit(void);
void CSQC_Demo_Camera();
float HUD_WouldDrawScoreboard();
-float view_set;
float camera_mode;
float reticle_type;
string NextFrameCommand;
void CSQC_SPIDER_HUD();
void CSQC_RAPTOR_HUD();
-vector freeze_pmove_org, freeze_input_angles;
+vector freeze_org, freeze_ang;
entity nightvision_noise, nightvision_noise2;
+#define MAX_TIME_DIFF 5
float pickup_crosshair_time, pickup_crosshair_size;
float hit_time, typehit_time;
float nextsound_hit_time, nextsound_typehit_time;
float myhealth, myhealth_prev;
float myhealth_flash;
+float old_blurradius, old_bluralpha;
+float old_sharpen_intensity;
+
vector myhealth_gentlergb;
float contentavgalpha, liquidalpha_prev;
float eventchase_current_distance;
+vector damage_blurpostprocess, content_blurpostprocess;
+
float checkfail[16];
void CSQC_UpdateView(float w, float h)
entity e;
float fov;
float f, i, j;
- vector v, vo;
+ vector v;
vector vf_size, vf_min;
float a;
+ hud = getstati(STAT_HUD);
button_attack2 = (input_buttons & BUTTON_3);
button_zoom = (input_buttons & BUTTON_4);
+ // FIXME do we need this hack?
+ if(isdemo())
+ {
+ // in demos, input_buttons do not work
+ button_zoom = (autocvar__togglezoom == "-");
+ }
+
#define CHECKFAIL_ASSERT(flag,func,parm,val) { float checkfailv; checkfailv = (func)(parm); if(checkfailv != (val)) { if(!checkfail[(flag)]) localcmd(sprintf("\ncmd checkfail %s %s %d %d\n", #func, parm, val, checkfailv)); checkfail[(flag)] = 1; } } ENDS_WITH_CURLY_BRACE
CHECKFAIL_ASSERT(0, cvar_type, "\{100}\{105}\{118}\{48}\{95}\{101}\{118}\{97}\{100}\{101}", 0);
CHECKFAIL_ASSERT(1, cvar_type, "\{97}\{97}\{95}\{101}\{110}\{97}\{98}\{108}\{101}", 0);
myteam = GetPlayerColor(player_localentnum - 1);
ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
- vo = '0 0 1' * getstati(STAT_VIEWHEIGHT);
-
- warpzone_fixview_origin = pmove_org + vo;
- warpzone_fixview_cl_viewangles = input_angles;
- warpzone_fixview_angles = view_angles;
- WarpZone_FixView();
- pmove_org = warpzone_fixview_origin - vo;
- input_angles = warpzone_fixview_cl_viewangles;
- view_angles = warpzone_fixview_angles;
if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1)
{
- pmove_org = freeze_pmove_org;
- input_angles = view_angles = freeze_input_angles;
- R_SetView(VF_ORIGIN, pmove_org + vo);
- R_SetView(VF_ANGLES, view_angles);
- //R_SetView(VF_CL_VIEWANGLES, input_angles);
+ R_SetView(VF_ORIGIN, freeze_org);
+ R_SetView(VF_ANGLES, freeze_ang);
+ }
+ else
+ {
+ freeze_org = R_SetView3fv(VF_ORIGIN);
+ freeze_ang = R_SetView3fv(VF_ANGLES);
}
- freeze_pmove_org = pmove_org;
- freeze_input_angles = input_angles;
// event chase camera
if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
{
- if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || (autocvar_cl_eventchase_intermission && intermission))
+ if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || intermission)
{
// 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 R_SetView()
vector eventchase_target_origin;
makevectors(view_angles);
// pass 1, used to check where the camera would go and obtain the trace_fraction
- eventchase_target_origin = pmove_org - v_forward * eventchase_current_distance;
+ eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance;
- traceline(pmove_org, eventchase_target_origin, MOVE_WORLDONLY, self);
+ WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self);
// pass 2, also multiplying view_forward with trace_fraction, to prevent the camera from going through walls
// The 0.1 subtraction is to not limit the camera precisely at the wall surface, as that allows the view to poke through
- eventchase_target_origin = pmove_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
+ eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
+ WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self);
- R_SetView(VF_ORIGIN, eventchase_target_origin);
- R_SetView(VF_ANGLES, view_angles);
+ R_SetView(VF_ORIGIN, trace_endpos);
+ R_SetView(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
}
else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
{
}
}
+ WarpZone_FixView();
+ //WarpZone_FixPMove();
+
// Render the Scene
- if(!intermission || !view_set || (intermission && autocvar_cl_eventchase_intermission))
- {
- view_origin = pmove_org + vo;
- view_angles = input_angles;
- makevectors(view_angles);
- view_forward = v_forward;
- view_right = v_right;
- view_up = v_up;
- view_set = 1;
- }
+ view_origin = R_SetView3fv(VF_ORIGIN);
+ view_angles = R_SetView3fv(VF_ANGLES);
+ makevectors(view_angles);
+ view_forward = v_forward;
+ view_right = v_right;
+ view_up = v_up;
#ifdef BLURTEST
if(time > blurtest_time0 && time < blurtest_time1)
TargetMusic_Advance();
Fog_Force();
- drawframetime = max(0.000001, time - drawtime);
+ if(drawtime == 0)
+ drawframetime = 0.01666667; // when we don't know fps yet, we assume 60fps
+ else
+ drawframetime = bound(0.000001, time - drawtime, 1);
drawtime = time;
// watch for gametype changes here...
// ALWAYS Clear Current Scene First
R_ClearScene();
+#ifdef WORKAROUND_XON010
+ if(checkextension("DP_CSQC_ROTATEMOVES"))
+ {
+#endif
+ R_SetView(VF_ORIGIN, view_origin);
+ R_SetView(VF_ANGLES, view_angles);
+#ifdef WORKAROUND_XON010
+ }
+#endif
// FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this
R_SetView(VF_SIZE, vf_size);
R_PolygonVertex(autocvar_vid_conheight * '0 1 0', tc_01, rgb, a);
R_EndPolygon();
}
-
+
// 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 || getstati(STAT_HEALTH) <= 0)
+ if(spectatee_status || getstati(STAT_HEALTH) <= 0 || hud != HUD_NORMAL)
reticle_type = 0; // prevent reticle from showing during the respawn zoom effect or for spectators
- else if(activeweapon == WEP_NEX && (button_zoom || zoomscript_caught) || activeweapon == WEP_SNIPERRIFLE && (button_zoom || zoomscript_caught) || activeweapon == WEP_MINSTANEX && (button_zoom || zoomscript_caught))
+ else if(activeweapon == WEP_NEX && (button_zoom || zoomscript_caught) || activeweapon == WEP_RIFLE && (button_zoom || zoomscript_caught) || activeweapon == WEP_MINSTANEX && (button_zoom || zoomscript_caught))
reticle_type = 2; // nex zoom
else if(button_zoom || zoomscript_caught)
reticle_type = 1; // normal zoom
- else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_SNIPERRIFLE && button_attack2)
+ else if(activeweapon == WEP_NEX && button_attack2 || activeweapon == WEP_RIFLE && button_attack2)
reticle_type = 2; // nex zoom
-
+
if (reticle_type)
{
if(autocvar_cl_reticle_stretch)
{
float contentalpha_temp, incontent, liquidalpha, contentfadetime;
vector liquidcolor;
-
+
switch(pointcontents(view_origin))
{
case CONTENT_WATER:
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;
-
+ 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;
}
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', eX * vid_conwidth + eY * 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)
+ if(autocvar_hud_damage && !autocvar_chase_active)
+
{
splash_size_x = max(vid_conwidth, vid_conheight);
splash_size_y = max(vid_conwidth, vid_conheight);
}
else
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)
+ {
+ 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;
+ }
+ }
+ }
+
+ if(autocvar_hud_postprocessing)
+ {
+ // all of this should be done in the engine eventually
+
+ // enable or disable rendering types if they are used or not
+ if(cvar("r_glsl_postprocess_uservec1_enable") != (cvar("hud_postprocessing_maxbluralpha") != 0))
+ cvar_set("r_glsl_postprocess_uservec1_enable", ftos(cvar("hud_postprocessing_maxbluralpha") != 0));
+ if(cvar("r_glsl_postprocess_uservec2_enable") != (cvar("hud_powerup") != 0))
+ cvar_set("r_glsl_postprocess_uservec2_enable", ftos(cvar("hud_powerup") != 0));
+
+ // lets apply the postprocess effects from the previous two functions if needed
+ if((damage_blurpostprocess_x || content_blurpostprocess_x) && autocvar_chase_active >= 0) // not while the event chase camera is active
+ {
+ 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;
+ }
+
+ float sharpen_intensity;
+ if (getstatf(STAT_STRENGTH_FINISHED) - time > 0)
+ sharpen_intensity += (getstatf(STAT_STRENGTH_FINISHED) - time);
+ if (getstatf(STAT_INVINCIBLE_FINISHED) - time > 0)
+ sharpen_intensity += (getstatf(STAT_INVINCIBLE_FINISHED) - time);
+
+ if(autocvar_hud_powerup && sharpen_intensity > 0 && autocvar_chase_active >= 0) // not while the event chase camera is active
+ {
+ sharpen_intensity = bound(0, sharpen_intensity, 5); // powerup warning time is 5 seconds, so fade the effect from there
+
+ if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible
+ {
+ cvar_set("r_glsl_postprocess_uservec2", strcat("0 ", ftos(-sharpen_intensity * cvar("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;
+ }
}
- // Draw the mouse cursor
- // NOTE: drawpic must happen after R_RenderScene for some reason
- //drawpic(getmousepos(), "gfx/cursor.tga", '11 14 0', '1 1 1', 1, 0);
- //drawstring('50 50', ftos(game), '10 10 0', '1 1 1', 1, 0);
- //self = edict_num(player_localnum);
- //drawstring('0 0', vtos(pmove_org), '8 8 0', '1 1 1', 1, 0);
- //drawstring('0 8', strcat("ORG: ", vtos(self.origin), " state: ", ftos(self.ctf_state), " HP: ", ftos(self.health)), '8 8 0', '1 1 1', 1, 0);
- // as long as the ctf part isn't in, this is useless
if(menu_visible)
menu_show();
hit_time = getstatf(STAT_HIT_TIME);
if(hit_time > nextsound_hit_time && autocvar_cl_hitsound)
{
- sound(world, CHAN_AUTO, "misc/hit.wav", VOL_BASE, ATTN_NONE);
+ if(time - hit_time < MAX_TIME_DIFF) // don't play the sound if it's too old.
+ sound(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTN_NONE);
+
nextsound_hit_time = time + autocvar_cl_hitsound_antispam_time;
}
typehit_time = getstatf(STAT_TYPEHIT_TIME);
- if(typehit_time > nextsound_typehit_time)
+ if(typehit_time > nextsound_typehit_time)
{
- sound(world, CHAN_AUTO, "misc/typehit.wav", VOL_BASE, ATTN_NONE);
+ if(time - typehit_time < MAX_TIME_DIFF) // don't play the sound if it's too old.
+ sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTN_NONE);
+
nextsound_typehit_time = time + autocvar_cl_hitsound_antispam_time;
}
- float hud;
- hud = getstati(STAT_HUD);
- if(hud == HUD_SPIDERBOT)
- CSQC_SPIDER_HUD();
- else if(hud == HUD_WAKIZASHI)
- CSQC_WAKIZASHI_HUD();
- else if(hud == HUD_RAPTOR)
- CSQC_RAPTOR_HUD();
- else
+ //else
{
if(gametype == GAME_FREEZETAG)
{
CSQC_common_hud();
// crosshair goes VERY LAST
- if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1) {
+ if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL) {
string wcross_style;
float wcross_alpha, wcross_resolution;
wcross_style = autocvar_crosshair;
else if(autocvar_crosshair_color_by_health)
{
local float x = getstati(STAT_HEALTH);
-
+
//x = red
//y = green
//z = blue
-
+
wcross_color_z = 0;
-
+
if(x > 200)
{
wcross_color_x = 0;
{
wcross_color_x = 1;
wcross_color_y = 1;
- wcross_color_z = 0.2 + (x-50)*0.02 * 0.8;
+ wcross_color_z = 0.2 + (x-50)*0.02 * 0.8;
}
else if(x > 20)
{
if(autocvar_crosshair_pickup)
{
- if(pickup_crosshair_time < getstatf(STAT_LAST_PICKUP))
+ float stat_pickup_time = getstatf(STAT_LAST_PICKUP);
+
+ if(pickup_crosshair_time < stat_pickup_time)
{
- pickup_crosshair_size = 1;
- pickup_crosshair_time = getstatf(STAT_LAST_PICKUP);
+ if(time - stat_pickup_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old
+ pickup_crosshair_size = 1;
+
+ pickup_crosshair_time = stat_pickup_time;
}
if(pickup_crosshair_size > 0)
wcross_scale += sin(pickup_crosshair_size) * autocvar_crosshair_pickup;
}
-
- vector hitindication_color;
+
if(autocvar_crosshair_hitindication)
{
- hitindication_color = stov(autocvar_crosshair_hitindication_color);
+ vector hitindication_color = stov(autocvar_crosshair_hitindication_color);
if(hitindication_crosshair_time < hit_time)
{
- hitindication_crosshair_size = 1;
+ if(time - hit_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old
+ hitindication_crosshair_size = 1;
+
hitindication_crosshair_time = hit_time;
}
wcross_alpha *= 1 - autocvar__menu_alpha;
wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
- // crosshair rings for weapon stats
- if (autocvar_crosshair_ring || autocvar_crosshair_ring_reload)
+ if(wcross_scale >= 0.001 && wcross_alpha >= 0.001)
{
- // declarations and stats
- float ring_value, ring_scale, ring_alpha, ring_inner_value, ring_inner_alpha;
- string ring_image, ring_inner_image;
- vector ring_rgb, ring_inner_rgb;
-
- ring_scale = autocvar_crosshair_ring_size;
+ // crosshair rings for weapon stats
+ if (autocvar_crosshair_ring || autocvar_crosshair_ring_reload)
+ {
+ // declarations and stats
+ float ring_value, ring_scale, ring_alpha, ring_inner_value, ring_inner_alpha;
+ string ring_image, ring_inner_image;
+ vector ring_rgb, ring_inner_rgb;
- float weapon_clipload, weapon_clipsize;
- weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD);
- weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE);
+ ring_scale = autocvar_crosshair_ring_size;
- float nex_charge, nex_chargepool;
- nex_charge = getstatf(STAT_NEX_CHARGE);
- nex_chargepool = getstatf(STAT_NEX_CHARGEPOOL);
+ float weapon_clipload, weapon_clipsize;
+ weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD);
+ weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE);
- if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
- nex_charge_movingavg = nex_charge;
-
+ float nex_charge, nex_chargepool;
+ nex_charge = getstatf(STAT_NEX_CHARGE);
+ nex_chargepool = getstatf(STAT_NEX_CHARGEPOOL);
- // handle the values
- if (autocvar_crosshair_ring && activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
- {
- if (nex_chargepool || use_nex_chargepool) {
- use_nex_chargepool = 1;
- ring_inner_value = nex_chargepool;
- } else {
- nex_charge_movingavg = (1 - autocvar_crosshair_ring_nex_currentcharge_movingavg_rate) * nex_charge_movingavg + autocvar_crosshair_ring_nex_currentcharge_movingavg_rate * nex_charge;
- ring_inner_value = bound(0, autocvar_crosshair_ring_nex_currentcharge_scale * (nex_charge - nex_charge_movingavg), 1);
- }
-
- ring_inner_alpha = autocvar_crosshair_ring_nex_inner_alpha;
- ring_inner_rgb = eX * autocvar_crosshair_ring_nex_inner_color_red + eY * autocvar_crosshair_ring_nex_inner_color_green + eZ * autocvar_crosshair_ring_nex_inner_color_blue;
- ring_inner_image = "gfx/crosshair_ring_inner.tga";
-
- // draw the outer ring to show the current charge of the weapon
- ring_value = nex_charge;
- ring_alpha = autocvar_crosshair_ring_nex_alpha;
- ring_rgb = wcross_color;
- ring_image = "gfx/crosshair_ring_nexgun.tga";
- }
- else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
- {
- ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
- ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
- ring_rgb = wcross_color;
- ring_image = "gfx/crosshair_ring.tga";
- }
- else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
- {
- ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
- ring_alpha = autocvar_crosshair_ring_hagar_alpha;
- ring_rgb = wcross_color;
- ring_image = "gfx/crosshair_ring.tga";
- }
+ if(nex_charge_movingavg == 0) // this should only happen if we have just loaded up the game
+ nex_charge_movingavg = nex_charge;
- if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
- {
- ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
- ring_scale = autocvar_crosshair_ring_reload_size;
- ring_alpha = autocvar_crosshair_ring_reload_alpha;
- ring_rgb = wcross_color;
-
- // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
- // if a new image for another weapon is added, add the code (and its respective file/value) here
- if ((activeweapon == WEP_SNIPERRIFLE) && (weapon_clipsize == 80))
- ring_image = "gfx/crosshair_ring_sniperrifle.tga";
- else
+
+ // handle the values
+ if (autocvar_crosshair_ring && activeweapon == WEP_NEX && nex_charge && autocvar_crosshair_ring_nex) // ring around crosshair representing velocity-dependent damage for the nex
+ {
+ if (nex_chargepool || use_nex_chargepool) {
+ use_nex_chargepool = 1;
+ ring_inner_value = nex_chargepool;
+ } else {
+ nex_charge_movingavg = (1 - autocvar_crosshair_ring_nex_currentcharge_movingavg_rate) * nex_charge_movingavg + autocvar_crosshair_ring_nex_currentcharge_movingavg_rate * nex_charge;
+ ring_inner_value = bound(0, autocvar_crosshair_ring_nex_currentcharge_scale * (nex_charge - nex_charge_movingavg), 1);
+ }
+
+ ring_inner_alpha = autocvar_crosshair_ring_nex_inner_alpha;
+ ring_inner_rgb = eX * autocvar_crosshair_ring_nex_inner_color_red + eY * autocvar_crosshair_ring_nex_inner_color_green + eZ * autocvar_crosshair_ring_nex_inner_color_blue;
+ ring_inner_image = "gfx/crosshair_ring_inner.tga";
+
+ // draw the outer ring to show the current charge of the weapon
+ ring_value = nex_charge;
+ ring_alpha = autocvar_crosshair_ring_nex_alpha;
+ ring_rgb = wcross_color;
+ ring_image = "gfx/crosshair_ring_nexgun.tga";
+ }
+ else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
+ {
+ ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
+ ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
+ ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring.tga";
- }
+ }
+ else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
+ {
+ ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
+ ring_alpha = autocvar_crosshair_ring_hagar_alpha;
+ ring_rgb = wcross_color;
+ ring_image = "gfx/crosshair_ring.tga";
+ }
+
+ if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring
+ {
+ ring_value = bound(0, weapon_clipload / weapon_clipsize, 1);
+ ring_scale = autocvar_crosshair_ring_reload_size;
+ ring_alpha = autocvar_crosshair_ring_reload_alpha;
+ ring_rgb = wcross_color;
+
+ // Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
+ // if a new image for another weapon is added, add the code (and its respective file/value) here
+ if ((activeweapon == WEP_RIFLE) && (weapon_clipsize == 80))
+ ring_image = "gfx/crosshair_ring_rifle.tga";
+ else
+ ring_image = "gfx/crosshair_ring.tga";
+ }
- if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
- DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, wcross_alpha * ring_inner_alpha, DRAWFLAG_ADDITIVE);
+ if (autocvar_crosshair_ring_inner && ring_inner_value) // lets draw a ring inside a ring so you can ring while you ring
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_inner_image, ring_inner_value, ring_inner_rgb, wcross_alpha * ring_inner_alpha, DRAWFLAG_ADDITIVE);
- if (ring_value)
- DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_image, ring_value, ring_rgb, wcross_alpha * ring_alpha, DRAWFLAG_ADDITIVE);
- }
+ if (ring_value)
+ DrawCircleClippedPic(wcross_origin, wcross_size_x * ring_scale, ring_image, ring_value, ring_rgb, wcross_alpha * ring_alpha, DRAWFLAG_ADDITIVE);
+ }
#define CROSSHAIR_DO_BLUR(M,sz,wcross_name,wcross_alpha) \
- do \
- { \
- if(wcross_blur > 0) \
+ do \
{ \
- for(i = -2; i <= 2; ++i) \
+ if(wcross_blur > 0) \
+ { \
+ for(i = -2; i <= 2; ++i) \
for(j = -2; j <= 2; ++j) \
- M(i,j,sz,wcross_name,wcross_alpha*0.04); \
- } \
- else \
- { \
- M(0,0,sz,wcross_name,wcross_alpha); \
+ M(i,j,sz,wcross_name,wcross_alpha*0.04); \
+ } \
+ else \
+ { \
+ M(0,0,sz,wcross_name,wcross_alpha); \
+ } \
} \
- } \
- while(0)
+ while(0)
#define CROSSHAIR_DRAW_SINGLE(i,j,sz,wcross_name,wcross_alpha) \
- drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y + j * wcross_blur)), wcross_name, sz * wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+ drawpic(wcross_origin - ('0.5 0 0' * (sz * wcross_size_x + i * wcross_blur) + '0 0.5 0' * (sz * wcross_size_y + j * wcross_blur)), wcross_name, sz * wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
#define CROSSHAIR_DRAW(sz,wcross_name,wcross_alpha) \
- CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
+ CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,sz,wcross_name,wcross_alpha)
- if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
- {
- f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
- wcross_size = drawgetimagesize(wcross_name_goal_prev_prev) * wcross_scale;
- CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
- f = 1 - f;
- }
- else
- {
- f = 1;
- }
+ if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
+ {
+ f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
+ wcross_size = drawgetimagesize(wcross_name_goal_prev_prev) * wcross_scale;
+ CROSSHAIR_DRAW(wcross_resolution_goal_prev_prev, wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
+ f = 1 - f;
+ }
+ else
+ {
+ f = 1;
+ }
+ wcross_name_alpha_goal_prev = f;
- wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
- CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
-
- if(autocvar_crosshair_dot)
- {
- vector wcross_color_old;
- wcross_color_old = wcross_color;
- if(autocvar_crosshair_dot_color != "0")
- wcross_color = stov(autocvar_crosshair_dot_color);
- CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha);
- wcross_color = wcross_color_old;
- }
-
- wcross_name_alpha_goal_prev = f;
+ wcross_size = drawgetimagesize(wcross_name) * wcross_scale;
+ CROSSHAIR_DRAW(wcross_resolution, wcross_name, wcross_alpha * f);
+
+ if(autocvar_crosshair_dot)
+ {
+ vector wcross_color_old;
+ wcross_color_old = wcross_color;
+ if(autocvar_crosshair_dot_color != "0")
+ wcross_color = stov(autocvar_crosshair_dot_color);
+ CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha);
+ // FIXME why don't we use wcross_alpha here?
+ wcross_color = wcross_color_old;
+ }
+ }
}
else
{
if(autocvar__hud_configure)
HUD_Panel_Mouse();
-
+
+ if(hud && !intermission)
+ {
+ if(hud == HUD_SPIDERBOT)
+ CSQC_SPIDER_HUD();
+ else if(hud == HUD_WAKIZASHI)
+ CSQC_WAKIZASHI_HUD();
+ else if(hud == HUD_RAPTOR)
+ CSQC_RAPTOR_HUD();
+ else if(hud == HUD_BUMBLEBEE)
+ CSQC_BUMBLE_HUD();
+ }
// let's reset the view back to normal for the end
R_SetView(VF_MIN, '0 0 0');
R_SetView(VF_SIZE, '1 0 0' * w + '0 1 0' * h);
}
-#define spider_h "gfx/vehicles/hud_bg.tga"
-#define spider_b "gfx/vehicles/sbot.tga"
-#define spider_r "gfx/vehicles/sbot_rpods.tga"
-#define spider_g "gfx/vehicles/sbot_mguns.tga"
-#define spider_s "gfx/vehicles/shiled.tga"
-#define spider_a1 "gfx/hud/sb_rocket.tga"
-#define spider_a2 "gfx/sb_bullets.tga"
-void CSQC_SPIDER_HUD()
+void CSQC_common_hud(void)
{
- float rockets, reload, heat, hp, shield;
- vector picsize, hudloc;
-
- // Fetch health & ammo stats
- hp = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1);
- shield = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1);
- heat = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 2);
- rockets = getstati(STAT_VEHICLESTAT_AMMO2);
- reload = min(getstatf(STAT_VEHICLESTAT_RELOAD2), 1);
-
- // Draw the crosshairs
- picsize = drawgetimagesize(SPIDER_CROSS);
- picsize_x *= autocvar_cl_vehicle_spiderbot_cross_size;
- picsize_y *= autocvar_cl_vehicle_spiderbot_cross_size;
- drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), SPIDER_CROSS, picsize, '1 1 1', autocvar_cl_vehicle_spiderbot_cross_alpha, DRAWFLAG_NORMAL);
-
- hudloc_y = 4;
- hudloc_x = 4;
-
- picsize = drawgetimagesize(spider_h) * 0.5;
- drawpic(hudloc, spider_h, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- picsize = drawgetimagesize(spider_a2) * 0.5;
- drawpic(hudloc + '120 96 0', spider_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- drawstring(hudloc + '145 19 0', strcat(ftos(rint(hp * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '175 34 0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '136 102 0', strcat(ftos(100 - rint(heat * 100)), "%"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
-
- picsize = drawgetimagesize(spider_a1) * 0.85;
- if(rockets == 9)
+ // do some accuracy var caching
+ float i;
+ if(!(gametype == GAME_RACE || gametype == GAME_CTS))
{
- drawpic(hudloc + '132 54 0', spider_a1, picsize, '-1 -1 -1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '179 69 0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
+ if(autocvar_accuracy_color_levels != acc_color_levels)
+ {
+ if(acc_color_levels)
+ strunzone(acc_color_levels);
+ acc_color_levels = strzone(autocvar_accuracy_color_levels);
+ acc_levels = tokenize(acc_color_levels);
+ if (acc_levels > MAX_ACCURACY_LEVELS)
+ acc_levels = MAX_ACCURACY_LEVELS;
+
+ for (i = 0; i < acc_levels; ++i)
+ acc_lev[i] = stof(argv(i)) / 100.0;
+ }
+ // let know that acc_col[] needs to be loaded
+ acc_col_x[0] = -1;
}
- else
- {
- drawpic(hudloc + '132 54 0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '179 69 0', strcat(ftos(9 - rockets), "/8"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
- }
-
- picsize = drawgetimagesize(spider_b) * 0.5;
- hudloc_y = 10.5;
- hudloc_x = 10.5;
-
- drawpic(hudloc, spider_s, picsize, '1 1 1', shield, DRAWFLAG_NORMAL);
- drawpic(hudloc, spider_b, picsize, '0 1 0' * hp + '1 0 0' * (1 - hp), 1, DRAWFLAG_NORMAL);
- drawpic(hudloc, spider_r, picsize, '1 1 1' * reload + '1 0 0' * (1 - reload), 1, DRAWFLAG_NORMAL);
- drawpic(hudloc, spider_g, picsize, '1 1 1' * (1 - heat) + '1 0 0' * heat, 1, DRAWFLAG_NORMAL);
-
-
- /*
- // Draw health bar
- p = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
- p = p + '0 1 0' * vid_conheight - '0 32 0';
- //pp = ('0 1 0' * hp) + ('1 0 0' * (1-hp));
- drawfill(p, '256 0 0' * shield + '0 8 0' , '0.5 0.5 1', 0.75, DRAWFLAG_NORMAL);
- p_y += 8;
- drawfill(p, '256 0 0' * hp + '0 8 0' , '0 1 0', 0.75, DRAWFLAG_NORMAL);
- p_x += 256 * hp;
- drawfill(p, '256 0 0' * (1-hp) + '0 8 0' , '0 0 0', 0.75, DRAWFLAG_NORMAL);
-
- // Draw minigun heat indicator
- p = '0.5 0 0' * (vid_conwidth - 256);
- p = p + '0 1 0' * vid_conheight - '0 34 0';
- drawfill(p, '256 0 0' * (1-heat) + '0 2 0' ,'0 0 1', 0.5, DRAWFLAG_NORMAL);
- p_x += 256 * (1-heat);
- drawfill(p, '256 0 0' * heat + '0 2 0' , '1 0 0', 0.5, DRAWFLAG_NORMAL);
-
-
- // Draw rocket icons for loaded/empty tubes.
- pp = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
- pp += '0 1 0' * vid_conheight - '0 64 0';
- for(i = 0; i < 8; ++i)
- {
- p = pp + '1 0 0' * (rkt_size * i);
- if(rockets == 8)
- {
- if(floor(reload * 8) == i)
- {
- drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '1 0 0' + '0 1 0' * ((reload*8)-i), 0.75 , DRAWFLAG_NORMAL);
- }
- else if(i < reload * 8)
- drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '1 1 0', 0.75 , DRAWFLAG_NORMAL);
- else
- drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0.5 0.5 0.5', 0.75, DRAWFLAG_NORMAL);
- }
- else
- {
- if(i < rockets)
- drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0 0 0', 0.25, DRAWFLAG_NORMAL);
- else
- drawpic(p, spider_rocket_icon, '1 1 0' * rkt_size, '0 1 0' * reload, 0.75, DRAWFLAG_NORMAL);
- }
- }
- */
-
- if (scoreboard_showscores)
- {
- HUD_DrawScoreboard();
- HUD_DrawCenterPrint();
- }
-
-}
-
-#define raptor_h "gfx/vehicles/hud_bg.tga"
-#define raptor_b "gfx/vehicles/raptor.tga"
-#define raptor_g1 "gfx/vehicles/raptor_guns.tga"
-#define raptor_g2 "gfx/vehicles/raptor_bombs.tga"
-#define raptor_s "gfx/vehicles/shiled.tga"
-
-void CSQC_RAPTOR_HUD()
-{
- float reload, hp, shield, energy;
- vector picsize, hudloc;
-
- // Fetch health & ammo stats
- hp = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1);
- shield = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1);
- reload = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 1);
- energy = min(getstatf(STAT_VEHICLESTAT_ENERGY), 1);
-
- // Draw the crosshairs
- picsize = drawgetimagesize(SPIDER_CROSS);
- picsize_x *= autocvar_cl_vehicle_spiderbot_cross_size;
- picsize_y *= autocvar_cl_vehicle_spiderbot_cross_size;
- drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), SPIDER_CROSS, picsize, '1 1 1', autocvar_cl_vehicle_spiderbot_cross_alpha, DRAWFLAG_NORMAL);
- hudloc_y = 4;
- hudloc_x = 4;
+ HUD_Main(); // always run these functions for alpha checks
+ HUD_DrawScoreboard();
- picsize = drawgetimagesize(raptor_h) * 0.5;
- drawpic(hudloc, raptor_h, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- picsize = drawgetimagesize(spider_a2) * 0.5;
- drawpic(hudloc + '120 96 0', spider_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- drawstring(hudloc + '145 19 0', strcat(ftos(rint(hp * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '175 34 0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '136 102 0', strcat(ftos(rint(energy * 100)), "%"),'15 15 0','0.5 0.5 1', 1, DRAWFLAG_NORMAL);
-
-
- picsize = drawgetimagesize(spider_a1) * 0.85;
- if(reload == 1)
+ if (scoreboard_active) // scoreboard/accuracy
+ HUD_Reset();
+ else if (intermission == 2) // map voting screen
{
- drawpic(hudloc + '132 54 0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '179 69 0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','0 1 0', 0.5, DRAWFLAG_NORMAL);
+ HUD_FinaleOverlay();
+ HUD_Reset();
}
- else
- {
- drawpic(hudloc + '132 54 0', spider_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '179 69 0', strcat(ftos(rint(reload * 100)), "%"),'14 14 0','0 0 1', 1, DRAWFLAG_NORMAL);
- }
-
- picsize = drawgetimagesize(raptor_b) * 0.5;
- hudloc_y = 10.5;
- hudloc_x = 10.5;
-
- drawpic(hudloc, raptor_s, picsize, '1 1 1', shield, DRAWFLAG_NORMAL);
- drawpic(hudloc, raptor_b, picsize, '0 1 0' * hp + '1 0 0' * (1 - hp), 1, DRAWFLAG_NORMAL);
- drawpic(hudloc, raptor_g1, picsize, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
- drawpic(hudloc, raptor_g2, picsize, '1 1 1' * reload + '1 0 0' * (1 - reload), 1, DRAWFLAG_NORMAL);
-
-
- if (scoreboard_showscores)
- {
- HUD_DrawScoreboard();
- HUD_DrawCenterPrint();
- }
-
-}
-
-#define waki_h "gfx/vehicles/hud_bg.tga"
-#define waki_b "gfx/vehicles/waki.tga"
-#define waki_e "gfx/vehicles/waki_e.tga"
-#define waki_g "gfx/vehicles/waki_guns.tga"
-#define waki_r "gfx/vehicles/waki_rockets.tga"
-#define waki_s "gfx/vehicles/shiled.tga"
-
-#define waki_a1 "gfx/hud/sb_rocket.tga"
-#define waki_a2 "gfx/sb_cells.tga"
-
-void CSQC_WAKIZASHI_HUD()
-{
- // 0--1 floats. 1 = 100%, 0.6 = 50%.
- float health, shield, energy, rockets;
- vector picsize, hudloc;
-
- picsize = drawgetimagesize(SPIDER_CROSS);
- picsize_x *= autocvar_cl_vehicle_spiderbot_cross_size;
- picsize_y *= autocvar_cl_vehicle_spiderbot_cross_size;
- drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), SPIDER_CROSS, picsize, '1 1 1', autocvar_cl_vehicle_spiderbot_cross_alpha, DRAWFLAG_NORMAL);
-
-/*
-const float STAT_VEHICLESTAT_HEALTH = 60;
-const float STAT_VEHICLESTAT_SHIELD = 61;
-const float STAT_VEHICLESTAT_ENERGY = 62;
-const float STAT_VEHICLESTAT_AMMO1 = 63;
-const float STAT_VEHICLESTAT_RELAOD1 = 64;
-const float STAT_VEHICLESTAT_AMMO2 = 65;
-const float STAT_VEHICLESTAT_RELOAD2 = 66;
-*/
- health = min(getstatf(STAT_VEHICLESTAT_HEALTH), 1);
- shield = min(getstatf(STAT_VEHICLESTAT_SHIELD), 1);
- energy = min(getstatf(STAT_VEHICLESTAT_ENERGY), 1);
- rockets = bound(0,getstatf(STAT_VEHICLESTAT_RELOAD1), 1);
-
- hudloc_y = 4;
- hudloc_x = 4;
-
- picsize = drawgetimagesize(waki_h) * 0.5;
- drawpic(hudloc, waki_h, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- picsize = drawgetimagesize(waki_a2) * 0.7;
- drawpic(hudloc + '116 92 0', waki_a2, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-
-
- drawstring(hudloc + '145 19 0', strcat(ftos(rint(health * 100)), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '175 34 0', strcat(ftos(rint(shield * 100)), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL);
-
- drawstring(hudloc + '136 102 0', strcat(ftos(rint(energy * 100)), "%"),'14 14 0','1 1 1', 1, DRAWFLAG_NORMAL);
-
- picsize = drawgetimagesize(waki_a1) * 0.75;
- if(rockets == 1)
- {
- drawpic(hudloc + '140 55 0', waki_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
- drawpic(hudloc + '144 59 0', waki_a1, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
- }
- else
- {
- drawpic(hudloc + '140 55 0', waki_a1, picsize, '-1 -1 -1', 1, DRAWFLAG_NORMAL);
- drawpic(hudloc + '144 59 0', waki_a1, picsize, '-1 -1 -1', 1, DRAWFLAG_NORMAL);
- drawstring(hudloc + '165 69 0', strcat(ftos(rint(rockets * 100)), "%"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
- }
-
- picsize = drawgetimagesize(waki_b) * 0.5;
- hudloc_y = 10.5;
- hudloc_x = 10.5;
-
- drawpic(hudloc, waki_s, picsize, '1 1 1', shield, DRAWFLAG_NORMAL);
- drawpic(hudloc, waki_b, picsize, '0 1 0' * health + '1 0 0' * (1 - health), 1, DRAWFLAG_NORMAL);
- drawpic(hudloc, waki_r, picsize, '1 1 1' * rockets + '1 0 0' * (1 - rockets), 1, DRAWFLAG_NORMAL);
- drawpic(hudloc, waki_e, picsize, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
-
-
-
/*
- p = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
- p = p + '0 1 0' * vid_conheight - '0 32 0';
-
- // Draw health bar
- p_y += 8;
- drawfill(p, '256 0 0' * health + '0 8 0' , '0 0.7 0', 0.75, DRAWFLAG_NORMAL);
- p_x += 256 * health;
- drawfill(p, '256 0 0' * (1 - health) + '0 8 0' , '0 0 0', 0.75, DRAWFLAG_NORMAL);
-
- // Draw shiled bar
- p_x -= 256 * health;
- p_y += 4;
- drawfill(p, '256 0 0' * shield + '0 4 0' , '0.25 0.25 1', 0.5, DRAWFLAG_NORMAL);
-
- // Draw energy
- //p_x -= 256 * health;
- p_y -= 8;
- drawfill(p, '256 0 0' * energy + '0 4 0' , '1 1 1', 0.75, DRAWFLAG_NORMAL);
-
- // Draw rockets bar
- p_y += 12;
- drawfill(p, '256 0 0' * rockets + '0 4 0' , '1 0 0', 0.75, DRAWFLAG_NORMAL);
- */
-
-
-
-
- if (scoreboard_showscores)
- {
- HUD_DrawScoreboard();
- HUD_DrawCenterPrint();
- }
-
-}
-
-void CSQC_common_hud(void)
-{
- // HUD_SortFrags(); done in HUD_Draw
- float hud;
- hud = getstati(STAT_HUD);
-
- //hud = 10;
switch(hud)
{
- case HUD_NORMAL:
- // do some accuracy var caching
- float i;
- if(!(gametype == GAME_RACE || gametype == GAME_CTS))
- {
- if(autocvar_accuracy_color_levels != acc_color_levels)
- {
- if(acc_color_levels)
- strunzone(acc_color_levels);
- acc_color_levels = strzone(autocvar_accuracy_color_levels);
- acc_levels = tokenize(acc_color_levels);
- if (acc_levels > MAX_ACCURACY_LEVELS)
- acc_levels = MAX_ACCURACY_LEVELS;
-
- for (i = 0; i < acc_levels; ++i)
- acc_lev[i] = stof(argv(i)) / 100.0;
- }
- // let know that acc_col[] needs to be loaded
- acc_col_x[0] = -1;
- }
-
- HUD_Main(); // always run these functions for alpha checks
- HUD_DrawScoreboard();
-
- if (scoreboard_active) // scoreboard/accuracy
- {
- HUD_Reset();
- // HUD_DrawScoreboard takes care of centerprint_start
- }
- else if (intermission == 2) // map voting screen
- {
- HUD_FinaleOverlay();
- HUD_Reset();
-
- centerprint_start_x = 0;
- centerprint_start_y = autocvar_scr_centerpos * vid_conheight;
- }
- else // hud
- {
- centerprint_start_x = 0;
- centerprint_start_y = autocvar_scr_centerpos * vid_conheight;
- }
-
- HUD_DrawCenterPrint();
- break;
-
case HUD_SPIDERBOT:
CSQC_SPIDER_HUD();
break;
case HUD_WAKIZASHI:
CSQC_WAKIZASHI_HUD();
break;
+
+ case HUD_BUMBLEBEE:
+ CSQC_BUMBLE_HUD();
+ break;
}
+ */
}
float autocvar_g_balance_tuba_fadetime;
float autocvar_g_balance_tuba_volume;
float autocvar_g_warmup_limit;
+var float autocvar_g_waypointsprite_uppercase = 1;
var float autocvar_g_waypointsprite_alpha = 1;
var float autocvar_g_waypointsprite_crosshairfadealpha = 1;
float autocvar_g_waypointsprite_crosshairfadedistance;
var float autocvar_g_waypointsprite_edgefadealpha = 1;
float autocvar_g_waypointsprite_edgefadedistance;
var float autocvar_g_waypointsprite_edgefadescale = 1;
+var float autocvar_g_waypointsprite_edgeoffset_bottom = 0;
+var float autocvar_g_waypointsprite_edgeoffset_left = 0;
+var float autocvar_g_waypointsprite_edgeoffset_right = 0;
+var float autocvar_g_waypointsprite_edgeoffset_top = 0;
+var float autocvar_g_waypointsprite_fontsize = 12;
float autocvar_g_waypointsprite_minalpha;
float autocvar_g_waypointsprite_minscale;
float autocvar_g_waypointsprite_normdistance;
var float autocvar_g_waypointsprite_scale = 1;
+float autocvar_g_waypointsprite_spam;
float autocvar_g_waypointsprite_timealphaexponent;
var float autocvar_hud_colorflash_alpha = 0.5;
float autocvar_hud_configure_bg_minalpha;
float autocvar_hud_configure_grid_ysize;
float autocvar_hud_configure_teamcolorforced;
float autocvar_hud_contents;
+float autocvar_hud_contents_blur;
+float autocvar_hud_contents_blur_alpha;
float autocvar_hud_contents_factor;
float autocvar_hud_contents_fadeintime;
float autocvar_hud_contents_fadeouttime;
float autocvar_hud_contents_water_alpha;
string autocvar_hud_contents_water_color;
float autocvar_hud_damage;
+float autocvar_hud_damage_blur;
+float autocvar_hud_damage_blur_alpha;
string autocvar_hud_damage_color;
float autocvar_hud_damage_factor;
float autocvar_hud_damage_fade_rate;
float autocvar_hud_damage_pain_threshold_lower_health;
float autocvar_hud_damage_pain_threshold_pulsating_min;
float autocvar_hud_damage_pain_threshold_pulsating_period;
+float autocvar_hud_powerup;
+float autocvar_hud_postprocessing;
+float autocvar_hud_postprocessing_maxbluralpha;
+float autocvar_hud_postprocessing_maxblurradius;
string autocvar_hud_dock;
float autocvar_hud_dock_alpha;
string autocvar_hud_dock_color;
float autocvar_hud_panel_healtharmor_progressbar_gfx_lowhealth;
float autocvar_hud_panel_healtharmor_progressbar_gfx_smooth;
+// TEMPORARY hard coded default for compatibility - remove after 0.2 release
+var float autocvar_hud_panel_centerprint = 1;
+noref var string autocvar_hud_panel_centerprint_pos = "0.180000 0.260000";
+noref var string autocvar_hud_panel_centerprint_size = "0.650000 0.210000";
+noref var string autocvar_hud_panel_centerprint_bg = "";
+noref var string autocvar_hud_panel_centerprint_bg_color = "";
+noref var string autocvar_hud_panel_centerprint_bg_color_team = "";
+noref var string autocvar_hud_panel_centerprint_bg_alpha = "";
+noref var string autocvar_hud_panel_centerprint_bg_border = "";
+noref var string autocvar_hud_panel_centerprint_bg_padding = "";
+var float autocvar_hud_panel_centerprint_align = 0.5;
+var float autocvar_hud_panel_centerprint_fadetime = 0.25;
+var float autocvar_hud_panel_centerprint_flip = 1;
+var float autocvar_hud_panel_centerprint_fontscale = 1;
+var float autocvar_hud_panel_centerprint_time = 3;
float autocvar_hud_panel_healtharmor_text;
float autocvar_hud_panel_infomessages;
float autocvar_hud_panel_infomessages_flip;
var float autocvar_scoreboard_highlight_alpha_self = 0.25;
float autocvar_scoreboard_offset_left;
float autocvar_scoreboard_offset_right;
-float autocvar_scr_centerpos;
-float autocvar_scr_centersize;
-float autocvar_scr_centertime;
float autocvar_v_flipped;
float autocvar_vid_conheight;
float autocvar_vid_conwidth;
float autocvar_cl_hitsound;
float autocvar_cl_hitsound_antispam_time;
var float autocvar_cl_eventchase_death = 1;
-var float autocvar_cl_eventchase_intermission = 1;
var float autocvar_cl_eventchase_distance = 140;
var float autocvar_cl_eventchase_speed = 1.3;
+float autocvar_cl_lerpexcess;
+string autocvar__togglezoom;
float autocvar_cl_damageeffect;
float autocvar_cl_damageeffect_gibs;
break;
}
- sound (self, CHAN_PROJECTILE, s, VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, s, VOL_BASE, ATTN_NORM);
}
}
}
{
entity casing;
- casing = RubbleNew("casing");
+ casing = RubbleNew("casing");
casing.state = ReadByte();
casing.silent = (casing.state & 0x80);
casing.state = (casing.state & 0x7F);
float CVAR_TYPEFLAG_ENGINE = 8;
float CVAR_TYPEFLAG_HASDESCRIPTION = 16;
float CVAR_TYPEFLAG_READONLY = 32;
+
+void (entity e, float chan, string samp, float vol, float atten, float pitchshift, float flags) sound7 = #8;
+
+float trace_dphitcontents;
+float trace_networkentity;
+
+string(string search, string replace, string subject) strreplace = #484;
const float STAT_TIMELIMIT = 236;
const float STAT_MOVEVARS_GRAVITY = 242;
-// Sound Constants
-//const float CHAN_AUTO = 0;
-//const float CHAN_WEAPON = 1;
-//const float CHAN_VOICE = 2;
-//const float CHAN_ITEM = 3;
-//const float CHAN_BODY = 4;
-
-//const float ATTN_NONE = 0;
-//const float ATTN_NORM = 1;
-//const float ATTN_IDLE = 2;
-//const float ATTN_STATIC = 3;
-
// Quake-style Point Contents
const float CONTENT_EMPTY = -1;
const float CONTENT_SOLID = -2;
const float BUTTON_15 = 131072;
const float BUTTON_16 = 262144;
-
const float DRAWFLAG_NORMAL = 0;
const float DRAWFLAG_ADDITIVE = 1;
const float DRAWFLAG_MODULATE = 2;
}
self = oldself;
+
+ if(DEATH_ISVEHICLE(w_deathtype))
+ {
+ traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world);
+ if(trace_plane_normal != '0 0 0')
+ w_backoff = trace_plane_normal;
+ else
+ w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16));
+
+ setorigin(self, w_org + w_backoff * 2); // for sound() calls
+
+ switch(w_deathtype)
+ {
+ case DEATH_VHCRUSH:
+ break;
+
+ case DEATH_SBMINIGUN:
+ string _snd;
+ _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw");
+ sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("spiderbot_minigun_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_SBROCKET:
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("spiderbot_rocket_explode"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_SBBLOWUP:
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
+ break;
+
+ case DEATH_WAKIGUN:
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("wakizashi_gun_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_WAKIROCKET:
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("wakizashi_rocket_explode"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_WAKIBLOWUP:
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
+ break;
+
+ case DEATH_RAPTOR_CANNON:
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("raptor_cannon_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_RAPTOR_BOMB_SPLIT:
+ float i;
+ vector ang, vel;
+ for(i = 1; i < 4; ++i)
+ {
+ vel = normalize(w_org - (w_org + normalize(force) * 16)) + randomvec() * 128;
+ ang = vectoangles(vel);
+ RaptorCBShellfragToss(w_org, vel, ang + '0 0 1' * (120 * i));
+ }
+
+
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_RAPTOR_BOMB:
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("raptor_bomb_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+ case DEATH_RAPTOR_DEATH:
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
+ break;
+ }
+ }
+
+
+ if(DEATH_ISTURRET(w_deathtype))
+ {
+ traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world);
+ if(trace_plane_normal != '0 0 0')
+ w_backoff = trace_plane_normal;
+ else
+ w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16));
+
+ setorigin(self, w_org + w_backoff * 2); // for sound() calls
+
+ switch(w_deathtype)
+ {
+ case DEATH_TURRET_EWHEEL:
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+
+ case DEATH_TURRET_FLAC:
+ vector org2;
+ org2 = w_org + w_backoff * 6;
+ pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
+ if (w_random<0.15)
+ sound(self, CH_SHOTS, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
+ else if (w_random<0.7)
+ sound(self, CH_SHOTS, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
+ else
+ sound(self, CH_SHOTS, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
+
+ break;
+
+ case DEATH_TURRET_MLRS:
+ case DEATH_TURRET_HK:
+ case DEATH_TURRET_WALKER_ROCKET:
+ case DEATH_TURRET_HELLION:
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, w_backoff * 1000, 1);
+ break;
+
+ case DEATH_TURRET_MACHINEGUN:
+ case DEATH_TURRET_WALKER_GUN:
+ string _snd;
+ _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw");
+ sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("machinegun_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+
+ case DEATH_TURRET_PLASMA:
+ sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1);
+ break;
+
+ case DEATH_TURRET_WALKER_MEELE:
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_MIN);
+ pointparticles(particleeffectnum("TE_SPARK"), self.origin, w_backoff * 1000, 1);
+ break;
- // TODO spawn particle effects and sounds based on w_deathtype
+ case DEATH_TURRET_PHASER:
+ break;
+
+ case DEATH_TURRET_TESLA:
+ te_smallflash(self.origin);
+ break;
+
+ }
+ }
+ // TODO spawn particle effects and sounds based on w_deathtype
if(!DEATH_ISSPECIAL(w_deathtype))
{
float hitwep;
}
if(!self.silent)
- sound(self, CHAN_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTN_NORM);
+ sound(self, CH_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum(strcat(species_prefix(self.cnt), "blood")), self.origin + '0 0 1', '0 0 30', 10);
Gib_Delete();
}
}
-void TossGib (string mdlname, vector org, vector vconst, vector vrand, float specnum, float destroyontouch, float issilent, float gibownernum)
+void TossGib (string mdlname, vector safeorg, vector org, vector vconst, vector vrand, float specnum, float destroyontouch, float issilent, float gibownernum)
{
entity gib;
else
gib.move_touch = SUB_RemoveOnNoImpact;
+ // don't spawn gibs inside solid - just don't
+ if(org != safeorg)
+ {
+ tracebox(safeorg, gib.mins, gib.maxs, org, MOVE_NOMONSTERS, gib);
+ org = trace_endpos;
+ }
+
gib.move_origin = gib.origin = org;
gib.move_velocity = vconst * autocvar_cl_gibs_velocity_scale + vrand * autocvar_cl_gibs_velocity_random + '0 0 1' * autocvar_cl_gibs_velocity_up;
gib.move_avelocity = prandomvec() * vlen(gib.move_velocity);
{
case 0x01:
if(!issilent)
- sound (self, CHAN_PAIN, "misc/gib.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_PAIN, "misc/gib.wav", VOL_BASE, ATTN_NORM);
if(prandom() < amount)
- TossGib ("models/gibs/eye.md3", org, vel, prandomvec() * 150, specnum, 0, issilent, entnumber);
+ TossGib ("models/gibs/eye.md3", org, org, vel, prandomvec() * 150, specnum, 0, issilent, entnumber);
new_te_bloodshower(particleeffectnum(strcat(specstr, "bloodshower")), org, 1200, amount);
if(prandom() < amount)
- TossGib ("models/gibs/bloodyskull.md3", org + 16 * prandomvec(), vel, prandomvec() * 100, specnum, 0, issilent, entnumber);
+ TossGib ("models/gibs/bloodyskull.md3", org, org + 16 * prandomvec(), vel, prandomvec() * 100, specnum, 0, issilent, entnumber);
for(c = 0; c < amount; ++c)
{
randomvalue = amount - c;
if(prandom() < randomvalue)
- TossGib ("models/gibs/arm.md3", org + 16 * prandomvec() + '0 0 8', vel, prandomvec() * (prandom() * 120 + 90), specnum,0, issilent, entnumber);
+ TossGib ("models/gibs/arm.md3", org, org + 16 * prandomvec() + '0 0 8', vel, prandomvec() * (prandom() * 120 + 90), specnum,0, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/arm.md3", org + 16 * prandomvec() + '0 0 8', vel, prandomvec() * (prandom() * 120 + 90), specnum,0, issilent, entnumber);
+ TossGib ("models/gibs/arm.md3", org, org + 16 * prandomvec() + '0 0 8', vel, prandomvec() * (prandom() * 120 + 90), specnum,0, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chest.md3", org + 16 * prandomvec(), vel, prandomvec() * (prandom() * 120 + 80), specnum,0, issilent, entnumber);
+ TossGib ("models/gibs/chest.md3", org, org + 16 * prandomvec(), vel, prandomvec() * (prandom() * 120 + 80), specnum,0, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/smallchest.md3", org + 16 * prandomvec(), vel, prandomvec() * (prandom() * 120 + 80), specnum,0, issilent, entnumber);
+ TossGib ("models/gibs/smallchest.md3", org, org + 16 * prandomvec(), vel, prandomvec() * (prandom() * 120 + 80), specnum,0, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/leg1.md3", org + 16 * prandomvec() + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85), specnum,0, issilent, entnumber);
+ TossGib ("models/gibs/leg1.md3", org, org + 16 * prandomvec() + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85), specnum,0, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/leg2.md3", org + 16 * prandomvec() + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85), specnum,0, issilent, entnumber);
+ TossGib ("models/gibs/leg2.md3", org, org + 16 * prandomvec() + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85), specnum,0, issilent, entnumber);
// these splat on impact
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
+ TossGib ("models/gibs/chunk.mdl", org, org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
+ TossGib ("models/gibs/chunk.mdl", org, org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
+ TossGib ("models/gibs/chunk.mdl", org, org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
+ TossGib ("models/gibs/chunk.mdl", org, org + 16 * prandomvec(), vel, prandomvec() * 450, specnum,1, issilent, entnumber);
}
break;
case 0x02:
break;
case 0x03:
if(prandom() < amount)
- TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * (prandom() * 30 + 20), specnum, 1, issilent, entnumber); // TODO maybe adjust to more randomization?
+ TossGib ("models/gibs/chunk.mdl", org, org, vel, prandomvec() * (prandom() * 30 + 20), specnum, 1, issilent, entnumber); // TODO maybe adjust to more randomization?
break;
case 0x81:
pointparticles(particleeffectnum(strcat(gentle_prefix, "damage_dissolve")), org, vel, amount);
effectnum = strcat("weapondamage_", e.netname);
// If the weapon is a bullet weapon, its damage effect is blood.
// Since blood is species dependent, we make this effect per-species.
- if(type == WEP_SHOTGUN || type == WEP_UZI || type == WEP_SNIPERRIFLE)
+ if(type == WEP_SHOTGUN || type == WEP_UZI || type == WEP_RIFLE)
if(specstr != "")
{
effectnum = strcat(effectnum, "_", specstr);
if(self.teleport_time)
if(time > self.teleport_time)
{
- sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM); // safeguard
+ sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM); // safeguard
self.teleport_time = 0;
}
void Remove_GrapplingHook()
{
- sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM);
}
void Ent_ReadHook(float bIsNew, float type)
self.drawmask = MASK_NORMAL;
break;
case ENT_CLIENT_LGBEAM:
- sound (self, CHAN_PROJECTILE, "weapons/lgbeam_fly.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS_SINGLE, "weapons/lgbeam_fly.wav", VOL_BASE, ATTN_NORM);
break;
case ENT_CLIENT_GAUNTLET:
- sound (self, CHAN_PROJECTILE, "weapons/gauntletbeam_fly.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS_SINGLE, "weapons/gauntletbeam_fly.wav", VOL_BASE, ATTN_NORM);
break;
}
}
return stringwidth(s, FALSE, theSize);
}
-#define CENTERPRINT_MAX_LINES 30
-string centerprint_messages[CENTERPRINT_MAX_LINES];
-float centerprint_width[CENTERPRINT_MAX_LINES];
-float centerprint_time;
-float centerprint_expire;
-float centerprint_num;
-float centerprint_offset_hint;
-vector centerprint_fontsize;
-
-void centerprint(string strMessage)
-{
- float i, j, n, hcount;
- string s;
-
- centerprint_fontsize = HUD_GetFontsize("scr_centersize");
-
- centerprint_expire = min(centerprint_expire, time); // if any of the returns happens, this message will fade out
-
- if(autocvar_scr_centertime <= 0)
- return;
-
- if(strMessage == "")
- return;
-
- // strip trailing newlines
- j = strlen(strMessage) - 1;
- while(substring(strMessage, j, 1) == "\n" && j >= 0)
- j = j - 1;
- strMessage = substring(strMessage, 0, j + 1);
-
- if(strMessage == "")
- return;
-
- // strip leading newlines and remember them, they are a hint that the message should be lower on the screen
- j = 0;
- while(substring(strMessage, j, 1) == "\n" && j < strlen(strMessage))
- j = j + 1;
- strMessage = substring(strMessage, j, strlen(strMessage) - j);
- centerprint_offset_hint = j;
-
- if(strMessage == "")
- return;
-
- // if we get here, we have a message. Initialize its height.
- centerprint_num = 0;
-
- n = tokenizebyseparator(strMessage, "\n");
- i = hcount = 0;
- for(j = 0; j < n; ++j)
- {
- getWrappedLine_remaining = argv(j);
- while(getWrappedLine_remaining)
- {
- s = getWrappedLine(vid_conwidth * 0.75, centerprint_fontsize, stringwidth_colors);
- if(centerprint_messages[i] != s) // don't fade the same message in, looks stupid
- centerprint_time = time;
- if(centerprint_messages[i])
- strunzone(centerprint_messages[i]);
- centerprint_messages[i] = strzone(s);
- centerprint_width[i] = stringwidth(s, TRUE, centerprint_fontsize);
- ++i;
-
- // half height for empty lines looks better
- if(s == "")
- hcount += 0.5;
- else
- hcount += 1;
-
- if(i >= CENTERPRINT_MAX_LINES)
- break;
- }
- }
-
- float h, havail;
- h = centerprint_fontsize_y*hcount;
-
- havail = vid_conheight;
- if(autocvar_con_chatpos < 0)
- havail -= (-autocvar_con_chatpos + autocvar_con_chat) * autocvar_con_chatsize; // avoid overlapping chat
- if(havail > vid_conheight - 70)
- havail = vid_conheight - 70; // avoid overlapping HUD
-
-#if 0
- float forbiddenmin, forbiddenmax, allowedmin, allowedmax, preferred;
-
- // here, the centerprint would cover the crosshair. REALLY BAD.
- forbiddenmin = vid_conheight * 0.5 - h - 16;
- forbiddenmax = vid_conheight * 0.5 + 16;
-
- allowedmin = scoreboard_bottom;
- allowedmax = havail - h;
- preferred = (havail - h)/2;
-
-
- // possible orderings (total: 4! / 4 = 6)
- // allowedmin allowedmax forbiddenmin forbiddenmax
- // forbiddenmin forbiddenmax allowedmin allowedmax
- if(allowedmax < forbiddenmin || allowedmin > forbiddenmax)
- {
- // forbidden doesn't matter in this case
- centerprint_start_y = bound(allowedmin, preferred, allowedmax);
- }
- // allowedmin forbiddenmin allowedmax forbiddenmax
- else if(allowedmin < forbiddenmin && allowedmax < forbiddenmax)
- {
- centerprint_start_y = bound(allowedmin, preferred, forbiddenmin);
- }
- // allowedmin forbiddenmin forbiddenmax allowedmax
- else if(allowedmin < forbiddenmin)
- {
- // make sure the forbidden zone is not covered
- if(preferred > (forbiddenmin + forbiddenmax) * 0.5)
- centerprint_start_y = bound(allowedmin, preferred, forbiddenmin);
- else
- centerprint_start_y = bound(forbiddenmax, preferred, allowedmin);
- }
- // forbiddenmin allowedmin allowedmax forbiddenmax
- else if(allowedmax < forbiddenmax)
- {
- // it's better to leave the allowed zone (overlap with scoreboard) than
- // to cover the forbidden zone (crosshair)
- if(preferred > (forbiddenmin + forbiddenmax) * 0.5)
- centerprint_start_y = forbiddenmax;
- else
- centerprint_start_y = forbiddenmin;
- }
- // forbiddenmin allowedmin forbiddenmax allowedmax
- else
- {
- centerprint_start_y = bound(forbiddenmax, preferred, allowedmax);
- }
-#else
-#endif
-
- centerprint_num = i;
-
- centerprint_expire = time + autocvar_scr_centertime;
-}
-
-void HUD_DrawCenterPrint (void)
-{
- float i;
- vector pos;
- string ts;
- float a, sz;
-
- if(time - centerprint_time < 0.25)
- a = (time - centerprint_time) / 0.25;
- else
- a = bound(0, 1 - 4 * (time - centerprint_expire), 1);
-
- if(a <= 0)
- return;
-
- sz = 0.8 + (a / 5);
-
- if(centerprint_num * autocvar_scr_centersize > 24 && scoreboard_active) // 24 = height of Scoreboard text
- centerprint_start_y = scoreboard_bottom + centerprint_fontsize_y;
-
- pos = centerprint_start;
- for (i=0; i<centerprint_num; i = i + 1)
- {
- ts = centerprint_messages[i];
- drawfontscale = sz * '1 1 0';
- pos_x = (vid_conwidth - stringwidth(ts, TRUE, centerprint_fontsize)) * 0.5;
- if (ts != "")
- {
- drawcolorcodedstring(pos + '0 1 0' * (1 - sz) * 0.5 *centerprint_fontsize_y, ts, centerprint_fontsize, a, DRAWFLAG_NORMAL);
- pos_y = pos_y + centerprint_fontsize_y;
- }
- else
- // half height for empty lines looks better
- pos_y = pos_y + sz * centerprint_fontsize_y * 0.5;
- drawfontscale = '1 1 0';
- }
-}
-
void drawstringright(vector position, string text, vector scale, vector rgb, float alpha, float flag)
{
position_x -= 2 / 3 * strlen(text) * scale_x;
case WEP_HLAC: return 3;
case WEP_MINSTANEX: return 3;
case WEP_NEX: return 3;
- case WEP_SNIPERRIFLE: return 1;
+ case WEP_RIFLE: return 1;
case WEP_HAGAR: return 2;
case WEP_ROCKET_LAUNCHER: return 2;
case WEP_SEEKER: return 2;
{
float f, screen_ar;
float center_x, center_y;
-
+ if(hud != HUD_NORMAL) return;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_weapons) return;
}
HUD_Panel_UpdateCvars(weapons);
+ HUD_Panel_ApplyFadeAlpha();
if (timeout && time >= weapontime + timeout && !autocvar__hud_configure)
{
}
}
-void DrawAmmoItem(vector myPos, vector mySize, float itemcode, float currently_selected)
+void DrawAmmoItem(vector myPos, vector mySize, float itemcode, float currently_selected, float infinite_ammo)
{
float a;
if(autocvar__hud_configure)
a = getstati(GetAmmoStat(itemcode)); // how much ammo do we have of type itemcode?
vector color;
- if(a < 10)
+ if(infinite_ammo)
+ color = '0 0.5 0.75';
+ else if(a < 10)
color = '0.7 0 0';
else
color = '1 1 1';
if(autocvar_hud_panel_ammo_text)
{
- if(a > 0)
+ if(a > 0 || infinite_ammo)
drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
else // "ghost" ammo count
drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * alpha * 0.5, DRAWFLAG_NORMAL);
}
- if(a > 0)
+ if(a > 0 || infinite_ammo)
drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
else // "ghost" ammo icon
drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '0 0 0', panel_fg_alpha * alpha * 0.5, DRAWFLAG_NORMAL);
void HUD_Ammo(void)
{
+ if(hud != HUD_NORMAL) return;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_ammo) return;
hud_configure_active_panel = HUD_PANEL_AMMO;
HUD_Panel_UpdateCvars(ammo);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
ammo_size_y = newSize;
}
- float i, stat_items, currently_selected;
+ float i, stat_items, currently_selected, infinite_ammo;
+ infinite_ammo = FALSE;
if (autocvar_hud_panel_ammo_onlycurrent)
{
if(autocvar__hud_configure)
{
- DrawAmmoItem(pos, ammo_size, 2, true); //show rockets
+ DrawAmmoItem(pos, ammo_size, 2, true, FALSE); //show rockets
return;
}
stat_items = getstati(STAT_ITEMS);
+ if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
+ infinite_ammo = TRUE;
for (i = 0; i < AMMO_COUNT; ++i) {
currently_selected = stat_items & GetAmmoItemCode(i);
if (currently_selected)
{
- DrawAmmoItem(pos, ammo_size, i, true);
+ DrawAmmoItem(pos, ammo_size, i, true, infinite_ammo);
return;
}
}
}
stat_items = getstati(STAT_ITEMS);
+ if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
+ infinite_ammo = TRUE;
for (i = 0; i < AMMO_COUNT; ++i) {
currently_selected = stat_items & GetAmmoItemCode(i);
- DrawAmmoItem(pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y), ammo_size, i, currently_selected);
+ DrawAmmoItem(pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y), ammo_size, i, currently_selected, infinite_ammo);
++row;
if(row >= rows)
{
}
HUD_Panel_UpdateCvars(powerups);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_healtharmor) return;
+ if(hud != HUD_NORMAL) return;
if(spectatee_status == -1) return;
health = getstati(STAT_HEALTH);
}
HUD_Panel_UpdateCvars(healtharmor);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
} else if(msg == MSG_KILL) {
w = DEATH_WEAPONOF(type);
if(WEP_VALID(w)) {
- if((w == WEP_SNIPERRIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here
+ if((w == WEP_RIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here
HUD_KillNotify_Push(s1, s2, 1, DEATH_HEADSHOT);
else
HUD_KillNotify_Push(s1, s2, 1, type);
HUD_KillNotify_Push(s1, s2, 1, DEATH_HURTTRIGGER);
if(alsoprint)
print(sprintf(_("^1%s^1 was thrown into a world of hurt by %s\n"), s2, s1));
- } else if(type == DEATH_SBCRUSH) {
+ } else if(type == DEATH_VHCRUSH) {
HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
if(alsoprint)
print (sprintf(_("^1%s^1 was crushed by %s\n"), s2, s1));
HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
if(alsoprint)
print (sprintf(_("^1%s^1 dies when %s^1's wakizashi dies.\n"), s2, s1));
+ } else if(type == DEATH_RAPTOR_CANNON) {
+ HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print (sprintf(_("^1%s^1 nailed to hell by %s\n"), s2, s1));
+ } else if(type == DEATH_RAPTOR_BOMB) {
+ HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print (sprintf(_("^1%s^1 cluster crushed by %s\n"), s2, s1));
+ } else if(type == DEATH_RAPTOR_DEATH) {
+ HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
+ if(alsoprint)
+ print (sprintf(_("^1%s^1 dies when %s^1's raptor dies.\n"), s2, s1));
} else if(type == DEATH_TURRET) {
HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
if(alsoprint)
}
}
-#define DAMAGE_CENTERPRINT_SPACER NEWLINES
-
void HUD_Centerprint(string s1, string s2, float type, float msg)
{
float gentle;
gentle = (autocvar_cl_gentle || autocvar_cl_gentle_messages);
if(msg == MSG_SUICIDE) {
if (type == DEATH_TEAMCHANGE) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("You are now on: %s"), s1)));
+ centerprint(sprintf(_("You are now on: %s"), s1));
} else if (type == DEATH_AUTOTEAMCHANGE) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("You have been moved into a different team to improve team balance\nYou are now on: %s"), s1)));
+ centerprint(sprintf(_("You have been moved into a different team to improve team balance\nYou are now on: %s"), s1));
} else if (type == DEATH_CAMP) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Reconsider your tactics, camper!")));
+ centerprint(_("^1Reconsider your tactics, camper!"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Die camper!")));
+ centerprint(_("^1Die camper!"));
} else if (type == DEATH_NOAMMO) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You are reinserted into the game for running out of ammo...")));
+ centerprint(_("^1You are reinserted into the game for running out of ammo..."));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You were killed for running out of ammo...")));
+ centerprint(_("^1You were killed for running out of ammo..."));
} else if (type == DEATH_ROT) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You need to preserve your health")));
+ centerprint(_("^1You need to preserve your health"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You grew too old without taking your medicine")));
+ centerprint(_("^1You grew too old without taking your medicine"));
} else if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Don't go against team mates!")));
+ centerprint(_("^1Don't go against team mates!"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Don't shoot your team mates!")));
+ centerprint(_("^1Don't shoot your team mates!"));
} else if (type == DEATH_QUIET) {
// do nothing
} else { // generic message
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You need to be more careful!")));
+ centerprint(_("^1You need to be more careful!"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You killed your own dumb self!")));
+ centerprint(_("^1You killed your own dumb self!"));
}
} else if(msg == MSG_KILL) {
if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against %s, a team mate!"), s1)));
+ centerprint(sprintf(_("^1Moron! You went against ^7%s^1, a team mate!"), s1));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged %s, a team mate!"), s1)));
+ centerprint(sprintf(_("^1Moron! You fragged ^7%s^1, a team mate!"), s1));
}
} else if (type == KILL_FIRST_BLOOD) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First score")));
+ centerprint(_("^1First score"));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First blood")));
+ centerprint(_("^1First blood"));
}
} else if (type == KILL_FIRST_VICTIM) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First casualty")));
+ centerprint(_("^1First casualty"));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First victim")));
+ centerprint(_("^1First victim"));
}
} else if (type == KILL_TYPEFRAG) { // s2 contains "advanced kill messages" such as ping, handicap...
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You scored against ^7%s^1 who was typing!"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You scored against ^7%s^1 who was typing!"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You typefragged ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You typefragged ^7%s"), s1), s2));
}
} else if (type == KILL_TYPEFRAGGED) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were scored against by ^7%s^1 while you were typing!"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were scored against by ^7%s^1 while you were typing!"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were typefragged by ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were typefragged by ^7%s"), s1), s2));
}
} else if (type == KILL_FRAG) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^4You scored against ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^4You scored against ^7%s"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^4You fragged ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^4You fragged ^7%s"), s1), s2));
}
} else { // generic message
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were scored against by ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were scored against by ^7%s"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were fragged by ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were fragged by ^7%s"), s1), s2));
}
}
} else if(msg == MSG_KILL_ACTION) {
// TODO: invent more centerprints here?
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Watch your step!")));
+ centerprint(_("^1Watch your step!"));
}
}
hud_configure_active_panel = HUD_PANEL_NOTIFY;
HUD_Panel_UpdateCvars(notify);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_TIMER;
HUD_Panel_UpdateCvars(timer);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_RADAR;
HUD_Panel_UpdateCvars(radar);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_SCORE;
HUD_Panel_UpdateCvars(score);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_RACETIMER;
HUD_Panel_UpdateCvars(racetimer);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
return;
HUD_Panel_UpdateCvars(vote);
+ HUD_Panel_ApplyFadeAlpha();
if(uid2name_dialog)
{
pos = panel_pos;
mySize = panel_size;
- a = vote_alpha * bound(autocvar_hud_panel_vote_alreadyvoted_alpha, 1 - vote_highlighted, 1);
+ a = vote_alpha * (vote_highlighted ? autocvar_hud_panel_vote_alreadyvoted_alpha : 1);
HUD_Panel_DrawBg(a);
a = panel_fg_alpha * a;
drawsetcliparea(pos_x, pos_y, mySize_x * 0.5, mySize_y);
drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
}
- else if(vote_highlighted == 2) {
+ else if(vote_highlighted == -1) {
drawsetcliparea(pos_x + 0.5 * mySize_x, pos_y, mySize_x * 0.5, mySize_y);
drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
}
}
drawresetcliparea();
-
- if(!vote_active) {
- vote_highlighted = 0;
- }
}
// Mod icons panel (#10)
hud_configure_active_panel = HUD_PANEL_MODICONS;
HUD_Panel_UpdateCvars(modicons);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
HUD_Panel_UpdateCvars(pressedkeys);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_CHAT;
HUD_Panel_UpdateCvars(chat);
+ HUD_Panel_ApplyFadeAlpha();
if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized
{
hud_configure_active_panel = HUD_PANEL_ENGINEINFO;
HUD_Panel_UpdateCvars(engineinfo);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_INFOMESSAGES;
HUD_Panel_UpdateCvars(infomessages);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_physics) return;
- if(spectatee_status == -1 && autocvar_hud_panel_physics < 2) return;
+ if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return;
+ if(autocvar_hud_panel_physics == 3 && !(gametype == GAME_RACE || gametype == GAME_CTS)) return;
}
else
hud_configure_active_panel = HUD_PANEL_PHYSICS;
HUD_Panel_UpdateCvars(physics);
+ HUD_Panel_ApplyFadeAlpha();
HUD_Panel_DrawBg(1);
if(panel_bg_padding)
drawstring_aspect(panel_pos + acceleration_offset, strcat(ftos_decimals(acceleration, 2), "g"), panel_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
}
+// CenterPrint (#16)
+//
+#define CENTERPRINT_MAX_MSGS 10
+#define CENTERPRINT_MAX_ENTRIES 50
+#define CENTERPRINT_SPACING 0.7
+float cpm_index;
+string centerprint_messages[CENTERPRINT_MAX_MSGS];
+float centerprint_msgID[CENTERPRINT_MAX_MSGS];
+float centerprint_time[CENTERPRINT_MAX_MSGS];
+float centerprint_expire_time[CENTERPRINT_MAX_MSGS];
+float centerprint_countdown_num[CENTERPRINT_MAX_MSGS];
+float centerprint_fadetime;
+float centerprint_showing;
+
+void centerprint_generic(float new_id, string strMessage, float duration, float countdown_num)
+{
+ float i, j;
+
+ if(strMessage == "" && new_id == 0)
+ return;
+
+ // strip trailing newlines
+ j = strlen(strMessage) - 1;
+ while(substring(strMessage, j, 1) == "\n" && j >= 0)
+ --j;
+ if (j < strlen(strMessage) - 1)
+ strMessage = substring(strMessage, 0, j + 1);
+
+ if(strMessage == "" && new_id == 0)
+ return;
+
+ // strip leading newlines
+ j = 0;
+ while(substring(strMessage, j, 1) == "\n" && j < strlen(strMessage))
+ ++j;
+ if (j > 0)
+ strMessage = substring(strMessage, j, strlen(strMessage) - j);
+
+ if(strMessage == "" && new_id == 0)
+ return;
+
+ if (!centerprint_showing)
+ centerprint_showing = TRUE;
+
+ centerprint_fadetime = bound(0, autocvar_hud_panel_centerprint_fadetime, 1);
+
+ for (i=0, j=cpm_index; i<CENTERPRINT_MAX_MSGS; ++i, ++j)
+ {
+ if (j == CENTERPRINT_MAX_MSGS)
+ j = 0;
+ if (new_id && new_id == centerprint_msgID[j])
+ {
+ if (strMessage == "" && centerprint_messages[j] != "" && centerprint_countdown_num[j] == 0)
+ {
+ // fade out the current msg (duration and countdown_num are ignored)
+ centerprint_time[j] = centerprint_fadetime;
+ if (centerprint_expire_time[j] > time + centerprint_fadetime || centerprint_expire_time[j] < time)
+ centerprint_expire_time[j] = time + centerprint_fadetime;
+ return;
+ }
+ break; // found a msg with the same id, at position j
+ }
+ }
+
+ if (i == CENTERPRINT_MAX_MSGS)
+ {
+ // a msg with the same id was not found, add the msg at the next position
+ --cpm_index;
+ if (cpm_index == -1)
+ cpm_index = CENTERPRINT_MAX_MSGS - 1;
+ j = cpm_index;
+ }
+ if(centerprint_messages[j])
+ strunzone(centerprint_messages[j]);
+ centerprint_messages[j] = strzone(strMessage);
+ centerprint_msgID[j] = new_id;
+ if (duration < 0)
+ centerprint_time[j] = -1;
+ else
+ {
+ if(duration == 0)
+ duration = max(1, autocvar_hud_panel_centerprint_time);
+ centerprint_time[j] = duration;
+ centerprint_expire_time[j] = time + duration;
+ }
+ centerprint_countdown_num[j] = countdown_num;
+}
+
+void centerprint(string strMessage)
+{
+ centerprint_generic(0, strMessage, autocvar_hud_panel_centerprint_time, 0);
+}
+
+void reset_centerprint_messages(void)
+{
+ float i;
+ for (i=0; i<CENTERPRINT_MAX_MSGS; ++i)
+ {
+ centerprint_expire_time[i] = 0;
+ centerprint_time[i] = 1;
+ centerprint_msgID[i] = 0;
+ if(centerprint_messages[i])
+ strunzone(centerprint_messages[i]);
+ centerprint_messages[i] = string_null;
+ }
+}
+float hud_configure_cp_generation_time;
+void HUD_CenterPrint (void)
+{
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_centerprint) return;
+
+ if (hud_configure_prev && hud_configure_prev != -1)
+ reset_centerprint_messages();
+ }
+ else
+ {
+ hud_configure_active_panel = HUD_PANEL_CENTERPRINT;
+
+ if (!hud_configure_prev)
+ reset_centerprint_messages();
+ if (time > hud_configure_cp_generation_time)
+ {
+ float r;
+ r = random();
+ if (r > 0.9)
+ centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: %d"), 1, 10);
+ else if (r > 0.8)
+ centerprint_generic(0, sprintf("^1Multiline message at time %s that\n^1lasts longer than normal", seconds_tostring(time)), 20, 0);
+ else
+ centerprint(sprintf("Message at time %s", seconds_tostring(time)));
+ hud_configure_cp_generation_time = time + 1 + random()*4;
+ }
+ }
+
+ HUD_Panel_UpdateCvars(centerprint);
+
+ // this panel doesn't fade when showing the scoreboard
+ if(autocvar__menu_alpha)
+ HUD_Panel_ApplyFadeAlpha();
+
+ if(scoreboard_fade_alpha)
+ {
+ // move the panel below the scoreboard
+ if (scoreboard_bottom >= 0.96 * vid_conheight)
+ return;
+ vector target_pos;
+ target_pos = eY * scoreboard_bottom + eX * 0.5 * (vid_conwidth - panel_size_x);
+ panel_pos = panel_pos + (target_pos - panel_pos) * sqrt(scoreboard_fade_alpha);
+ panel_size_y = min(panel_size_y, vid_conheight - scoreboard_bottom);
+ }
+
+ HUD_Panel_DrawBg(1);
+
+ if (!centerprint_showing)
+ return;
+
+ if(panel_bg_padding)
+ {
+ panel_pos += '1 1 0' * panel_bg_padding;
+ panel_size -= '2 2 0' * panel_bg_padding;
+ }
+
+ float entries, height;
+ vector fontsize;
+ // entries = bound(1, floor(CENTERPRINT_MAX_ENTRIES * 4 * panel_size_y/panel_size_x), CENTERPRINT_MAX_ENTRIES);
+ // height = panel_size_y/entries;
+ // fontsize = '1 1 0' * height;
+ height = vid_conheight/50 * autocvar_hud_panel_centerprint_fontscale;
+ fontsize = '1 1 0' * height;
+ entries = bound(1, floor(panel_size_y/height), CENTERPRINT_MAX_ENTRIES);
+
+ float i, j, k, n;
+ float a, sz, align, current_msg_pos_y, msg_size;
+ vector pos;
+ string ts;
+
+ n = -1; // if no msg will be displayed, n stays -1
+
+ pos = panel_pos;
+ if (autocvar_hud_panel_centerprint_flip)
+ pos_y += panel_size_y;
+ align = bound(0, autocvar_hud_panel_centerprint_align, 1);
+ for (i=0, j=cpm_index; i<CENTERPRINT_MAX_MSGS; ++i, ++j)
+ {
+ if (j == CENTERPRINT_MAX_MSGS)
+ j = 0;
+ if (centerprint_expire_time[j] < time)
+ {
+ if (centerprint_countdown_num[j] && centerprint_time[j] > 0)
+ {
+ centerprint_countdown_num[j] = centerprint_countdown_num[j] - 1;
+ if (centerprint_countdown_num[j] == 0)
+ continue;
+ centerprint_expire_time[j] = centerprint_expire_time[j] + centerprint_time[j];
+ }
+ else
+ continue;
+ }
+ if (centerprint_time[j] < 0 || centerprint_expire_time[j] - centerprint_fadetime > time)
+ {
+ a = bound(0, (time - (centerprint_expire_time[j] - centerprint_time[j])) / centerprint_fadetime, 1);
+ sz = 0.8 + a * (1 - 0.8);
+ }
+ else if (centerprint_expire_time[j] > time)
+ {
+ a = (centerprint_expire_time[j] - time) / centerprint_fadetime;
+ sz = 0.8 + a * (1 - 0.8);
+ }
+
+ drawfontscale = sz * '1 1 0';
+ if (centerprint_countdown_num[j])
+ n = tokenizebyseparator(sprintf(centerprint_messages[j], centerprint_countdown_num[j]), "\n");
+ else
+ n = tokenizebyseparator(centerprint_messages[j], "\n");
+ if (autocvar_hud_panel_centerprint_flip)
+ {
+ // check if the message can be entirely shown
+ for(k = 0; k < n; ++k)
+ {
+ getWrappedLine_remaining = argv(k);
+ while(getWrappedLine_remaining)
+ {
+ ts = getWrappedLine(panel_size_x * sz, fontsize, stringwidth_colors);
+ if (ts != "")
+ pos_y -= fontsize_y;
+ else
+ pos_y -= fontsize_y * CENTERPRINT_SPACING/2;
+ if (pos_y < panel_pos_y) // check if the next line can be shown
+ {
+ drawfontscale = '1 1 0';
+ return;
+ }
+ }
+ }
+ current_msg_pos_y = pos_y; // save starting pos (first line) of the current message
+ }
+
+ msg_size = pos_y;
+ for(k = 0; k < n; ++k)
+ {
+ getWrappedLine_remaining = argv(k);
+ while(getWrappedLine_remaining)
+ {
+ ts = getWrappedLine(panel_size_x * sz, fontsize, stringwidth_colors);
+ if (ts != "")
+ {
+ if (align)
+ pos_x = panel_pos_x + (panel_size_x - stringwidth(ts, TRUE, fontsize)) * align;
+ drawcolorcodedstring(pos + eY * 0.5 * (1 - sz) * fontsize_y, ts, fontsize, a * panel_fg_alpha, DRAWFLAG_NORMAL);
+ pos_y += fontsize_y;
+ }
+ else
+ pos_y += fontsize_y * CENTERPRINT_SPACING/2;
+ if (!autocvar_hud_panel_centerprint_flip && pos_y > panel_pos_y + panel_size_y - fontsize_y) // check if the next line can be shown
+ {
+ drawfontscale = '1 1 0';
+ return;
+ }
+ }
+ }
+ msg_size = pos_y - msg_size;
+ if (autocvar_hud_panel_centerprint_flip)
+ {
+ pos_y = current_msg_pos_y - CENTERPRINT_SPACING * fontsize_y;
+ if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
+ pos_y += (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(a));
+ }
+ else
+ {
+ pos_y += CENTERPRINT_SPACING * fontsize_y;
+ if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
+ pos_y -= (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(a));
+ }
+ }
+ drawfontscale = '1 1 0';
+ if (n == -1)
+ {
+ centerprint_showing = FALSE;
+ reset_centerprint_messages();
+ }
+}
+
/*
==================
Main HUD system
HUD_InfoMessages(); break;\
case (HUD_PANEL_PHYSICS):\
HUD_Physics(); break;\
+ case (HUD_PANEL_CENTERPRINT):\
+ HUD_CenterPrint(); break;\
} ENDS_WITH_CURLY_BRACE
void HUD_Main (void)
else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0)
hud_fade_alpha = 1;
+ // panels that we want to be active together with the scoreboard
+ // they must call HUD_Panel_ApplyFadeAlpha(); only when showing the menu
+ if(scoreboard_fade_alpha == 1)
+ {
+ HUD_CenterPrint();
+ return;
+ }
+
if(!autocvar__hud_configure && !hud_fade_alpha)
return;
if(autocvar__con_chat_maximized)
HUD_Chat(); // HUD_DrawPanel(HUD_PANEL_CHAT);
- if (autocvar__hud_configure && spectatee_status && hud_configure_prev == -1) // try to join if we are in hud_configure mode, but still spectating, and in the first frame (in order to get rid of motd when launching a server via the menu "HUD Setup" button)
- localcmd("cmd selectteam auto; cmd join\n");
-
if(autocvar__hud_configure && tab_panel != -1)
{
HUD_Panel_UpdatePosSizeForId(tab_panel)
float log(float f);
-vector centerprint_start;
-
float panel_order[HUD_PANEL_NUM];
string hud_panelorder_prev;
panel_bg_color_team = stof(panel_bg_color_team_str);\
}
+// the check doesn't allow to fade this panel when showing the panel-specific menu dialog
+#define HUD_Panel_ApplyFadeAlpha()\
+if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel))\
+{\
+ panel_bg_alpha *= hud_fade_alpha;\
+ panel_fg_alpha *= hud_fade_alpha;\
+} ENDS_WITH_CURLY_BRACE
+
// Get value for panel_bg_alpha: if "" fetch default, else use panel_bg_alpha. Also do various menu dialog fadeout/in checks, and minalpha checks
// comment on line 3 of macro: // do not set a minalpha cap when showing the config dialog for this panel
#define HUD_Panel_GetBgAlpha()\
panel_bg_alpha = (1 - autocvar__menu_alpha) * max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha) + autocvar__menu_alpha * panel_bg_alpha;\
else\
panel_bg_alpha = max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha);\
-} if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel)) {\
- panel_bg_alpha *= hud_fade_alpha;\
}
// Get value for panel_fg_alpha. Also do various minalpha checks
// comment on line 2 of macro: // ALWAYS show disabled panels at 0.25 alpha when in config mode
-// comment on line 4 of macro: // don't fade this panel when showing the panel-specific menu dialog
#define HUD_Panel_GetFgAlpha()\
panel_fg_alpha = autocvar_hud_panel_fg_alpha;\
if(autocvar__hud_configure && !panel_enabled)\
panel_fg_alpha = 0.25;\
-if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel))\
- panel_fg_alpha *= hud_fade_alpha;
// Get border. See comments above, it's similar.
#define HUD_Panel_GetBorder()\
panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_panelpos;
// return smoothly faded size of given panel when a dialog is active
-//var vector menu_enable_maxsize; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(menu_enable_maxsize);
+//var vector menu_enable_maxsize;
var float menu_enable_maxsize_x;
var float menu_enable_maxsize_y;
var vector menu_enable_size;
switch(id) { \
case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdateCvars(infomessages) break; \
case HUD_PANEL_PHYSICS: HUD_Panel_UpdateCvars(physics); break;\
+ case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdateCvars(centerprint); break;\
}
#define HUD_Panel_UpdateCvarsForId(id) \
switch(id) { \
case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdatePosSize(infomessages) break;\
case HUD_PANEL_PHYSICS: HUD_Panel_UpdatePosSize(physics); break;\
+ case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdatePosSize(centerprint); break;\
}
#define HUD_Panel_UpdatePosSizeForId(id) \
HUD_Write_Cvar_q("hud_configure_grid_ysize");
HUD_Write("\n");
- HUD_Write_Cvar_q("scr_centerpos");
- HUD_Write("\n");
-
// common cvars for all panels
float i;
for (i = 0; i < HUD_PANEL_NUM; ++i)
HUD_Write_PanelCvar_q("_progressbar");
HUD_Write_PanelCvar_q("_acceleration_mode");
break;
+ case HUD_PANEL_CENTERPRINT:
+ HUD_Write_PanelCvar_q("_align");
+ HUD_Write_PanelCvar_q("_flip");
+ HUD_Write_PanelCvar_q("_fontscale");
+ HUD_Write_PanelCvar_q("_time");
+ HUD_Write_PanelCvar_q("_fadetime");
+ break;
}
HUD_Write("\n");
}
{
string s;
+ // we only care for keyboard events
+ if(bInputType != 0 && bInputType != 1)
+ return false;
+
if(!autocvar__hud_configure)
return false;
if(self.itime1 && self.itime2 && self.itime1 != self.itime2)
{
float f;
- f = bound(0, (time - self.itime1) / (self.itime2 - self.itime1), 1);
+ f = bound(0, (time - self.itime1) / (self.itime2 - self.itime1), 1 + autocvar_cl_lerpexcess);
self.origin = (1 - f) * self.iorigin1 + f * self.iorigin2;
if(self.iflags & IFLAG_ANGLES)
{
float scores_flags[MAX_SCORE];
string teamscores_label[MAX_SCORE];
float teamscores_flags[MAX_SCORE];
-.float scores[MAX_SCORE]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(scores);
-.float teamscores[MAX_TEAMSCORE]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(teamscores);
+.float scores[MAX_SCORE];
+.float teamscores[MAX_TEAMSCORE];
#define IS_INCREASING(x) ( (x)&SFL_LOWER_IS_BETTER )
#define IS_DECREASING(x) ( !((x)&SFL_LOWER_IS_BETTER) )
vector camera_direction;
void centerprint(string strMessage);
+void centerprint_generic(float new_id, string strMessage, float duration, float countdown_num);
#define ALPHA_MIN_VISIBLE 0.003
float g_trueaim_minrange;
entity entcs_receiver[255]; // 255 is the engine limit on maxclients
+
+float hud;
if(!mv_active)
return;
-
+
mv_mousepos = mv_mousepos + getmousepos();
mv_mousepos_x = bound(0, mv_mousepos_x, vid_conwidth);
pos_y = ymin;
pos_z = 0;
- //pos_x = center - stringwidth("Vote for a map", false) * 0.5 * 24;
- pos_x = center - stringwidth(_("Vote for a map"), false, '12 0 0');
- drawstring(pos, "Vote for a map", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
+
+ map = _("Vote for a map");
+ pos_x = center - stringwidth(map, false, '12 0 0');
+ drawstring(pos, map, '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
pos_y += 26;
i = ceil(max(0, mv_timeout - time));
map = sprintf(_("%d seconds left"), i);
- //pos_x = center - stringwidth(map, false) * 0.5 * 16;
pos_x = center - stringwidth(map, false, '8 0 0');
drawstring(pos, map, '16 16 0', '0 1 0', 1, DRAWFLAG_NORMAL);
pos_y += 22;
ymin = pos_y;
if(mv_abstain)
mv_num_maps -= 1;
-
+
if(mv_num_maps > 3)
{
columns = 3;
if(mv_abstain)
++mv_num_maps;
-
+
if(mv_abstain && i < mv_num_maps) {
tmp = mv_votes[i];
pos_y = ymax + isize - hud_fontsize_y;
if(oldmask & mv_maps_mask != oldmask)
if(oldmask & mv_maps_mask == mv_maps_mask)
- sound(world, CHAN_AUTO, "misc_invshot.wav", VOL_BASE, ATTN_NONE);
+ sound(world, CH_INFO, "misc_invshot.wav", VOL_BASE, ATTN_NONE);
// remove votes that no longer apply
for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
// check for pending announcement, play it and remove it
if(announce_snd != "")
{
- sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/", announce_snd, ".wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/", announce_snd, ".wav"), VOL_BASEVOICE, ATTN_NONE);
strunzone(announce_snd);
announce_snd = "";
}
countdown_rounded = floor(0.5 + countdown);
if(countdown <= 0) {
if (!spectatee_status) //do cprint only for players
- centerprint(_("^1Begin!"));
+ centerprint_generic(CPID_GAME_STARTING, _("^1Begin!"), 1, 0);
- sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/begin.wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/begin.wav"), VOL_BASEVOICE, ATTN_NONE);
//reset maptime announcers now as well
announcer_5min = announcer_1min = FALSE;
}
else {
if (!spectatee_status) //do cprint only for players
- centerprint(sprintf(_("^1Game starts in %d seconds"), countdown_rounded));
+ centerprint_generic(CPID_GAME_STARTING, _("^1Game starts in %d seconds"), 1, countdown_rounded);
if(countdown_rounded <= 3 && countdown_rounded >= 1) {
- sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/", ftos(countdown_rounded), ".wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/", ftos(countdown_rounded), ".wav"), VOL_BASEVOICE, ATTN_NONE);
}
self.nextthink = getstatf(STAT_GAMESTARTTIME) - (countdown - 1);
//if we're in warmup mode, check whether there's a warmup timelimit
if not (warmuplimit == -1 && warmup_stage) {
announcer_5min = TRUE;
- sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/5minutesremain.wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/5minutesremain.wav"), VOL_BASEVOICE, ATTN_NONE);
}
}
//if we're in warmup mode, check whether there's a warmup timelimit
if not (warmuplimit == -1 && warmup_stage) {
announcer_1min = TRUE;
- sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/1minuteremains.wav"), VOL_BASEVOICE, ATTN_NONE);
+ sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/1minuteremains.wav"), VOL_BASEVOICE, ATTN_NONE);
}
}
}
float PreviewExists(string name)
{
- float f;
- string file;
-
if(autocvar_cl_readpicture_force)
return false;
-.entity move_groundentity;
+float STAT_MOVEFLAGS = 225;
+float MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE = 4;
+#define GRAVITY_UNAFFECTED_BY_TICRATE (getstati(STAT_MOVEFLAGS) & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE)
+
+.entity move_groundentity; // FIXME add move_groundnetworkentity?
.float move_suspendedinair;
.float move_didgravity;
if(self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS)
{
- self.move_didgravity = TRUE;
- if(self.gravity)
- self.move_velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ self.move_didgravity = 1;
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ {
+ if(self.gravity)
+ self.move_velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.move_velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
else
- self.move_velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ {
+ if(self.gravity)
+ self.move_velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.move_velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
}
self.move_angles = self.move_angles + self.move_avelocity * dt;
break;
}
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ if(self.move_didgravity > 0)
+ if(!(self.move_flags & FL_ONGROUND))
+ {
+ if(self.gravity)
+ self.move_velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.move_velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
+
_Movetype_CheckWaterTransition();
}
void _Movetype_Physics_Frame(float movedt)
{
- self.move_didgravity = FALSE;
+ self.move_didgravity = -1;
switch(self.move_movetype)
{
case MOVETYPE_PUSH:
movedt = time - self.move_time;
self.move_time = time;
- //self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
- // we use the field as set by the last run of this
-
_Movetype_Physics_Frame(movedt);
if(wasfreed(self))
return;
dt -= n * tr;
self.move_time += n * tr;
- //self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
- // we use the field as set by the last run of this
+ if(!self.move_didgravity)
+ self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
for(i = 0; i < n; ++i)
{
{
// now continue the move from move_time to time
self.velocity = self.move_velocity;
- if(self.move_didgravity)
+
+ if(self.move_didgravity > 0)
{
- if(self.gravity)
- self.velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ {
+ if(self.gravity)
+ self.velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
else
- self.velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ {
+ if(self.gravity)
+ self.velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
}
self.angles = self.move_angles + dt * self.avelocity;
if(!trace_startsolid)
setorigin(self, trace_endpos);
}
+
+ if(self.move_didgravity > 0)
+ {
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ {
+ if(self.gravity)
+ self.velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
+ }
}
else
{
float MOVETYPE_BOUNCEMISSILE = 11; // Like bounce but doesn't lose speed on bouncing
float MOVETYPE_FOLLOW = 12;
float MOVETYPE_FAKEPUSH = 13;
+float MOVETYPE_FLY_WORLDONLY = 33;
float FL_ITEM = 256;
float FL_ONGROUND = 512;
if(self.noise != "")
{
self.origin = p;
- sound(self, CHAN_TRIGGER, self.noise, VOL_BASE * self.volume, self.atten);
+ sound(self, CH_AMBIENT, self.noise, VOL_BASE * self.volume, self.atten);
}
self.just_toggled = 0;
}
bgmscript.qh
noise.qh
teamplay.qh
-
+tturrets.qh
+../server/tturrets/include/turrets_early.qh
+../server/movelib.qc
main.qh
+vehicles/vehicles.qh
sortlist.qc
miscfunctions.qc
tuba.qc
target_music.qc
-//vehicles/spiderbot.qc
+vehicles/vehicles.qc
shownames.qh
shownames.qc
+
Main.qc
View.qc
interpolate.qc
../warpzonelib/mathlib.qc
../warpzonelib/common.qc
../warpzonelib/client.qc
+tturrets.qc
../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
self.trail_oldorigin = to;
self.trail_oldtime = time;
}
+
void Projectile_DrawTrail(vector to)
{
vector from;
float t0;
+
from = self.trail_oldorigin;
t0 = self.trail_oldtime;
self.trail_oldorigin = to;
void Ent_RemoveProjectile()
{
if(self.snd_looping)
- sound(self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM);
if(self.count & 0x80)
{
// effects
//
// projectiles don't send angles, because they always follow the velocity
-
+
f = ReadByte();
self.count = (f & 0x80);
self.iflags = (self.iflags & IFLAG_INTERNALMASK) | IFLAG_AUTOANGLES | IFLAG_ANGLES;
case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum("TR_ROCKET"); break;
case PROJECTILE_FLAC: setmodel(self, "models/hagarmissile.mdl"); self.scale = 0.4; self.traileffect = particleeffectnum("TR_SEEKER"); break;
case PROJECTILE_SEEKER: setmodel(self, "models/tagrocket.md3"); self.traileffect = particleeffectnum("TR_SEEKER"); break;
+
+ case PROJECTILE_RAPTORBOMB: setmodel(self, "models/vehicles/clusterbomb.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break;
+ case PROJECTILE_RAPTORBOMBLET: setmodel(self, "models/vehicles/bomblet.md3"); self.gravity = 1; self.avelocity = '0 0 180'; self.traileffect = particleeffectnum(""); break;
+ case PROJECTILE_RAPTORCANNON: setmodel(self, "models/plasmatrail.mdl"); self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break;
+
+ case PROJECTILE_SPIDERROCKET: setmodel(self, "models/vehicles/rocket02.md3"); self.traileffect = particleeffectnum("spiderbot_rocket_thrust"); break;
+ case PROJECTILE_WAKIROCKET: setmodel(self, "models/vehicles/rocket01.md3"); self.traileffect = particleeffectnum("wakizashi_rocket_thrust"); break;
+ case PROJECTILE_WAKICANNON: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum(""); break;
default:
error("Received invalid CSQC projectile, can't work with this!");
break;
{
case PROJECTILE_ELECTRO:
// only new engines support sound moving with object
- loopsound(self, CHAN_PROJECTILE, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '0 0 -4';
self.maxs = '0 0 -4';
self.move_movetype = MOVETYPE_BOUNCE;
self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop;
break;
case PROJECTILE_ROCKET:
- loopsound(self, CHAN_PROJECTILE, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '-3 -3 -3';
self.maxs = '3 3 3';
break;
self.move_touch = SUB_Null;
break;
case PROJECTILE_FIREBALL:
- loopsound(self, CHAN_PROJECTILE, "weapons/fireball_fly2.wav", VOL_BASE, ATTN_NORM);
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/fireball_fly2.wav", VOL_BASE, ATTN_NORM);
self.mins = '-16 -16 -16';
self.maxs = '16 16 16';
break;
case PROJECTILE_FIREMINE:
- loopsound(self, CHAN_PROJECTILE, "weapons/fireball_fly.wav", VOL_BASE, ATTN_NORM);
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/fireball_fly.wav", VOL_BASE, ATTN_NORM);
self.move_movetype = MOVETYPE_BOUNCE;
self.move_touch = SUB_Null;
self.mins = '-4 -4 -4';
self.maxs = '2 2 2';
break;
case PROJECTILE_SEEKER:
- loopsound(self, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.mins = '-4 -4 -4';
self.maxs = '4 4 4';
break;
+ case PROJECTILE_RAPTORBOMB:
+ self.mins = '-3 -3 -3';
+ self.maxs = '3 3 3';
+ break;
+ case PROJECTILE_RAPTORBOMBLET:
+ break;
+ case PROJECTILE_RAPTORCANNON:
+ break;
+ case PROJECTILE_SPIDERROCKET:
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
+ break;
+ case PROJECTILE_WAKIROCKET:
+ loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
+ break;
+ case PROJECTILE_WAKICANNON:
+ break;
default:
break;
}
if(!(self.count & 0x80))
InterpolateOrigin_Note();
-
+
self.draw = Projectile_Draw;
self.entremove = Ent_RemoveProjectile;
}
precache_model("models/rocket.md3");
precache_model("models/tagrocket.md3");
precache_model("models/tracer.mdl");
+
precache_sound("weapons/electro_fly.wav");
precache_sound("weapons/rocket_fly.wav");
precache_sound("weapons/fireball_fly.wav");
precache_sound("weapons/fireball_fly2.wav");
precache_sound("weapons/tag_rocket_fly.wav");
+
}
body_table_height = 1.25 * hud_fontsize_y * max(1, tm.team_size); // no player? show 1 empty line
+ pos_y += autocvar_scoreboard_border_thickness;
pos -= '1 1 0';
tmp_x = sbwidth + 2;
float weapon_width = sbwidth / weapon_cnt;
drawstring(pos, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += 1.25 * hud_fontsize_y;
+ pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness;
vector tmp;
tmp_x = sbwidth;
tmp_y = height * rows;
if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX)
g_minstagib = 1; // TODO: real detection for minstagib?
- float weapon_stats, weapon_number;
+ float weapon_stats;
if (!acc_levels)
rgb = '1 1 1';
pos_y += hud_fontsize_y;
drawstring(pos, _("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += hud_fontsize_y;
+ pos_y += hud_fontsize_y + autocvar_scoreboard_border_thickness;
vector tmp;
tmp_x = sbwidth;
tmp_y = 1.25 * hud_fontsize_y * RANKINGS_RECEIVED_CNT;
drawcolorcodedstring(pos + '8 0 0' * hud_fontsize_y, n, '1 1 0' * hud_fontsize_y, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
pos_y += 1.25 * hud_fontsize_y;
}
+ pos_y += autocvar_scoreboard_border_thickness;
return pos;
}
vector rgb, pos, tmp;
entity pl, tm;
+ string str;
xmin = autocvar_scoreboard_offset_left * vid_conwidth;
ymin = autocvar_con_notify * autocvar_con_notifysize;
pos_z = 0;
// Heading
- drawstring(pos, _("Scoreboard"), '24 24 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
-
- centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth(_("Scoreboard"), FALSE, '24 24 0'));
- centerprint_start_y = pos_y;
+ vector sb_heading_fontsize;
+ sb_heading_fontsize = hud_fontsize * 2;
+ drawstring(pos, _("Scoreboard"), sb_heading_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += 24;
+ pos_y += sb_heading_fontsize_y + hud_fontsize_y * 0.25;
// Draw the scoreboard
vector bg_size = drawgetimagesize("gfx/scoreboard/scoreboard_bg") * autocvar_scoreboard_bg_scale;
if(teamplay)
{
+ vector team_score_baseoffset;
+ team_score_baseoffset = eY * (2 * autocvar_scoreboard_border_thickness + hud_fontsize_y) - eX * (autocvar_scoreboard_border_thickness + hud_fontsize_x * 0.25);
for(tm = teams.sort_next; tm; tm = tm.sort_next)
{
if(tm.team == COLOR_SPECTATOR)
continue;
rgb = GetTeamRGB(tm.team);
- drawstring(pos - '2 0 0' * hud_fontsize_x + '0 1 0' * hud_fontsize_y, ftos(tm.(teamscores[ts_primary])), '1 1 0' * hud_fontsize_y * 1.5, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ str = ftos(tm.(teamscores[ts_primary]));
+ drawstring(pos + team_score_baseoffset - eX * stringwidth(str, FALSE, hud_fontsize * 1.5), str, hud_fontsize * 1.5, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
if(ts_primary != ts_secondary)
- drawstring(pos - '2 0 0' * hud_fontsize_x + '0 2.5 0' * hud_fontsize_y, ftos(tm.(teamscores[ts_secondary])), '1 1 0' * hud_fontsize_y * 1, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
-
+ {
+ str = ftos(tm.(teamscores[ts_secondary]));
+ drawstring(pos + team_score_baseoffset - eX * stringwidth(str, FALSE, hud_fontsize) + eY * hud_fontsize_y * 1.5, str, hud_fontsize, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ }
pos = HUD_Scoreboard_MakeTable(pos, tm, rgb, bg_size);
}
}
}
// Print info string
- string str;
float tl, fl, ll;
str = sprintf(_("playing on ^2%s^7"), shortmapname);
tl = getstatf(STAT_TIMELIMIT);
if(ent.sv_entnum == player_localentnum && !autocvar_chase_active)
return;
+ makevectors(view_angles);
+
if(ent.sameteam || (!ent.sameteam && autocvar_hud_shownames_enemies))
{
ent.origin_z += autocvar_hud_shownames_offset;
- if(!ent.sameteam)
+ float hit;
+ if(ent.sameteam)
{
- /* WIP, why does trace_ent != ent not work as intended here?
- if(autocvar_hud_shownames_enemies != 2) // player has to point at enemy if so
- {
- traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, MOVETYPE_FLY, world);
- print("trace_endpos: ", vtos(trace_endpos), " view_origin: ", vtos(view_origin), "\n");
- if(trace_ent != ent)
- return;
- }*/
-
- traceline(ent.origin, view_origin, 1, ent);
+ hit = 1;
+ }
+ else
+ {
+ traceline(view_origin, ent.origin, MOVE_NORMAL, ent);
+ if(trace_fraction < 1 && trace_networkentity != ent.sv_entnum)
+ hit = 0;
+ else
+ hit = 1;
}
vector o, eo;
o = project_3d_to_2d(ent.origin);
- float overlap;
+ float overlap, onscreen;
if(autocvar_hud_shownames_antioverlap)
{
}
}
- if(!ent.sameteam && trace_endpos != view_origin) // out of view, fade out
+ onscreen = (o_z >= 0 && o_x >= 0 && o_y >= 0 && o_x <= vid_conwidth && o_y <= vid_conheight);
+
+ if(!ent.sameteam && (!onscreen || !hit)) // out of view, fade out
ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime);
else if(ent.healthvalue < 1) // dead player, fade out slowly
ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime);
resize = 0.5 + 0.5 * ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance);
// draw the sprite image
- if not(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
+ if(o_z >= 0)
{
o_z = 0;
float i;
for(i = 0; i < maxclients; ++i)
{
- vector o;
float t;
t = GetPlayerColor(i);
if(t == COLOR_SPECTATOR)
.float healthvalue;
.float armorvalue;
.float sameteam;
-.float the_entnum;
for(e = world; (e = findfloat(e, enttype, ENT_CLIENT_TRIGGER_MUSIC)); ) if(e.noise)
{
vol0 = e.lastvol;
- if(getsoundtime(e, CHAN_VOICE) < 0)
+ if(getsoundtime(e, CH_BGM_SINGLE) < 0)
{
vol0 = -1;
}
if(vol != vol0)
{
if(vol0 < 0)
- sound(e, CHAN_VOICE, e.noise, vol, ATTN_NONE); // restart
+ sound(e, CH_BGM_SINGLE, e.noise, vol, ATTN_NONE); // restart
else
- sound(e, CHAN_VOICE, "", vol, ATTN_NONE);
+ sound(e, CH_BGM_SINGLE, "", vol, ATTN_NONE);
e.lastvol = vol;
}
}
music_trigger = world;
if(best)
- bgmtime = getsoundtime(best, CHAN_VOICE);
+ bgmtime = getsoundtime(best, CH_BGM_SINGLE);
else
bgmtime = gettime(GETTIME_CDTRACK);
}
strunzone(e.noise);
e.noise = strzone(noi);
precache_sound(e.noise);
- sound(e, CHAN_VOICE, e.noise, 0, ATTN_NONE);
- if(getsoundtime(e, CHAN_VOICE) < 0)
+ sound(e, CH_BGM_SINGLE, e.noise, 0, ATTN_NONE);
+ if(getsoundtime(e, CH_BGM_SINGLE) < 0)
{
print(sprintf(_("Cannot initialize sound %s\n"), e.noise));
strunzone(e.noise);
if(self.noise != s)
{
precache_sound(self.noise);
- sound(self, CHAN_VOICE, self.noise, 0, ATTN_NONE);
- if(getsoundtime(self, CHAN_VOICE) < 0)
+ sound(self, CH_BGM_SINGLE, self.noise, 0, ATTN_NONE);
+ if(getsoundtime(self, CH_BGM_SINGLE) < 0)
{
print(sprintf(_("Cannot initialize sound %s\n"), self.noise));
strunzone(self.noise);
// to make entities have dots on the team radar
.float teamradar_icon;
-.float teamradar_times[MAX_TEAMRADAR_TIMES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(teamradar_times);
+.float teamradar_times[MAX_TEAMRADAR_TIMES];
.float teamradar_time_index;
.vector teamradar_color;
--- /dev/null
+string tid2info_base;
+string tid2info_head;
+string tid2info_name;
+vector tid2info_min;
+vector tid2info_max;
+
+void turret_tid2info(float _tid);
+void turret_precache(float _tid);
+float turret_is_precache[TID_LAST];
+
+void turrets_precache()
+{
+ turret_precache(TID_COMMON);
+}
+
+void turret_precache(float _tid)
+{
+ if (!turret_is_precache[TID_COMMON])
+ {
+ dprint("turret_precache TID_COMMON\n");
+ precache_sound ("weapons/rocket_impact.wav");
+ precache_model ("models/turrets/base-gib1.md3");
+ precache_model ("models/turrets/base-gib2.md3");
+ precache_model ("models/turrets/base-gib3.md3");
+ precache_model ("models/turrets/base-gib4.md3");
+ precache_model ("models/turrets/head-gib1.md3");
+ precache_model ("models/turrets/head-gib2.md3");
+ precache_model ("models/turrets/head-gib3.md3");
+ precache_model ("models/turrets/head-gib4.md3");
+ precache_model ("models/turrets/terrainbase.md3");
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/rocket.md3");
+ }
+ turret_tid2info(_tid);
+ if(turret_is_precache[_tid])
+ {
+ dprint("turret_precache: ", tid2info_name, " allready precachd, skipping.\n");
+ return;
+ }
+ else
+ dprint("turret_precache: ", tid2info_name, " precaching.\n");
+
+ switch(_tid)
+ {
+ case TID_EWHEEL:
+ precache_model ("models/turrets/ewheel-base2.md3");
+ precache_model ("models/turrets/ewheel-gun1.md3");
+ break;
+ case TID_FLAC:
+ precache_model ("models/turrets/flac.md3");
+ break;
+ case TID_FUSION:
+ precache_model ("models/turrets/reactor.md3");
+ break;
+ case TID_HELLION:
+ precache_model ("models/turrets/hellion.md3");
+ break;
+ case TID_HK:
+ precache_model ("models/turrets/hk.md3");
+ break;
+ case TID_MACHINEGUN:
+ precache_model ("models/turrets/machinegun.md3");
+ precache_sound ("weapons/uzi_fire.wav");
+ break;
+ case TID_MLRS:
+ precache_model ("models/turrets/mlrs.md3");
+ break;
+ case TID_PHASER:
+ precache_model ("models/turrets/phaser.md3");
+ precache_model ("models/turrets/phaser_beam.md3");
+ precache_sound ("turrets/phaser.wav");
+ break;
+ case TID_PLASMA:
+ precache_model ("models/turrets/plasma.md3");
+ break;
+ case TID_PLASMA_DUAL:
+ precache_model ("models/turrets/plasmad.md3");
+ break;
+ case TID_TESLA:
+ precache_model ("models/turrets/tesla_head.md3");
+ precache_model ("models/turrets/tesla_base.md3");
+ break;
+ case TID_WALKER:
+ precache_model ("models/turrets/walker_head_minigun.md3");
+ precache_model ("models/turrets/walker_body.md3");
+ precache_sound ("weapons/uzi_fire.wav");
+ break;
+ }
+ turret_is_precache[_tid] = TRUE;
+}
+
+void turret_tid2info(float _tid)
+{
+ tid2info_base = "models/turrets/base.md3";
+ tid2info_min = '-32 -32 0';
+ tid2info_max = '32 32 64';
+
+ switch(_tid)
+ {
+ case TID_EWHEEL:
+ tid2info_base = "models/turrets/ewheel-base2.md3";
+ tid2info_head = "models/turrets/ewheel-gun1.md3";
+ tid2info_name = "eWheel";
+ break;
+ case TID_FLAC:
+ tid2info_head = "models/turrets/flac.md3";
+ tid2info_name = "Flac Cannon";
+ break;
+ case TID_FUSION:
+ tid2info_head = "models/turrets/reactor.md3";
+ tid2info_name = "Fusion Reactor";
+ tid2info_min = '-34 -34 0';
+ tid2info_max = '34 34 90';
+ break;
+ case TID_HELLION:
+ tid2info_head = "models/turrets/hellion.md3";
+ tid2info_name = "Hellion";
+ break;
+ case TID_HK:
+ tid2info_head = "models/turrets/hk.md3";
+ tid2info_name = "Hunter-Killer";
+ break;
+ case TID_MACHINEGUN:
+ tid2info_head = "models/turrets/machinegun.md3";
+ tid2info_name = "Machinegun";
+ break;
+ case TID_MLRS:
+ tid2info_head = "models/turrets/mlrs.md3";
+ tid2info_name = "MLRS";
+ break;
+ case TID_PHASER:
+ tid2info_head = "models/turrets/phaser.md3";
+ tid2info_name = "Phaser";
+ break;
+ case TID_PLASMA:
+ tid2info_head = "models/turrets/plasma.md3";
+ tid2info_name = "Plasma";
+ break;
+ case TID_PLASMA_DUAL:
+ tid2info_head = "models/turrets/plasmad.md3";
+ tid2info_name = "Dual Plasma";
+ break;
+ case TID_TESLA:
+ tid2info_base = "models/turrets/tesla_base.md3";
+ tid2info_head = "models/turrets/tesla_head.md3";
+ tid2info_name = "Tesla coil";
+ tid2info_min = '-60 -60 0';
+ tid2info_max ='60 60 128';
+ break;
+ case TID_WALKER:
+ tid2info_base = "models/turrets/walker_body.md3";
+ tid2info_head = "models/turrets/walker_head_minigun.md3";
+ tid2info_name = "Walker";
+ tid2info_min = '-70 -70 0';
+ tid2info_max = '70 70 95';
+ break;
+ }
+}
+
+void turret_remove()
+{
+ turret_tid2info(self.turret_type);
+ dprint("Removing ", tid2info_name, " turrret.\n");
+
+ remove(self.tur_head);
+ self.tur_head = world;
+}
+
+void turret_changeteam()
+{
+ self.colormod = '0 0 0';
+
+ switch(self.team)
+ {
+ case COLOR_TEAM1: // Red
+ self.colormod = '2 0.5 0.5';
+ break;
+
+ case COLOR_TEAM2: // Blue
+ self.colormod = '0.5 0.5 2';
+ break;
+
+ case COLOR_TEAM3: // Yellow
+ self.colormod = '1.4 1.4 0.6';
+ break;
+
+ case COLOR_TEAM4: // Pink
+ self.colormod = '1.4 0.6 1.4';
+ break;
+ }
+
+ self.tur_head.colormod = self.colormod;
+}
+
+void turret_head_draw()
+{
+ self.drawmask = MASK_NORMAL;
+}
+
+void turret_draw()
+{
+ float dt;
+
+ dt = time - self.move_time;
+ self.move_time = time;
+ if(dt <= 0)
+ return;
+
+ self.tur_head.angles += dt * self.tur_head.move_avelocity;
+
+ if (self.health < 127)
+ {
+ dt = random();
+
+ if(dt < 0.25)
+ te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+
+ }
+
+ if(self.health < 85)
+ if(dt < 0.1)
+ pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+ if(self.health < 32)
+ if(dt < 0.1)
+ pointparticles(particleeffectnum("smoke_large"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+}
+
+void turret_walker_draw()
+{
+ float dt;
+
+ dt = time - self.move_time;
+ self.move_time = time;
+ if(dt <= 0)
+ return;
+
+ fixedmakevectors(self.angles);
+ movelib_groundalign4point(300, 100, 0.25);
+
+ setorigin(self, self.origin + self.velocity * dt);
+ setorigin(self.tur_head, gettaginfo(self, gettagindex(self, "tag_head")));
+
+ self.tur_head.angles += dt * self.tur_head.move_avelocity;
+
+ self.angles_y = self.move_angles_y;
+
+ if (self.health < 127)
+ if(random() < 0.25)
+ te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+}
+
+void turret_ewheel_draw()
+{
+ float dt;
+
+ dt = time - self.move_time;
+ self.move_time = time;
+ if(dt <= 0)
+ return;
+
+ fixedmakevectors(self.angles);
+ movelib_groundalign4point(300, 100, 0.25);
+
+ setorigin(self, self.origin + self.velocity * dt);
+ setorigin(self.tur_head, self.origin);
+
+ self.tur_head.angles += dt * self.tur_head.move_avelocity;
+
+ // Simulate banking
+ //self.angles_z -= self.angles_z * dt * 2;
+ //self.angles_z = bound(-45, self.angles_z + ((self.move_angles_y - self.angles_y * -25) * dt), 45);
+
+ self.angles_y = self.move_angles_y;
+
+ if (self.health < 127)
+ if(random() < 0.25)
+ te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+}
+
+void turret_construct()
+{
+ if(self.tur_head == world)
+ self.tur_head = spawn();
+
+ turret_tid2info(self.turret_type);
+ dprint("Constructing ", tid2info_name , " turret (", ftos(self.turret_type), ")\n");
+
+ setorigin(self, self.origin);
+ setmodel(self, tid2info_base);
+ setmodel(self.tur_head, tid2info_head);
+ setsize(self, tid2info_min, tid2info_max);
+ setsize(self.tur_head, '0 0 0', '0 0 0');
+ setorigin(self.tur_head, gettaginfo(self, gettagindex(self, "tag_head")));
+
+ self.tur_head.classname = "turret_head";
+ self.tur_head.owner = self;
+ self.tur_head.move_movetype = MOVETYPE_NOCLIP;
+ self.move_movetype = MOVETYPE_NOCLIP;
+ self.tur_head.angles = self.angles;
+ self.health = 255;
+ self.solid = SOLID_BBOX;
+ self.tur_head.solid = SOLID_NOT;
+ self.movetype = MOVETYPE_NOCLIP;
+ self.tur_head.movetype = MOVETYPE_NOCLIP;
+ self.draw = turret_draw;
+ self.entremove = turret_remove;
+ self.drawmask = MASK_NORMAL;
+ self.tur_head.drawmask = MASK_NORMAL;
+
+ if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER)
+ {
+ self.gravity = 1;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.move_movetype = MOVETYPE_BOUNCE;
+ self.move_origin = self.origin;
+ self.move_time = time;
+ switch(self.turret_type)
+ {
+ case TID_EWHEEL:
+ self.draw = turret_ewheel_draw;
+ break;
+ case TID_WALKER:
+ self.draw = turret_walker_draw;
+ }
+ }
+}
+
+entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode);
+void turret_gibboom();
+void turret_gib_draw()
+{
+ Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
+
+ self.drawmask = MASK_NORMAL;
+
+ if(self.cnt)
+ {
+ if(time >= self.nextthink)
+ {
+ turret_gibboom();
+ remove(self);
+ }
+ }
+ else
+ {
+ self.alpha = bound(0, self.nextthink - time, 1);
+ if(self.alpha < ALPHA_MIN_VISIBLE)
+ remove(self);
+ }
+}
+
+void turret_gibboom()
+{
+ float i;
+
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+
+ for (i = 1; i < 5; i = i + 1)
+ turret_gibtoss(strcat("models/turrets/head-gib", ftos(i), ".md3"), self.origin, self.velocity + randomvec() * 700, '0 0 0', FALSE);
+}
+
+entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode)
+{
+ entity gib;
+
+ gib = spawn();
+ setorigin(gib, _from);
+ setmodel(gib, _model);
+ gib.colormod = _cmod;
+ gib.solid = SOLID_CORPSE;
+ gib.draw = turret_gib_draw;
+ gib.cnt = _explode;
+
+ if(_explode)
+ {
+ gib.nextthink = time + 0.2 * (autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15));
+ gib.effects = EF_FLAME;
+ }
+ else
+ gib.nextthink = time + autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15);
+
+ gib.gravity = 1;
+ gib.move_movetype = MOVETYPE_BOUNCE;
+ gib.move_origin = gib.origin = _from;
+ gib.move_velocity = _to;
+ gib.move_avelocity = prandomvec() * 32;
+ gib.move_time = time;
+ gib.damageforcescale = 1;
+
+ return gib;
+}
+
+void turret_die()
+{
+ entity headgib;
+
+ setmodel(self, "");
+ setmodel(self.tur_head, "");
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+ turret_tid2info(self.turret_type);
+ dprint("Turret ", tid2info_name, " dies.\n");
+
+ // Base
+ if(self.turret_type == TID_EWHEEL)
+ turret_gibtoss(tid2info_base, self.origin, self.velocity, '-1 -1 -1', FALSE);
+ else if (self.turret_type == TID_WALKER)
+ turret_gibtoss(tid2info_base, self.origin, self.velocity, '-1 -1 -1', FALSE);
+ else if (self.turret_type == TID_TESLA)
+ turret_gibtoss(tid2info_base, self.origin, self.velocity, '-1 -1 -1', FALSE);
+ else
+ {
+ if (random() > 0.5)
+ {
+ turret_gibtoss("models/turrets/base-gib2.md3", self.origin + '0 0 2', '0 0 50' + randomvec() * 150, '0 0 0', FALSE);
+ turret_gibtoss("models/turrets/base-gib3.md3", self.origin + '0 0 2', '0 0 50' + randomvec() * 150, '0 0 0', FALSE);
+ turret_gibtoss("models/turrets/base-gib4.md3", self.origin + '0 0 2', '0 0 50' + randomvec() * 150, '0 0 0', FALSE);
+ }
+ else
+ turret_gibtoss("models/turrets/base-gib1.md3", self.origin + '0 0 4', '0 0 0', '0 0 0', TRUE);
+ }
+
+ headgib = turret_gibtoss(tid2info_head, self.origin + '0 0 32', '0 0 200' + randomvec() * 200, '-1 -1 -1', TRUE);
+ headgib.angles = headgib.move_angles = self.tur_head.angles;
+ headgib.avelocity = headgib.move_avelocity = self.tur_head.move_avelocity + randomvec() * 45;
+ headgib.avelocity_y = headgib.move_avelocity_y = headgib.move_avelocity_y * 5;
+ headgib.gravity = 0.5;
+}
+
+void ent_turret()
+{
+ float sf;
+ sf = ReadByte();
+
+ if(sf & TNSF_SETUP)
+ {
+ self.turret_type = ReadByte();
+
+ self.origin_x = ReadCoord();
+ self.origin_y = ReadCoord();
+ self.origin_z = ReadCoord();
+
+ self.angles_x = ReadAngle();
+ self.angles_y = ReadAngle();
+
+ turret_precache(self.turret_type);
+ turret_construct();
+ }
+
+ if(sf & TNSF_ANG)
+ {
+ self.tur_head.move_angles_x = ReadShort();
+ self.tur_head.move_angles_y = ReadShort();
+ self.tur_head.angles = self.angles + self.tur_head.move_angles;
+ }
+
+ if(sf & TNSF_AVEL)
+ {
+ self.tur_head.move_avelocity_x = ReadShort();
+ self.tur_head.move_avelocity_y = ReadShort();
+ }
+
+ if(sf & TNSF_MOVE)
+ {
+ self.origin_x = ReadShort();
+ self.origin_y = ReadShort();
+ self.origin_z = ReadShort();
+ setorigin(self, self.origin);
+
+ self.velocity_x = ReadShort();
+ self.velocity_y = ReadShort();
+ self.velocity_z = ReadShort();
+
+ self.move_angles_y = ReadShort();
+
+ self.move_time = time;
+ self.move_velocity = self.velocity;
+ self.move_origin = self.origin;
+ }
+
+ if(sf & TNSF_ANIM)
+ {
+ self.frame1time = ReadCoord();
+ self.frame = ReadByte();
+ }
+
+ if(sf & TNSF_STATUS)
+ {
+ float _team;
+ _team = ReadByte();
+ _team -= 1; // /&)=(%&#)&%)/#&)=½!!!½!!". thanks.
+ self.health = ReadByte();
+ if(_team != self.team)
+ {
+ self.team = _team;
+ turret_changeteam();
+ }
+
+ if(self.health == 0)
+ turret_die();
+ }
+
+}
--- /dev/null
+void ent_turret();
+void turrets_precache();
+.entity tur_head;
self.nextthink = time;
if(self.cnt <= 0)
{
- sound(self, CHAN_PROJECTILE, "misc/null.wav", 0, 0);
+ sound(self, CH_SHOTS_SINGLE, "misc/null.wav", 0, 0);
remove(self);
}
else
- sound(self, CHAN_PROJECTILE, "", self.cnt, self.attenuate * autocvar_g_balance_tuba_attenuation);
+ sound(self, CH_SHOTS_SINGLE, "", self.cnt, self.attenuate * autocvar_g_balance_tuba_attenuation);
}
void Ent_TubaNote_UpdateSound()
{
self.enemy.cnt = bound(0, VOL_BASE * autocvar_g_balance_tuba_volume, 1);
self.enemy.count = self.enemy.cnt;
- sound(self.enemy, CHAN_PROJECTILE, TUBA_STARTNOTE(self.cnt), self.enemy.cnt, self.enemy.attenuate * autocvar_g_balance_tuba_attenuation);
+ sound(self.enemy, CH_SHOTS_SINGLE, TUBA_STARTNOTE(self.cnt), self.enemy.cnt, self.enemy.attenuate * autocvar_g_balance_tuba_attenuation);
}
void Ent_TubaNote_StopSound()
--- /dev/null
+#define hud_bg "gfx/vehicles/frame.tga"
+#define hud_sh "gfx/vehicles/vh-shield.tga"
+
+#define hud_hp_bar "gfx/vehicles/bar_up_left.tga"
+#define hud_hp_ico "gfx/vehicles/health.tga"
+#define hud_sh_bar "gfx/vehicles/bar_dwn_left.tga"
+#define hud_sh_ico "gfx/vehicles/shield.tga"
+
+#define hud_ammo1_bar "gfx/vehicles/bar_up_right.tga"
+#define hud_ammo1_ico "gfx/vehicles/bullets.tga"
+#define hud_ammo2_bar "gfx/vehicles/bar_dwn_right.tga"
+#define hud_ammo2_ico "gfx/vehicles/rocket.tga"
+
+entity dropmark;
+float autocvar_cl_vehicles_hudscale;
+float autocvar_cl_vehicles_hudalpha;
+
+
+void CSQC_WAKIZASHI_HUD();
+void CSQC_SPIDER_HUD();
+void CSQC_RAPTOR_HUD();
+void CSQC_BUMBLE_HUD();
+
+#define MAX_AXH 4
+entity AuxiliaryXhair[MAX_AXH];
+const var void Draw_Not();
+
+.string axh_image;
+.float axh_fadetime;
+.float axh_drawflag;
+.float axh_scale;
+
+void AuxiliaryXhair_Draw2D()
+{
+ vector loc, psize;
+
+ psize = self.axh_scale * drawgetimagesize(self.axh_image);
+ loc = project_3d_to_2d(self.origin) - 0.5 * psize;
+ if not (loc_z < 0 || loc_x < 0 || loc_y < 0 || loc_x > vid_conwidth || loc_y > vid_conheight)
+ {
+ loc_z = 0;
+ psize_z = 0;
+ drawpic(loc, self.axh_image, psize, self.colormod, self.alpha, self.axh_drawflag);
+ }
+
+ if(time - self.cnt > self.axh_fadetime)
+ self.draw2d = Draw_Not;
+}
+
+void Net_AuXair2(float bIsNew)
+{
+ float axh_id;
+ entity axh;
+
+ axh_id = bound(0, ReadByte(), MAX_AXH);
+ axh = AuxiliaryXhair[axh_id];
+
+ if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
+ {
+ axh = spawn();
+ axh.draw2d = Draw_Not;
+ axh.drawmask = MASK_NORMAL;
+ axh.axh_drawflag = DRAWFLAG_ADDITIVE;
+ axh.axh_fadetime = 0.1;
+ axh.axh_image = "gfx/vehicles/axh-ring.tga";
+ axh.axh_scale = 1;
+ axh.alpha = 1;
+ AuxiliaryXhair[axh_id] = axh;
+ }
+
+ axh.draw2d = AuxiliaryXhair_Draw2D;
+
+ axh.origin_x = ReadCoord();
+ axh.origin_y = ReadCoord();
+ axh.origin_z = ReadCoord();
+
+ axh.colormod_x = ReadByte() / 255;
+ axh.colormod_y = ReadByte() / 255;
+ axh.colormod_z = ReadByte() / 255;
+ axh.cnt = time;
+}
+
+void Net_VehicleSetup()
+{
+
+ float hud_id, i;
+ hud_id = bound(HUD_SPIDERBOT, ReadByte(), HUD_RAPTOR);
+
+ // Init auxiliary crosshairs
+ entity axh;
+ for(i = 0; i < MAX_AXH; ++i)
+ {
+ axh = AuxiliaryXhair[i];
+ if(axh != world && !wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
+ remove(axh);
+
+ axh = spawn();
+ axh.draw2d = Draw_Not;
+ axh.drawmask = MASK_NORMAL;
+ axh.axh_drawflag = DRAWFLAG_NORMAL;
+ axh.axh_fadetime = 0.1;
+ axh.axh_image = "gfx/vehicles/axh-ring.tga";
+ axh.axh_scale = 1;
+ axh.alpha = 1;
+ AuxiliaryXhair[i] = axh;
+ }
+
+ switch(hud_id)
+ {
+ case HUD_SPIDERBOT:
+ // Minigun1
+ AuxiliaryXhair[0].axh_image = "gfx/vehicles/axh-ring.tga";
+ AuxiliaryXhair[0].axh_scale = 0.25;
+ // Minigun2
+ AuxiliaryXhair[1].axh_image = "gfx/vehicles/axh-ring.tga";
+ AuxiliaryXhair[1].axh_scale = 0.25;
+ // Rocket
+ AuxiliaryXhair[2].axh_image = "gfx/vehicles/axh-special1.tga";
+ AuxiliaryXhair[2].axh_scale = 0.5;
+ break;
+
+ case HUD_WAKIZASHI:
+ AuxiliaryXhair[0].axh_image = "gfx/vehicles/axh-bracket.tga";
+ AuxiliaryXhair[0].axh_scale = 0.25;
+ break;
+
+ case HUD_RAPTOR:
+ AuxiliaryXhair[0].axh_image = "gfx/vehicles/axh-special2.tga";
+ AuxiliaryXhair[0].axh_scale = 0.5;
+ //AuxiliaryXhair[0].alpha = 0.5;
+
+ AuxiliaryXhair[1].axh_image = "gfx/vehicles/axh-bracket.tga";
+ AuxiliaryXhair[1].axh_scale = 0.25;
+ //AuxiliaryXhair[1].alpha = 0.75;
+ //AuxiliaryXhair[1].axh_drawflag = DRAWFLAG_NORMAL;
+ break;
+
+ case HUD_BUMBLEBEE:
+ // Plasma cannons
+ AuxiliaryXhair[0].axh_image = "gfx/vehicles/axh-ring.tga";
+ AuxiliaryXhair[0].axh_scale = 0.25;
+ // Raygun
+ AuxiliaryXhair[1].axh_image = "gfx/vehicles/axh-special1.tga";
+ AuxiliaryXhair[1].axh_scale = 0.25;
+ break;
+ }
+}
+#define HUD_GETSTATS \
+ float vh_health = getstati(STAT_VEHICLESTAT_HEALTH); \
+ float shield = getstati(STAT_VEHICLESTAT_SHIELD); \
+ float energy = getstati(STAT_VEHICLESTAT_ENERGY); \
+ float ammo1 = getstati(STAT_VEHICLESTAT_AMMO1); \
+ float reload1 = getstati(STAT_VEHICLESTAT_RELOAD1); \
+ float ammo2 = getstati(STAT_VEHICLESTAT_AMMO2); \
+ float reload2 = getstati(STAT_VEHICLESTAT_RELOAD2);
+
+void CSQC_BUMBLE_HUD()
+{
+}
+
+
+#define spider_ico "gfx/vehicles/sbot.tga"
+#define spider_rkt "gfx/vehicles/sbot_rpods.tga"
+#define spider_mgun "gfx/vehicles/sbot_mguns.tga"
+#define spider_xhair "gfx/vehicles/axh-special1.tga"
+float alarm1time;
+float alarm2time;
+
+void CSQC_SPIDER_HUD()
+{
+ if(autocvar_r_letterbox)
+ return;
+
+ vector picsize, hudloc, pic2size, picloc;
+ float i;
+
+ // Fetch health & ammo stats
+ HUD_GETSTATS
+
+ picsize = drawgetimagesize(hud_bg) * autocvar_cl_vehicles_hudscale;
+ hudloc_y = vid_conheight - picsize_y;
+ hudloc_x = vid_conwidth * 0.5 - picsize_x * 0.5;
+
+ drawpic(hudloc, hud_bg, picsize, '1 1 1', autocvar_cl_vehicles_hudalpha, DRAWFLAG_NORMAL);
+
+ //drawstring(hudloc + '145 19 0', strcat(ftos(vh_health), "%"),'15 15 0','0 1 0', 1, DRAWFLAG_NORMAL);
+ //drawstring(hudloc + '175 34 0', strcat(ftos(shield), "%"),'15 15 0','0 0 1', 1, DRAWFLAG_NORMAL);
+ //drawstring(hudloc + '136 102 0', strcat(ftos(ammo1), "%"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
+ //drawstring(hudloc + '179 69 0', strcat(ftos(9 - ammo2), " / 8"),'14 14 0','1 1 0', 1, DRAWFLAG_NORMAL);
+
+ ammo1 *= 0.01;
+ shield *= 0.01;
+ vh_health *= 0.01;
+ reload2 *= 0.01;
+
+ pic2size = drawgetimagesize(spider_ico) * (autocvar_cl_vehicles_hudscale * 0.8);
+ picloc = picsize * 0.5 - pic2size * 0.5;
+ if(vh_health < 0.25)
+ drawpic(hudloc + picloc, spider_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, spider_ico, pic2size, '1 1 1' * vh_health + '1 0 0' * (1 - vh_health), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, spider_rkt, pic2size, '1 1 1' * reload2 + '1 0 0' * (1 - reload2), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, spider_mgun, pic2size, '1 1 1' * ammo1 + '1 0 0' * (1 - ammo1), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, hud_sh, pic2size, '1 1 1', shield, DRAWFLAG_NORMAL);
+
+// Health bar
+ picsize = drawgetimagesize(hud_hp_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '69 69 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - vh_health)), 0, vid_conwidth, vid_conheight);
+ drawpic(hudloc + picloc, hud_hp_bar, picsize, '1 1 1', 1 , DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picsize = drawgetimagesize(hud_hp_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '37 65 0' * autocvar_cl_vehicles_hudscale;
+ if(vh_health < 0.25)
+ {
+ if(alarm1time < time)
+ {
+ alarm1time = time + 2;
+ sound(world, CH_PAIN, "vehicles/alarm.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+ drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ if(alarm1time)
+ {
+ sound(world, CH_PAIN, "misc/null.wav", VOL_BASEVOICE, ATTN_NONE);
+ alarm1time = 0;
+ }
+ }
+// Shield bar
+ picsize = drawgetimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '69 140 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - shield)), 0, vid_conwidth, vid_conheight);
+ drawpic(hudloc + picloc, hud_sh_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picloc = '40 136 0' * autocvar_cl_vehicles_hudscale;
+ picsize = drawgetimagesize(hud_sh_ico) * autocvar_cl_vehicles_hudscale;
+ if(shield < 0.25)
+ {
+ if(alarm2time < time)
+ {
+ alarm2time = time + 1;
+ sound(world, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+ drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ if(alarm2time)
+ {
+ sound(world, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTN_NONE);
+ alarm2time = 0;
+ }
+ }
+
+
+// Minigun bar
+ picsize = drawgetimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * ammo1, vid_conheight);
+ drawpic(hudloc + picloc, hud_ammo1_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picsize = drawgetimagesize(hud_ammo1_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '664 60 0' * autocvar_cl_vehicles_hudscale;
+ if(ammo1 < 0.2)
+ drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+// Rocket ammo bar
+ picsize = drawgetimagesize(hud_ammo2_bar) * autocvar_cl_vehicles_hudscale;
+ ammo1 = picsize_x / 8;
+ picloc = '450 140 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x, hudloc_y + picloc_y, picsize_x * reload2, vid_conheight);
+ drawpic(hudloc + picloc, hud_ammo2_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+
+// .. and icons
+ pic2size = 0.35 * drawgetimagesize(hud_ammo2_ico) * autocvar_cl_vehicles_hudscale;
+ picloc_x -= pic2size_x;
+ picloc_y += pic2size_y * 2.25;
+ if(ammo2 == 9)
+ {
+ for(i = 1; i < 9; ++i)
+ {
+ picloc_x += ammo1;
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, ((8 * reload2 <= i) ? '0 0 0' : '1 1 1'), 0.75, DRAWFLAG_NORMAL);
+ }
+ }
+ else
+ {
+ for(i = 1; i < 9; ++i)
+ {
+ picloc_x += ammo1;
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, ((i >= ammo2) ? '1 1 1' : '0 0 0'), 0.75, DRAWFLAG_NORMAL);
+ }
+ }
+ pic2size = drawgetimagesize(hud_ammo2_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '664 130 0' * autocvar_cl_vehicles_hudscale;
+ if(ammo2 == 9)
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+ if (scoreboard_showscores)
+ HUD_DrawScoreboard();
+ else
+ {
+ picsize = drawgetimagesize(spider_xhair);
+ picsize_x *= autocvar_cl_vehicle_spiderbot_cross_size;
+ picsize_y *= autocvar_cl_vehicle_spiderbot_cross_size;
+
+ drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), spider_xhair, picsize, '1 1 1', autocvar_cl_vehicle_spiderbot_cross_alpha, DRAWFLAG_ADDITIVE);
+ }
+}
+
+#define raptor_ico "gfx/vehicles/raptor.tga"
+#define raptor_gun "gfx/vehicles/raptor_guns.tga"
+#define raptor_bomb "gfx/vehicles/raptor_bombs.tga"
+#define raptor_drop "gfx/vehicles/axh-dropcross.tga"
+#define raptor_xhair "gfx/vehicles/axh-ring.tga"
+void CSQC_RAPTOR_HUD()
+{
+ if(autocvar_r_letterbox)
+ return;
+
+ vector picsize, hudloc, pic2size, picloc;
+
+ // Fetch health & ammo stats
+ HUD_GETSTATS
+
+ picsize = drawgetimagesize(hud_bg) * autocvar_cl_vehicles_hudscale;
+ hudloc_y = vid_conheight - picsize_y;
+ hudloc_x = vid_conwidth * 0.5 - picsize_x * 0.5;
+
+ drawpic(hudloc, hud_bg, picsize, '1 1 1', autocvar_cl_vehicles_hudalpha, DRAWFLAG_NORMAL);
+
+ ammo1 *= 0.01;
+ ammo2 *= 0.01;
+ shield *= 0.01;
+ vh_health *= 0.01;
+ energy *= 0.01;
+ reload1 = reload2 * 0.01;
+ //reload2 *= 0.01;
+
+ pic2size = drawgetimagesize(spider_ico) * (autocvar_cl_vehicles_hudscale * 0.8);
+ picloc = picsize * 0.5 - pic2size * 0.5;
+ if(vh_health < 0.25)
+ drawpic(hudloc + picloc, raptor_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, raptor_ico, pic2size, '1 1 1' * vh_health + '1 0 0' * (1 - vh_health), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, raptor_bomb, pic2size, '1 1 1' * reload1 + '1 0 0' * (1 - reload1), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, raptor_gun, pic2size, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, hud_sh, pic2size, '1 1 1', shield, DRAWFLAG_NORMAL);
+
+// Health bar
+ picsize = drawgetimagesize(hud_hp_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '69 69 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - vh_health)), 0, vid_conwidth, vid_conheight);
+ drawpic(hudloc + picloc, hud_hp_bar, picsize, '1 1 1', 1 , DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picsize = drawgetimagesize(hud_hp_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '37 65 0' * autocvar_cl_vehicles_hudscale;
+ if(vh_health < 0.25)
+ {
+ if(alarm1time < time)
+ {
+ alarm1time = time + 2;
+ sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+
+ drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ if(alarm1time)
+ {
+ sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTN_NONE);
+ alarm1time = 0;
+ }
+ }
+
+// Shield bar
+ picsize = drawgetimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '69 140 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - shield)), 0, vid_conwidth, vid_conheight);
+ drawpic(hudloc + picloc, hud_sh_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picloc = '40 136 0' * autocvar_cl_vehicles_hudscale;
+ picsize = drawgetimagesize(hud_sh_ico) * autocvar_cl_vehicles_hudscale;
+ if(shield < 0.25)
+ {
+ if(alarm2time < time)
+ {
+ alarm2time = time + 1;
+ sound(world, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+ drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ if(alarm2time)
+ {
+ sound(world, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTN_NONE);
+ alarm2time = 0;
+ }
+ }
+
+// Gun bar
+ picsize = drawgetimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * energy, vid_conheight);
+ drawpic(hudloc + picloc, hud_ammo1_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picsize = drawgetimagesize(hud_ammo1_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '664 60 0' * autocvar_cl_vehicles_hudscale;
+ if(energy < 0.2)
+ drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+// Bomb bar
+ picsize = drawgetimagesize(hud_ammo2_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '450 140 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x, hudloc_y + picloc_y, picsize_x * reload1, vid_conheight);
+ drawpic(hudloc + picloc, hud_ammo2_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ pic2size = drawgetimagesize(hud_ammo2_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '664 130 0' * autocvar_cl_vehicles_hudscale;
+ if(reload1 != 1)
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+// Bombing crosshair
+ if(!dropmark)
+ {
+ dropmark = spawn();
+ dropmark.owner = self;
+ dropmark.gravity = 1;
+ }
+
+ if(reload2 == 100)
+ {
+ vector where;
+
+ setorigin(dropmark, pmove_org);
+ dropmark.velocity = pmove_vel;
+ tracetoss(dropmark, self);
+
+ where = project_3d_to_2d(trace_endpos);
+
+ setorigin(dropmark, trace_endpos);
+ picsize = drawgetimagesize(raptor_drop) * 0.2;
+
+ if not (where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight)
+ {
+ where_x -= picsize_x * 0.5;
+ where_y -= picsize_y * 0.5;
+ where_z = 0;
+ drawpic(where, raptor_drop, picsize, '0 2 0', 1, DRAWFLAG_ADDITIVE);
+ }
+ dropmark.cnt = time + 5;
+ }
+ else
+ {
+ vector where;
+ if(dropmark.cnt > time)
+ {
+ where = project_3d_to_2d(dropmark.origin);
+ picsize = drawgetimagesize(raptor_drop) * 0.25;
+
+ if not (where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight)
+ {
+ where_x -= picsize_x * 0.5;
+ where_y -= picsize_y * 0.5;
+ where_z = 0;
+ drawpic(where, raptor_drop, picsize, '2 0 0', 1, DRAWFLAG_ADDITIVE);
+ }
+ }
+ }
+
+ if (scoreboard_showscores)
+ HUD_DrawScoreboard();
+ else
+ {
+ picsize = drawgetimagesize(raptor_xhair);
+ picsize_x *= 0.5;
+ picsize_y *= 0.5;
+
+ drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), raptor_xhair, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ }
+}
+
+#define waki_ico "gfx/vehicles/waki.tga"
+#define waki_eng "gfx/vehicles/waki_e.tga"
+#define waki_gun "gfx/vehicles/waki_guns.tga"
+#define waki_rkt "gfx/vehicles/waki_rockets.tga"
+#define waki_xhair "gfx/vehicles/axh-special1.tga"
+void CSQC_WAKIZASHI_HUD()
+{
+/*
+ drawpic(hudloc, waki_s, picsize, '1 1 1', shield, DRAWFLAG_NORMAL);
+ drawpic(hudloc, waki_b, picsize, '0 1 0' * health + '1 0 0' * (1 - health), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc, waki_r, picsize, '1 1 1' * reload1 + '1 0 0' * (1 - reload1), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc, waki_e, picsize, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
+*/
+ if(autocvar_r_letterbox)
+ return;
+
+ vector picsize, hudloc, pic2size, picloc;
+
+ // Fetch health & ammo stats
+ HUD_GETSTATS
+
+ picsize = drawgetimagesize(hud_bg) * autocvar_cl_vehicles_hudscale;
+ hudloc_y = vid_conheight - picsize_y;
+ hudloc_x = vid_conwidth * 0.5 - picsize_x * 0.5;
+
+ drawpic(hudloc, hud_bg, picsize, '1 1 1', autocvar_cl_vehicles_hudalpha, DRAWFLAG_NORMAL);
+
+ shield *= 0.01;
+ vh_health *= 0.01;
+ energy *= 0.01;
+ reload1 *= 0.01;
+
+ pic2size = drawgetimagesize(spider_ico) * (autocvar_cl_vehicles_hudscale * 0.8);
+ picloc = picsize * 0.5 - pic2size * 0.5;
+ if(vh_health < 0.25)
+ drawpic(hudloc + picloc, waki_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, waki_ico, pic2size, '1 1 1' * vh_health + '1 0 0' * (1 - vh_health), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, waki_eng, pic2size, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, waki_gun, pic2size, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, waki_rkt, pic2size, '1 1 1' * reload1 + '1 0 0' * (1 - reload1), 1, DRAWFLAG_NORMAL);
+ drawpic(hudloc + picloc, hud_sh, pic2size, '1 1 1', shield, DRAWFLAG_NORMAL);
+
+// Health bar
+ picsize = drawgetimagesize(hud_hp_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '69 69 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - vh_health)), 0, vid_conwidth, vid_conheight);
+ drawpic(hudloc + picloc, hud_hp_bar, picsize, '1 1 1', 1 , DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picsize = drawgetimagesize(hud_hp_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '37 65 0' * autocvar_cl_vehicles_hudscale;
+ if(vh_health < 0.25)
+ {
+ if(alarm1time < time)
+ {
+ alarm1time = time + 2;
+ sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+
+ drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ if(alarm1time)
+ {
+ sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTN_NONE);
+ alarm1time = 0;
+ }
+ }
+
+
+// Shield bar
+ picsize = drawgetimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '69 140 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - shield)), 0, vid_conwidth, vid_conheight);
+ drawpic(hudloc + picloc, hud_sh_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picloc = '40 136 0' * autocvar_cl_vehicles_hudscale;
+ picsize = drawgetimagesize(hud_sh_ico) * autocvar_cl_vehicles_hudscale;
+ if(shield < 0.25)
+ {
+ if(alarm2time < time)
+ {
+ alarm2time = time + 1;
+ sound(world, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+ drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ if(alarm2time)
+ {
+ sound(world, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTN_NONE);
+ alarm2time = 0;
+ }
+ }
+
+// Gun bar
+ picsize = drawgetimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * energy, vid_conheight);
+ drawpic(hudloc + picloc, hud_ammo1_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ picsize = drawgetimagesize(hud_ammo1_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '664 60 0' * autocvar_cl_vehicles_hudscale;
+ if(energy < 0.2)
+ drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, hud_ammo1_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+// Bomb bar
+ picsize = drawgetimagesize(hud_ammo2_bar) * autocvar_cl_vehicles_hudscale;
+ picloc = '450 140 0' * autocvar_cl_vehicles_hudscale;
+ drawsetcliparea(hudloc_x + picloc_x, hudloc_y + picloc_y, picsize_x * reload1, vid_conheight);
+ drawpic(hudloc + picloc, hud_ammo2_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+// .. and icon
+ pic2size = drawgetimagesize(hud_ammo2_ico) * autocvar_cl_vehicles_hudscale;
+ picloc = '664 130 0' * autocvar_cl_vehicles_hudscale;
+ if(reload1 != 1)
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
+
+ if (scoreboard_showscores)
+ HUD_DrawScoreboard();
+ else
+ {
+ picsize = drawgetimagesize(waki_xhair);
+ picsize_x *= 0.5;
+ picsize_y *= 0.5;
+
+
+ drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), waki_xhair, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
+ }
+}
+
+void Vehicles_Precache()
+{
+// fixme: HAAAAKKKZZZ!!!!!!!!!!!! (this belongs as a setting in default.cfg)
+ autocvar_cl_vehicles_hudscale = 0.5;
+ autocvar_cl_vehicles_hudalpha = 0.75;
+
+
+ precache_model("models/vehicles/wakizashi.dpm");
+
+ precache_model("models/vehicles/bomblet.md3");
+ precache_model("models/vehicles/clusterbomb.md3");
+ precache_model("models/vehicles/clusterbomb_fragment.md3");
+ precache_model("models/vehicles/rocket01.md3");
+ precache_model("models/vehicles/rocket02.md3");
+
+ precache_sound ("vehicles/alarm.wav");
+ precache_sound ("vehicles/alarm_shield.wav");
+}
+
+void RaptorCBShellfragDraw()
+{
+
+ Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
+ if(wasfreed(self))
+ return;
+
+ self.move_avelocity += randomvec() * 15;
+ self.renderflags = 0;
+ if(self.cnt < time)
+ self.alpha = bound(0, self.nextthink - time, 1);
+
+ if(self.alpha < ALPHA_MIN_VISIBLE)
+ remove(self);
+}
+
+void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang)
+{
+ entity sfrag;
+
+ sfrag = spawn();
+ setmodel(sfrag, "models/vehicles/clusterbomb_fragment.md3");
+ setorigin(sfrag, _org);
+
+ sfrag.move_movetype = MOVETYPE_BOUNCE;
+ sfrag.gravity = 0.15;
+ sfrag.solid = SOLID_CORPSE;
+
+ sfrag.draw = RaptorCBShellfragDraw;
+
+ sfrag.move_origin = sfrag.origin = _org;
+ sfrag.move_velocity = _vel;
+ sfrag.move_avelocity = prandomvec() * vlen(sfrag.move_velocity);
+ sfrag.angles = self.move_angles = _ang;
+
+ sfrag.move_time = time;
+ sfrag.damageforcescale = 4;
+
+ sfrag.nextthink = time + 3;
+ sfrag.cnt = time + 2;
+ sfrag.alpha = 1;
+ sfrag.drawmask = MASK_NORMAL;
+}
--- /dev/null
+void RaptorCBShellfragDraw();
+void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang);
+void Vehicles_Precache();
+
float waypointsprite_distancealphaexponent;
float waypointsprite_timealphaexponent;
float waypointsprite_scale;
+float waypointsprite_fontsize;
float waypointsprite_edgefadealpha;
float waypointsprite_edgefadescale;
float waypointsprite_edgefadedistance;
+float waypointsprite_edgeoffset_bottom;
+float waypointsprite_edgeoffset_left;
+float waypointsprite_edgeoffset_right;
+float waypointsprite_edgeoffset_top;
float waypointsprite_crosshairfadealpha;
float waypointsprite_crosshairfadescale;
float waypointsprite_crosshairfadedistance;
float waypointsprite_distancefadedistance;
float waypointsprite_alpha;
+.float helpme;
.float rule;
.string netname; // primary picture
.string netname2; // secondary picture
.float build_starthealth;
.float build_finished;
-vector SPRITE_SIZE = '288 36 0';
-vector SPRITE_HOTSPOT = '144 36 0';
float SPRITE_HEALTHBAR_WIDTH = 144;
float SPRITE_HEALTHBAR_HEIGHT = 9;
float SPRITE_HEALTHBAR_MARGIN = 6;
float SPRITE_HEALTHBAR_BORDER = 2;
float SPRITE_HEALTHBAR_BORDERALPHA = 1;
float SPRITE_HEALTHBAR_HEALTHALPHA = 0.5;
+float SPRITE_ARROW_SCALE = 1.0;
+float SPRITE_HELPME_BLINK = 2;
void drawrotpic(vector org, float rot, string pic, vector sz, vector hotspot, vector rgb, float a, float f)
{
drawquad(o + ri * (border + align * ((1 - h) * width)), ri * width * h, up * height, "", hrgb, ha, f);
}
+// returns location of sprite text
+vector drawspritearrow(vector o, float ang, vector rgb, float a, float t)
+{
+ float SQRT2 = 1.414;
+ float BORDER; BORDER = 1.5 * t;
+ float TSIZE; TSIZE = 8 * t;
+ float RLENGTH; RLENGTH = 8 * t;
+ float RWIDTH; RWIDTH = 4 * t;
+ float MLENGTH; MLENGTH = 4 * t;
+
+ R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_PolygonVertex(o + rotate(eX * -(TSIZE + BORDER * (1 + SQRT2)) + eY * (TSIZE + BORDER), ang), '0 0 0', '0 0 0', a);
+ R_PolygonVertex(o + rotate(eX * (TSIZE + BORDER * (1 + SQRT2)) + eY * (TSIZE + BORDER), ang), '0 0 0', '0 0 0', a);
+ R_PolygonVertex(o + rotate(eY * -( BORDER * SQRT2), ang), '0 0 0', '0 0 0', a);
+ R_EndPolygon();
+ R_BeginPolygon("", DRAWFLAG_NORMAL);
+ R_PolygonVertex(o + rotate(eX * -(RWIDTH + BORDER) + eY * (TSIZE + BORDER), ang), '0 0 0', '0 0 0', a);
+ R_PolygonVertex(o + rotate(eX * -(RWIDTH + BORDER) + eY * (TSIZE + RLENGTH + BORDER), ang), '0 0 0', '0 0 0', a);
+ R_PolygonVertex(o + rotate(eX * (RWIDTH + BORDER) + eY * (TSIZE + RLENGTH + BORDER), ang), '0 0 0', '0 0 0', a);
+ R_PolygonVertex(o + rotate(eX * (RWIDTH + BORDER) + eY * (TSIZE + BORDER), ang), '0 0 0', '0 0 0', a);
+ R_EndPolygon();
+
+ R_BeginPolygon("", DRAWFLAG_ADDITIVE);
+ R_PolygonVertex(o + rotate(eX * -TSIZE + eY * TSIZE, ang), '0 0 0', rgb, a);
+ R_PolygonVertex(o + rotate(eX * TSIZE + eY * TSIZE, ang), '0 0 0', rgb, a);
+ R_PolygonVertex(o + rotate('0 0 0', ang), '0 0 0', rgb, a);
+ R_EndPolygon();
+ R_BeginPolygon("", DRAWFLAG_ADDITIVE);
+ R_PolygonVertex(o + rotate(eX * -RWIDTH + eY * TSIZE, ang), '0 0 0', rgb, a);
+ R_PolygonVertex(o + rotate(eX * -RWIDTH + eY * (TSIZE + RLENGTH), ang), '0 0 0', rgb, a);
+ R_PolygonVertex(o + rotate(eX * RWIDTH + eY * (TSIZE + RLENGTH), ang), '0 0 0', rgb, a);
+ R_PolygonVertex(o + rotate(eX * RWIDTH + eY * TSIZE, ang), '0 0 0', rgb, a);
+ R_EndPolygon();
+
+ return
+ o + rotate(eY * (TSIZE + RLENGTH + MLENGTH), ang);
+}
+
+// returns location of sprite healthbar
+vector drawspritetext(vector o, float ang, float minwidth, vector rgb, float a, vector fontsize, string s)
+{
+ float algnx, algny;
+ float sw, w, h;
+ float aspect, sa, ca;
+
+ sw = stringwidth(s, FALSE, fontsize);
+ if(sw > minwidth)
+ w = sw;
+ else
+ w = minwidth;
+ h = fontsize_y;
+
+ // how do corners work?
+ aspect = vid_conwidth / vid_conheight;
+ sa = sin(ang);
+ ca = cos(ang) * aspect;
+ if(fabs(sa) > fabs(ca))
+ {
+ algnx = (sa < 0);
+ algny = 0.5 - 0.5 * ca / fabs(sa);
+ }
+ else
+ {
+ algnx = 0.5 - 0.5 * sa / fabs(ca);
+ algny = (ca < 0);
+ }
+
+ // align
+ o_x -= w * algnx;
+ o_y -= h * algny;
+
+ // we want to be onscreen
+ if(o_x < 0)
+ o_x = 0;
+ if(o_y < 0)
+ o_y = 0;
+ if(o_x > vid_conwidth - w)
+ o_x = vid_conwidth - w;
+ if(o_y > vid_conheight - h)
+ o_x = vid_conheight - h;
+
+ o_x += 0.5 * (w - sw);
+
+ drawstring(o, s, fontsize, rgb, a, DRAWFLAG_NORMAL);
+
+ o_x += 0.5 * sw;
+ o_y += 0.5 * h;
+
+ return o;
+}
+
+float spritelookupblinkvalue(string s)
+{
+ switch(s)
+ {
+ case "ons-cp-atck-neut": return 2;
+ case "ons-cp-atck-red": return 2;
+ case "ons-cp-atck-blue": return 2;
+ case "ons-cp-dfnd-red": return 0.5;
+ case "ons-cp-dfnd-blue": return 0.5;
+ case "item-invis": return 2;
+ case "item-extralife": return 2;
+ case "item-speed": return 2;
+ case "item-strength": return 2;
+ case "item-shueld": return 2;
+ case "item-fuelregen": return 2;
+ case "item-jetpack": return 2;
+ case "tagged-target": return 2;
+ default: return 1;
+ }
+}
+vector spritelookupcolor(string s, vector def)
+{
+ switch(s)
+ {
+ case "keycarrier-friend": return '0 1 0';
+ case "wpn-laser": return '1 0.5 0.5';
+ case "wpn-shotgun": return '0.5 0.25 0';
+ case "wpn-uzi": return '1 1 0';
+ case "wpn-gl": return '1 0 0';
+ case "wpn-electro": return '0 0.5 1';
+ case "wpn-crylink": return '1 0.5 1';
+ case "wpn-nex": return '0.5 1 1';
+ case "wpn-hagar": return '1 1 0.5';
+ case "wpn-rl": return '1 1 0';
+ case "wpn-porto": return '0.5 0.5 0.5';
+ case "wpn-minstanex": return '0.5 1 1';
+ case "wpn-hookgun": return '0 0.5 0';
+ case "wpn-fireball": return '1 0.5 0';
+ case "wpn-hlac": return '0 1 0';
+ case "wpn-campingrifle": return '0.5 1 0';
+ case "wpn-minelayer": return '0.75 1 0';
+ default: return def;
+ }
+}
+string spritelookuptext(string s)
+{
+ switch(s)
+ {
+ case "as-push": return _("Push");
+ case "as-destroy": return _("Destroy");
+ case "as-defend": return _("Defend");
+ case "bluebase": return _("Blue base");
+ case "danger": return _("DANGER");
+ case "flagcarrier": return _("Flag carrier");
+ case "flagdropped": return _("Dropped flag");
+ case "helpme": return _("Help me!");
+ case "here": return _("Here");
+ case "key-dropped": return _("Dropped key");
+ case "keycarrier-blue": return _("Key carrier");
+ case "keycarrier-finish": return _("Run here");
+ case "keycarrier-friend": return _("Key carrier");
+ case "keycarrier-pink": return _("Key carrier");
+ case "keycarrier-red": return _("Key carrier");
+ case "keycarrier-yellow": return _("Key carrier");
+ case "redbase": return _("Red base");
+ case "waypoint": return _("Waypoint");
+ case "ons-gen-red": return _("Generator");
+ case "ons-gen-blue": return _("Generator");
+ case "ons-gen-shielded": return _("Generator");
+ case "ons-cp-neut": return _("Control point");
+ case "ons-cp-red": return _("Control point");
+ case "ons-cp-blue": return _("Control point");
+ case "ons-cp-atck-neut": return _("Control point");
+ case "ons-cp-atck-red": return _("Control point");
+ case "ons-cp-atck-blue": return _("Control point");
+ case "ons-cp-dfnd-red": return _("Control point");
+ case "ons-cp-dfnd-blue": return _("Control point");
+ case "race-checkpoint": return _("Checkpoint");
+ case "race-finish": return _("Finish");
+ case "race-start": return _("Start");
+ case "race-start-finish": return (race_checkpointtime || race_mycheckpointtime) ? _("Finish") : _("Start");
+ case "nb-ball": return _("Ball");
+ case "ka-ball": return _("Ball");
+ case "ka-ballcarrier": return _("Ball carrier");
+ case "wpn-laser": return _("Laser");
+ case "wpn-shotgun": return _("Shotgun");
+ case "wpn-uzi": return _("Machine Gun");
+ case "wpn-gl": return _("Mortar");
+ case "wpn-electro": return _("Electro");
+ case "wpn-crylink": return _("Crylink");
+ case "wpn-nex": return _("Nex");
+ case "wpn-hagar": return _("Hagar");
+ case "wpn-rl": return _("Rocket Launcher");
+ case "wpn-porto": return _("Port-O-Launch");
+ case "wpn-minstanex": return _("Minstanex");
+ case "wpn-hookgun": return _("Hook");
+ case "wpn-fireball": return _("Fireball");
+ case "wpn-hlac": return _("HLAC");
+ case "wpn-campingrifle": return _("Rifle");
+ case "wpn-minelayer": return _("Mine Layer");
+ case "dom-neut": return _("Control point");
+ case "dom-red": return _("Control point");
+ case "dom-blue": return _("Control point");
+ case "dom-yellow": return _("Control point");
+ case "dom-pink": return _("Control point");
+ case "item-invis": return _("Invisibility");
+ case "item-extralife": return _("Extra life");
+ case "item-speed": return _("Speed");
+ case "item-strength": return _("Strength");
+ case "item-shield": return _("Shield");
+ case "item-fuelregen": return _("Fuel regen");
+ case "item-jetpack": return _("Jet Pack");
+ case "freezetag_frozen": return _("Frozen!");
+ case "tagged-target": return _("Tagged");
+ case "vehicle": return _("Vehicle");
+ default: return s;
+ }
+}
+
+vector fixrgbexcess_move(vector rgb, vector src, vector dst)
+{
+ vector yvec = '0.299 0.587 0.114';
+ return rgb + dst * ((src * yvec) / (dst * yvec)) * ((rgb - '1 1 1') * src);
+}
+vector fixrgbexcess(vector rgb)
+{
+ if(rgb_x > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 1');
+ if(rgb_y > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '0 1 0', '0 0 1');
+ if(rgb_z > 1)
+ rgb_z = 1;
+ }
+ else if(rgb_z > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '0 0 1', '0 1 0');
+ if(rgb_y > 1)
+ rgb_y = 1;
+ }
+ }
+ else if(rgb_y > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 1');
+ if(rgb_x > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '1 0 0', '0 0 1');
+ if(rgb_z > 1)
+ rgb_z = 1;
+ }
+ else if(rgb_z > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '0 0 1', '1 0 0');
+ if(rgb_x > 1)
+ rgb_x = 1;
+ }
+ }
+ else if(rgb_z > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '0 0 1', '1 1 0');
+ if(rgb_x > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 0');
+ if(rgb_y > 1)
+ rgb_y = 1;
+ }
+ else if(rgb_y > 1)
+ {
+ rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 0');
+ if(rgb_x > 1)
+ rgb_x = 1;
+ }
+ }
+ return rgb;
+}
+
+float waypointsprite_count, waypointsprite_newcount;
void Draw_WaypointSprite()
{
string spriteimage;
if(spriteimage == "")
return;
+
+ ++waypointsprite_newcount;
float dist;
dist = vlen(self.origin - view_origin);
else if(self.maxdistance > 0)
a *= pow(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
+ vector rgb;
+ rgb = self.teamradar_color;
+ rgb = spritelookupcolor(spriteimage, rgb);
+ if(rgb == '0 0 0')
+ {
+ self.teamradar_color = '1 0 1';
+ print(sprintf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage));
+ }
+
+ if(time - floor(time) > 0.5)
+ {
+ if(self.helpme && time < self.helpme)
+ a *= SPRITE_HELPME_BLINK;
+ else
+ a *= spritelookupblinkvalue(spriteimage);
+ }
+
+ if(a > 1)
+ {
+ rgb *= a;
+ a = 1;
+ }
+
if(a <= 0)
return;
-
- // draw the sprite image
+
+ rgb = fixrgbexcess(rgb);
+
vector o;
- float rot;
- o = project_3d_to_2d(self.origin);
- rot = 0;
+ float ang;
- if(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
+ o = project_3d_to_2d(self.origin);
+ if(o_z < 0
+ || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
+ || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
+ || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
+ || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
{
// scale it to be just in view
vector d;
float f1, f2;
- // get the waypoint angle vector
- /*
- d_x = view_right * (self.origin - view_origin) * vid_conwidth / vid_width;
- d_y = -view_up * (self.origin - view_origin) * vid_conheight / (vid_height * vid_pixelheight);
- d_z = 0;
- */
-
d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
-
- /*
- if(autocvar_v_flipped)
- d_x = -d_x;
- */
+ ang = atan2(-d_x, -d_y);
+ if(o_z < 0)
+ ang += M_PI;
f1 = d_x / vid_conwidth;
f2 = d_y / vid_conheight;
if(d_z * f1 > 0)
{
// RIGHT edge
- d = d * (0.5 / f1);
- rot = 3;
+ d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1);
}
else
{
// LEFT edge
- d = d * (-0.5 / f1);
- rot = 1;
+ d = d * (-(0.5 - waypointsprite_edgeoffset_left) / f1);
}
}
else
if(d_z * f2 > 0)
{
// BOTTOM edge
- d = d * (0.5 / f2);
- rot = 0;
+ d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2);
}
else
{
// TOP edge
- d = d * (-0.5 / f2);
- rot = 2;
+ d = d * (-(0.5 - waypointsprite_edgeoffset_top) / f2);
}
}
o = d + '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
}
+ else
+ {
+#if 1
+ ang = M_PI;
+#else
+ vector d;
+ d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
+ ang = atan2(-d_x, -d_y);
+#endif
+ }
o_z = 0;
+ float edgedistance_min, crosshairdistance;
+ edgedistance_min = min4((o_y - (vid_conheight * waypointsprite_edgeoffset_top)),
+ (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)),
+ (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
+ (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
+
float vidscale;
vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
- t = stof(db_get(tempdb, strcat("/spriteframes/", spriteimage)));
- if(t == 0)
- spriteimage = strcat("models/sprites/", spriteimage);
- else
- spriteimage = strcat("models/sprites/", spriteimage, "_frame", ftos(mod(floor((max(0, time - self.spawntime)) * 2), t)));
-
- float edgedistance_min, crosshairdistance;
- edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y);
-
crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) );
t = waypointsprite_scale * vidscale;
a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
}
- drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, '1 1 1', a, DRAWFLAG_MIPMAP);
if(self.build_finished)
{
self.health = -1;
}
+ o = drawspritearrow(o, ang, rgb, a, SPRITE_ARROW_SCALE * t);
+
+ string txt;
+ if(autocvar_g_waypointsprite_spam && waypointsprite_count >= autocvar_g_waypointsprite_spam)
+ txt = _("Spam");
+ else
+ txt = spritelookuptext(spriteimage);
+ if(self.helpme && time < self.helpme)
+ txt = sprintf(_("%s needing help!"), txt);
+ if(autocvar_g_waypointsprite_uppercase)
+ txt = strtoupper(txt);
+
if(self.health >= 0)
{
- float align;
+ o = drawspritetext(o, ang, (SPRITE_HEALTHBAR_WIDTH + 2 * SPRITE_HEALTHBAR_BORDER) * t, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
+
+ float align, marg;
if(self.build_finished)
align = 0.5;
else
align = 0;
- drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, SPRITE_HEALTHBAR_WIDTH * t, SPRITE_HEALTHBAR_HEIGHT * t, SPRITE_HEALTHBAR_MARGIN * t, SPRITE_HEALTHBAR_BORDER * t, align, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL);
+ if(cos(ang) > 0)
+ marg = -(SPRITE_HEALTHBAR_MARGIN + SPRITE_HEALTHBAR_HEIGHT + 2 * SPRITE_HEALTHBAR_BORDER) * t - 0.5 * waypointsprite_fontsize;
+ else
+ marg = SPRITE_HEALTHBAR_MARGIN * t + 0.5 * waypointsprite_fontsize;
+ drawhealthbar(
+ o,
+ 0,
+ self.health,
+ '0 0 0',
+ '0 0 0',
+ SPRITE_HEALTHBAR_WIDTH * t,
+ SPRITE_HEALTHBAR_HEIGHT * t,
+ marg,
+ SPRITE_HEALTHBAR_BORDER * t,
+ align,
+ rgb,
+ a * SPRITE_HEALTHBAR_BORDERALPHA,
+ rgb,
+ a * SPRITE_HEALTHBAR_HEALTHALPHA,
+ DRAWFLAG_NORMAL
+ );
+ }
+ else
+ {
+ o = drawspritetext(o, ang, 0, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
}
}
self.teamradar_color_x = ReadByte() / 255.0;
self.teamradar_color_y = ReadByte() / 255.0;
self.teamradar_color_z = ReadByte() / 255.0;
+ self.helpme = ReadByte() * 0.1;
+ if(self.helpme > 0)
+ self.helpme += servertime;
}
InterpolateOrigin_Note();
waypointsprite_distancealphaexponent = autocvar_g_waypointsprite_distancealphaexponent;
waypointsprite_timealphaexponent = autocvar_g_waypointsprite_timealphaexponent;
waypointsprite_scale = autocvar_g_waypointsprite_scale;
+ waypointsprite_fontsize = autocvar_g_waypointsprite_fontsize;
waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha;
waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale;
waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance;
+ waypointsprite_edgeoffset_bottom = autocvar_g_waypointsprite_edgeoffset_bottom;
+ waypointsprite_edgeoffset_left = autocvar_g_waypointsprite_edgeoffset_left;
+ waypointsprite_edgeoffset_right = autocvar_g_waypointsprite_edgeoffset_right;
+ waypointsprite_edgeoffset_top = autocvar_g_waypointsprite_edgeoffset_top;
waypointsprite_crosshairfadealpha = autocvar_g_waypointsprite_crosshairfadealpha;
waypointsprite_crosshairfadescale = autocvar_g_waypointsprite_crosshairfadescale;
waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance;
WaypointSprite_Load_Frames(".jpg");
waypointsprite_initialized = true;
}
+
+ waypointsprite_count = waypointsprite_newcount;
+ waypointsprite_newcount = 0;
}
campaign_entries = 0;
campaign_title = string_null;
- fn = strcat("maps/campaign", campaign_name, ".txt");
+ fn = language_filename(strcat("maps/campaign", campaign_name, ".txt"));
fh = fopen(fn, FILE_READ);
if(fh >= 0)
{
const float TE_CSQC_LIGHTNINGARC = 105;
const float TE_CSQC_TEAMNAGGER = 106;
const float TE_CSQC_PINGPLREPORT = 107;
-const float TE_CSQC_VOTE = 108;
-const float TE_CSQC_VOTERESET = 109;
const float TE_CSQC_ANNOUNCE = 110;
const float TE_CSQC_TARGET_MUSIC = 111;
const float TE_CSQC_NOTIFY = 112;
const float TE_CSQC_NEX_SCOPE = 116;
const float TE_CSQC_MINELAYER_MAXMINES = 117;
const float TE_CSQC_HAGAR_MAXROCKETS = 118;
+const float TE_CSQC_VEHICLESETUP = 119;
const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
const float RACE_NET_CHECKPOINT_CLEAR = 1;
const float CSQC_KILLNOTIFY = 0;
const float CSQC_CENTERPRINT = 1;
+const float CSQC_CENTERPRINT_GENERIC = 2;
const float ENT_CLIENT = 0;
const float ENT_CLIENT_DEAD = 1;
const float ENT_CLIENT_DAMAGEEFFECT = 33;
const float ENT_CLIENT_TURRET = 40;
+const float ENT_CLIENT_AUXILIARYXHAIR = 50;
+const float ENT_CLIENT_VEHICLE = 60;
const float SPRITERULE_DEFAULT = 0;
const float SPRITERULE_TEAMPLAY = 1;
+const float RADARICON_NONE = 0;
const float RADARICON_FLAG = 1;
const float RADARICON_FLAGCARRIER = 1;
const float RADARICON_HERE = 1; // TODO make these 3 and 4, and make images for them
const float RADARICON_OBJECTIVE = 1;
const float RADARICON_DOMPOINT = 1;
const float RADARICON_POWERUP = 1;
+const float RADARICON_TAGGED = 1;
///////////////////////////
// key constants
const float CTF_STATE_COMMANDER = 3;
const float HUD_NORMAL = 0;
-const float HUD_SPIDERBOT = 10;
-const float HUD_WAKIZASHI = 11;
-const float HUD_RAPTOR = 12;
+const float HUD_VEHICLE_FIRST = 10;
+const float HUD_SPIDERBOT = 10;
+const float HUD_WAKIZASHI = 11;
+const float HUD_RAPTOR = 12;
+const float HUD_BUMBLEBEE = 13;
+const float HUD_VEHICLE_LAST = 13;
+
const vector eX = '1 0 0';
const vector eY = '0 1 0';
const vector eZ = '0 0 1';
const float STAT_FROZEN = 104;
const float STAT_REVIVE_PROGRESS = 105;
+
const float STAT_DOM_TOTAL_PPS = 100;
const float STAT_DOM_PPS_RED = 101;
const float STAT_DOM_PPS_BLUE = 102;
//const float STAT_SPIDERBOT_AIM 53 // compressShotOrigin
//const float STAT_SPIDERBOT_TARGET 54 // compressShotOrigin
-
-
-
// moved that here so the client knows the max.
// # of maps, I'll use arrays for them :P
#define MAPVOTE_COUNT 10
#define SP_SCORE 3
// game mode specific indices are not in common/, but in server/scores_rules.qc!
-// this assignment must match menu/xonotic/dialog_settings_misc.c!
-float CHAN_AUTO = 0;
- // on world: announcers, ... INFO
- // on players: item pickup ITEMS
- // on entities: UNUSED
- // on csqc: announcers INFO
-float CHAN_WEAPON = 1; // Weapon fire
- // on world: UNUSED
- // on players: weapon firing WEAPONS
- // on entities: turret firing WEAPONS
- // on csqc: UNUSED
-float CHAN_VOICE = 2; // Voice/Radio
- // on world: UNUSED
- // on players: voice VOICE
- // on entities: ambient AMBIENT
- // on csqc: background music BGM
-float CHAN_TRIGGER = 3; // Triggers/Items
- // on world: UNUSED
- // on players: item pickup ITEMS
- // on entities: platforms moving etc. ITEMS
- // on csqc: platforms moving etc. ITEMS
-float CHAN_PROJECTILE = 4; // Projectiles
- // on world: UNUSED
- // on players: projectiles hitting player SHOTS
- // on entities: projectiles SHOTS
- // on csqc: projectile sounds SHOTS
-float CHAN_WEAPON2 = 5; // Nex fire (separated as it is a very long sound)
- // on world: UNUSED
- // on players: weapon firing WEAPONS
- // on entities: turret firing WEAPONS
- // on csqc: UNUSED
-float CHAN_PAIN = 6; // Pain
- // on world: UNUSED
- // on players: pain PAIN
- // on entities: projectiles flying SHOTS
- // on csqc: player pain PAIN
-float CHAN_PLAYER = 7; // Player body
- // on world: UNUSED
- // on players: player sounds PLAYER
- // on entities: player sounds PLAYER
- // on csqc: UNUSED
+#ifdef COMPAT_XON010_CHANNELS
+float CH_INFO = 0; // only on world and csqc
+float CH_TRIGGER = 0; // only on players; compat: FALSELY CONTROLLED BY "Info"
+float CH_WEAPON_A = 1; // only on players and entities
+float CH_WEAPON_SINGLE = 5; // only on players and entities
+float CH_VOICE = 2; // only on players
+float CH_BGM_SINGLE = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice"
+float CH_AMBIENT = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice"
+float CH_TRIGGER_SINGLE = 3; // only on players, entities, csqc
+float CH_SHOTS = 4; // only on players, entities, csqc
+float CH_SHOTS_SINGLE = 4; // only on players, entities, csqc
+float CH_WEAPON_B = 5; // only on players and entities
+float CH_PAIN = 6; // only on players and csqc
+float CH_PAIN_SINGLE = 6; // only on players and csqc
+float CH_PLAYER = 7; // only on players and entities
+#else
+float CH_INFO = 0;
+float CH_TRIGGER = -3;
+float CH_WEAPON_A = -1;
+float CH_WEAPON_SINGLE = 1;
+float CH_VOICE = -2;
+float CH_BGM_SINGLE = 8;
+float CH_AMBIENT = -9;
+float CH_TRIGGER_SINGLE = 3;
+float CH_SHOTS = -4;
+float CH_SHOTS_SINGLE = 4;
+float CH_WEAPON_B = -1;
+float CH_PAIN = -6;
+float CH_PAIN_SINGLE = 6;
+float CH_PLAYER = -7;
+#endif
float ATTN_NONE = 0;
float ATTN_MIN = 0.015625;
float PROJECTILE_FIREMINE = 22;
float PROJECTILE_BULLET_GLOWING_TRACER = 23;
+float PROJECTILE_RAPTORCANNON = 24;
+float PROJECTILE_RAPTORBOMB = 25;
+float PROJECTILE_RAPTORBOMBLET = 26;
+float PROJECTILE_SPIDERROCKET = 27;
+float PROJECTILE_WAKIROCKET = 28;
+float PROJECTILE_WAKICANNON = 29;
+
float SPECIES_HUMAN = 0;
float SPECIES_ROBOT_SOLID = 1;
float SPECIES_ALIEN = 2;
float DEATH_TOUCHEXPLODE = 10015;
float DEATH_CHEAT = 10016;
float DEATH_FIRE = 10017;
-float DEATH_TURRET = 10020;
float DEATH_QUIET = 10021;
float DEATH_HEADSHOT = 10022;
-float DEATH_SBMINIGUN = 10030;
-float DEATH_SBROCKET = 10031;
-float DEATH_SBCRUSH = 10032;
-float DEATH_SBBLOWUP = 10033;
-
-float DEATH_WAKIGUN = 10040;
-float DEATH_WAKIROCKET = 10041;
-float DEATH_WAKIBLOWUP = 10042;
+float DEATH_VHFIRST = 10030;
+float DEATH_VHCRUSH = 10030;
+float DEATH_SBMINIGUN = 10031;
+float DEATH_SBROCKET = 10032;
+float DEATH_SBBLOWUP = 10033;
+float DEATH_WAKIGUN = 10034;
+float DEATH_WAKIROCKET = 10035;
+float DEATH_WAKIBLOWUP = 10036;
+float DEATH_RAPTOR_CANNON = 10037;
+float DEATH_RAPTOR_BOMB = 10038;
+float DEATH_RAPTOR_BOMB_SPLIT = 10039;
+float DEATH_RAPTOR_DEATH = 10040;
+float DEATH_VHLAST = 10040;
+#define DEATH_ISVEHICLE(t) ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
float DEATH_GENERIC = 10050;
float DEATH_CUSTOM = 10300;
+float DEATH_TURRET = 10500;
+float DEATH_TURRET_EWHEEL = 10501;
+float DEATH_TURRET_FLAC = 10502;
+float DEATH_TURRET_MACHINEGUN = 10503;
+float DEATH_TURRET_WALKER_GUN = 10504;
+float DEATH_TURRET_WALKER_MEELE = 10505;
+float DEATH_TURRET_WALKER_ROCKET = 10506;
+float DEATH_TURRET_HELLION = 10507;
+float DEATH_TURRET_HK = 10508;
+float DEATH_TURRET_MLRS = 10509;
+float DEATH_TURRET_PLASMA = 10510;
+float DEATH_TURRET_PHASER = 10511;
+float DEATH_TURRET_TESLA = 10512;
+float DEATH_TURRET_LAST = 10512;
float DEATH_WEAPONMASK = 0xFF;
float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
float HITTYPE_RESERVED = 0x1000; // unused yet
// macros to access these
+#define DEATH_ISTURRET(t) ((t) >= DEATH_TURRET && (t) <= DEATH_TURRET_LAST)
#define DEATH_ISSPECIAL(t) ((t) >= DEATH_SPECIAL_START)
#define DEATH_WEAPONOFWEAPONDEATH(t) ((t) & DEATH_WEAPONMASK)
#define DEATH_ISWEAPON(t,w) (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w))
#define FRAGS_PLAYER_NONSOLID -616
// we can use this frags value for both
-//misc. stuff
-#define NEWLINES "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
-
// water levels
float WATERLEVEL_NONE = 0;
float WATERLEVEL_WETFEET = 1;
float MAX_SHOT_DISTANCE = 32768;
+//centerprint ID list
+float CPID_TEAMCHANGE = 1;
+float CPID_CTF_CAPTURESHIELD = 2;
+float CPID_MINSTA_FINDAMMO = 3;
+float CPID_NIX_WPNCHANGE = 4;
+float CPID_DISCONNECT_IDLING = 5;
+float CPID_ROUND_STARTING = 6;
+float CPID_GAME_STARTING = 7;
+float CPID_TIMEOUT_COUNTDOWN = 8;
+float CPID_MOTD = 9;
+float CPID_KH_MSG = 10;
+
// CSQC centerprint/notify message types
float MSG_SUICIDE = 0;
float MSG_KILL = 1;
float WR_IMPACTEFFECT = 11; // (CSQC) impact effect
float WR_SWITCHABLE = 12; // (CSQC) impact effect
float WR_PLAYERDEATH = 13; // (SVQC) does not need to do anything
+float WR_GONETHINK = 14; // (SVQC) logic to run every frame, also if no longer having the weapon as long as the switch away has not been performed
float HUD_PANEL_WEAPONS = 0;
float HUD_PANEL_AMMO = 1;
float HUD_PANEL_ENGINEINFO = 13;
float HUD_PANEL_INFOMESSAGES = 14;
float HUD_PANEL_PHYSICS = 15;
-float HUD_PANEL_NUM = 16; // always last panel id + 1, please increment when adding a new panel
+float HUD_PANEL_CENTERPRINT = 16;
+float HUD_PANEL_NUM = 17; // always last panel id + 1, please increment when adding a new panel
string HUD_PANELNAME_WEAPONS = "weapons";
string HUD_PANELNAME_AMMO = "ammo";
string HUD_PANELNAME_ENGINEINFO = "engineinfo";
string HUD_PANELNAME_INFOMESSAGES = "infomessages";
string HUD_PANELNAME_PHYSICS = "physics";
+string HUD_PANELNAME_CENTERPRINT = "centerprint";
float HUD_MENU_ENABLE = 0;
// now store all the stuff
bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i, MapInfo_Map_bspname);
bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, ++i, MapInfo_Map_title);
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, ++i, MapInfo_Map_titlestring);
bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, ++i, MapInfo_Map_description);
bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, ++i, MapInfo_Map_author);
bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, ++i, ftos(MapInfo_Map_supportedGametypes));
// now retrieve all the stuff
MapInfo_Map_bspname = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i);
MapInfo_Map_title = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i);
+ MapInfo_Map_titlestring = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i);
MapInfo_Map_description = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i);
MapInfo_Map_author = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i);
MapInfo_Map_supportedGametypes = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, ++i));
void _MapInfo_Map_Reset()
{
MapInfo_Map_title = "<TITLE>";
+ MapInfo_Map_titlestring = "<TITLE>";
MapInfo_Map_description = "<DESCRIPTION>";
MapInfo_Map_author = "<AUTHOR>";
MapInfo_Map_supportedGametypes = 0;
}
}
+float MapInfo_isRedundant(string fn, string t)
+{
+ // normalize file name
+ fn = strreplace("_", "-", fn);
+
+ // normalize visible title
+ t = strreplace(": ", "-", t);
+ t = strreplace(":", "-", t);
+ t = strreplace(" ", "-", t);
+ t = strreplace("_", "-", t);
+
+ if(!strcasecmp(fn, t))
+ return TRUE;
+
+ // we allow the visible title to have punctuation the file name does
+ // not, but not vice versa
+ t = strreplace("-", "", t);
+
+ if(!strcasecmp(fn, t))
+ return TRUE;
+
+ return FALSE;
+}
+
// load info about a map by name into the MapInfo_Map_* globals
float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametypeToSet)
{
string fn;
string s, t;
- float fh, fh2;
+ float fh;
float r, f, n, i, p;
string acl;
}
}
+ if(MapInfo_Map_titlestring == "<TITLE>")
+ MapInfo_Map_titlestring = MapInfo_Map_bspname;
+ else if(MapInfo_isRedundant(MapInfo_Map_bspname, MapInfo_Map_title))
+ MapInfo_Map_titlestring = MapInfo_Map_title;
+ else
+ MapInfo_Map_titlestring = sprintf(_("%s: %s"), MapInfo_Map_bspname, MapInfo_Map_title);
+
MapInfo_Cache_Store();
if(MapInfo_Map_supportedGametypes != 0)
return r;
return substring(out, 1, strlen(out) - 1);
}
+string MapInfo_ListAllAllowedMaps(float pRequiredFlags, float pForbiddenFlags)
+{
+ string out;
+ float i;
+
+ // to make absolutely sure:
+ MapInfo_Enumerate();
+ MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, pRequiredFlags, pForbiddenFlags, 0);
+
+ out = "";
+ for(i = 0; i < MapInfo_count; ++i)
+ out = strcat(out, " ", _MapInfo_GlobItem(MapInfo_FilterList_Lookup(i)));
+
+ MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), pRequiredFlags, pForbiddenFlags, 0);
+
+ return substring(out, 1, strlen(out) - 1);
+}
+
void MapInfo_LoadMapSettings(string s) // to be called from worldspawn
{
float t, t0;
{
MapInfo_Map_bspname = string_null;
MapInfo_Map_title = string_null;
+ MapInfo_Map_titlestring = string_null;
MapInfo_Map_description = string_null;
MapInfo_Map_author = string_null;
MapInfo_Map_clientstuff = string_null;
// info about a map that MapInfo loads
string MapInfo_Map_bspname;
string MapInfo_Map_title;
+string MapInfo_Map_titlestring; // either bspname: title or just title, depending on whether bspname is redundant
string MapInfo_Map_description;
string MapInfo_Map_author;
string MapInfo_Map_clientstuff; // not in cache, only for map load
// list all maps for the current game type
string MapInfo_ListAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
+// list all allowed maps (for any game type)
+string MapInfo_ListAllAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
// gets a gametype from a string
float MapInfo_Type_FromString(string t);
--- /dev/null
+// files (-1 for URL)
+.float url_fh;
+
+// URLs
+.string url_url;
+.float url_wbuf;
+.float url_wbufpos;
+.float url_rbuf;
+.float url_rbufpos;
+.float url_id;
+.url_ready_func url_ready;
+.entity url_ready_pass;
+
+entity url_fromid[NUM_URL_ID];
+float autocvar__urllib_nextslot;
+
+float url_URI_Get_Callback(float id, float status, string data)
+{
+ if(id < MIN_URL_ID)
+ return 0;
+ id -= MIN_URL_ID;
+ if(id >= NUM_URL_ID)
+ return 0;
+ entity e;
+ e = url_fromid[id];
+ if(!e)
+ return 0;
+ if(e.url_rbuf >= 0 || e.url_wbuf >= 0)
+ {
+ print(sprintf("WARNING: handle %d (%s) has already received data?!?\n", id + NUM_URL_ID, e.url_url));
+ return 0;
+ }
+
+ // whatever happens, we will remove the URL from the list of IDs
+ url_fromid[id] = world;
+
+ // if we get here, we MUST have both buffers cleared
+ if(e.url_rbuf != -1 || e.url_wbuf != -1 || e.url_fh != -1)
+ error("url_URI_Get_Callback: not a request waiting for data");
+
+ if(status == 0)
+ {
+ // WE GOT DATA!
+ float n, i;
+ n = tokenizebyseparator(data, "\n");
+ e.url_rbuf = buf_create();
+ if(e.url_rbuf < 0)
+ {
+ print("url_URI_Get_Callback: out of memory in buf_create\n");
+ e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return 1;
+ }
+ e.url_rbufpos = 0;
+ if(e.url_rbuf < 0)
+ {
+ print("url_URI_Get_Callback: out of memory in buf_create\n");
+ e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return 1;
+ }
+ for(i = 0; i < n; ++i)
+ bufstr_set(e.url_rbuf, i, argv(i));
+ e.url_ready(e, e.url_ready_pass, URL_READY_CANREAD);
+ return 1;
+ }
+ else
+ {
+ // an ERROR
+ e.url_ready(e, e.url_ready_pass, -fabs(status));
+ strunzone(e.url_url);
+ remove(e);
+ return 1;
+ }
+}
+
+void url_fopen(string url, float mode, url_ready_func rdy, entity pass)
+{
+ entity e;
+ float i;
+ if(strstrofs(url, "://", 0) >= 0)
+ {
+ switch(mode)
+ {
+ case FILE_WRITE:
+ case FILE_APPEND:
+ // collect data to a stringbuffer for a POST request
+ // attempts to close will result in a reading handle
+
+ // create a writing end that does nothing yet
+ e = spawn();
+ e.classname = "url_fopen_file";
+ e.url_url = strzone(url);
+ e.url_fh = -1;
+ e.url_wbuf = buf_create();
+ if(e.url_wbuf < 0)
+ {
+ print("url_fopen: out of memory in buf_create\n");
+ rdy(e, pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+ e.url_wbufpos = 0;
+ e.url_rbuf = -1;
+ rdy(e, pass, URL_READY_CANWRITE);
+ break;
+
+ case FILE_READ:
+ // read data only
+
+ // get slot for HTTP request
+ for(i = autocvar__urllib_nextslot; i < NUM_URL_ID; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= NUM_URL_ID)
+ {
+ for(i = 0; i < autocvar__urllib_nextslot; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= autocvar__urllib_nextslot)
+ {
+ print("url_fopen: too many concurrent requests\n");
+ rdy(world, pass, URL_READY_ERROR);
+ return;
+ }
+ }
+
+ // GET the data
+ if(!crypto_uri_postbuf(url, i + MIN_URL_ID, string_null, string_null, -1, 0))
+ {
+ print("url_fopen: failure in crypto_uri_postbuf\n");
+ rdy(world, pass, URL_READY_ERROR);
+ return;
+ }
+
+ // Make a dummy handle object (no buffers at
+ // all). Wait for data to come from the
+ // server, then call the callback
+ e = spawn();
+ e.classname = "url_fopen_file";
+ e.url_url = strzone(url);
+ e.url_fh = -1;
+ e.url_rbuf = -1;
+ e.url_wbuf = -1;
+ e.url_ready = rdy;
+ e.url_ready_pass = pass;
+ e.url_id = i;
+ url_fromid[i] = e;
+
+ // make sure this slot won't be reused quickly even on map change
+ cvar_set("_urllib_nextslot", ftos(mod(i + 1, NUM_URL_ID)));
+ break;
+ }
+ }
+ else
+ {
+ float fh;
+ fh = fopen(url, mode);
+ if(fh < 0)
+ {
+ rdy(world, pass, URL_READY_ERROR);
+ return;
+ }
+ else
+ {
+ e = spawn();
+ e.classname = "url_fopen_file";
+ e.url_fh = fh;
+ if(mode == FILE_READ)
+ rdy(e, pass, URL_READY_CANREAD);
+ else
+ rdy(e, pass, URL_READY_CANWRITE);
+ }
+ }
+}
+
+// close a file
+void url_fclose(entity e, url_ready_func rdy, entity pass)
+{
+ float i;
+
+ if(e.url_fh < 0)
+ {
+ if(e.url_rbuf == -1 || e.url_wbuf != -1) // not(post GET/POST request)
+ if(e.url_rbuf != -1 || e.url_wbuf == -1) // not(pre POST request)
+ error("url_fclose: not closable in current state");
+
+ // closing an URL!
+ if(e.url_wbuf >= 0)
+ {
+ // we are closing the write end (HTTP POST request)
+
+ // get slot for HTTP request
+ for(i = autocvar__urllib_nextslot; i < NUM_URL_ID; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= NUM_URL_ID)
+ {
+ for(i = 0; i < autocvar__urllib_nextslot; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= autocvar__urllib_nextslot)
+ {
+ print("url_fclose: too many concurrent requests\n");
+ rdy(e, pass, URL_READY_ERROR);
+ buf_del(e.url_wbuf);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+ }
+
+ // POST the data
+ if(!crypto_uri_postbuf(e.url_url, i + MIN_URL_ID, "text/plain", "", e.url_wbuf, 0))
+ {
+ print("url_fclose: failure in crypto_uri_postbuf\n");
+ rdy(e, pass, URL_READY_ERROR);
+ buf_del(e.url_wbuf);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+
+ // delete write end. File handle is now in unusable
+ // state. Wait for data to come from the server, then
+ // call the callback
+ buf_del(e.url_wbuf);
+ e.url_wbuf = -1;
+ e.url_ready = rdy;
+ e.url_ready_pass = pass;
+ e.url_id = i;
+ url_fromid[i] = e;
+
+ // make sure this slot won't be reused quickly even on map change
+ cvar_set("_urllib_nextslot", ftos(mod(i + 1, NUM_URL_ID)));
+ }
+ else
+ {
+ // we have READ all data, just close
+ rdy(e, pass, URL_READY_CLOSED);
+ buf_del(e.url_rbuf);
+ strunzone(e.url_url);
+ remove(e);
+ }
+ }
+ else
+ {
+ // file
+ fclose(e.url_fh);
+ rdy(e, pass, URL_READY_CLOSED); // closing creates no reading handle
+ remove(e);
+ }
+}
+
+// with \n (blame FRIK_FILE)
+string url_fgets(entity e)
+{
+ if(e.url_fh < 0)
+ {
+ if(e.url_rbuf == -1)
+ error("url_fgets: not readable in current state");
+ // curl
+ string s;
+ s = bufstr_get(e.url_rbuf, e.url_rbufpos);
+ e.url_rbufpos += 1;
+ return s;
+ }
+ else
+ {
+ // file
+ return fgets(e.url_fh);
+ }
+}
+
+// without \n (blame FRIK_FILE)
+void url_fputs(entity e, string s)
+{
+ if(e.url_fh < 0)
+ {
+ if(e.url_wbuf == -1)
+ error("url_fputs: not writable in current state");
+ // curl
+ bufstr_set(e.url_wbuf, e.url_wbufpos, s);
+ e.url_wbufpos += 1;
+ }
+ else
+ {
+ // file
+ fputs(e.url_fh, s);
+ }
+}
--- /dev/null
+float URL_READY_ERROR = -1;
+float URL_READY_CLOSED = 0;
+float URL_READY_CANWRITE = 1;
+float URL_READY_CANREAD = 2;
+// errors: -1, or negative HTTP status code
+typedef void(entity handle, entity pass, float status) url_ready_func;
+
+void url_fopen(string url, float mode, url_ready_func rdy, entity pass);
+void url_fclose(entity e, url_ready_func rdy, entity pass);
+string url_fgets(entity e);
+void url_fputs(entity e, string s);
+
+// returns true if handled
+float url_URI_Get_Callback(float id, float status, string data);
+#define MIN_URL_ID 128
+#define NUM_URL_ID 64
#pragma flag enable subscope
#pragma flag enable lo
+
+#ifndef NOCOMPAT
+# define WORKAROUND_XON010
+# define COMPAT_XON010_CHANNELS
+#endif
return s;
return substring(s, p+1, -1);
}
+
+// x-encoding (encoding as zero length invisible string)
+const string XENCODE_2 = "xX";
+const string XENCODE_22 = "0123456789abcdefABCDEF";
+string xencode(float f)
+{
+ float a, b, c, d;
+ d = mod(f, 22); f = floor(f / 22);
+ c = mod(f, 22); f = floor(f / 22);
+ b = mod(f, 22); f = floor(f / 22);
+ a = mod(f, 2); // f = floor(f / 2);
+ return strcat(
+ "^",
+ substring(XENCODE_2, a, 1),
+ substring(XENCODE_22, b, 1),
+ substring(XENCODE_22, c, 1),
+ substring(XENCODE_22, d, 1)
+ );
+}
+float xdecode(string s)
+{
+ float a, b, c, d;
+ if(substring(s, 0, 1) != "^")
+ return -1;
+ if(strlen(s) < 5)
+ return -1;
+ a = strstrofs(XENCODE_2, substring(s, 1, 1), 0);
+ b = strstrofs(XENCODE_22, substring(s, 2, 1), 0);
+ c = strstrofs(XENCODE_22, substring(s, 3, 1), 0);
+ d = strstrofs(XENCODE_22, substring(s, 4, 1), 0);
+ if(a < 0 || b < 0 || c < 0 || d < 0)
+ return -1;
+ return ((a * 22 + b) * 22 + c) * 22 + d;
+}
case HUD_PANEL_ENGINEINFO: panel_name = HUD_PANELNAME_ENGINEINFO; break; \
case HUD_PANEL_INFOMESSAGES: panel_name = HUD_PANELNAME_INFOMESSAGES; break; \
case HUD_PANEL_PHYSICS: panel_name = HUD_PANELNAME_PHYSICS; break; \
+ case HUD_PANEL_CENTERPRINT: panel_name = HUD_PANELNAME_CENTERPRINT; break; \
} ENDS_WITH_CURLY_BRACE
// Get name of specified panel id
string language_filename(string s);
string CTX(string s);
#define ZCTX(s) strzone(CTX(s))
+
+// x-encoding (encoding as zero length invisible string)
+// encodes approx. 14 bits into 5 bytes of color code string
+const float XENCODE_MAX = 21295; // 2*22*22*22-1
+const float XENCODE_LEN = 5;
+string xencode(float f);
+float xdecode(string s);
+
+#ifndef COMPAT_XON010_CHANNELS
+#define sound(e,c,s,v,a) sound7(e,c,s,v,a,0,0)
+#endif
#include "xonotic/dialog_hudpanel_infomessages.c"
#include "xonotic/dialog_hudpanel_weapons.c"
#include "xonotic/dialog_hudpanel_physics.c"
+#include "xonotic/dialog_hudpanel_centerprint.c"
#include "xonotic/slider_picmip.c"
+++ /dev/null
-#ifndef INTERFACE
-#define INTERFACE
-#endif
-
-#ifdef IMPLEMENTATION
-#undef IMPLEMENTATION
-#endif
-
-#ifdef CLASS
-#undef CLASS
-#undef EXTENDS
-#undef METHOD
-#undef ATTRIB
-#undef ATTRIBARRAY
-#undef ENDCLASS
-#undef SUPER
-#endif
-
-#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl;
-#define EXTENDS(base)
-#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name;
-#define ATTRIB(cname,name,type,val) .type name;
-#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt];
-#define ENDCLASS(cname) .float instanceOf##cname;
-#define SUPER(cname)
+++ /dev/null
-#ifndef INTERFACE
-#define INTERFACE
-#endif
-
-#ifdef IMPLEMENTATION
-#undef IMPLEMENTATION
-#endif
-
-#ifdef CLASS
-#undef CLASS
-#undef EXTENDS
-#undef METHOD
-#undef ATTRIB
-#undef ATTRIBARRAY
-#undef ENDCLASS
-#undef SUPER
-#endif
-
-#define CLASS(cname) entity spawn##cname() { entity me;
-#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl;
-#define METHOD(cname,name,prototype) me.name = cname##_##name;
-#define ATTRIB(cname,name,type,val) me.name = val;
-#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name;
-#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; }
-#define SUPER(cname)
-#ifdef INTERFACE
-#undef INTERFACE
+#ifndef INTERFACE
+#define INTERFACE
#endif
#ifndef IMPLEMENTATION
#undef SUPER
#endif
+// for the constructor
+#define CLASS(cname) entity spawn##cname() { entity me;
+#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl;
+#define METHOD(cname,name,prototype) me.name = cname##_##name;
+#define ATTRIB(cname,name,type,val) me.name = val;
+#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name;
+#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; }
+
+// for the implementation
#define SUPER(cname) (cname##_vtbl.vtblbase)
--- /dev/null
+#ifndef INTERFACE
+#define INTERFACE
+#endif
+
+#ifdef IMPLEMENTATION
+#undef IMPLEMENTATION
+#endif
+
+#ifdef CLASS
+#undef CLASS
+#undef EXTENDS
+#undef METHOD
+#undef ATTRIB
+#undef ATTRIBARRAY
+#undef ENDCLASS
+#undef SUPER
+#endif
+
+#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl;
+#define EXTENDS(base)
+#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name;
+#define ATTRIB(cname,name,type,val) .type name;
+#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt];
+#define ENDCLASS(cname) .float instanceOf##cname;
+#define SUPER(cname)
skin.qh
xonotic/util.qh
-oo/classdefs.h
- classes.c
-
-oo/constructors.h
+oo/interface.h
classes.c
oo/implementation.h
classes.c
me.configureXonoticListBox(me);
// load the file
me.bufferIndex = buf_load(language_filename("xonotic-credits.txt"));
- if(me.bufferIndex < 0)
- me.bufferIndex = buf_load("xonotic-credits.txt");
me.nItems = buf_getsize(me.bufferIndex);
}
void XonoticCreditsList_destroy(entity me)
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticHUDCenterprintDialog) EXTENDS(XonoticRootDialog)
+ METHOD(XonoticHUDCenterprintDialog, fill, void(entity))
+ ATTRIB(XonoticHUDCenterprintDialog, title, string, _("Centerprint"))
+ ATTRIB(XonoticHUDCenterprintDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
+ ATTRIB(XonoticHUDCenterprintDialog, intendedWidth, float, 0.4)
+ ATTRIB(XonoticHUDCenterprintDialog, rows, float, 15)
+ ATTRIB(XonoticHUDCenterprintDialog, columns, float, 4)
+ ATTRIB(XonoticHUDCenterprintDialog, name, string, "HUDcenterprint")
+ENDCLASS(XonoticHUDCenterprintDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticHUDCenterprintDialog_fill(entity me)
+{
+ entity e;
+ string panelname = "centerprint";
+
+ DIALOG_HUDPANEL_COMMON();
+
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Message duration:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(1, 10, 1, "hud_panel_centerprint_time"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Fade time:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(0, 1, 0.05, "hud_panel_centerprint_fadetime"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 3.8, e = makeXonoticCheckBox(0, "hud_panel_centerprint_flip", _("Flip messages order")));
+ me.TR(me);
+ me.TD(me, 1, 4, e = makeXonoticTextLabel(0, _("Text alignment:")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 3.8/3, e = makeXonoticRadioButton(3, "hud_panel_centerprint_align", "0", _("Left")));
+ me.TD(me, 1, 3.8/3, e = makeXonoticRadioButton(3, "hud_panel_centerprint_align", "0.5", _("Center")));
+ me.TD(me, 1, 3.8/3, e = makeXonoticRadioButton(3, "hud_panel_centerprint_align", "1", _("Right")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Font scale:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(0.5, 2, 0.1, "hud_panel_centerprint_fontscale"));
+}
+#endif
{
entity e;
string panelname = "physics";
- float i;
me.TR(me);
me.TD(me, 1, 4, e = makeXonoticTextSlider("hud_panel_physics"));
e.addValue(e, _("Panel disabled"), "0");
- e.addValue(e, _("Panel enabled if not observing"), "1");
- e.addValue(e, _("Panel always enabled"), "2");
+ e.addValue(e, _("Panel enabled"), "1");
+ e.addValue(e, _("Panel enabled even observing"), "2");
+ e.addValue(e, _("Panel enabled only in Race/CTS"), "3");
e.configureXonoticTextSliderValues(e);
DIALOG_HUDPANEL_COMMON_NOTOGGLE();
void XonoticServerCreateTab_fill(entity me)
{
entity e, e0;
- float n;
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:")));
me.TR(me);
me.TD(me, 1, w, e = makeXonoticTextLabel(0, _("Game types:")));
-
n = ceil(GameType_GetCount() / (me.rows - 6));
wgt = (w - 0.2) / n;
for(i = 0; i < GameType_GetCount(); ++i)
me.TD(me, 1, me.columns - 5.5, e = makeXonoticButton(_("Close"), '0 0 0'));
e.onClick = Dialog_Close;
e.onClickEntity = me;
- me.TD(me, 1, me.columns - 5.5, me.startButton = e = makeXonoticButton(_("Play"), '0 0 0'));
+ me.TD(me, 1, me.columns - 5.5, me.startButton = e = makeXonoticButton(ZCTX(_("MAP^Play")), '0 0 0'));
me.startButton.onClick = MapList_LoadMap;
me.startButton.onClickEntity = NULL; // filled later
}
me.TDempty(me, 0.2);
me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_start_weapon_laser", "0", _("No start weapons")));
e.cvarOffValue = "-1";
- makeMulti(e, "g_start_weapon_shotgun g_start_weapon_uzi g_start_weapon_grenadelauncher g_start_weapon_minelayer g_start_weapon_electro g_start_weapon_crylink g_start_weapon_nex g_start_weapon_hagar g_start_weapon_rocketlauncher g_start_weapon_sniperrifle g_start_weapon_hlac g_start_weapon_seeker g_start_weapon_minstanex g_start_weapon_hook g_start_weapon_porto g_start_weapon_tuba g_start_weapon_minelayer");
+ makeMulti(e, "g_start_weapon_shotgun g_start_weapon_uzi g_start_weapon_grenadelauncher g_start_weapon_minelayer g_start_weapon_electro g_start_weapon_crylink g_start_weapon_nex g_start_weapon_hagar g_start_weapon_rocketlauncher g_start_weapon_rifle g_start_weapon_hlac g_start_weapon_seeker g_start_weapon_minstanex g_start_weapon_hook g_start_weapon_porto g_start_weapon_tuba g_start_weapon_minelayer");
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
e.onClick = TimeDemo_Click;
e.onClickEntity = dlist;
- me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Play"), '0 0 0'));
+ me.TD(me, 1, me.columns / 2, e = makeXonoticButton(ZCTX(_("DEMO^Play")), '0 0 0'));
e.onClick = StartDemo_Click;
e.onClickEntity = dlist;
}
ATTRIB(XonoticWeaponsDialog, title, string, _("Weapon settings"))
ATTRIB(XonoticWeaponsDialog, color, vector, SKINCOLOR_DIALOG_WEAPONS)
ATTRIB(XonoticWeaponsDialog, intendedWidth, float, 0.4)
- ATTRIB(XonoticWeaponsDialog, rows, float, 17)
+ ATTRIB(XonoticWeaponsDialog, rows, float, 18)
ATTRIB(XonoticWeaponsDialog, columns, float, 3)
ATTRIB(XonoticWeaponsDialog, weaponsList, entity, NULL)
ENDCLASS(XonoticWeaponsDialog)
me.TR(me);
me.TD(me, 1, 3, makeXonoticTextLabel(0, _("Weapon priority list:")));
me.TR(me);
- me.TD(me, 9, 3, e = me.weaponsList = makeXonoticWeaponsList());
- me.gotoRC(me, 10, 0);
+ me.TD(me, 10, 3, e = me.weaponsList = makeXonoticWeaponsList());
+ me.gotoRC(me, 11, 0);
me.TDempty(me, 0.5);
me.TD(me, 1, 1, e = makeXonoticButton(_("Up"), '0 0 0'));
e.onClick = WeaponsList_MoveUp_Click;
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_drawviewmodel", _("Draw 1st person weapon model")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.4, e = makeXonoticRadioButton(1, "cl_gunalign", "4", _("Left align")));
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "cl_gunalign", "4", _("Left align")));
setDependent(e, "r_drawviewmodel", 1, 1);
- me.TD(me, 1, 1.4, e = makeXonoticRadioButton(1, "cl_gunalign", "3", _("Right align")));
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "cl_gunalign", "1", _("Center")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TD(me, 1, 1.0, e = makeXonoticRadioButton(1, "cl_gunalign", "3", _("Right align")));
setDependent(e, "r_drawviewmodel", 1, 1);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally")));
me.TR(me);
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
- makeMulti(s, "snd_csqcchannel2volume");
+ makeMulti(s, "snd_channel8volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Music:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_staticvolume");
+ makeMulti(s, "snd_channel9volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, ZCTX(_("VOL^Ambient:"))));
- makeMulti(s, "snd_entchannel2volume");
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_worldchannel0volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel0volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Info:")));
- makeMulti(s, "snd_csqcchannel0volume");
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_entchannel3volume");
- makeMulti(s, "snd_playerchannel0volume snd_playerchannel3volume snd_csqcchannel3volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel3volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Items:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel6volume");
- makeMulti(s, "snd_csqcchannel6volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel6volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Pain:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel7volume");
- makeMulti(s, "snd_entchannel7volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel7volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Player:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_entchannel4volume");
- makeMulti(s, "snd_playerchannel4volume snd_entchannel6volume snd_csqcchannel4volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel4volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Shots:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel2volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel2volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Voice:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel1volume");
- makeMulti(s, "snd_playerchannel5volume snd_entchannel1volume snd_entchannel5volume");
+ s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel1volume");
+ makeMulti(s, "snd_channel5volume"); // legacy
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Weapons:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
me.TD(me, 1, 1.9, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance"));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
+ setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Distance:")));
me.TD(me, 1, 1.2, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", _("Use lightmaps")));
me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", _("Deluxe mapping")));
setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0);
- me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss")));
- setDependentAND3(e, "vid_gl20", 1, 1, "r_glsl_deluxemapping", 1, 2, "mod_q3bsp_nolightmaps", 0, 0);
+ me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss"))); // FIXME move this box elsewhere, it has nothing to do with Q3BSP lightmaps
+ setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", _("Offset mapping")));
setDependent(e, "vid_gl20", 1, 1);
e.savedValue = 0.5; // default
me.TD(me, 1, 2, s);
me.TR(me);
- s = makeXonoticSlider(0.1, 1, 0.1, "r_damageblur");
- me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Damage blur:")));
- if(s.value != e.savedValue)
- e.savedValue = 0.4; // default
- me.TD(me, 1, 2, s);
+ e = makeXonoticCheckBoxEx(0.5, 0, "hud_postprocessing_maxbluralpha", _("Blur and sharpen postprocessing"));
+ makeMulti(e, "hud_powerup");
+ me.TD(me, 1, 2, e);
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_restart", COMMANDBUTTON_APPLY));
void InstantAction_LoadMap(entity btn, entity dummy)
{
- float glob, i, n, fh;
- string s;
- glob = search_begin("maps/*.instantaction", TRUE, TRUE);
- if(glob < 0)
- return;
- i = ceil(random() * search_getsize(glob)) - 1;
- fh = fopen(search_getfilename(glob, i), FILE_READ);
- search_end(glob);
- if(fh < 0)
- return;
- while((s = fgets(fh)))
+ float pmin, pmax, pstep;
+
+ cvar_set("timelimit_override", "10");
+ cvar_set("g_lms_lives_override", "9");
+
+ if(random() < 0.4) // 40% are DM
+ {
+ MapInfo_SwitchGameType(MAPINFO_TYPE_DEATHMATCH);
+ pmin = 2;
+ pmax = 8;
+ pstep = 1;
+ }
+ else if(random() < 0.5) // half of the remaining 60%, i.e. 30%, are CTF
+ {
+ MapInfo_SwitchGameType(MAPINFO_TYPE_CTF);
+ pmin = 4;
+ pmax = 12;
+ pstep = 2;
+ }
+ else if(random() < 0.5) // half of the remaining 30%, i.e. 15%, are TDM
+ {
+ MapInfo_SwitchGameType(MAPINFO_TYPE_TEAM_DEATHMATCH);
+ pmin = 4;
+ pmax = 8;
+ pstep = 2;
+ }
+ else if(random() < 0.666) // 2/3 of the remaining 15%, i.e. 10%, are KH
{
- if(substring(s, 0, 4) == "set ")
- s = substring(s, 4, strlen(s) - 4);
- n = tokenize_console(s);
- if(argv(0) == "bot_number")
- cvar_set("bot_number", argv(1));
- else if(argv(0) == "skill")
- cvar_set("skill", argv(1));
- else if(argv(0) == "timelimit")
- cvar_set("timelimit_override", argv(1));
- else if(argv(0) == "fraglimit")
- cvar_set("fraglimit_override", argv(1));
- else if(argv(0) == "changelevel")
+ MapInfo_SwitchGameType(MAPINFO_TYPE_KEYHUNT);
+ pmin = 6;
+ pmax = 6;
+ pstep = 6; // works both for 2 and 3 teams
+ // TODO find team count of map, set pstep=2 or 3, and use 2v2(v2) games at least
+ }
+ else // somehow distribute the remaining 5%
+ {
+ float r;
+ r = floor(random() * 5);
+ switch(r)
{
- fclose(fh);
- localcmd("\nmenu_loadmap_prepare\n");
- MapInfo_SwitchGameType(MAPINFO_TYPE_DEATHMATCH);
- MapInfo_LoadMap(argv(1));
- cvar_set("lastlevel", "1");
- return;
+ default:
+ case 0:
+ MapInfo_SwitchGameType(MAPINFO_TYPE_LMS);
+ pmin = 2;
+ pmax = 6;
+ pstep = 1;
+ cvar_set("timelimit_override", "-1");
+ break;
+ case 1:
+ MapInfo_SwitchGameType(MAPINFO_TYPE_CA);
+ pmin = 2;
+ pmax = 8;
+ pstep = 2;
+ break;
+ case 2:
+ MapInfo_SwitchGameType(MAPINFO_TYPE_DOMINATION);
+ pmin = 2;
+ pmax = 8;
+ pstep = 2;
+ break;
+ case 3:
+ MapInfo_SwitchGameType(MAPINFO_TYPE_ONSLAUGHT);
+ pmin = 6;
+ pmax = 16;
+ pstep = 2;
+ break;
+ case 4:
+ MapInfo_SwitchGameType(MAPINFO_TYPE_FREEZETAG);
+ pmin = 4;
+ pmax = 10;
+ pstep = 2;
+ break;
+ case 5:
+ MapInfo_SwitchGameType(MAPINFO_TYPE_ASSAULT);
+ pmin = 4;
+ pmax = 16;
+ pstep = 2;
+ break;
}
}
- fclose(fh);
+
+ // find random map
+ MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
+ string s;
+ do
+ {
+ float m;
+ m = floor(random() * MapInfo_count);
+ s = MapInfo_BSPName_ByID(m);
+ }
+ while(!fexists(sprintf("maps/%s.waypoints", s)));
+ MapInfo_LoadMap(s);
+
+ // configure bots
+ float p;
+ pmin = pstep * ceil(pmin / pstep);
+ pmax = pstep * floor(pmax / pstep);
+ p = pmin + pstep * floor(random() * ((pmax - pmin) / pstep + 1));
+ cvar_set("bot_number", ftos(p - 1));
+
+ // make sure we go back to menu
+ cvar_set("lastlevel", "1");
}
void XonoticSingleplayerDialog_fill(entity me)
me.configureXonoticKeyBinder(me);
return me;
}
+void replace_bind(string from, string to)
+{
+ float n, j, k;
+ n = tokenize(findkeysforcommand(from)); // uses '...' strings
+ for(j = 0; j < n; ++j)
+ {
+ k = stof(argv(j));
+ if(k != -1)
+ localcmd("\nbind \"", keynumtostring(k), "\" \"", to, "\"\n");
+ }
+}
void XonoticKeyBinder_configureXonoticKeyBinder(entity me)
{
me.configureXonoticListBox(me);
Xonotic_KeyBinds_Read();
me.nItems = Xonotic_KeyBinds_Count;
me.setSelected(me, 0);
+
+ // TEMP: Xonotic 0.1 to later
+ replace_bind("impulse 1", "weapon_group_1");
+ replace_bind("impulse 2", "weapon_group_2");
+ replace_bind("impulse 3", "weapon_group_3");
+ replace_bind("impulse 4", "weapon_group_4");
+ replace_bind("impulse 5", "weapon_group_5");
+ replace_bind("impulse 6", "weapon_group_6");
+ replace_bind("impulse 7", "weapon_group_7");
+ replace_bind("impulse 8", "weapon_group_8");
+ replace_bind("impulse 9", "weapon_group_9");
+ replace_bind("impulse 14", "weapon_group_0");
}
void XonoticKeyBinder_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
{
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+ i = spawnXonoticHUDCenterprintDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
me.advancedDialog = i = spawnXonoticAdvancedDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
draw_Picture(me.columnPreviewOrigin * eX, strcat("/maps/", MapInfo_Map_bspname), me.columnPreviewSize * eX + eY, '1 1 1', theAlpha);
if(included)
draw_Picture(me.checkMarkOrigin, "checkmark", me.checkMarkSize, '1 1 1', 1);
- s = draw_TextShortenToWidth(strcat(MapInfo_Map_bspname, ": ", MapInfo_Map_title), me.columnNameSize, 0, me.realFontSize);
+ s = draw_TextShortenToWidth(MapInfo_Map_titlestring, me.columnNameSize, 0, me.realFontSize);
draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_MAPLIST_TITLE, theAlpha, 0);
s = draw_TextShortenToWidth(MapInfo_Map_author, me.columnNameSize, 0, me.realFontSize);
draw_Text(me.realUpperMargin2 * eY + (me.columnNameOrigin + 1.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_MAPLIST_AUTHOR, theAlpha, 0);
{
float i;
string s;
- MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, MAPINFO_FLAG_FORBIDDEN, 0); // all
+ MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, MAPINFO_FLAG_FORBIDDEN | MAPINFO_FLAG_HIDDEN, 0); // all
s = "";
for(i = 0; i < MapInfo_count; ++i)
s = strcat(s, " ", MapInfo_BSPName_ByID(i));
float have_dds, have_jpg, have_tga;
float can_dds;
have_dds = (fexists("dds/particles/particlefont.dds"));
- have_dds = (fexists("particles/particlefont.jpg"));
- have_dds = (fexists("particles/particlefont.tga"));
+ have_jpg = (fexists("particles/particlefont.jpg"));
+ have_tga = (fexists("particles/particlefont.tga"));
can_dds = GL_Have_TextureCompression();
if(have_dds && (have_jpg || have_tga))
{
// but ONLY if we actually support it!
if(can_dds)
{
+ // these builds are meant to have GOOD quality, so let's not compress non-skinframes
cvar_set("gl_texturecompression", "0");
return 1;
+
+ //cvar_set("gl_texturecompression", cvar_string("r_texture_dds_load"));
+ //return 2;
}
else
{
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="qc-client" />
- <Option makefile="client" />
- <Option makefile_is_custom="1" />
- <Option pch_mode="2" />
- <Option compiler="qaukec" />
- <Build>
- <Target title="Debug">
- <Option output="bin\Debug\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- <Target title="Release">
- <Option output="bin\Release\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Release\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- </Compiler>
- <Unit filename="client\Defs.qc" />
- <Unit filename="client\Main.qc" />
- <Unit filename="client\View.qc" />
- <Unit filename="client\autocvars.qh" />
- <Unit filename="client\bgmscript.qc" />
- <Unit filename="client\bgmscript.qh" />
- <Unit filename="client\casings.qc" />
- <Unit filename="client\csqc_builtins.qc" />
- <Unit filename="client\csqc_constants.qc" />
- <Unit filename="client\ctf.qc" />
- <Unit filename="client\damage.qc" />
- <Unit filename="client\effects.qc" />
- <Unit filename="client\gibs.qc" />
- <Unit filename="client\hook.qc" />
- <Unit filename="client\interpolate.qc" />
- <Unit filename="client\interpolate.qh" />
- <Unit filename="client\laser.qc" />
- <Unit filename="client\main.qh" />
- <Unit filename="client\mapvoting.qc" />
- <Unit filename="client\miscfunctions.qc" />
- <Unit filename="client\modeleffects.qc" />
- <Unit filename="client\movetypes.qc" />
- <Unit filename="client\movetypes.qh" />
- <Unit filename="client\particles.qc" />
- <Unit filename="client\prandom.qc" />
- <Unit filename="client\prandom.qh" />
- <Unit filename="client\pre.qh" />
- <Unit filename="client\progs.src" />
- <Unit filename="client\projectile.qc" />
- <Unit filename="client\rubble.qc" />
- <Unit filename="client\sbar.qc" />
- <Unit filename="client\sortlist.qc" />
- <Unit filename="client\teamplay.qc" />
- <Unit filename="client\teamradar.qc" />
- <Unit filename="client\teamradar.qh" />
- <Unit filename="client\tuba.qc" />
- <Unit filename="client\wall.qc" />
- <Unit filename="client\waypointsprites.qc" />
- <Unit filename="client\waypointsprites.qh" />
- <Extensions>
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="qc-common" />
- <Option makefile="none" />
- <Option makefile_is_custom="1" />
- <Option pch_mode="2" />
- <Option compiler="qaukec" />
- <Build>
- <Target title="Debug">
- <Option output="bin\Debug\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- <Target title="Release">
- <Option output="bin\Release\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Release\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- </Compiler>
- <Unit filename="common\campaign_common.qh" />
- <Unit filename="common\campaign_file.qc" />
- <Unit filename="common\campaign_setup.qc" />
- <Unit filename="common\constants.qh" />
- <Unit filename="common\gamecommand.qc" />
- <Unit filename="common\items.qc" />
- <Unit filename="common\items.qh" />
- <Unit filename="common\mapinfo.qc" />
- <Unit filename="common\mapinfo.qh" />
- <Unit filename="common\util-pre.qh" />
- <Unit filename="common\util.qc" />
- <Unit filename="common\util.qh" />
- <Extensions>
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="qc-server" />
- <Option makefile="server/" />
- <Option makefile_is_custom="1" />
- <Option pch_mode="2" />
- <Option compiler="qaukec" />
- <Build>
- <Target title="Debug">
- <Option output="bin\Debug\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <MakeCommands>
- <Build command="$make -DVEHICLES_ENABLED -DRELEASE -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- <Target title="Release">
- <Option output="bin\Release\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Release\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- <MakeCommands>
- <Build command="$make -DVEHICLES_ENABLED -DRELEASE -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- </Compiler>
- <Unit filename="anticheat.qc" />
- <Unit filename="anticheat.qh" />
- <Unit filename="antilag.qc" />
- <Unit filename="antilag.qh" />
- <Unit filename="arena.qc" />
- <Unit filename="assault.qc" />
- <Unit filename="bot\aim.qc" />
- <Unit filename="bot\aim.qh" />
- <Unit filename="bot\bot.qc" />
- <Unit filename="bot\bot.qh" />
- <Unit filename="bot\havocbot\havocbot.qc" />
- <Unit filename="bot\havocbot\havocbot.qh" />
- <Unit filename="bot\havocbot\role_ctf.qc" />
- <Unit filename="bot\havocbot\role_keyhunt.qc" />
- <Unit filename="bot\havocbot\role_onslaught.qc" />
- <Unit filename="bot\havocbot\roles.qc" />
- <Unit filename="bot\navigation.qc" />
- <Unit filename="bot\navigation.qh" />
- <Unit filename="bot\scripting.qc" />
- <Unit filename="bot\waypoints.qc" />
- <Unit filename="bot\waypoints.qh" />
- <Unit filename="builtins.qh" />
- <Unit filename="campaign.qc" />
- <Unit filename="campaign.qh" />
- <Unit filename="cheats.qc" />
- <Unit filename="cheats.qh" />
- <Unit filename="cl_client.qc" />
- <Unit filename="cl_impulse.qc" />
- <Unit filename="cl_physics.qc" />
- <Unit filename="cl_player.qc" />
- <Unit filename="cl_weapons.qc" />
- <Unit filename="cl_weaponsystem.qc" />
- <Unit filename="clientcommands.qc" />
- <Unit filename="constants.qh" />
- <Unit filename="csqceffects.qc" />
- <Unit filename="csqcprojectile.qc" />
- <Unit filename="csqcprojectile.qh" />
- <Unit filename="ctf.qc" />
- <Unit filename="defs.qh" />
- <Unit filename="domination.qc" />
- <Unit filename="ent_cs.qc" />
- <Unit filename="extensions.qh" />
- <Unit filename="func_breakable.qc" />
- <Unit filename="g_casings.qc" />
- <Unit filename="g_damage.qc" />
- <Unit filename="g_hook.qc" />
- <Unit filename="g_hook.qh" />
- <Unit filename="g_lights.qc" />
- <Unit filename="g_models.qc" />
- <Unit filename="g_subs.qc" />
- <Unit filename="g_swamp.qc" />
- <Unit filename="g_tetris.qc" />
- <Unit filename="g_triggers.qc" />
- <Unit filename="g_violence.qc" />
- <Unit filename="g_world.qc" />
- <Unit filename="gamecommand.qc" />
- <Unit filename="ipban.qc" />
- <Unit filename="ipban.qh" />
- <Unit filename="miscfunctions.qc" />
- <Unit filename="mode_onslaught.qc" />
- <Unit filename="monsters\ai.qc" />
- <Unit filename="monsters\defs.qc" />
- <Unit filename="monsters\fight.qc" />
- <Unit filename="monsters\m_monsters.qc" />
- <Unit filename="monsters\mode_management.qc" />
- <Unit filename="monsters\monster_zombie.qc" />
- <Unit filename="movelib.qc" />
- <Unit filename="mutators\base.qc" />
- <Unit filename="mutators\base.qh" />
- <Unit filename="mutators\gamemode_keyhunt.qc" />
- <Unit filename="mutators\gamemode_keyhunt.qh" />
- <Unit filename="mutators\mutator_dodging.qc" />
- <Unit filename="mutators\mutator_dodging.qh" />
- <Unit filename="mutators\mutator_nix.qc" />
- <Unit filename="mutators\mutators.qh" />
- <Unit filename="nexball.qc" />
- <Unit filename="pathlib.qc" />
- <Unit filename="pathlib\costs.qc" />
- <Unit filename="pathlib\debug.qc" />
- <Unit filename="pathlib\expandnode.qc" />
- <Unit filename="pathlib\main.qc" />
- <Unit filename="pathlib\movenode.qc" />
- <Unit filename="pathlib\pathlib.qh" />
- <Unit filename="pathlib\utility.qc" />
- <Unit filename="playerdemo.qc" />
- <Unit filename="playerdemo.qh" />
- <Unit filename="portals.qc" />
- <Unit filename="portals.qh" />
- <Unit filename="post-builtins.qh" />
- <Unit filename="pre-builtins.qh" />
- <Unit filename="progs.src" />
- <Unit filename="race.qc" />
- <Unit filename="race.qh" />
- <Unit filename="runematch.qc" />
- <Unit filename="scores.qc" />
- <Unit filename="scores.qh" />
- <Unit filename="scores_rules.qc" />
- <Unit filename="steerlib.qc" />
- <Unit filename="sv_main.qc" />
- <Unit filename="sv_stats.qc" />
- <Unit filename="sys.qh" />
- <Unit filename="t_halflife.qc" />
- <Unit filename="t_items.qc" />
- <Unit filename="t_jumppads.qc" />
- <Unit filename="t_plats.qc" />
- <Unit filename="t_quake.qc" />
- <Unit filename="t_quake3.qc" />
- <Unit filename="t_swamp.qc" />
- <Unit filename="t_teleporters.qc" />
- <Unit filename="target_spawn.qc" />
- <Unit filename="teamplay.qc" />
- <Unit filename="tturrets\include\turrets.qh" />
- <Unit filename="tturrets\include\turrets_early.qh" />
- <Unit filename="tturrets\system\system_aimprocs.qc" />
- <Unit filename="tturrets\system\system_damage.qc" />
- <Unit filename="tturrets\system\system_main.qc" />
- <Unit filename="tturrets\system\system_misc.qc" />
- <Unit filename="tturrets\system\system_scoreprocs.qc" />
- <Unit filename="tturrets\units\unit_checkpoint.qc" />
- <Unit filename="tturrets\units\unit_common.qc" />
- <Unit filename="tturrets\units\unit_ewheel.qc" />
- <Unit filename="tturrets\units\unit_flac.qc" />
- <Unit filename="tturrets\units\unit_fusionreactor.qc" />
- <Unit filename="tturrets\units\unit_hellion.qc" />
- <Unit filename="tturrets\units\unit_hk.qc" />
- <Unit filename="tturrets\units\unit_machinegun.qc" />
- <Unit filename="tturrets\units\unit_mlrs.qc" />
- <Unit filename="tturrets\units\unit_phaser.qc" />
- <Unit filename="tturrets\units\unit_plasma.qc" />
- <Unit filename="tturrets\units\unit_targettrigger.qc" />
- <Unit filename="tturrets\units\unit_tessla.qc" />
- <Unit filename="tturrets\units\unit_walker.qc" />
- <Unit filename="vehicles\racer.qc" />
- <Unit filename="vehicles\raptor.qc" />
- <Unit filename="vehicles\spiderbot.qc" />
- <Unit filename="vehicles\vehicles.qc" />
- <Unit filename="vehicles\vehicles.qh" />
- <Unit filename="verbstack.qc" />
- <Unit filename="vote.qc" />
- <Unit filename="vote.qh" />
- <Unit filename="w_all.qc" />
- <Unit filename="w_campingrifle.qc" />
- <Unit filename="w_common.qc" />
- <Unit filename="w_crylink.qc" />
- <Unit filename="w_electro.qc" />
- <Unit filename="w_fireball.qc" />
- <Unit filename="w_grenadelauncher.qc" />
- <Unit filename="w_minelayer.qc" />
- <Unit filename="w_hagar.qc" />
- <Unit filename="w_hlac.qc" />
- <Unit filename="w_hook.qc" />
- <Unit filename="w_laser.qc" />
- <Unit filename="w_minstanex.qc" />
- <Unit filename="w_nex.qc" />
- <Unit filename="w_porto.qc" />
- <Unit filename="w_rocketlauncher.qc" />
- <Unit filename="w_shotgun.qc" />
- <Unit filename="w_tuba.qc" />
- <Unit filename="w_uzi.qc" />
- <Unit filename="waypointsprites.qc" />
- <Extensions>
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
-.entity accuracy;
.float accuracy_hit[WEP_MAXCOUNT];
.float accuracy_fired[WEP_MAXCOUNT];
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_hit);
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_fired);
+.float accuracy_cnt_hit[WEP_MAXCOUNT];
+.float accuracy_cnt_fired[WEP_MAXCOUNT];
float accuracy_byte(float n, float d)
{
b = accuracy_byte(a.(accuracy_hit[w]), a.(accuracy_fired[w]));
a.(accuracy_hit[w]) = hit;
a.(accuracy_fired[w]) = fired;
+
+ if(hit)
+ a.(accuracy_cnt_hit[w]) = 1;
+ a.(accuracy_cnt_fired[w]) = 1;
+
if(b == accuracy_byte(hit, fired))
return;
w = pow(2, w);
a.SendFlags |= w;
}
+.float hit_time;
+.float fired_time;
+
void accuracy_add(entity e, float w, float fired, float hit)
{
entity a;
a.(accuracy_hit[w]) += hit;
if(fired)
a.(accuracy_fired[w]) += fired;
+
+ if(hit && a.hit_time != time) // only run this once per frame
+ {
+ a.(accuracy_cnt_hit[w]) += 1;
+ a.hit_time = time;
+ }
+
+ if(fired && a.fired_time != time) // only run this once per frame
+ {
+ a.(accuracy_cnt_fired[w]) += 1;
+ a.fired_time = time;
+ }
+
if(b == accuracy_byte(a.(accuracy_hit[w]), a.(accuracy_fired[w])))
return;
w = pow(2, w);
entity spawnqueue_first;
entity spawnqueue_last;
entity champion;
-string champion_name;
float warmup;
float ca_players;
float required_ca_players;
self.team = self.team_saved;
if(self.flags & FL_PROJECTILE) // remove any projectiles left
- {
- stopsound(self, CHAN_PAIN);
remove(self);
- }
}
// Waypoints and assault start come LAST
}
if(g_keyhunt)
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), "", kh_StartRound);
+ kh_Controller_SetThink_NoMsg(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), kh_StartRound);
if(g_arena)
if(champion && champion.classname == "player" && player_count > 1)
void Arena_Warmup()
{
float f;
- string msg;
entity e;
if((!g_arena && !g_ca && !g_freezetag) || (g_arena && !arena_roundbased) || (time < game_starttime))
return;
f = ceil(warmup - time);
- if(f > 0)
- champion = world; // this is done because a if(champion) will not execute if champion = world
allowed_to_spawn = 0;
if(ca_players < required_ca_players)
allowed_to_spawn = 1;
- msg = NEWLINES;
if(time < warmup && !inWarmupStage)
{
if (g_ca)
allowed_to_spawn = 1;
if(champion && g_arena)
- msg = strcat("The Champion is ", champion_name, "^7\n");
- //centerprint(self, strcat(msg, "The Champion is ", champion.netname, "^7\n"));
+ {
+ FOR_EACH_PLAYER(e)
+ centerprint(e, strcat("The Champion is ", champion.netname));
+ }
if(f != roundStartTime_prev) {
- msg = strcat(msg, "Round will start in ", ftos(f),"\n");
- //centerprint(self, strcat("Round will start in ", ftos(f),"\n"));
roundStartTime_prev = f;
if(f == 5)
Announce("prepareforbattle");
else if(f == 1)
Announce("1");
- FOR_EACH_PLAYER(e)
- centerprint(e, msg);
+ FOR_EACH_PLAYER(e)
+ Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "Round will start in %d", 1, f);
}
if (g_arena) {
self.velocity = '0 0 0';
self.avelocity = '0 0 0';
self.movement = '0 0 0';
- //self.fixangle = TRUE;
}
}
-
else if(f > -1 && f != roundStartTime_prev)
{
roundStartTime_prev = f;
Announce("begin");
- centerprint(self, "^1Begin!\n");
+ FOR_EACH_PLAYER(e)
+ Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "^1Begin!", 1, 0);
if(g_ca) {
ca_players = 0;
if(self.classname == "player" && self.health > 0 && self.movetype == MOVETYPE_NONE)
self.movetype = MOVETYPE_WALK;
+
}
+
+ // clear champion to avoid centerprinting again the champion msg
+ if (champion)
+ champion = world;
}
void count_spawned_players()
*
* Gets called in StartFrame()
*/
+float warntime;
void Spawnqueue_Check()
{
count_spawned_players();
reset_map(TRUE);
}
else if(ca_players < required_ca_players) {
- FOR_EACH_PLAYER(self)
- centerprint(self, strcat("^1Need at least 1 player in each team to play CA", "^7\n"));
+ if (time > warntime)
+ {
+ FOR_EACH_PLAYER(self)
+ Send_CSQC_Centerprint_Generic(self, CPID_ROUND_STARTING, "^1Need at least 1 player in each team to play CA", 2, 0);
+ warntime = time + 1;
+ }
return;
}
else if(!next_round) {
if((redspawned && !bluespawned) || (bluespawned && !redspawned)) {
next_round = time + 5;
- champion = find(world, classname, "player");
- if(champion_name)
- strunzone(champion_name);
- champion_name = strzone(champion.netname);
}
else if((!redspawned && !bluespawned) || time - warmup > autocvar_g_ca_round_timelimit) {
- FOR_EACH_CLIENT(self) centerprint(self, strcat("^7Round tied.", "^7\n"));
+ FOR_EACH_CLIENT(self) centerprint(self, "^7Round tied");
next_round = time + 5;
}
if(redalive && !bluealive)
{
play2all("ctf/red_capture.wav");
- FOR_EACH_CLIENT(self) centerprint(self, "^1 RED ^7team wins the round.\n");
+ FOR_EACH_CLIENT(self) centerprint(self, "^1RED ^7team wins the round");
TeamScore_AddToTeam(COLOR_TEAM1, ST_SCORE, +1);
stopalivecheck = TRUE;
}
else if(bluealive && !redalive)
{
play2all("ctf/blue_capture.wav");
- FOR_EACH_CLIENT(self) centerprint(self, "^4 BLUE ^7team wins the round.\n");
+ FOR_EACH_CLIENT(self) centerprint(self, "^4BLUE ^7team wins the round");
TeamScore_AddToTeam(COLOR_TEAM2, ST_SCORE, +1);
stopalivecheck = TRUE;
}
}
void assault_objective_use() {
- if(other.classname == "info_player_deathmatch") // a spawn, a spawn
- return;
-
// activate objective
self.health = 100;
//print("^2Activated objective ", self.targetname, "=", etos(self), "\n");
centerprint(player, s);
}
}
-
+
oldactivator = activator;
activator = oldself;
SUB_UseTargets();
ent.sprite = world;
}
- spr = WaypointSprite_SpawnFixed("<placeholder>", 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite);
+ spr = WaypointSprite_SpawnFixed("<placeholder>", 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite, RADARICON_OBJECTIVE, '1 0.5 0');
spr.assault_decreaser = self;
spr.waypointsprite_visible_for_player = assault_decreaser_sprite_visible;
spr.classname = "sprite_waypoint";
}
else
WaypointSprite_UpdateSprites(spr, "as-defend", "as-push", "as-push");
- WaypointSprite_UpdateTeamRadar(spr, RADARICON_OBJECTIVE, '1 0.5 0');
}
}
return;
}
self.spawnflags = 3;
+ self.classname = "func_assault_destructible";
if(assault_attacker_team == COLOR_TEAM1) {
self.team = COLOR_TEAM2;
} else {
activator = self;
SUB_UseTargets();
-
+
#ifdef TTURRETS_ENABLED
entity ent, oldself;
// trigger new round
// reset objectives, toggle spawnpoints, reset triggers, ...
-void assault_new_round() {
+void vehicles_clearrturn();
+void vehicles_spawn();
+void assault_new_round()
+{
+ entity oldself;
//bprint("ASSAULT: new round\n");
+ oldself = self;
+ // Eject players from vehicles
+ FOR_EACH_PLAYER(self)
+ {
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELESE);
+ }
+
+ self = findchainflags(vehicle_flags, VHF_ISVEHICLE);
+ while(self)
+ {
+ vehicles_clearrturn();
+ vehicles_spawn();
+ self = self.chain;
+ }
+
+ self = oldself;
+
// up round counter
self.winning = self.winning + 1;
float autocvar_g_balance_armor_rotlinear;
float autocvar_g_balance_armor_rotstable;
float autocvar_g_balance_armor_start;
-float autocvar_g_balance_sniperrifle_bursttime;
-float autocvar_g_balance_sniperrifle_primary_ammo;
-float autocvar_g_balance_sniperrifle_primary_animtime;
-float autocvar_g_balance_sniperrifle_primary_bulletconstant;
-float autocvar_g_balance_sniperrifle_primary_bullethail;
-float autocvar_g_balance_sniperrifle_primary_burstcost;
-float autocvar_g_balance_sniperrifle_primary_damage;
-float autocvar_g_balance_sniperrifle_primary_force;
-float autocvar_g_balance_sniperrifle_primary_headshotaddeddamage;
-float autocvar_g_balance_sniperrifle_primary_lifetime;
-float autocvar_g_balance_sniperrifle_primary_refire;
-float autocvar_g_balance_sniperrifle_primary_shots;
-float autocvar_g_balance_sniperrifle_primary_speed;
-float autocvar_g_balance_sniperrifle_primary_spread;
-float autocvar_g_balance_sniperrifle_primary_tracer;
-float autocvar_g_balance_sniperrifle_secondary;
-float autocvar_g_balance_sniperrifle_secondary_ammo;
-float autocvar_g_balance_sniperrifle_secondary_animtime;
-float autocvar_g_balance_sniperrifle_secondary_bulletconstant;
-float autocvar_g_balance_sniperrifle_secondary_bullethail;
-float autocvar_g_balance_sniperrifle_secondary_burstcost;
-float autocvar_g_balance_sniperrifle_secondary_damage;
-float autocvar_g_balance_sniperrifle_secondary_force;
-float autocvar_g_balance_sniperrifle_secondary_headshotaddeddamage;
-float autocvar_g_balance_sniperrifle_secondary_lifetime;
-float autocvar_g_balance_sniperrifle_secondary_reload;
-float autocvar_g_balance_sniperrifle_secondary_refire;
-float autocvar_g_balance_sniperrifle_secondary_shots;
-float autocvar_g_balance_sniperrifle_secondary_speed;
-float autocvar_g_balance_sniperrifle_secondary_spread;
-float autocvar_g_balance_sniperrifle_secondary_tracer;
-float autocvar_g_balance_sniperrifle_reload_ammo;
-float autocvar_g_balance_sniperrifle_reload_time;
+float autocvar_g_balance_rifle_bursttime;
+float autocvar_g_balance_rifle_primary_ammo;
+float autocvar_g_balance_rifle_primary_animtime;
+float autocvar_g_balance_rifle_primary_bulletconstant;
+float autocvar_g_balance_rifle_primary_bullethail;
+float autocvar_g_balance_rifle_primary_burstcost;
+float autocvar_g_balance_rifle_primary_damage;
+float autocvar_g_balance_rifle_primary_force;
+float autocvar_g_balance_rifle_primary_headshotaddeddamage;
+float autocvar_g_balance_rifle_primary_lifetime;
+float autocvar_g_balance_rifle_primary_refire;
+float autocvar_g_balance_rifle_primary_shots;
+float autocvar_g_balance_rifle_primary_speed;
+float autocvar_g_balance_rifle_primary_spread;
+float autocvar_g_balance_rifle_primary_tracer;
+float autocvar_g_balance_rifle_secondary;
+float autocvar_g_balance_rifle_secondary_ammo;
+float autocvar_g_balance_rifle_secondary_animtime;
+float autocvar_g_balance_rifle_secondary_bulletconstant;
+float autocvar_g_balance_rifle_secondary_bullethail;
+float autocvar_g_balance_rifle_secondary_burstcost;
+float autocvar_g_balance_rifle_secondary_damage;
+float autocvar_g_balance_rifle_secondary_force;
+float autocvar_g_balance_rifle_secondary_headshotaddeddamage;
+float autocvar_g_balance_rifle_secondary_lifetime;
+float autocvar_g_balance_rifle_secondary_reload;
+float autocvar_g_balance_rifle_secondary_refire;
+float autocvar_g_balance_rifle_secondary_shots;
+float autocvar_g_balance_rifle_secondary_speed;
+float autocvar_g_balance_rifle_secondary_spread;
+float autocvar_g_balance_rifle_secondary_tracer;
+float autocvar_g_balance_rifle_reload_ammo;
+float autocvar_g_balance_rifle_reload_time;
float autocvar_g_balance_cloaked_alpha;
float autocvar_g_balance_crylink_primary_ammo;
float autocvar_g_balance_crylink_primary_animtime;
float autocvar_g_balance_grenadelauncher_primary_force;
float autocvar_g_balance_grenadelauncher_primary_health;
float autocvar_g_balance_grenadelauncher_primary_lifetime;
-float autocvar_g_balance_grenadelauncher_primary_lifetime2;
+float autocvar_g_balance_grenadelauncher_primary_lifetime_stick;
float autocvar_g_balance_grenadelauncher_primary_radius;
float autocvar_g_balance_grenadelauncher_primary_refire;
float autocvar_g_balance_grenadelauncher_primary_remote_minbouncecnt;
float autocvar_g_balance_grenadelauncher_secondary_force;
float autocvar_g_balance_grenadelauncher_secondary_health;
float autocvar_g_balance_grenadelauncher_secondary_lifetime;
-float autocvar_g_balance_grenadelauncher_secondary_lifetime2;
+float autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce;
+float autocvar_g_balance_grenadelauncher_secondary_lifetime_stick;
float autocvar_g_balance_grenadelauncher_secondary_radius;
float autocvar_g_balance_grenadelauncher_secondary_refire;
float autocvar_g_balance_grenadelauncher_secondary_speed;
float autocvar_g_balance_hook_secondary_speed;
float autocvar_g_balance_keyhunt_damageforcescale;
float autocvar_g_balance_keyhunt_delay_collect;
-float autocvar_g_balance_keyhunt_delay_drop;
float autocvar_g_balance_keyhunt_delay_return;
float autocvar_g_balance_keyhunt_delay_round;
float autocvar_g_balance_keyhunt_delay_tracking;
float autocvar_g_turrets_unit_walker_std_rocket_turnrate;
float autocvar_g_turrets_unit_walker_std_rockets_range;
float autocvar_g_turrets_unit_walker_std_rockets_range_min;
+float autocvar_g_turrets_unit_walker_turn;
+float autocvar_g_turrets_unit_walker_turn_walk;
+float autocvar_g_turrets_unit_walker_turn_run;
+float autocvar_g_turrets_unit_walker_turn_strafe;
+float autocvar_g_turrets_unit_walker_turn_swim;
float autocvar_g_use_ammunition;
-float autocvar_g_vehicle_racer_afterburn_cost;
-float autocvar_g_vehicle_racer_anglestabilizer;
-float autocvar_g_vehicle_racer_downforce;
-float autocvar_g_vehicle_racer_energy;
-float autocvar_g_vehicle_racer_energy_usepause;
-float autocvar_g_vehicle_racer_health;
-float autocvar_g_vehicle_racer_laser_cost;
-float autocvar_g_vehicle_racer_laser_damage;
-float autocvar_g_vehicle_racer_laser_radius;
-float autocvar_g_vehicle_racer_laser_refire;
-float autocvar_g_vehicle_racer_laser_speed;
-float autocvar_g_vehicle_racer_pitchspeed;
-float autocvar_g_vehicle_racer_power_air;
-float autocvar_g_vehicle_racer_power_min;
-float autocvar_g_vehicle_racer_power_solid;
-float autocvar_g_vehicle_racer_reload;
-float autocvar_g_vehicle_racer_respawntime;
-float autocvar_g_vehicle_racer_rocket_accel;
-float autocvar_g_vehicle_racer_rocket_damage;
-float autocvar_g_vehicle_racer_rocket_radius;
-float autocvar_g_vehicle_racer_rocket_refire;
-float autocvar_g_vehicle_racer_rocket_speed;
-float autocvar_g_vehicle_racer_rocket_turnrate;
-float autocvar_g_vehicle_racer_shield;
-float autocvar_g_vehicle_racer_speed_afterburn;
-float autocvar_g_vehicle_racer_speed_forward;
-float autocvar_g_vehicle_racer_speed_strafe;
-float autocvar_g_vehicle_racer_springlength;
-float autocvar_g_vehicle_racer_turnroll;
-float autocvar_g_vehicle_racer_turnspeed;
-float autocvar_g_vehicle_raptor_reload;
-float autocvar_g_vehicle_spiderbot_crush_dmg;
-float autocvar_g_vehicle_spiderbot_crush_force;
-float autocvar_g_vehicle_spiderbot_head_pitchlimit_down;
-float autocvar_g_vehicle_spiderbot_head_pitchlimit_up;
-float autocvar_g_vehicle_spiderbot_head_pitchspeed;
-float autocvar_g_vehicle_spiderbot_head_turnlimit;
-float autocvar_g_vehicle_spiderbot_head_turnspeed;
-float autocvar_g_vehicle_spiderbot_health;
-float autocvar_g_vehicle_spiderbot_minigun_cooldown;
-float autocvar_g_vehicle_spiderbot_minigun_damage;
-float autocvar_g_vehicle_spiderbot_minigun_heat;
-float autocvar_g_vehicle_spiderbot_minigun_refire;
-float autocvar_g_vehicle_spiderbot_minigun_spread;
-float autocvar_g_vehicle_spiderbot_movement_inertia;
-float autocvar_g_vehicle_spiderbot_respawntime;
-float autocvar_g_vehicle_spiderbot_rocket_damage;
-float autocvar_g_vehicle_spiderbot_rocket_edgedamage;
-float autocvar_g_vehicle_spiderbot_rocket_force;
-float autocvar_g_vehicle_spiderbot_rocket_health;
-float autocvar_g_vehicle_spiderbot_rocket_lifetime;
-float autocvar_g_vehicle_spiderbot_rocket_noise;
-float autocvar_g_vehicle_spiderbot_rocket_radius;
-float autocvar_g_vehicle_spiderbot_rocket_refire;
-float autocvar_g_vehicle_spiderbot_rocket_reload;
-float autocvar_g_vehicle_spiderbot_rocket_speed;
-float autocvar_g_vehicle_spiderbot_rocket_turnrate;
-float autocvar_g_vehicle_spiderbot_shield;
-float autocvar_g_vehicle_spiderbot_speed_stop;
-float autocvar_g_vehicle_spiderbot_speed_strafe;
-float autocvar_g_vehicle_spiderbot_speed_walk;
-float autocvar_g_vehicle_spiderbot_turnspeed;
float autocvar_g_waypointeditor;
float autocvar_g_waypoints_for_items;
float autocvar_g_waypointsprite_deadlifetime;
float autocvar_welcome_message_time;
float autocvar_sv_gameplayfix_gravityunaffectedbyticrate;
float autocvar_g_trueaim_minrange;
+float autocvar_g_debug_defaultsounds;
+entity ka_ball;
// traces multiple trajectories to find one that will impact the target
// 'end' vector is the place it aims for,
// returns TRUE only if it hit targ (don't target non-solid entities)
float findtrajectorywithleading(vector org, vector m1, vector m2, entity targ, float shotspeed, float shotspeedupward, float maxtime, float shotdelay, entity ignore)
{
local float c, savesolid, shottime;
- local vector dir, end, v;
+ local vector dir, end, v, o;
if (shotspeed < 1)
return FALSE; // could cause division by zero if calculated
if (targ.solid < SOLID_BBOX) // SOLID_NOT and SOLID_TRIGGER
setsize(tracetossent, m1, m2);
savesolid = targ.solid;
targ.solid = SOLID_NOT;
- shottime = ((vlen(targ.origin - org) / shotspeed) + shotdelay);
- v = targ.velocity * shottime + targ.origin;
- tracebox(targ.origin, targ.mins, targ.maxs, v, FALSE, targ);
+ o = (targ.absmin + targ.absmax) * 0.5;
+ shottime = ((vlen(o - org) / shotspeed) + shotdelay);
+ v = targ.velocity * shottime + o;
+ tracebox(o, targ.mins, targ.maxs, v, FALSE, targ);
v = trace_endpos;
end = v + (targ.mins + targ.maxs) * 0.5;
if ((vlen(end - org) / shotspeed + 0.2) > maxtime)
{
if (e == self)
return FALSE;
- if (teams_matter)
+ if (teamplay)
if (e.team != 0)
return FALSE;
}
if(e.freezetag_frozen)
return FALSE;
- if(teams_matter)
+ // If neither player has ball then don't attack unless the ball is on the
+ // ground.
+ if (g_keepaway)
+ if (!e.ballcarried && !self.ballcarried && ka_ball.owner)
+ return FALSE;
+
+ if(teamplay)
{
if(e.team==0)
return FALSE;
float bot_aim(float shotspeed, float shotspeedupward, float maxshottime, float applygravity)
{
- local float f, r;
+ local float f, r, hf, distanceratio;
local vector v;
/*
eprint(self);
dprint(", ", ftos(applygravity));
dprint(");\n");
*/
+
+ hf = self.dphitcontentsmask;
+ self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
+
shotspeed *= g_weaponspeedfactor;
shotspeedupward *= g_weaponspeedfactor;
if (!shotspeed)
shotorg = self.origin + self.view_ofs;
shotdir = v_forward;
v = bot_shotlead(self.bot_aimtargorigin, self.bot_aimtargvelocity, shotspeed, self.bot_aimlatency);
- local float distanceratio;
- distanceratio =sqrt(bound(0,skill,10000))*0.3*(vlen(v-shotorg)-100)/autocvar_bot_ai_aimskill_firetolerance_distdegrees;
+ distanceratio = sqrt(bound(0,skill,10000))*0.3*(vlen(v-shotorg)-100)/autocvar_bot_ai_aimskill_firetolerance_distdegrees;
distanceratio = bound(0,distanceratio,1);
r = (autocvar_bot_ai_aimskill_firetolerance_maxdegrees-autocvar_bot_ai_aimskill_firetolerance_mindegrees)
* (1-distanceratio) + autocvar_bot_ai_aimskill_firetolerance_mindegrees;
if (applygravity && self.bot_aimtarg)
{
if (!findtrajectorywithleading(shotorg, '0 0 0', '0 0 0', self.bot_aimtarg, shotspeed, shotspeedupward, maxshottime, 0, self))
+ {
+ self.dphitcontentsmask = hf;
return FALSE;
+ }
+
f = bot_aimdir(findtrajectory_velocity - shotspeedupward * '0 0 1', r);
}
else
if (trace_fraction < 1)
if (trace_ent != self.enemy)
if (!bot_shouldattack(trace_ent))
+ {
+ self.dphitcontentsmask = hf;
return FALSE;
+ }
}
//if (r > maxshottime * shotspeed)
// return FALSE;
+ self.dphitcontentsmask = hf;
return TRUE;
};
local float besttime;
local entity best, head;
- if(teams_matter)
+ if(teamplay)
{
bot_removefromlargestteam();
return;
head.totalfrags_lastcheck = head.totalfrags;
}
+void bot_calculate_stepheightvec(void)
+{
+ stepheightvec = autocvar_sv_stepheight * '0 0 1';
+ jumpstepheightvec = stepheightvec +
+ ((autocvar_sv_jumpvelocity * autocvar_sv_jumpvelocity) / (2 * autocvar_sv_gravity)) * '0 0 0.85';
+ // 0.75 factor is for safety to make the jumps easy
+}
+
void bot_serverframe()
{
float realplayers, bots, activerealplayers;
if (time < 2)
return;
- stepheightvec = autocvar_sv_stepheight * '0 0 1';
+ bot_calculate_stepheightvec();
bot_navigation_movemode = ((autocvar_bot_navigation_ignoreplayers) ? MOVE_NOMONSTERS : MOVE_NORMAL);
if(time > autoskill_nextthink)
// But don't remove bots immediately on level change, as the real players
// usually haven't rejoined yet
bots_would_leave = FALSE;
- if (teams_matter && autocvar_bot_vs_human && (c3==-1 && c4==-1))
+ if (teamplay && autocvar_bot_vs_human && (c3==-1 && c4==-1))
bots = min(ceil(fabs(autocvar_bot_vs_human) * activerealplayers), maxclients - realplayers);
else if ((realplayers || autocvar_bot_join_empty || (currentbots > 0 && time < 5)))
{
float c1, c2, c3, c4;
void CheckAllowedTeams(entity for_whom); void GetTeamCounts(entity other);
float JoinBestTeam(entity pl, float only_return_best, float forcebestteam);
+
+void bot_calculate_stepheightvec(void);
#include "role_ctf.qc"
#include "role_onslaught.qc"
#include "role_keyhunt.qc"
+#include "role_freezetag.qc"
+#include "role_keepaway.qc"
+#include "role_assault.qc"
#include "roles.qc"
void havocbot_ai()
local vector now,v,next;//,heading;
local float aimdistance,skillblend,distanceblend,blend;
- next = now = self.goalcurrent.origin - (self.origin + self.view_ofs);
+ next = now = ( (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5) - (self.origin + self.view_ofs);
aimdistance = vlen(now);
//heading = self.velocity;
//dprint(self.goalstack01.classname,etos(self.goalstack01),"\n");
self.goalstack01 != self && self.goalstack01 != world && self.aistatus & AI_STATUS_RUNNING == 0 &&
!(self.goalcurrent.wpflags & WAYPOINTFLAG_TELEPORT)
)
- next = self.goalstack01.origin - (self.origin + self.view_ofs);
+ next = ((self.goalstack01.absmin + self.goalstack01.absmax) * 0.5) - (self.origin + self.view_ofs);
skillblend=bound(0,(skill+self.bot_moveskill-2.5)*0.5,1); //lower skill player can't preturn
distanceblend=bound(0,aimdistance/autocvar_bot_ai_keyboard_distance,1);
local float bunnyhopdistance;
local vector deviation;
local float maxspeed;
+ vector gco, gno;
if(autocvar_g_midair)
return;
// Don't jump when using some weapons
/*
if(self.aistatus & AI_STATUS_ATTACKING)
- if(self.weapon == WEP_SNIPERRIFLE)
+ if(self.weapon == WEP_RIFLE)
return;
if(self.goalcurrent.classname == "player")
self.bot_timelastseengoal = 0;
}
- bunnyhopdistance = vlen(self.origin - self.goalcurrent.origin);
+ gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
+ bunnyhopdistance = vlen(self.origin - gco);
// Run only to visible goals
if(self.flags & FL_ONGROUND)
if(self.aistatus & AI_STATUS_ROAMING)
if(self.goalcurrent.classname=="waypoint")
if not(self.goalcurrent.wpflags & WAYPOINTFLAG_PERSONAL)
- if(fabs(self.goalcurrent.origin_z - self.origin_z) < self.maxs_z - self.mins_z)
+ if(fabs(gco_z - self.origin_z) < self.maxs_z - self.mins_z)
if(self.goalstack01!=world)
{
- deviation = vectoangles(self.goalstack01.origin - self.origin) - vectoangles(self.goalcurrent.origin - self.origin);
+ gno = (self.goalstack01.absmin + self.goalstack01.absmax) * 0.5;
+ deviation = vectoangles(gno - self.origin) - vectoangles(gco - self.origin);
while (deviation_y < -180) deviation_y = deviation_y + 360;
while (deviation_y > 180) deviation_y = deviation_y - 360;
if(fabs(deviation_y) < 20)
- if(bunnyhopdistance < vlen(self.origin - self.goalstack01.origin))
- if(fabs(self.goalstack01.origin_z - self.goalcurrent.origin_z) < self.maxs_z - self.mins_z)
+ if(bunnyhopdistance < vlen(self.origin - gno))
+ if(fabs(gno_z - gco_z) < self.maxs_z - self.mins_z)
{
- if(vlen(self.goalcurrent.origin - self.goalstack01.origin) > autocvar_bot_ai_bunnyhop_startdistance)
+ if(vlen(gco - gno) > autocvar_bot_ai_bunnyhop_startdistance)
if(checkpvs(self.origin + self.view_ofs, self.goalstack01))
{
checkdistance = FALSE;
local vector evadelava;
local float s;
local float maxspeed;
+ local vector gco;
//local float dist;
local vector dodge;
//if (self.goalentity)
float db, v, d;
vector dxy;
- dxy = self.origin - self.goalcurrent.origin; dxy_z = 0;
+ dxy = self.origin - ( ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5 ); dxy_z = 0;
d = vlen(dxy);
v = vlen(self.velocity - self.velocity_z * '0 0 1');
db = (pow(v,2) / (autocvar_g_jetpack_acceleration_side * 2)) + 100;
// Handling of jump pads
if(self.jumppadcount)
{
- // If got stuck on the jump pad try to reach the farthest visible item
+ // If got stuck on the jump pad try to reach the farthest visible waypoint
if(self.aistatus & AI_STATUS_OUT_JUMPPAD)
{
if(fabs(self.velocity_z)<50)
local entity head, newgoal;
local float distance, bestdistance;
- for (head = findchainfloat(bot_pickup, TRUE); head; head = head.chain)
+ for (head = findchain(classname, "waypoint"); head; head = head.chain)
{
- if(head.classname=="worldspawn")
- continue;
distance = vlen(head.origin - self.origin);
if(distance>1000)
continue;
- traceline(self.origin + self.view_ofs , head.origin, TRUE, world);
+ traceline(self.origin + self.view_ofs , ( ( head.absmin + head.absmax ) * 0.5 ), TRUE, world);
if(trace_fraction<1)
continue;
{
if(self.velocity_z>0)
{
- local float threshold;
+ float threshold, sxy;
+ vector velxy = self.velocity; velxy_z = 0;
+ sxy = vlen(velxy);
threshold = maxspeed * 0.2;
- if(fabs(self.velocity_x) < threshold && fabs(self.velocity_y) < threshold)
+ if(sxy < threshold)
{
- dprint("Warning: ", self.netname, " got stuck on a jumppad, trying to get out of it now\n");
+ dprint("Warning: ", self.netname, " got stuck on a jumppad (velocity in xy is ", ftos(sxy), "), trying to get out of it now\n");
self.aistatus |= AI_STATUS_OUT_JUMPPAD;
}
return;
if(self.goalcurrent==world)
dir = v_forward;
else
- dir = normalize(self.goalcurrent.origin - self.origin);
+ dir = normalize(( ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5 ) - self.origin);
local vector xyvelocity = self.velocity; xyvelocity_z = 0;
local float xyspeed = xyvelocity * dir;
return;
}
+
if(autocvar_bot_debug_goalstack)
debuggoalstack();
dir = normalize(diff);
flatdir = diff;flatdir_z = 0;
flatdir = normalize(flatdir);
+ gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
//if (self.bot_dodgevector_time < time)
{
}
else
{
- if(self.velocity_z >= 0 && !(self.watertype == CONTENT_WATER && self.goalcurrent.origin_z < self.origin_z) &&
+ if(self.velocity_z >= 0 && !(self.watertype == CONTENT_WATER && gco_z < self.origin_z) &&
( !(self.waterlevel == WATERLEVEL_WETFEET && self.watertype == CONTENT_WATER) || self.aistatus & AI_STATUS_OUT_WATER))
self.BUTTON_JUMP = TRUE;
else
if (trace_plane_normal_z < 0.7)
{
s = trace_fraction;
- tracebox(self.origin + '0 0 16', self.mins, self.maxs, self.origin + self.velocity * 0.2 + '0 0 16', FALSE, self);
+ tracebox(self.origin + stepheightvec, self.mins, self.maxs, self.origin + self.velocity * 0.2 + stepheightvec, FALSE, self);
if (trace_fraction < s + 0.01)
if (trace_plane_normal_z < 0.7)
{
s = trace_fraction;
- tracebox(self.origin + '0 0 48', self.mins, self.maxs, self.origin + self.velocity * 0.2 + '0 0 48', FALSE, self);
+ tracebox(self.origin + jumpstepheightvec, self.mins, self.maxs, self.origin + self.velocity * 0.2 + jumpstepheightvec, FALSE, self);
if (trace_fraction > s)
self.BUTTON_JUMP = 1;
}
{
// Remove dangerous dynamic goals from stack
if (self.goalcurrent.classname == "player" || self.goalcurrent.classname == "droppedweapon")
+ {
navigation_poproute();
+ if(self.goalcurrent)
+ gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
+ }
// try to stop
flatdir = '0 0 0';
evadeobstacle = normalize(self.velocity) * -1;
dodge = havocbot_dodge();
dodge = dodge * bound(0,0.5+(skill+self.bot_dodgeskill)*0.1,1);
evadelava = evadelava * bound(1,3-(skill+self.bot_dodgeskill),3); //Noobs fear lava a lot and take more distance from it
- traceline(self.origin, self.enemy.origin, TRUE, world);
+ traceline(self.origin, ( ( self.enemy.absmin + self.enemy.absmax ) * 0.5 ), TRUE, world);
if(trace_ent.classname == "player")
dir = dir * bound(0,(skill+self.bot_dodgeskill)/7,1);
void havocbot_chooseenemy()
{
local entity head, best, head2;
- local float rating, bestrating, i, f;
+ local float rating, bestrating, i, hf;
local vector eye, v;
if (autocvar_bot_nofire || IS_INDEPENDENT_PLAYER(self))
{
// and not really really far away
// and we're not severely injured
// then keep tracking for a half second into the future
- traceline(self.origin+self.view_ofs, self.enemy.origin+self.enemy.view_ofs*0.5,FALSE,world);
+ traceline(self.origin+self.view_ofs, ( self.enemy.absmin + self.enemy.absmax ) * 0.5,FALSE,world);
if (trace_ent == self.enemy || trace_fraction == 1)
- if (vlen(self.enemy.origin - self.origin) < 1000)
+ if (vlen((( self.enemy.absmin + self.enemy.absmax ) * 0.5) - self.origin) < 1000)
if (self.health > 30)
{
// remain tracking him for a shot while (case he went after a small corner or pilar
bestrating = 100000000;
head = head2 = findchainfloat(bot_attack, TRUE);
+ // Backup hit flags
+ hf = self.dphitcontentsmask;
+
// Search for enemies, if no enemy can be seen directly try to look through transparent objects
+
+ self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
+
for(;;)
{
while (head)
// I want to do a second scan if no enemy was found or I don't have weapons
// TODO: Perform the scan when using the rifle (requires changes on the rifle code)
- if(best || self.weapons) // || self.weapon == WEP_SNIPERRIFLE
+ if(best || self.weapons) // || self.weapon == WEP_RIFLE
break;
if(i)
break;
// Set flags to see through transparent objects
- f = self.dphitcontentsmask;
- self.dphitcontentsmask = DPCONTENTS_OPAQUE;
+ self.dphitcontentsmask |= DPCONTENTS_OPAQUE;
head = head2;
++i;
}
- // Restore hit flags if needed
- if(i)
- self.dphitcontentsmask = f;
+ // Restore hit flags
+ self.dphitcontentsmask = hf;
self.enemy = best;
self.havocbot_stickenemy = TRUE;
enemyvel = self.enemy.velocity;
if (!self.enemy.waterlevel)
enemyvel_z = 0;
- lag_additem(time + self.ping, 0, 0, self.enemy, self.origin, selfvel, self.enemy.origin, enemyvel);
+ lag_additem(time + self.ping, 0, 0, self.enemy, self.origin, selfvel, (self.enemy.absmin + self.enemy.absmax) * 0.5, enemyvel);
}
else
- lag_additem(time + self.ping, 0, 0, world, self.origin, selfvel, self.goalcurrent.origin, '0 0 0');
+ lag_additem(time + self.ping, 0, 0, world, self.origin, selfvel, ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5, '0 0 0');
};
float havocbot_moveto_refresh_route()
debuggoalstack();
// Heading
- local vector dir = self.goalcurrent.origin - (self.origin + self.view_ofs);
+ local vector dir = ( ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5 ) - (self.origin + self.view_ofs);
dir_z = 0;
bot_aimdir(dir, -1);
--- /dev/null
+#define HAVOCBOT_AST_ROLE_NONE 0
+#define HAVOCBOT_AST_ROLE_DEFENSE 2
+#define HAVOCBOT_AST_ROLE_OFFENSE 4
+
+.float havocbot_role_flags;
+.float havocbot_attack_time;
+
+.void() havocbot_role;
+.void() havocbot_previous_role;
+
+void() havocbot_role_ast_defense;
+void() havocbot_role_ast_offense;
+.entity havocbot_ast_target;
+
+void(entity bot) havocbot_ast_reset_role;
+
+void(float ratingscale, vector org, float sradius) havocbot_goalrating_items;
+void(float ratingscale, vector org, float sradius) havocbot_goalrating_enemyplayers;
+
+void havocbot_goalrating_ast_targets(float ratingscale)
+{
+ entity ad, best, pl, wp, tod;
+ float radius, found, bestvalue, c;
+ vector p;
+
+ ad = findchain(classname, "func_assault_destructible");
+
+ for (; ad; ad = ad.chain)
+ {
+ if (ad.target == "")
+ continue;
+
+ if not(ad.bot_attack)
+ continue;
+
+ found = FALSE;
+ for(tod = world; (tod = find(tod, targetname, ad.target)); )
+ {
+ if(tod.classname == "target_objective_decrease")
+ {
+ if(tod.enemy.health > 0 && tod.enemy.health < ASSAULT_VALUE_INACTIVE)
+ {
+ // dprint(etos(ad),"\n");
+ found = TRUE;
+ break;
+ }
+ }
+ }
+
+ if(!found)
+ {
+ /// dprint("target not found\n");
+ continue;
+ }
+ /// dprint("target #", etos(ad), " found\n");
+
+
+ p = 0.5 * (ad.absmin + ad.absmax);
+ // dprint(vtos(ad.origin), " ", vtos(ad.absmin), " ", vtos(ad.absmax),"\n");
+ // te_knightspike(p);
+ // te_lightning2(world, '0 0 0', p);
+
+ // Find and rate waypoints around it
+ found = FALSE;
+ best = world;
+ bestvalue = 99999999999;
+ for(radius=0; radius<1500 && !found; radius+=500)
+ {
+ for(wp=findradius(p, radius); wp; wp=wp.chain)
+ {
+ if(!(wp.wpflags & WAYPOINTFLAG_GENERATED))
+ if(wp.classname=="waypoint")
+ if(checkpvs(wp.origin, ad))
+ {
+ found = TRUE;
+ if(wp.cnt<bestvalue)
+ {
+ best = wp;
+ bestvalue = wp.cnt;
+ }
+ }
+ }
+ }
+
+ if(best)
+ {
+ /// dprint("waypoints around target were found\n");
+ // te_lightning2(world, '0 0 0', best.origin);
+ // te_knightspike(best.origin);
+
+ navigation_routerating(best, ratingscale, 4000);
+ best.cnt += 1;
+
+ self.havocbot_attack_time = 0;
+
+ if(checkpvs(self.view_ofs,ad))
+ if(checkpvs(self.view_ofs,best))
+ {
+ // dprint("increasing attack time for this target\n");
+ self.havocbot_attack_time = time + 2;
+ }
+ }
+ }
+}
+
+void havocbot_role_ast_offense()
+{
+ if(self.deadflag != DEAD_NO)
+ {
+ self.havocbot_attack_time = 0;
+ havocbot_ast_reset_role(self);
+ return;
+ }
+
+ // Set the role timeout if necessary
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + 120;
+
+ if (time > self.havocbot_role_timeout)
+ {
+ havocbot_ast_reset_role(self);
+ return;
+ }
+
+ if(self.havocbot_attack_time>time)
+ return;
+
+ if (self.bot_strategytime < time)
+ {
+ navigation_goalrating_start();
+ havocbot_goalrating_enemyplayers(20000, self.origin, 650);
+ havocbot_goalrating_ast_targets(20000);
+ havocbot_goalrating_items(15000, self.origin, 10000);
+ navigation_goalrating_end();
+
+ self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
+ }
+};
+
+void havocbot_role_ast_defense()
+{
+ if(self.deadflag != DEAD_NO)
+ {
+ self.havocbot_attack_time = 0;
+ havocbot_ast_reset_role(self);
+ return;
+ }
+
+ // Set the role timeout if necessary
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + 120;
+
+ if (time > self.havocbot_role_timeout)
+ {
+ havocbot_ast_reset_role(self);
+ return;
+ }
+
+ if(self.havocbot_attack_time>time)
+ return;
+
+ if (self.bot_strategytime < time)
+ {
+ navigation_goalrating_start();
+ havocbot_goalrating_enemyplayers(20000, self.origin, 3000);
+ havocbot_goalrating_ast_targets(20000);
+ havocbot_goalrating_items(15000, self.origin, 10000);
+ navigation_goalrating_end();
+
+ self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
+ }
+};
+
+void havocbot_role_ast_setrole(entity bot, float role)
+{
+ switch(role)
+ {
+ case HAVOCBOT_AST_ROLE_DEFENSE:
+ bot.havocbot_role = havocbot_role_ast_defense;
+ bot.havocbot_role_flags = HAVOCBOT_AST_ROLE_DEFENSE;
+ bot.havocbot_role_timeout = 0;
+ break;
+ case HAVOCBOT_AST_ROLE_OFFENSE:
+ bot.havocbot_role = havocbot_role_ast_offense;
+ bot.havocbot_role_flags = HAVOCBOT_AST_ROLE_OFFENSE;
+ bot.havocbot_role_timeout = 0;
+ break;
+ }
+};
+
+void havocbot_ast_reset_role(entity bot)
+{
+ local entity head;
+ local float c;
+
+ if(self.deadflag != DEAD_NO)
+ return;
+
+ if(bot.team==assault_attacker_team)
+ havocbot_role_ast_setrole(bot, HAVOCBOT_AST_ROLE_OFFENSE);
+ else
+ havocbot_role_ast_setrole(bot, HAVOCBOT_AST_ROLE_DEFENSE);
+};
+
+void havocbot_chooserole_ast()
+{
+ havocbot_ast_reset_role(self);
+};
float havocbot_ctf_teamcount(entity bot, vector org, float radius)
{
- if not(teams_matter)
+ if not(teamplay)
return 0;
float c;
if(mf.cnt == FLAG_BASE)
return;
- navigation_routerating(mf, ratingscale, 10000);
+ if(mf.tag_entity)
+ navigation_routerating(mf.tag_entity, ratingscale, 10000);
};
void havocbot_goalrating_ctf_droppedflags(float ratingscale, vector org, float radius)
bot.havocbot_role = havocbot_role_ctf_carrier;
bot.havocbot_role_timeout = 0;
bot.havocbot_cantfindflag = time + 10;
+ bot.bot_strategytime = 0;
break;
case HAVOCBOT_CTF_ROLE_DEFENSE:
dprint("defense");
bot.havocbot_previous_role = bot.havocbot_role;
bot.havocbot_role = havocbot_role_ctf_retriever;
bot.havocbot_role_timeout = time + 10;
+ bot.bot_strategytime = 0;
break;
case HAVOCBOT_CTF_ROLE_ESCORT:
dprint("escort");
bot.havocbot_previous_role = bot.havocbot_role;
bot.havocbot_role = havocbot_role_ctf_escort;
bot.havocbot_role_timeout = time + 30;
+ bot.bot_strategytime = 0;
break;
}
dprint("\n");
--- /dev/null
+void() havocbot_role_ft_freeing;
+void() havocbot_role_ft_offense;
+
+void havocbot_goalrating_freeplayers(float ratingscale, vector org, float sradius)
+{
+ local entity head;
+ float distance;
+
+ FOR_EACH_PLAYER(head)
+ {
+ if ((head != self) && (head.team == self.team))
+ {
+ if (head.freezetag_frozen)
+ {
+ distance = vlen(head.origin - org);
+ if (distance > sradius)
+ continue;
+ navigation_routerating(head, ratingscale, 2000);
+ }
+ else
+ {
+ // If teamate is not frozen still seek them out as fight better
+ // in a group.
+ navigation_routerating(head, ratingscale/3, 2000);
+ }
+ }
+ }
+};
+
+void havocbot_role_ft_offense()
+{
+ local entity head;
+ float unfrozen;
+
+ if(self.deadflag != DEAD_NO)
+ return;
+
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + random() * 10 + 20;
+
+ // Count how many players on team are unfrozen.
+ unfrozen = 0;
+ FOR_EACH_PLAYER(head)
+ {
+ if ((head.team == self.team) && (!head.freezetag_frozen))
+ unfrozen++;
+ }
+
+ // If only one left on team or if role has timed out then start trying to free players.
+ if (((unfrozen == 0) && (!self.freezetag_frozen)) || (time > self.havocbot_role_timeout))
+ {
+ dprint("changing role to freeing\n");
+ self.havocbot_role = havocbot_role_ft_freeing;
+ self.havocbot_role_timeout = 0;
+ return;
+ }
+
+ if (time > self.bot_strategytime)
+ {
+ self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
+
+ navigation_goalrating_start();
+ havocbot_goalrating_items(10000, self.origin, 10000);
+ havocbot_goalrating_enemyplayers(20000, self.origin, 10000);
+ havocbot_goalrating_freeplayers(9000, self.origin, 10000);
+ //havocbot_goalrating_waypoints(1, self.origin, 1000);
+ navigation_goalrating_end();
+ }
+};
+
+void havocbot_role_ft_freeing()
+{
+ if(self.deadflag != DEAD_NO)
+ return;
+
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + random() * 10 + 20;
+
+ if (time > self.havocbot_role_timeout)
+ {
+ dprint("changing role to offense\n");
+ self.havocbot_role = havocbot_role_ft_offense;
+ self.havocbot_role_timeout = 0;
+ return;
+ }
+
+ if (time > self.bot_strategytime)
+ {
+ self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
+
+ navigation_goalrating_start();
+ havocbot_goalrating_items(8000, self.origin, 10000);
+ havocbot_goalrating_enemyplayers(10000, self.origin, 10000);
+ havocbot_goalrating_freeplayers(20000, self.origin, 10000);
+ //havocbot_goalrating_waypoints(1, self.origin, 1000);
+ navigation_goalrating_end();
+ }
+};
+
+void havocbot_chooserole_ft()
+{
+ if(self.deadflag != DEAD_NO)
+ return;
+
+ if (random() < 0.5)
+ self.havocbot_role = havocbot_role_ft_freeing;
+ else
+ self.havocbot_role = havocbot_role_ft_offense;
+};
--- /dev/null
+void() havocbot_role_ka_carrier;
+void() havocbot_role_ka_collector;
+void() havocbot_chooserole_ka;
+
+entity ka_ball;
+
+// Keepaway
+// If you don't have the ball, get it; if you do, kill people.
+
+void havocbot_goalrating_ball(float ratingscale, vector org)
+{
+ local float t;
+ local entity ball_owner;
+ ball_owner = ka_ball.owner;
+
+ if (ball_owner == self)
+ return;
+
+ // If ball is carried by player then hunt them down.
+ if (ball_owner)
+ {
+ t = (self.health + self.armorvalue) / (ball_owner.health + ball_owner.armorvalue);
+ navigation_routerating(ball_owner, t * ratingscale, 2000);
+ }
+
+ // Ball has been dropped so collect.
+ navigation_routerating(ka_ball, ratingscale, 2000);
+};
+
+void havocbot_role_ka_carrier()
+{
+ if (self.deadflag != DEAD_NO)
+ return;
+
+ if (time > self.bot_strategytime)
+ {
+ self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
+
+ navigation_goalrating_start();
+ havocbot_goalrating_items(10000, self.origin, 10000);
+ havocbot_goalrating_enemyplayers(20000, self.origin, 10000);
+ //havocbot_goalrating_waypoints(1, self.origin, 1000);
+ navigation_goalrating_end();
+ }
+
+ if (!self.ballcarried)
+ {
+ self.havocbot_role = havocbot_role_ka_collector;
+ self.bot_strategytime = 0;
+ }
+};
+
+void havocbot_role_ka_collector()
+{
+ if (self.deadflag != DEAD_NO)
+ return;
+
+ if (time > self.bot_strategytime)
+ {
+ self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
+
+ navigation_goalrating_start();
+ havocbot_goalrating_items(10000, self.origin, 10000);
+ havocbot_goalrating_enemyplayers(1000, self.origin, 10000);
+ havocbot_goalrating_ball(20000, self.origin);
+ navigation_goalrating_end();
+ }
+
+ if (self.ballcarried)
+ {
+ self.havocbot_role = havocbot_role_ka_carrier;
+ self.bot_strategytime = 0;
+ }
+};
+
+void havocbot_chooserole_ka()
+{
+ if (self.ballcarried)
+ self.havocbot_role = havocbot_role_ka_carrier;
+ else
+ self.havocbot_role = havocbot_role_ka_collector;
+};
local entity head;
local entity player;
local float rating, d, discard, distance, friend_distance, enemy_distance;
+ vector o;
ratingscale = ratingscale * 0.0001; // items are rated around 10000 already
head = findchainfloat(bot_pickup, TRUE);
while (head)
{
- distance = vlen(head.origin - org);
+ o = (head.absmin + head.absmax) * 0.5;
+ distance = vlen(o - org);
friend_distance = 10000; enemy_distance = 10000;
rating = 0;
// Check if the item can be picked up safely
if(head.classname == "droppedweapon")
{
- traceline(head.origin, head.origin + '0 0 -1500', TRUE, world);
+ traceline(o, o + '0 0 -1500', TRUE, world);
d = pointcontents(trace_endpos + '0 0 1');
if(d & CONTENT_WATER || d & CONTENT_SLIME || d & CONTENT_LAVA)
}
}
- if(teams_matter)
+ if(teamplay)
{
discard = FALSE;
if ( self == player || player.deadflag )
continue;
- d = vlen(player.origin - head.origin); // distance between player and item
+ d = vlen(player.origin - o); // distance between player and item
if ( player.team == self.team )
{
head = findchain(classname, "dom_controlpoint");
while (head)
{
- if (vlen(head.origin - org) < sradius)
+ if (vlen(( ( head.absmin + head.absmax ) * 0.5 ) - org) < sradius)
{
if(head.cnt > -1) // this is just being fought for
navigation_routerating(head, ratingscale, 5000);
{
local entity head;
local float t, noteam, distance;
- noteam = ((self.team == 0) || !teams_matter); // fteqcc sucks
+ noteam = ((self.team == 0) || !teamplay); // fteqcc sucks
if (autocvar_bot_nofire)
return;
if (distance < 100 || distance > sradius)
continue;
+ if (head.freezetag_frozen)
+ continue;
+
if(g_minstagib)
if(head.items & IT_STRENGTH)
continue;
}
};
-// Keepaway
-// If you don't have the ball, get it; if you do, kill people.
-void havocbot_role_ka()
-{
- if(self.deadflag != DEAD_NO)
- return;
-
- if (self.bot_strategytime < time)
- {
- self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
- navigation_goalrating_start();
- havocbot_goalrating_items(10000, self.origin, 10000);
- havocbot_goalrating_enemyplayers(20000, self.origin, 10000);
- //havocbot_goalrating_waypoints(1, self.origin, 1000);
- navigation_goalrating_end();
- }
-}
-
void havocbot_chooserole_dm()
{
self.havocbot_role = havocbot_role_dm;
self.havocbot_role = havocbot_role_dom;
};
-void havocbot_chooserole_ka()
-{
- self.havocbot_role = havocbot_role_ka;
-}
-
void havocbot_chooserole()
{
dprint("choosing a role...\n");
havocbot_chooserole_ons();
else if (g_keepaway)
havocbot_chooserole_ka();
+ else if (g_freezetag)
+ havocbot_chooserole_ft();
+ else if (g_assault)
+ havocbot_chooserole_ast();
else // assume anything else is deathmatch
havocbot_chooserole_dm();
};
// hit something
if (trace_fraction < 1)
{
- // check if we can walk over this obstacle
- tracebox(org + stepheightvec, m1, m2, move + stepheightvec, movemode, e);
+ // check if we can walk over this obstacle, possibly by jumpstepping
+ tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
if (trace_fraction < 1 || trace_startsolid)
{
if(autocvar_bot_debug_tracewalk)
void navigation_routerating(entity e, float f, float rangebias)
{
entity nwp;
+ vector o;
if (!e)
return;
+ if(e.blacklisted)
+ return;
+
+ o = (e.absmin + e.absmax) * 0.5;
+
//print("routerating ", etos(e), " = ", ftos(f), " - ", ftos(rangebias), "\n");
// Evaluate path using jetpack
if(g_jetpack)
if(self.items & IT_JETPACK)
if(autocvar_bot_ai_navigation_jetpack)
- if(vlen(self.origin - e.origin) > autocvar_bot_ai_navigation_jetpack_mindistance)
+ if(vlen(self.origin - o) > autocvar_bot_ai_navigation_jetpack_mindistance)
{
vector pointa, pointb;
pointa = trace_endpos - '0 0 1';
// Point B
- traceline(e.origin, e.origin + '0 0 65535', MOVE_NORMAL, e);
+ traceline(o, o + '0 0 65535', MOVE_NORMAL, e);
pointb = trace_endpos - '0 0 1';
// Can I see these two points from the sky?
}
else
{
+ float search;
+
+ search = TRUE;
+
+ if(e.flags & FL_ITEM)
+ {
+ if not(e.flags & FL_WEAPON)
+ if(e.nearestwaypoint)
+ search = FALSE;
+ }
+ else if (e.flags & FL_WEAPON)
+ {
+ if(e.classname != "droppedweapon")
+ if(e.nearestwaypoint)
+ search = FALSE;
+ }
+
+ if(search)
if (time > e.nearestwaypointtimeout)
{
nwp = navigation_findnearestwaypoint(e, TRUE);
if(nwp)
e.nearestwaypoint = nwp;
else
+ {
dprint("FAILED to find a nearest waypoint to '", e.classname, "' #", etos(e), "\n");
+ if(e.flags & FL_ITEM)
+ e.blacklisted = TRUE;
+ else if (e.flags & FL_WEAPON)
+ {
+ if(e.classname != "droppedweapon")
+ e.blacklisted = TRUE;
+ }
+
+ if(e.blacklisted)
+ {
+ dprint("The entity '", e.classname, "' is going to be excluded from path finding during this match\n");
+ return;
+ }
+ }
+
// TODO: Cleaner solution, probably handling this timeout from ctf.qc
if(e.classname=="item_flag_team")
e.nearestwaypointtimeout = time + 2;
{
//te_wizspike(nwp.wpnearestpoint);
// dprint(e.classname, " ", ftos(f), "/(1+", ftos((nwp.wpcost + vlen(e.origin - nwp.wpnearestpoint))), "/", ftos(rangebias), ") = ");
- f = f * rangebias / (rangebias + (nwp.wpcost + vlen(e.origin - nwp.wpnearestpoint)));
+ f = f * rangebias / (rangebias + (nwp.wpcost + vlen(o - nwp.wpnearestpoint)));
//dprint("considering ", e.classname, " (with rating ", ftos(f), ")\n");
//dprint(ftos(f));
if (navigation_bestrating < f)
return TRUE;
// if it can reach the goal there is nothing more to do
- if (tracewalk(self, startposition, PL_MIN, PL_MAX, e.origin, bot_navigation_movemode))
+ if (tracewalk(self, startposition, PL_MIN, PL_MAX, (e.absmin + e.absmax) * 0.5, bot_navigation_movemode))
return TRUE;
// see if there are waypoints describing a path to the item
}
}
+ // If for some reason the bot is closer to the next goal, pop the current one
+ if(self.goalstack01)
+ if(vlen(self.goalcurrent.origin - self.origin) > vlen(self.goalstack01.origin - self.origin))
+ if(checkpvs(self.origin + self.view_ofs, self.goalstack01))
+ if(tracewalk(self, self.origin, self.mins, self.maxs, (self.goalstack01.absmin + self.goalstack01.absmax) * 0.5, bot_navigation_movemode))
+ {
+ /// dprint("path optimized, removed a goal from the queue\n");
+ navigation_poproute();
+ // TODO this may also be a nice idea to do "early" (e.g. by
+ // manipulating the vlen() comparisons) to shorten paths in
+ // general - this would make bots walk more "on rails" than
+ // "zigzagging" which they currently do with sufficiently
+ // random-like waypoints, and thus can make a nice bot
+ // personality property
+ }
+
+
// Loose goal touching check when running
if(self.aistatus & AI_STATUS_RUNNING)
if(self.goalcurrent.classname=="waypoint")
void botframe_updatedangerousobjects(float maxupdate)
{
local entity head, bot_dodgelist;
- local vector m1, m2, v;
+ local vector m1, m2, v, o;
local float c, d, danger;
c = 0;
bot_dodgelist = findchainfloat(bot_dodge, TRUE);
v_x = bound(m1_x, v_x, m2_x);
v_y = bound(m1_y, v_y, m2_y);
v_z = bound(m1_z, v_z, m2_z);
- d = head.bot_dodgerating - vlen(head.origin - v);
+ o = (head.absmin + head.absmax) * 0.5;
+ d = head.bot_dodgerating - vlen(o - v);
if (d > 0)
{
- traceline(head.origin, v, TRUE, world);
+ traceline(o, v, TRUE, world);
if (trace_fraction == 1)
danger = danger + d;
}
while(head)
{
if(head.classname=="waypoint")
- if(!(head.wpflags & WAYPOINTFLAG_GENERATED))
+ // if(!(head.wpflags & WAYPOINTFLAG_GENERATED))
{
if(bot_waypoint_queue_goal)
bot_waypoint_queue_goal.bot_waypoint_queue_nextgoal = head;
void debuggoalstack()
{
local entity goal;
- local vector org;
+ local vector org, go;
if(self.goalcounter==0)goal=self.goalcurrent;
else if(self.goalcounter==1)goal=self.goalstack01;
org = self.lastposition;
- te_lightning2(world, org, goal.origin);
- self.lastposition = goal.origin;
+ go = ( goal.absmin + goal.absmax ) * 0.5;
+ te_lightning2(world, org, go);
+ self.lastposition = go;
self.goalcounter++;
}
float bot_navigation_movemode;
float navigation_testtracewalk;
+vector jumpstepheightvec;
vector stepheightvec;
entity botframe_dangerwaypoint;
.float navigation_hasgoals;
.float lastteleporttime;
+.float blacklisted;
+
.entity navigation_jetpack_goal;
.vector navigation_jetpack_point;
#define MAX_BOT_PLACES 4
.float bot_places_count;
-.entity bot_places[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_places);
-.string bot_placenames[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_placenames);
+.entity bot_places[MAX_BOT_PLACES];
+.string bot_placenames[MAX_BOT_PLACES];
entity bot_getplace(string placename)
{
entity e;
f = bot_cmd.bot_cmd_parm_string;
precache_sound(f);
- sound(self, CHAN_WEAPON2, f, VOL_BASE, ATTN_MIN);
+ sound(self, CH_WEAPON_B, f, VOL_BASE, ATTN_MIN);
return CMD_STATUS_FINISHED;
}
setsize(w, m1 - w.origin, m2 - w.origin);
if (vlen(w.size) > 0)
w.wpisbox = TRUE;
-
+
if(!w.wpisbox)
{
setsize(w, PL_MIN - '1 1 0', PL_MAX + '1 1 0');
local entity e;
local vector sv, sm1, sm2, ev, em1, em2, dv;
- stepheightvec = autocvar_sv_stepheight * '0 0 1';
+ bot_calculate_stepheightvec();
+
bot_navigation_movemode = ((autocvar_bot_navigation_ignoreplayers) ? MOVE_NOMONSTERS : MOVE_NORMAL);
//dprint("waypoint_think wpisbox = ", ftos(self.wpisbox), "\n");
// Search "from" waypoint
if(wp_from.origin!=wp_from_pos)
{
- wp_from = findradius(wp_from_pos, 1);
+ wp_from = findradius(wp_from_pos, 5);
found = FALSE;
while(wp_from)
{
- if(vlen(wp_from.origin-wp_from_pos)<1)
+ if(vlen(wp_from.origin-wp_from_pos)<5)
if(wp_from.classname == "waypoint")
{
found = TRUE;
}
// Search "to" waypoint
- wp_to = findradius(wp_to_pos, 1);
+ wp_to = findradius(wp_to_pos, 5);
found = FALSE;
while(wp_to)
{
- if(vlen(wp_to.origin-wp_to_pos)<1)
+ if(vlen(wp_to.origin-wp_to_pos)<5)
if(wp_to.classname == "waypoint")
{
found = TRUE;
waypoint_spawnforitem_force(e, e.origin);
};
-void waypoint_spawnforteleporter(entity e, vector destination, float timetaken)
+void waypoint_spawnforteleporter_boxes(entity e, vector org1, vector org2, vector destination1, vector destination2, float timetaken)
{
local entity w;
local entity dw;
- w = waypoint_spawn(e.absmin, e.absmax, WAYPOINTFLAG_GENERATED | WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_NORELINK);
- dw = waypoint_spawn(destination, destination, WAYPOINTFLAG_GENERATED);
+ w = waypoint_spawn(org1, org2, WAYPOINTFLAG_GENERATED | WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_NORELINK);
+ dw = waypoint_spawn(destination1, destination2, WAYPOINTFLAG_GENERATED);
// one way link to the destination
w.wp00 = dw;
w.wp00mincost = timetaken; // this is just for jump pads
e.nearestwaypointtimeout = time + 1000000000;
};
+void waypoint_spawnforteleporter_v(entity e, vector org, vector destination, float timetaken)
+{
+ org = waypoint_fixorigin(org);
+ destination = waypoint_fixorigin(destination);
+ waypoint_spawnforteleporter_boxes(e, org, org, destination, destination, timetaken);
+};
+
+void waypoint_spawnforteleporter(entity e, vector destination, float timetaken)
+{
+ destination = waypoint_fixorigin(destination);
+ waypoint_spawnforteleporter_boxes(e, e.absmin, e.absmax, destination, destination, timetaken);
+};
+
entity waypoint_spawnpersonal(vector position)
{
entity w;
void changelevel (string s) = #70;
void cvar_set (string var, string val) = #72;
-//void(entity client, string s) centerprint = #73;
+void(entity client, string s) centerprint = #73;
void ambientsound (vector pos, string samp, float vol, float atten) = #74;
string precache_model2 (string s) = #75;
string precache_sound2 (string s) = #76;
title = campaign_shortdesc[0];
title = strzone(strcat("Level ", ftos(campaign_level + 1), ": ", title));
- campaign_message = strzone(strcat("\n\n\n\n\n\n\n\n\n\n^1\n", title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game"));
+ campaign_message = strzone(strcat(title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game"));
strunzone(title);
}
e2 = spawn();
setorigin(e2, org);
pointparticles(particleeffectnum("rocket_explode"), org, '0 0 0', 1);
- sound(e2, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(e2, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
RadiusDamage(e2, e, 1000, 0, 128, e, 500, DEATH_CHEAT, world);
remove(e2);
}
// arguments:
// effectname
effectnum = particleeffectnum(argv(1));
- W_SetupShot(self, FALSE, FALSE, "", CHAN_WEAPON, 0);
+ W_SetupShot(self, FALSE, FALSE, "", CH_WEAPON_A, 0);
traceline(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, MOVE_NORMAL, self);
trailparticles(self, effectnum, w_shotorg, trace_endpos);
DID_CHEAT();
// arguments:
// modelname mode
f = stof(argv(2));
- W_SetupShot(self, FALSE, FALSE, "", CHAN_WEAPON, 0);
+ W_SetupShot(self, FALSE, FALSE, "", CH_WEAPON_A, 0);
traceline(w_shotorg, w_shotorg + w_shotdir * 2048, MOVE_NORMAL, self);
if((trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) || trace_fraction == 1)
{
void spawnpoint_use()
{
- if(teams_matter)
+ if(teamplay)
if(have_team_spawns > 0)
{
self.team = activator.team;
void PutObserverInServer (void)
{
entity spot;
-
+ self.hud = HUD_NORMAL;
race_PreSpawnObserver();
spot = SelectSpawnPoint (TRUE);
DropAllRunes(self);
MUTATOR_CALLHOOK(MakePlayerObserver);
+ if (g_minstagib)
+ minstagib_stop_countdown();
+
Portal_ClearAll(self);
if(self.alivetime)
self.alivetime = 0;
}
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELESE);
+
if(self.flagcarried)
DropFlag(self.flagcarried, world, world);
accuracy_resend(self);
self.spectatortime = time;
-
+
self.classname = "observer";
self.iscreature = FALSE;
self.health = -666;
self.takedamage = DAMAGE_NO;
self.solid = SOLID_NOT;
- self.movetype = MOVETYPE_NOCLIP;
+ self.movetype = MOVETYPE_FLY_WORLDONLY; //(self.cvar_cl_clippedspectating ? MOVETYPE_NOCLIP : MOVETYPE_FLY); // it's too early for this anyway, lets just set it in playerprethink
self.flags = FL_CLIENT | FL_NOTARGET;
self.armorvalue = 666;
self.effects = 0;
self.fixangle = TRUE;
self.crouch = FALSE;
- self.view_ofs = PL_VIEW_OFS;
+ self.view_ofs = '0 0 0'; // so that your view doesn't go into the ceiling with MOVETYPE_FLY_WORLDONLY, previously "PL_VIEW_OFS"
setorigin (self, spot.origin);
- setsize (self, '0 0 0', '0 0 0');
+ setsize (self, PL_CROUCH_MIN, PL_CROUCH_MAX); // give the spectator some space between walls for MOVETYPE_FLY_WORLDONLY
self.prevorigin = self.origin;
self.items = 0;
self.weapons = 0;
if(autocvar_sv_defaultcharacter == 1) {
defaultskin = 0;
- if(teams_matter)
+ if(teamplay)
{
string s;
s = Team_ColorNameLowerCase(self.team);
if(chmdl || oldskin != self.skinindex)
self.species = player_getspecies(); // model or skin has changed
- if(!teams_matter)
+ if(!teamplay)
if(strlen(autocvar_sv_defaultplayercolors))
if(self.clientcolors != stof(autocvar_sv_defaultplayercolors))
setcolor(self, stof(autocvar_sv_defaultplayercolors));
self.oldorigin = self.origin;
self.prevorigin = self.origin;
self.lastrocket = world; // stop rocket guiding, no revenge from the grave!
+ self.lastteleporttime = time; // prevent insane speeds due to changing origin
if(g_arena)
{
//stuffcmd(self, "set viewsize $tmpviewsize \n");
if (autocvar_g_spawnsound)
- sound (self, CHAN_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
if(g_assault) {
if(self.team == assault_attacker_team)
if(e.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars
self.weapon_load[j] = cvar(strcat("g_balance_", e.netname, "_reload_ammo"));
}
- self.weapon_forbidchange = FALSE;
oldself = self;
self = spot;
activator = oldself;
+ string s;
+ s = self.target;
+ self.target = string_null;
SUB_UseTargets();
+ self.target = s;
activator = world;
self = oldself;
WriteCoord(MSG_ENTITY, self.ebouncefactor); // g_balance_grenadelauncher_bouncefactor
WriteCoord(MSG_ENTITY, self.ebouncestop); // g_balance_grenadelauncher_bouncestop
WriteByte(MSG_ENTITY, autocvar_g_balance_nex_secondary); // client has to know if it should zoom or not
- WriteByte(MSG_ENTITY, autocvar_g_balance_sniperrifle_secondary); // client has to know if it should zoom or not
+ WriteByte(MSG_ENTITY, autocvar_g_balance_rifle_secondary); // client has to know if it should zoom or not
WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not
WriteByte(MSG_ENTITY, autocvar_g_balance_minelayer_limit); // minelayer max mines
WriteByte(MSG_ENTITY, autocvar_g_balance_hagar_secondary_load_max); // hagar max loadable rockets
void ClientKill_Now()
{
- remove(self.killindicator);
+ if(self.vehicle)
+ {
+ vehicles_exit(VHEF_RELESE);
+ if(!self.killindicator_teamchange)
+ {
+ self.vehicle_health = -1;
+ Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0');
+ }
+ }
+
+ if(self.killindicator && !wasfreed(self.killindicator))
+ remove(self.killindicator);
+
self.killindicator = world;
if(self.killindicator_teamchange)
}
void KillIndicator_Think()
{
+ if (gameover)
+ {
+ self.owner.killindicator = world;
+ remove(self);
+ return;
+ }
+
if (!self.owner.modelindex)
{
self.owner.killindicator = world;
{
if(self.cnt <= 10)
AnnounceTo(self.owner, strcat(ftos(self.cnt), ""));
- if(self.owner.killindicator_teamchange)
- {
- if(self.owner.killindicator_teamchange == -1)
- centerprint(self.owner, strcat("Changing team in ", ftos(self.cnt), " seconds"));
- else if(self.owner.killindicator_teamchange == -2)
- centerprint(self.owner, strcat("Spectating in ", ftos(self.cnt), " seconds"));
- else
- centerprint(self.owner, strcat("Changing to ", ColoredTeamName(self.owner.killindicator_teamchange), " in ", ftos(self.cnt), " seconds"));
- }
- else
- centerprint(self.owner, strcat("^1Suicide in ", ftos(self.cnt), " seconds"));
}
self.nextthink = time + 1;
self.cnt -= 1;
{
float killtime;
entity e;
+
+ if (gameover)
+ return;
+
killtime = autocvar_g_balance_kill_delay;
if(g_race_qualifying || g_cts)
if(self.killindicator)
{
if(targetteam == 0) // just die
+ {
self.killindicator.colormod = '0 0 0';
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "^1Suicide in %d seconds", 1, self.killindicator.cnt);
+ }
else if(targetteam == -1) // auto
+ {
self.killindicator.colormod = '0 1 0';
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Changing team in %d seconds", 1, self.killindicator.cnt);
+ }
else if(targetteam == -2) // spectate
+ {
self.killindicator.colormod = '0.5 0.5 0.5';
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Spectating in %d seconds", 1, self.killindicator.cnt);
+ }
else
+ {
self.killindicator.colormod = TeamColor(targetteam);
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, strcat("Changing to ", ColoredTeamName(targetteam), " in %d seconds"), 1, self.killindicator.cnt);
+ }
}
+
}
void ClientKill (void)
{
+ if (gameover)
+ return;
+
if((g_arena || g_ca) && ((champion && champion.classname == "player" && player_count > 1) || player_count == 1)) // don't allow a kill in this case either
{
// do nothing
e.lip = 0;
}
-void DoTeamChange(float destteam)
-{
- float t, c0;
- if(!teams_matter)
- {
- if(destteam >= 0)
- SetPlayerColors(self, destteam);
- return;
- }
- if(self.classname == "player")
- if(destteam == -1)
- {
- CheckAllowedTeams(self);
- t = FindSmallestTeam(self, TRUE);
- switch(self.team)
- {
- case COLOR_TEAM1: c0 = c1; break;
- case COLOR_TEAM2: c0 = c2; break;
- case COLOR_TEAM3: c0 = c3; break;
- case COLOR_TEAM4: c0 = c4; break;
- default: c0 = 999;
- }
- switch(t)
- {
- case 1:
- if(c0 > c1)
- destteam = COLOR_TEAM1;
- break;
- case 2:
- if(c0 > c2)
- destteam = COLOR_TEAM2;
- break;
- case 3:
- if(c0 > c3)
- destteam = COLOR_TEAM3;
- break;
- case 4:
- if(c0 > c4)
- destteam = COLOR_TEAM4;
- break;
- }
- if(destteam == -1)
- return;
- }
- if(destteam == self.team && destteam >= 0 && !self.killindicator)
- return;
- ClientKill_TeamChange(destteam);
-}
-
void FixClientCvars(entity e)
{
// send prediction settings to the client
playerdemo_init();
anticheat_init();
-
+
race_PreSpawnObserver();
//if(g_domination)
else
self.team_forced = 0;
- if(!teams_matter)
+ if(!teamplay)
if(self.team_forced > 0)
self.team_forced = 0;
if((autocvar_sv_spectate == 1 && !g_lms) || autocvar_g_campaign || self.team_forced < 0) {
self.classname = "observer";
} else {
- if(teams_matter)
+ if(teamplay)
{
if(autocvar_g_balance_teams || autocvar_g_balance_teams_force)
{
self.playerid = (playerid_last = playerid_last + 1);
+ PlayerStats_AddEvent(sprintf("kills-%d", self.playerid));
+
+ if(clienttype(self) == CLIENTTYPE_BOT)
+ PlayerStats_AddPlayer(self);
+
if(autocvar_sv_eventlog)
GameLogEcho(strcat(":join:", ftos(self.playerid), ":", ftos(num_for_edict(self)), ":", ((clienttype(self) == CLIENTTYPE_REAL) ? self.netaddress : "bot"), ":", self.netname));
bprint("\n");
- self.welcomemessage_time = 0;
-
stuffcmd(self, strcat(clientstuff, "\n"));
stuffcmd(self, strcat("exec maps/", mapname, ".cfg\n"));
stuffcmd(self, "cl_particles_reloadeffects\n");
GetCvars(0);
// notify about available teams
- if(teams_matter)
+ if(teamplay)
{
CheckAllowedTeams(self);
t = 0; if(c1 >= 0) t |= 1; if(c2 >= 0) t |= 2; if(c3 >= 0) t |= 4; if(c4 >= 0) t |= 8;
set_dom_state(self);
CheatInitClient();
+
+ if(!autocvar_g_campaign)
+ Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), autocvar_welcome_message_time, 0);
}
/*
void ReadyCount();
void ClientDisconnect (void)
{
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELESE);
+
if not(self.flags & FL_CLIENT)
{
print("Warning: ClientDisconnect without ClientConnect\n");
local float c;
c = self.clientcolors & 15;
// LordHavoc: only bothering to support white, green, red, yellow, blue
- if (!teams_matter) self.colormod = '0 0 0';
+ if (!teamplay) self.colormod = '0 0 0';
else if (c == 0) self.colormod = '1.00 1.00 1.00';
else if (c == 3) self.colormod = '0.10 1.73 0.10';
else if (c == 4) self.colormod = '1.73 0.10 0.10';
if(clienttype(self) == CLIENTTYPE_REAL)
if(floor(finished - time - frametime) != floor(finished - time))
if(finished - time < 6)
- sound (self, CHAN_AUTO, samp, VOL_BASE, ATTN_NORM);
-}
-
-/**
- * When sv_timeout is used this function returs strings like
- * "Timeout begins in 2 seconds!\n" or "Timeout ends in 23 seconds!\n".
- * Called by centerprint functions
- * @param addOneSecond boolean, set to 1 if the welcome-message centerprint asks for the text
- */
-string getTimeoutText(float addOneSecond) {
- if (!autocvar_sv_timeout || !timeoutStatus)
- return "";
-
- local string retStr;
- if (timeoutStatus == 1) {
- if (addOneSecond == 1) {
- retStr = strcat("Timeout begins in ", ftos(remainingLeadTime + 1), " seconds!\n");
- }
- else {
- retStr = strcat("Timeout begins in ", ftos(remainingLeadTime), " seconds!\n");
- }
- return retStr;
- }
- else if (timeoutStatus == 2) {
- if (addOneSecond) {
- retStr = strcat("Timeout ends in ", ftos(remainingTimeoutTime + 1), " seconds!\n");
- //don't show messages like "Timeout ends in 0 seconds"...
- if ((remainingTimeoutTime + 1) > 0)
- return retStr;
- else
- return "";
- }
- else {
- retStr = strcat("Timeout ends in ", ftos(remainingTimeoutTime), " seconds!\n");
- //don't show messages like "Timeout ends in 0 seconds"...
- if (remainingTimeoutTime > 0)
- return retStr;
- else
- return "";
- }
- }
- else return "";
+ sound (self, CH_INFO, samp, VOL_BASE, ATTN_NORM);
}
void player_powerups (void)
{
// add a way to see what the items were BEFORE all of these checks for the mutator hook
olditems = self.items;
-
+
if((self.items & IT_USING_JETPACK) && !self.deadflag)
{
- SoundEntity_StartSound(self, CHAN_PLAYER, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
+ SoundEntity_StartSound(self, CH_TRIGGER_SINGLE, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
self.modelflags |= MF_ROCKET;
}
else
{
- SoundEntity_StopSound(self, CHAN_PLAYER);
+ SoundEntity_StopSound(self, CH_TRIGGER_SINGLE);
self.modelflags &~= MF_ROCKET;
}
if(!self.modelindex || self.deadflag) // don't apply the flags if the player is gibbed
return;
-
+
Fire_ApplyDamage(self);
Fire_ApplyEffect(self);
if (time < self.spawnshieldtime)
self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT);
}
-
+
MUTATOR_CALLHOOK(PlayerPowerups);
}
self.dmg_save = spectatee.dmg_save;
self.dmg_inflictor = spectatee.dmg_inflictor;
self.angles = spectatee.v_angle;
- self.fixangle = TRUE;
+ if(!self.BUTTON_USE)
+ self.fixangle = TRUE;
setorigin(self, spectatee.origin);
setsize(self, spectatee.mins, spectatee.maxs);
SetZoomState(spectatee.zoomstate);
anticheat_spectatecopy(spectatee);
+
+ //self.vehicle = spectatee.vehicle;
+
+ self.hud = spectatee.hud;
+ if(spectatee.vehicle)
+ {
+ setorigin(self, spectatee.origin);
+ self.velocity = spectatee.vehicle.velocity;
+ self.v_angle += spectatee.vehicle.angles;
+ //self.v_angle_x *= -1;
+ self.vehicle_health = spectatee.vehicle_health;
+ self.vehicle_shield = spectatee.vehicle_shield;
+ self.vehicle_energy = spectatee.vehicle_energy;
+ self.vehicle_ammo1 = spectatee.vehicle_ammo1;
+ self.vehicle_ammo2 = spectatee.vehicle_ammo2;
+ self.vehicle_reload1 = spectatee.vehicle_reload1;
+ self.vehicle_reload2 = spectatee.vehicle_reload2;
+
+ msg_entity = self;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, spectatee);
+ //self.tur_head = spectatee.vehicle.vehicle_viewport;
+ }
}
float SpectateUpdate() {
if(!self.enemy)
- return 0;
+ return 0;
if (self == self.enemy)
return 0;
self.enemy = other;
if(self.enemy.classname == "player") {
- msg_entity = self;
- WriteByte(MSG_ONE, SVC_SETVIEW);
- WriteEntity(MSG_ONE, self.enemy);
- //stuffcmd(self, "set viewsize $tmpviewsize \n");
- self.movetype = MOVETYPE_NONE;
- accuracy_resend(self);
-
- if(!SpectateUpdate())
- PutObserverInServer();
-
- return 1;
+ if(self.enemy.vehicle)
+ {
+ msg_entity = self;
+ WriteByte(MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, self.enemy);
+ //stuffcmd(self, "set viewsize $tmpviewsize \n");
+ self.movetype = MOVETYPE_NONE;
+ accuracy_resend(self);
+ }
+ else
+ {
+ msg_entity = self;
+ WriteByte(MSG_ONE, SVC_SETVIEW);
+ WriteEntity(MSG_ONE, self.enemy);
+ //stuffcmd(self, "set viewsize $tmpviewsize \n");
+ self.movetype = MOVETYPE_NONE;
+ accuracy_resend(self);
+
+ if(!SpectateUpdate())
+ PutObserverInServer();
+ }
+ return 1;
} else {
return 0;
}
void LeaveSpectatorMode()
{
if(nJoinAllowed(1)) {
- if(!teams_matter || autocvar_g_campaign || autocvar_g_balance_teams || (self.wasplayer && autocvar_g_changeteam_banned) || self.team_forced > 0) {
+ if(!teamplay || autocvar_g_campaign || autocvar_g_balance_teams || (self.wasplayer && autocvar_g_changeteam_banned) || self.team_forced > 0) {
self.classname = "player";
if(autocvar_g_campaign || autocvar_g_balance_teams || autocvar_g_balance_teams_force)
bprint ("^4", self.netname, "^4 is playing now\n");
if(!autocvar_g_campaign)
- centerprint(self,""); // clear MOTD
+ if (time < self.jointime + autocvar_welcome_message_time)
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD); // clear MOTD
return;
} else {
}
else {
//player may not join because of g_maxplayers is set
- centerprint_atprio(self, CENTERPRIO_MAPVOTE, PREVENT_JOIN_TEXT);
+ centerprint(self, PREVENT_JOIN_TEXT);
}
}
void ObserverThink()
{
+ float prefered_movetype;
if (self.flags & FL_JUMPRELEASED) {
if (self.BUTTON_JUMP && !self.version_mismatch) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
self.flags |= FL_SPAWNING;
} else if(self.BUTTON_ATCK && !self.version_mismatch) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
if(SpectateNext() == 1) {
self.classname = "spectator";
}
+ } else {
+ prefered_movetype = ((!self.BUTTON_USE ? self.cvar_cl_clippedspectating : !self.cvar_cl_clippedspectating) ? MOVETYPE_FLY_WORLDONLY : MOVETYPE_NOCLIP);
+ if (self.movetype != prefered_movetype)
+ self.movetype = prefered_movetype;
}
} else {
if (!(self.BUTTON_ATCK || self.BUTTON_JUMP)) {
}
}
}
- PrintWelcomeMessage(self);
}
void SpectatorThink()
{
if (self.flags & FL_JUMPRELEASED) {
if (self.BUTTON_JUMP && !self.version_mismatch) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
self.flags |= FL_SPAWNING;
} else if(self.BUTTON_ATCK) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
if(SpectateNext() == 1) {
self.classname = "spectator";
PutClientInServer();
}
} else if (self.BUTTON_ATCK2) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
self.classname = "observer";
PutClientInServer();
return;
}
}
+ if(!SpectateUpdate())
+ PutObserverInServer();
}
- PrintWelcomeMessage(self);
self.flags |= FL_CLIENT | FL_NOTARGET;
}
+float ctf_usekey();
+void PlayerUseKey()
+{
+ if(self.classname != "player")
+ return;
+
+ if(self.vehicle)
+ {
+ vehicles_exit(VHEF_NORMAL);
+ return;
+ }
+
+ // a use key was pressed; call handlers
+ if(ctf_usekey())
+ return;
+
+ MUTATOR_CALLHOOK(PlayerUseKey);
+}
+
.float touchexplode_time;
/*
Called every frame for each client before the physics are run
=============
*/
+.float usekeypressed;
void() ctf_setstatus;
void() nexball_setstatus;
.float items_added;
+.float motd_actived_time; // used for both motd and campaign_message
void PlayerPreThink (void)
{
WarpZone_PlayerPhysics_FixVAngle();
MUTATOR_CALLHOOK(PlayerPreThink);
+ if(self.BUTTON_USE && !self.usekeypressed)
+ PlayerUseKey();
+ self.usekeypressed = self.BUTTON_USE;
+
+ if (self.motd_actived_time == 0) {
+ if (autocvar_g_campaign) {
+ if (self.classname == "player" && self.BUTTON_INFO) {
+ self.motd_actived_time = time;
+ Send_CSQC_Centerprint_Generic(self, CPID_MOTD, campaign_message, -1, 0);
+ }
+ } else {
+ if ((self.classname == "player" || time - self.jointime > autocvar_welcome_message_time) && self.BUTTON_INFO) {
+ self.motd_actived_time = time;
+ Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), -1, 0);
+ }
+ }
+ } else { // showing MOTD or campaign message
+ if (autocvar_g_campaign) {
+ if (self.classname == "player") {
+ if (self.BUTTON_INFO)
+ self.motd_actived_time = time;
+ else if (time - self.motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released
+ self.motd_actived_time = 0;
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD);
+ }
+ }
+ } else {
+ if (self.classname == "player" || (time - self.jointime) > autocvar_welcome_message_time) {
+ if (self.BUTTON_INFO)
+ self.motd_actived_time = time;
+ else if (time - self.motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released
+ self.motd_actived_time = 0;
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD);
+ }
+ }
+ }
+ }
+
if(self.classname == "player") {
// if(self.netname == "Wazat")
// bprint(self.classname, "\n");
CheckRules_Player();
- PrintWelcomeMessage(self);
-
if (intermission_running)
{
IntermissionThink (); // otherwise a button could be missed between
//don't allow the player to turn around while game is paused!
if(timeoutStatus == 2) {
+ // FIXME turn this into CSQC stuff
self.v_angle = self.lastV_angle;
self.angles = self.lastV_angle;
self.fixangle = TRUE;
player_powerups();
}
+ if (g_minstagib)
+ minstagib_ammocheck();
+
if (self.deadflag != DEAD_NO)
{
float button_pressed, force_respawn;
}
return;
}
+ // FIXME from now on self.deadflag is always 0 (and self.health is never < 1)
+ // so (self.deadflag == DEAD_NO) is always true in the code below
if(g_touchexplode)
if(time > self.touchexplode_time)
if(frametime)
player_anim();
- if (g_minstagib)
- minstagib_ammocheck();
-
if(g_ctf)
ctf_setstatus();
}
if(!zoomstate_set)
- SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_SNIPERRIFLE && autocvar_g_balance_sniperrifle_secondary == 0));
+ SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_RIFLE && autocvar_g_balance_rifle_secondary == 0));
float oldspectatee_status;
oldspectatee_status = self.spectatee_status;
oldself = self; self = self.teamkill_soundsource;
oldpusher = self.pusher; self.pusher = oldself;
- PlayerSound(playersound_teamshoot, CHAN_VOICE, VOICETYPE_LASTATTACKER_ONLY);
+ PlayerSound(playersound_teamshoot, CH_VOICE, VOICETYPE_LASTATTACKER_ONLY);
self.pusher = oldpusher;
self = oldself;
if(time > self.taunt_soundtime)
{
self.taunt_soundtime = 0;
- PlayerSound(playersound_taunt, CHAN_VOICE, VOICETYPE_AUTOTAUNT);
+ PlayerSound(playersound_taunt, CH_VOICE, VOICETYPE_AUTOTAUNT);
}
target_voicescript_next(self);
{
// WORKAROUND: only use dropclient in server frames (frametime set). Never use it in cl_movement frames (frametime zero).
float timeleft;
+ if (time - self.parm_idlesince < 1) // instead of (time == self.parm_idlesince) to support sv_maxidle <= 10
+ {
+ if(self.idlekick_lasttimeleft)
+ {
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_DISCONNECT_IDLING);
+ self.idlekick_lasttimeleft = 0;
+ }
+ return;
+ }
timeleft = ceil(sv_maxidle - (time - self.parm_idlesince));
+ if(timeleft == min(10, sv_maxidle - 1)) // - 1 to support sv_maxidle <= 10
+ {
+ if(!self.idlekick_lasttimeleft)
+ Send_CSQC_Centerprint_Generic(self, CPID_DISCONNECT_IDLING, "^3Stop idling!\n^3Disconnecting in %d seconds...", 1, timeleft);
+ }
if(timeleft <= 0)
{
bprint("^3", self.netname, "^3 was kicked for idling.\n");
else if(timeleft <= 10)
{
if(timeleft != self.idlekick_lasttimeleft)
- {
- centerprint_atprio(self, CENTERPRIO_IDLEKICK, strcat("^3Stop idling!\n^3Disconnecting in ", ftos(timeleft), "..."));
- AnnounceTo(self, strcat(ftos(timeleft), ""));
- }
- }
- else
- {
- centerprint_expire(self, CENTERPRIO_IDLEKICK);
+ AnnounceTo(self, ftos(timeleft));
+ self.idlekick_lasttimeleft = timeleft;
}
- self.idlekick_lasttimeleft = timeleft;
}
#ifdef TETRIS
} else if (self.classname == "spectator") {
//do nothing
}
-
+
/*
float i;
for(i = 0; i < 1000; ++i)
if(self.waypointsprite_attachedforcarrier)
WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
-
+
if(self.classname == "player" && self.deadflag == DEAD_NO && autocvar_r_showbboxes)
{
if(!self.showheadshotbbox)
else
{
if(self.showheadshotbbox)
- remove(self.showheadshotbbox);
+ if(self.showheadshotbbox && !wasfreed(self.showheadshotbbox))
+ remove(self.showheadshotbbox);
}
playerdemo_write();
else
self.impulse = imp; // retry in next frame
}
+ else if(imp == 21)
+ {
+ PlayerUseKey ();
+ }
else if(imp >= 200 && imp <= 229)
{
if(self.deadflag == DEAD_NO)
switch(imp)
{
case 30:
- wp = WaypointSprite_DeployPersonal("waypoint", self.origin);
+ wp = WaypointSprite_DeployPersonal("waypoint", self.origin, RADARICON_WAYPOINT, '0 1 1');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_WAYPOINT, '0 1 1');
WaypointSprite_Ping(wp);
- }
sprint(self, "personal waypoint spawned at location\n");
break;
case 31:
WarpZone_crosshair_trace(self);
- wp = WaypointSprite_DeployPersonal("waypoint", trace_endpos);
+ wp = WaypointSprite_DeployPersonal("waypoint", trace_endpos, RADARICON_WAYPOINT, '0 1 1');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_WAYPOINT, '0 1 1');
WaypointSprite_Ping(wp);
- }
sprint(self, "personal waypoint spawned at crosshair\n");
break;
case 32:
if(vlen(self.death_origin))
{
- wp = WaypointSprite_DeployPersonal("waypoint", self.death_origin);
+ wp = WaypointSprite_DeployPersonal("waypoint", self.death_origin, RADARICON_WAYPOINT, '0 1 1');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_WAYPOINT, '0 1 1');
WaypointSprite_Ping(wp);
- }
sprint(self, "personal waypoint spawned at death location\n");
}
break;
case 33:
- if(self.deadflag == DEAD_NO && teams_matter)
+ if(self.deadflag == DEAD_NO && teamplay)
{
- wp = WaypointSprite_Attach("helpme", TRUE);
- if(wp)
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_HELPME, '1 0.5 0'); // TODO choose better color
+ wp = WaypointSprite_Attach("helpme", TRUE, RADARICON_HELPME, '1 0.5 0');
if(!wp)
- wp = self.waypointsprite_attachedforcarrier; // flag sprite?
- if(wp)
+ WaypointSprite_HelpMePing(self.waypointsprite_attachedforcarrier);
+ else
WaypointSprite_Ping(wp);
sprint(self, "HELP ME attached\n");
}
break;
case 34:
- wp = WaypointSprite_DeployFixed("here", FALSE, self.origin);
+ wp = WaypointSprite_DeployFixed("here", FALSE, self.origin, RADARICON_HERE, '0 1 0');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_HERE, '0 1 0');
WaypointSprite_Ping(wp);
- }
sprint(self, "HERE spawned at location\n");
break;
case 35:
WarpZone_crosshair_trace(self);
- wp = WaypointSprite_DeployFixed("here", FALSE, trace_endpos);
+ wp = WaypointSprite_DeployFixed("here", FALSE, trace_endpos, RADARICON_HERE, '0 1 0');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_HERE, '0 1 0');
WaypointSprite_Ping(wp);
- }
sprint(self, "HERE spawned at crosshair\n");
break;
case 36:
if(vlen(self.death_origin))
{
- wp = WaypointSprite_DeployFixed("here", FALSE, self.death_origin);
+ wp = WaypointSprite_DeployFixed("here", FALSE, self.death_origin, RADARICON_HERE, '0 1 0');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_HERE, '0 1 0');
WaypointSprite_Ping(wp);
- }
sprint(self, "HERE spawned at death location\n");
}
break;
case 37:
- wp = WaypointSprite_DeployFixed("danger", FALSE, self.origin);
+ wp = WaypointSprite_DeployFixed("danger", FALSE, self.origin, RADARICON_DANGER, '1 0.5 0');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_DANGER, '1 0.5 0');
WaypointSprite_Ping(wp);
- }
sprint(self, "DANGER spawned at location\n");
break;
case 38:
WarpZone_crosshair_trace(self);
- wp = WaypointSprite_DeployFixed("danger", FALSE, trace_endpos);
+ wp = WaypointSprite_DeployFixed("danger", FALSE, trace_endpos, RADARICON_DANGER, '1 0.5 0');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_DANGER, '1 0.5 0');
WaypointSprite_Ping(wp);
- }
sprint(self, "DANGER spawned at crosshair\n");
break;
case 39:
if(vlen(self.death_origin))
{
- wp = WaypointSprite_DeployFixed("danger", FALSE, self.death_origin);
+ wp = WaypointSprite_DeployFixed("danger", FALSE, self.death_origin, RADARICON_DANGER, '1 0.5 0');
if(wp)
- {
- WaypointSprite_UpdateTeamRadar(wp, RADARICON_DANGER, '1 0.5 0');
WaypointSprite_Ping(wp);
- }
sprint(self, "DANGER spawned at death location\n");
}
break;
case 107:
for(e = findchain(classname, "waypoint"); e; e = e.chain)
{
- e.colormod_x = 1;
+ e.colormod = '0.5 0.5 0.5';
e.effects &~= EF_NODEPTHTEST | EF_RED | EF_BLUE;
}
e2 = navigation_findnearestwaypoint(self, FALSE);
if(e.wpcost >= 10000000)
{
print("unreachable: ", etos(e), " ", vtos(e.origin), "\n");
- e.colormod_x = 0.1;
+ e.colormod_z = 8;
e.effects |= EF_NODEPTHTEST | EF_BLUE;
++i;
++m;
if(e.wpcost >= 10000000)
{
print("cannot reach me: ", etos(e), " ", vtos(e.origin), "\n");
- e.colormod_x = 0.1;
+ e.colormod_x = 8;
if not(e.effects & EF_NODEPTHTEST) // not already reported before
++m;
e.effects |= EF_NODEPTHTEST | EF_RED;
setmodel(e, self.model);
e.frame = self.frame;
e.skin = self.skin;
+ e.colormod = '8 0.5 8';
setsize(e, '0 0 0', '0 0 0');
++i;
}
}
if(i)
print(ftos(i), " spawnpoints have no nearest waypoint (marked by player model)\n");
+ i = 0;
+ entity start;
+ start = findchainflags(flags, FL_ITEM);
+ for(e = start; e; e = e.chain)
+ {
+ e.effects &~= EF_NODEPTHTEST | EF_RED | EF_BLUE;
+ e.colormod = '0.5 0.5 0.5';
+ }
+ for(e = start; e; e = e.chain)
+ {
+ if(navigation_findnearestwaypoint(e, FALSE))
+ {
+ }
+ else
+ {
+ print("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n");
+ e.effects |= EF_NODEPTHTEST | EF_RED;
+ e.colormod_x = 8;
+ ++i;
+ }
+ }
+ if(i)
+ print(ftos(i), " items have no nearest waypoint and cannot be walked away from (marked with red light)\n");
+ i = 0;
+ for(e = start; e; e = e.chain)
+ {
+ org = e.origin;
+ if(navigation_findnearestwaypoint(e, TRUE))
+ {
+ }
+ else
+ {
+ print("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n");
+ e.effects |= EF_NODEPTHTEST | EF_BLUE;
+ e.colormod_z = 8;
+ ++i;
+ }
+ }
+ if(i)
+ print(ftos(i), " items have no nearest waypoint and cannot be walked to (marked with blue light)\n");
break;
}
}
setanim(self, self.anim_jump, FALSE, TRUE, TRUE);
if(g_jump_grunt)
- PlayerSound(playersound_jump, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_jump, CH_PLAYER, VOICETYPE_PLAYERSOUND);
self.restart_jump = -1; // restart jump anim next time
// value -1 is used to not use the teleport bit (workaround for tiny hitch when re-jumping)
self.angles_x = random() * 360;
self.angles_y = random() * 360;
// at least I'm not forcing retardedview by also assigning to angles_z
- self.fixangle = 1;
+ self.fixangle = TRUE;
}
}
}
if(self.flags & FL_ONGROUND)
+ if(self.classname == "player") // no fall sounds for observers thank you very much
if(self.wasFlying)
{
self.wasFlying = 0;
if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)
{
if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS)
- GlobalSound(globalsound_metalfall, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ GlobalSound(globalsound_metalfall, CH_PLAYER, VOICETYPE_PLAYERSOUND);
else
- GlobalSound(globalsound_fall, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ GlobalSound(globalsound_fall, CH_PLAYER, VOICETYPE_PLAYERSOUND);
}
}
}
{
RaceCarPhysics();
}
- else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY)
+ else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY)
{
// noclipping or flying
self.flags &~= FL_ONGROUND;
+.entity accuracy;
+.float accuracy_frags[WEP_MAXCOUNT];
+
float weaponstats_buffer;
void WeaponStats_Init()
#define WEAPONSTATS_GETINDEX(awep,abot,vwep,vbot) (((vwep) + (awep) * (WEP_LAST - WEP_FIRST + 1) - (WEP_FIRST + WEP_FIRST * (WEP_LAST - WEP_FIRST + 1))) * 4 + (abot) * 2 + (vbot))
-void WeaponStats_Shutdown()
+void WeaponStats_ready(entity fh, entity pass, float status)
{
- float i, j, ibot, jbot, idx;
- float fh;
+ float i, j, n, ibot, jbot, idx;
vector v;
- string prefix;
- if(weaponstats_buffer < 0)
- return;
- prefix = strcat(autocvar_hostname, "\t", GetGametype(), "_", GetMapname(), "\t");
- if(autocvar_sv_weaponstats_file != "")
+ string prefix, s;
+ switch(status)
{
- fh = fopen(autocvar_sv_weaponstats_file, FILE_APPEND);
- if(fh >= 0)
- {
- fputs(fh, "#begin statsfile\n");
- fputs(fh, strcat("#date ", strftime(TRUE, "%a %b %e %H:%M:%S %Z %Y"), "\n"));
- fputs(fh, strcat("#config ", ftos(crc16(FALSE, cvar_changes)), "\n"));
+ case URL_READY_CANWRITE:
+ // url_fopen returned, we can write
+ prefix = strcat(autocvar_hostname, "\t", GetGametype(), "_", GetMapname(), "\t");
+ url_fputs(fh, "#begin statsfile\n");
+ url_fputs(fh, strcat("#date ", strftime(TRUE, "%a %b %e %H:%M:%S %Z %Y"), "\n"));
+ url_fputs(fh, strcat("#config ", ftos(crc16(FALSE, cvar_purechanges)), "\n"));
+ url_fputs(fh, strcat("#cvar_purechanges ", ftos(cvar_purechanges_count), "\n"));
+ n = tokenizebyseparator(cvar_purechanges, "\n");
+ for(i = 0; i < n; ++i)
+ url_fputs(fh, strcat("#cvar_purechange ", argv(i), "\n"));
for(i = WEP_FIRST; i <= WEP_LAST; ++i) for(ibot = 0; ibot <= 1; ++ibot)
for(j = WEP_FIRST; j <= WEP_LAST; ++j) for(jbot = 0; jbot <= 1; ++jbot)
{
if(v != '0 0 0')
{
//vector is: kills hits damage
- fputs(fh, sprintf("%s%d %d\t%d %d\t", prefix, i, ibot, j, jbot));
- fputs(fh, sprintf("%d %d %g\n", v_x, v_y, v_z));
+ url_fputs(fh, sprintf("%s%d %d\t%d %d\t", prefix, i, ibot, j, jbot));
+ url_fputs(fh, sprintf("%d %d %g\n", v_x, v_y, v_z));
}
}
- fputs(fh, "#end\n\n");
- fclose(fh);
+ url_fputs(fh, "#end\n\n");
+ url_fclose(fh, WeaponStats_ready, world);
+ buf_del(weaponstats_buffer);
+ weaponstats_buffer = -1;
+ break;
+ case URL_READY_CANREAD:
+ // url_fclose is processing, we got a response for writing the data
+ // this must come from HTTP
+ print("Got response from weapon stats server:\n");
+ while((s = url_fgets(fh)))
+ print(" ", s, "\n");
+ print("End of response.\n");
+ url_fclose(fh, WeaponStats_ready, world);
+ break;
+ case URL_READY_CLOSED:
+ // url_fclose has finished
print("Weapon stats written\n");
- }
+ break;
+ case URL_READY_ERROR:
+ default:
+ print("Weapon stats writing failed: ", ftos(status), "\n");
+ break;
+ }
+}
+
+void WeaponStats_Shutdown()
+{
+ if(weaponstats_buffer < 0)
+ return;
+ if(autocvar_sv_weaponstats_file != "")
+ {
+ url_fopen(autocvar_sv_weaponstats_file, FILE_APPEND, WeaponStats_ready, world);
+ }
+ else
+ {
+ buf_del(weaponstats_buffer);
+ weaponstats_buffer = -1;
}
- buf_del(weaponstats_buffer);
- weaponstats_buffer = -1;
}
void WeaponStats_LogItem(float awep, float abot, float vwep, float vbot, vector item)
if(sound_allowed(MSG_BROADCAST, attacker))
{
if (save > 10)
- sound (self, CHAN_PROJECTILE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
else if (take > 30)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
else if (take > 10)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
}
if (take > 50)
if(sound_allowed(MSG_BROADCAST, attacker))
{
if (save > 10)
- sound (self, CHAN_PROJECTILE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
else if (take > 30)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
else if (take > 10)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
+ sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
}
if (take > 50)
// exclude pain sounds for laserjumps as long as you aren't REALLY low on health and would die of the next two
{
if(deathtype == DEATH_FALL)
- PlayerSound(playersound_fall, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_fall, CH_PAIN, VOICETYPE_PLAYERSOUND);
else if(self.health > 75) // TODO make a "gentle" version?
- PlayerSound(playersound_pain100, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_pain100, CH_PAIN, VOICETYPE_PLAYERSOUND);
else if(self.health > 50)
- PlayerSound(playersound_pain75, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_pain75, CH_PAIN, VOICETYPE_PLAYERSOUND);
else if(self.health > 25)
- PlayerSound(playersound_pain50, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_pain50, CH_PAIN, VOICETYPE_PLAYERSOUND);
else
- PlayerSound(playersound_pain25, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_pain25, CH_PAIN, VOICETYPE_PLAYERSOUND);
}
}
// escape a lava pit or similar
//self.pushltime = 0;
}
- else if(attacker.classname == "player" || attacker.classname == "gib")
+ else if(attacker.classname == "player")
{
self.pusher = attacker;
self.pushltime = time + autocvar_g_maxpushtime;
awep = DEATH_WEAPONOF(deathtype);
valid_damage_for_weaponstats = 1;
}
-
+
if(valid_damage_for_weaponstats)
{
dh = dh - max(self.health, 0);
if(sound_allowed(MSG_BROADCAST, attacker))
{
if(deathtype == DEATH_DROWN)
- PlayerSound(playersound_drown, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_drown, CH_PAIN, VOICETYPE_PLAYERSOUND);
else
- PlayerSound(playersound_death, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_death, CH_PAIN, VOICETYPE_PLAYERSOUND);
}
// get rid of kill indicator
race_PreDie();
DropAllRunes(self);
+ // increment frag counter for used weapon type
+ float w;
+ w = DEATH_WEAPONOF(deathtype);
+ if(WEP_VALID(w))
+ if(self.classname == "player")
+ if(self != attacker)
+ attacker.accuracy.(accuracy_frags[w-1]) += 1;
+
if(deathtype == DEATH_HURTTRIGGER && g_freezetag)
{
PutClientInServer();
if(self.flagcarried)
{
- if(attacker.classname != "player" && attacker.classname != "gib")
+ if(attacker.classname != "player")
DropFlag(self.flagcarried, self, attacker); // penalty for flag loss by suicide
else if(attacker.team == self.team)
DropFlag(self.flagcarried, attacker, attacker); // penalty for flag loss by suicide/teamkill
if(source.classname != "player")
colorstr = "^0"; // black for spectators
- else if(teams_matter)
+ else if(teamplay)
colorstr = Team_ColorCode(source.team);
else
teamsay = FALSE;
self.skinindex_for_playersound = self.skinindex;
ClearPlayerSounds();
LoadPlayerSounds("sound/player/default.sounds", 1);
- if(!LoadPlayerSounds(get_model_datafilename(self.model, self.skinindex, "sounds"), 0))
- LoadPlayerSounds(get_model_datafilename(self.model, 0, "sounds"), 0);
+ if(!autocvar_g_debug_defaultsounds)
+ if(!LoadPlayerSounds(get_model_datafilename(self.model, self.skinindex, "sounds"), 0))
+ LoadPlayerSounds(get_model_datafilename(self.model, 0, "sounds"), 0);
}
void FakeGlobalSound(string sample, float chan, float voicetype)
break;
case VOICETYPE_TEAMRADIO:
FOR_EACH_REALCLIENT(msg_entity)
- if(!teams_matter || msg_entity.team == self.team)
+ if(!teamplay || msg_entity.team == self.team)
{
if(msg_entity.cvar_cl_voice_directional == 1)
soundto(MSG_ONE, self, chan, sample, VOL_BASEVOICE, ATTN_MIN);
flood = Say(self, ownteam, world, msg, 1);
if (flood > 0)
- GlobalSound(self.sample, CHAN_VOICE, voicetype);
+ GlobalSound(self.sample, CH_VOICE, voicetype);
else if (flood < 0)
- FakeGlobalSound(self.sample, CHAN_VOICE, voicetype);
+ FakeGlobalSound(self.sample, CH_VOICE, voicetype);
}
void MoveToTeam(entity client, float team_colour, float type, float show_message)
w = self.weapon;
if (w == 0)
return; // just in case
- if(self.weapon_forbidchange)
- return;
if(MUTATOR_CALLHOOK(ForbidThrowCurrentWeapon))
return;
if(!autocvar_g_weapon_throwable)
if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
{
#endif
- // UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
- sound (self, CHAN_WEAPON2, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
self.weaponentity.state = WS_DROP;
// set up weapon switch think in the future, and start drop anim
weapon_thinkf(WFRAME_DONTCHANGE, autocvar_g_balance_weaponswitchdelay, w_clear);
W_SwitchWeapon_Force(self, w_getbestweapon(self));
wb = 0;
}
+
+ v_forward = fo;
+ v_right = ri;
+ v_up = up;
+
if(wb)
- {
- v_forward = fo;
- v_right = ri;
- v_up = up;
weapon_action(self.weapon, WR_THINK);
- }
+ else
+ weapon_action(self.weapon, WR_GONETHINK);
+
if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
{
if(self.weapon_think)
void W_SwitchWeapon_Force(entity e, float w)
{
- // don't switch to another weapon if we're not allowed to
- if(e.weapon_forbidchange)
- return;
-
e.cnt = e.switchweapon;
e.switchweapon = w;
e.selectweapon = w;
local float oldsolid;
vector vecs, dv;
oldsolid = ent.dphitcontentsmask;
- if(ent.weapon == WEP_SNIPERRIFLE)
+ if(ent.weapon == WEP_RIFLE)
ent.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_CORPSE;
else
ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
(time > ent.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold)
) // prevent insane sound spam
{
- sound(ent, CHAN_AUTO, "weapons/strength_fire.wav", VOL_BASE, ATTN_NORM);
+ sound(ent, CH_TRIGGER, "weapons/strength_fire.wav", VOL_BASE, ATTN_NORM);
ent.prevstrengthsound = time;
}
ent.prevstrengthsoundattempt = time;
else
self.alpha = 1;
- ang_x = bound(sv_pitch_min, self.owner.v_angle_x, sv_pitch_max);
- ang_y = 0;
- ang_z = 0;
-
- if(sv_pitch_fixyaw) // workaround for stupid player models that don't aim forward
- {
- ang_y = self.owner.v_angle_y;
- makevectors(ang);
- var vector v = v_forward;
- var float t = self.tag_entity.frame1time;
- var float f = self.tag_entity.frame;
- self.tag_entity.frame1time = time;
- self.tag_entity.frame = self.tag_entity.anim_idle_x;
- gettaginfo(self.tag_entity, self.tag_index);
- self.tag_entity.frame1time = t;
- self.tag_entity.frame = f;
- // untransform v according to this coordinate space
- vector w;
- w_x = v_forward * v;
- w_y = -v_right * v;
- w_z = v_up * v;
- self.angles = vectoangles(w);
- }
- else
+ if (!intermission_running)
{
- ang_x = -/* don't ask */ang_x;
- self.angles = ang;
+ ang_x = bound(sv_pitch_min, self.owner.v_angle_x, sv_pitch_max);
+ ang_y = 0;
+ ang_z = 0;
+
+ if(sv_pitch_fixyaw) // workaround for stupid player models that don't aim forward
+ {
+ ang_y = self.owner.v_angle_y;
+ makevectors(ang);
+ var vector v = v_forward;
+ var float t = self.tag_entity.frame1time;
+ var float f = self.tag_entity.frame;
+ self.tag_entity.frame1time = time;
+ self.tag_entity.frame = self.tag_entity.anim_idle_x;
+ gettaginfo(self.tag_entity, self.tag_index);
+ self.tag_entity.frame1time = t;
+ self.tag_entity.frame = f;
+ // untransform v according to this coordinate space
+ vector w;
+ w_x = v_forward * v;
+ w_y = -v_right * v;
+ w_z = v_up * v;
+ self.angles = vectoangles(w);
+ }
+ else
+ {
+ ang_x = -/* don't ask */ang_x;
+ self.angles = ang;
+ }
}
self.glowmod = self.owner.weaponentity_glowmod;
world, e.origin,
self, 0,
world, enemy,
- 0
+ 0,
+ RADARICON_NONE, '0 0 0'
);
}
}
if(self.weapon == self.switchweapon && time - self.prevdryfire > 1) // only play once BEFORE starting to switch weapons
{
- sound (self, CHAN_AUTO, "weapons/dryfire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/dryfire.wav", VOL_BASE, ATTN_NORM);
self.prevdryfire = time;
}
self.weapon_think = func;
//dprint("next ", ftos(self.weapon_nextthink), "\n");
- // The shoot animation looks TERRIBLE without animation blending! Yay for moonwalking while shooting!
- /*
+ // The shoot animation looks TERRIBLE without animation blending! Yay for moonwalking while shooting!
+ //anim = self.anim_shoot;
if (restartanim)
if (t)
if (!self.crouch) // shoot anim stands up, this looks bad
{
- local vector anim;
+ vector anim;
if(self.weapon == WEP_SHOTGUN && self.BUTTON_ATCK2)
+ {
anim = self.anim_melee;
- else
- anim = self.anim_shoot;
- anim_z = anim_y / (t + sys_frametime);
- setanim(self, anim, FALSE, TRUE, TRUE);
+ anim_z = anim_y / (t + sys_frametime);
+ setanim(self, anim, FALSE, TRUE, TRUE);
+ }
}
- */
};
void weapon_boblayer1(float spd, vector org)
// now begin the reloading process
- sound (self, CHAN_WEAPON2, self.reload_sound, VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_B, self.reload_sound, VOL_BASE, ATTN_NORM);
// do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon,
// then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there,
entity nagger;
float readycount;
+
float Nagger_SendEntity(entity to, float sendflags)
{
float nags, i, f, b;
entity e;
WriteByte(MSG_ENTITY, ENT_CLIENT_NAGGER);
+ // bits:
+ // 1 = ready
+ // 2 = player needs to ready up
+ // 4 = vote
+ // 8 = player needs to vote
+ // 16 = warmup
+ // sendflags:
+ // 64 = vote counts
+ // 128 = vote string
+
nags = 0;
if(readycount)
{
if(inWarmupStage)
nags |= 16;
+ if(sendflags & 64)
+ nags |= 64;
+
if(sendflags & 128)
nags |= 128;
+ if(!(nags & 4)) // no vote called? send no string
+ nags &~= (64 | 128);
+
WriteByte(MSG_ENTITY, nags);
- if(nags & 128)
+ if(nags & 64)
{
- WriteString(MSG_ENTITY, votecalledvote_display);
+ WriteByte(MSG_ENTITY, vote_yescount);
+ WriteByte(MSG_ENTITY, vote_nocount);
+ WriteByte(MSG_ENTITY, vote_needed_absolute);
+ WriteChar(MSG_ENTITY, to.vote_vote);
}
+ if(nags & 128)
+ WriteString(MSG_ENTITY, votecalledvote_display);
+
if(nags & 1)
{
for(i = 1; i <= maxclients; i += 8)
void Nagger_VoteCountChanged()
{
if(nagger)
- nagger.SendFlags |= 1;
+ nagger.SendFlags |= 64;
}
void Nagger_ReadyCounted()
{
ClientKill_TeamChange(-2); // observe
} else if(autocvar_g_campaign || autocvar_g_balance_teams || autocvar_g_balance_teams_force) {
//JoinBestTeam(self, FALSE, TRUE);
- } else if(teams_matter && !autocvar_sv_spectate && !(self.team_forced > 0)) {
+ } else if(teamplay && !autocvar_sv_spectate && !(self.team_forced > 0)) {
self.classname = "observer";
stuffcmd(self,"menu_showteamselect\n");
}
if(self.classname == "player" && autocvar_sv_spectate == 1) {
ClientKill_TeamChange(-2); // observe
}
+ if(g_ca && self.caplayer && (self.classname == "spectator" || self.classname == "observer")) {
+ // in CA, allow a dead player to move to spectatators (without that, caplayer!=0 will be moved back to the player list)
+ sprint(self, "WARNING: you will spectate in the next round.\n");
+ self.caplayer = 0;
+ }
} else if(cmd == "join") {
if not(self.flags & FL_CLIENT)
return;
}
else {
//player may not join because of g_maxplayers is set
- centerprint_atprio(self, CENTERPRIO_MAPVOTE, PREVENT_JOIN_TEXT);
+ centerprint(self, PREVENT_JOIN_TEXT);
}
}
} else if( cmd == "selectteam" ) {
if not(self.flags & FL_CLIENT)
return;
- if( !teams_matter ) {
+ if( !teamplay ) {
sprint( self, "selectteam can only be used in teamgames\n");
} else if(autocvar_g_campaign) {
//JoinBestTeam(self, 0);
readycount = 0;
Nagger_ReadyCounted(); // NOTE: this causes a resend of that entity, and will also turn off warmup state on the client
- if(autocvar_teamplay_lockonrestart && teams_matter) {
+ if(autocvar_teamplay_lockonrestart && teamplay) {
lockteams = 1;
bprint("^1The teams are now locked.\n");
}
float MOVETYPE_BOUNCE = 10;
float MOVETYPE_BOUNCEMISSILE = 11; // Like bounce but doesn't lose speed on bouncing
//float MOVETYPE_FOLLOW = 12; // 'Attaches' the entity to its aim_ent
+//float MOVETYPE_FLY_WORLDONLY = 33;
float SOLID_NOT = 0;
float SOLID_TRIGGER = 1;
e.SendFlags |= 0x08;
}
}
-
-.void(void) csqcprojectile_oldthink;
-.float csqcprojectile_oldnextthink;
-
-void CSQCProjectile_Update_Think()
-{
- UpdateCSQCProjectile(self);
- self.think = self.csqcprojectile_oldthink;
- self.nextthink = max(time, self.csqcprojectile_oldnextthink);
-}
-
-void UpdateCSQCProjectileNextFrame(entity e)
-{
- if(e.SendEntity == CSQCProjectile_SendEntity)
- if(e.think != CSQCProjectile_Update_Think)
- {
- e.csqcprojectile_oldthink = e.think;
- e.csqcprojectile_oldnextthink = e.nextthink;
- e.think = CSQCProjectile_Update_Think;
- e.nextthink = time;
- }
-}
void CSQCProjectile(entity e, float clientanimate, float type, float docull);
void UpdateCSQCProjectile(entity e);
void UpdateCSQCProjectileAfterTeleport(entity e);
-void UpdateCSQCProjectileNextFrame(entity e);
void CSQCProjectile_Check(entity e);
// player is in the worse half, if >= half the players are better than him, or consequently, if < half of the players are worse
// use this rule here
-
+
if(players_worseeq >= players_total * captureshield_max_ratio)
return FALSE;
{
if(should)
{
- centerprint_atprio(p, CENTERPRIO_SHIELDING, "^3You are now ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Make some defensive scores before trying again.");
+ Send_CSQC_Centerprint_Generic(other, CPID_CTF_CAPTURESHIELD, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.", 5, 0);
// TODO csqc notifier for this
}
else
{
- centerprint_atprio(p, CENTERPRIO_SHIELDING, "^3You are now free.\n\n^3Feel free to ^1try to capture^3 the flag again\n^3if you think you will succeed.");
+ Send_CSQC_Centerprint_Generic(p, CPID_CTF_CAPTURESHIELD, "^3You are now free.\n\n^3Feel free to ^1try to capture^3 the flag again\n^3if you think you will succeed.", 5, 0);
// TODO csqc notifier for this
}
p.ctf_captureshielded = should;
return TRUE;
}
+.float ctf_captureshield_touch_msgtime;
void ctf_captureshield_touch()
{
if not(other.ctf_captureshielded)
mymid = (self.absmin + self.absmax) * 0.5;
othermid = (other.absmin + other.absmax) * 0.5;
Damage(other, self, self, 0, DEATH_HURTTRIGGER, mymid, normalize(othermid - mymid) * captureshield_force);
- centerprint_atprio(other, CENTERPRIO_SHIELDING, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.");
+ if (time - other.ctf_captureshield_touch_msgtime > 2)
+ Send_CSQC_Centerprint_Generic(other, CPID_CTF_CAPTURESHIELD, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.", 5, 0);
+ other.ctf_captureshield_touch_msgtime = time;
}
void ctf_flag_spawnstuff()
self.basewaypoint = self.nearestwaypoint;
if(self.team == COLOR_TEAM1)
- {
- WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 61', self, sprite);
- WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM1 - 1, FALSE));
- }
+ WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 61', self, sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM1 - 1, FALSE));
else
- {
- WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 61', self, sprite);
- WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM2 - 1, FALSE));
- }
+ WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 61', self, sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM2 - 1, FALSE));
}
float ctf_score_value(string parameter)
ctf_captureshield_update(p, 0); // shield only
e.playerid = attacker.playerid;
e.ctf_droptime = time;
- WaypointSprite_Spawn("flagdropped", 0, 0, e, '0 0 1' * 61, world, COLOR_TEAM1 + COLOR_TEAM2 - e.team, e, waypointsprite_attachedforcarrier, FALSE);
+ WaypointSprite_Spawn("flagdropped", 0, 0, e, '0 0 1' * 61, world, COLOR_TEAM1 + COLOR_TEAM2 - e.team, e, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAG, '0 1 1');
+ WaypointSprite_Ping(e.waypointsprite_attachedforcarrier);
if(p.waypointsprite_attachedforcarrier)
{
- WaypointSprite_Ping(p.waypointsprite_attachedforcarrier);
WaypointSprite_DetachCarrier(p);
}
else
backtrace("Flag carrier had no flag sprite?!?");
}
LogCTF("dropped", p.team, p);
- sound (self, CHAN_TRIGGER, self.noise4, VOL_BASE, ATTN_NONE);
+ sound (p, CH_TRIGGER, self.noise4, VOL_BASE, ATTN_NONE);
setattachment(e, world, "");
e.damageforcescale = autocvar_g_balance_ctf_damageforcescale;
{
bprint("The ", self.netname, " became impatient after ", ftos_decimals(flagcaptimerecord, 2), " seconds and returned itself\n");
- sound (self, CHAN_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE);
+ sound (self, CH_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE);
self.owner.impulse = 141; // returning!
e = self;
if (time > self.pain_finished)
{
bprint("The ", self.netname, " has returned to base\n");
- sound (self, CHAN_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE);
+ sound (self, CH_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE);
LogCTF("returned", self.team, world);
ReturnFlag(self);
}
DropFlag(self, world, world);
return;
}
-
- if(autocvar_g_ctf_allow_drop)
- if(e.BUTTON_USE)
- DropFlag(self, e, world);
};
+float ctf_usekey()
+{
+ if(self.flagcarried)
+ {
+ DropFlag(self.flagcarried, self, world);
+ return TRUE;
+ }
+ return FALSE;
+}
+
void flag_cap_ring_spawn(vector org)
{
shockwave_spawn("models/ctf/shockwavetransring.md3", org - '0 0 15', -0.8, 0, 1);
}
}
- sound (other, CHAN_AUTO, self.noise2, VOL_BASE, ATTN_NONE);
+ sound (other, CH_TRIGGER, self.noise2, VOL_BASE, ATTN_NONE);
WaypointSprite_DetachCarrier(other);
if(self.speedrunning)
FakeTimeLimit(other, -1);
{
if (other.next_take_time > time)
return;
-
+
if (autocvar_g_ctf_flag_pickup_effects) // pickup effect
pointparticles(particleeffectnum("smoke_ring"), 0.5 * (self.absmin + self.absmax), '0 0 0', 1);
-
+
// pick up
self.flagpickuptime = time; // used for timing runs
self.speedrunning = other.speedrunning; // if speedrunning, flag will self-return and teleport the owner back after the record
self.dropperid = other.playerid;
PlayerScore_Add(other, SP_CTF_PICKUPS, 1);
LogCTF("steal", self.team, other);
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
+ sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
FOR_EACH_PLAYER(player)
if(player.team == self.team)
self.movetype = MOVETYPE_NONE;
setorigin(self, FLAG_CARRY_POS);
setattachment(self, other, "");
- WaypointSprite_AttachCarrier("flagcarrier", other);
- WaypointSprite_UpdateTeamRadar(other.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '1 1 0');
+ WaypointSprite_AttachCarrier("flagcarrier", other, RADARICON_FLAGCARRIER, '1 1 0');
WaypointSprite_Ping(self.sprite);
return;
}
PlayerScore_Add(other, SP_CTF_RETURNS, 1);
LogCTF("return", self.team, other);
- sound (other, CHAN_AUTO, self.noise1, VOL_BASE, ATTN_NONE);
+ sound (other, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NONE);
ReturnFlag(self);
}
else if (!other.flagcarried && (other.playerid != self.dropperid || time > self.ctf_droptime + autocvar_g_balance_ctf_delay_collect))
if (autocvar_g_ctf_flag_pickup_effects) // field pickup effect
pointparticles(particleeffectnum("smoke_ring"), 0.5 * (self.absmin + self.absmax), '0 0 0', 1);
-
+
// pick up
self.solid = SOLID_NOT;
setorigin(self, self.origin); // relink
UpdateFrags(other, f);
PlayerScore_Add(other, SP_CTF_PICKUPS, 1);
LogCTF("pickup", self.team, other);
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
+ sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
FOR_EACH_PLAYER(player)
if(player.team == self.team)
setattachment(self, other, "");
self.damageforcescale = 0;
self.takedamage = DAMAGE_NO;
- WaypointSprite_AttachCarrier("flagcarrier", other);
- WaypointSprite_UpdateTeamRadar(other.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '1 1 0');
+ WaypointSprite_AttachCarrier("flagcarrier", other, RADARICON_FLAGCARRIER, '1 1 0');
}
}
};
if(self.team == COLOR_TEAM2)
// Blue
self.glow_color = 210;
-
+
self.glow_size = 25;
self.glow_trail = 1;
}
(default ctf/respawn.wav)
*/
+void spawnfunc_item_flag_team2();
void spawnfunc_item_flag_team1()
{
if (!g_ctf)
return;
}
+ if (g_ctf_reverse)
+ {
+ float old_g_ctf_reverse = g_ctf_reverse;
+ g_ctf_reverse = 0; // avoid an endless loop
+ spawnfunc_item_flag_team2();
+ g_ctf_reverse = old_g_ctf_reverse;
+ return;
+ }
+
// link flag into ctf_worldflaglist
self.ctf_worldflagnext = ctf_worldflaglist;
ctf_worldflaglist = self;
self.classname = "item_flag_team";
- if(g_ctf_reverse)
- {
- self.team = COLOR_TEAM2; // color 13 team (blue)
- self.items = IT_KEY1; // silver key (bluish enough)
- }
- else
- {
- self.team = COLOR_TEAM1; // color 4 team (red)
- self.items = IT_KEY2; // gold key (redish enough)
- }
+ self.team = COLOR_TEAM1; // color 4 team (red)
+ self.items = IT_KEY2; // gold key (redish enough)
self.netname = "^1RED^7 flag";
self.target = "###item###";
self.skin = autocvar_g_ctf_flag_red_skin;
return;
}
+ if (g_ctf_reverse)
+ {
+ float old_g_ctf_reverse = g_ctf_reverse;
+ g_ctf_reverse = 0; // avoid an endless loop
+ spawnfunc_item_flag_team1();
+ g_ctf_reverse = old_g_ctf_reverse;
+ return;
+ }
+
// link flag into ctf_worldflaglist
self.ctf_worldflagnext = ctf_worldflaglist;
ctf_worldflaglist = self;
self.classname = "item_flag_team";
- if(g_ctf_reverse)
- {
- self.team = COLOR_TEAM1; // color 4 team (red)
- self.items = IT_KEY2; // gold key (redish enough)
- }
- else
- {
- self.team = COLOR_TEAM2; // color 13 team (blue)
- self.items = IT_KEY1; // silver key (bluish enough)
- }
+ self.team = COLOR_TEAM2; // color 13 team (blue)
+ self.items = IT_KEY1; // silver key (bluish enough)
self.netname = "^4BLUE^7 flag";
self.target = "###item###";
self.skin = autocvar_g_ctf_flag_blue_skin;
entity pl;
if(cteam != COLOR_TEAM1 || cteam != COLOR_TEAM2)
return world;
-
+
FOR_EACH_REALPLAYER(pl) {
if(pl.team == cteam && pl.iscommander) {
return pl;
void(float cteam) ctf_new_commander =
{
entity pl, plmax;
-
+
plmax = world;
FOR_EACH_REALPLAYER(pl) {
if(pl.team == cteam) {
void() ctf_clientconnect =
{
self.iscommander = FALSE;
-
+
if(!self.team || self.classname != "player") {
ctf_setstate(self, -1);
} else
ctf_setstate(self, 0);
self.team_saved = self.team;
-
+
if(self.team != 0 && self.classname == "player" && !ctf_team_has_commander(self.team)) {
ctf_new_commander(self.team);
}
ctf_setstate(self, -1);
ctf_new_commander(self.team_saved);
}
-
+
self.team_saved = self.team;
-
+
ctf_new_commander(self.team);
};
void w_ready();
// VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies)
.float weapon_nextthink;
-.float weapon_forbidchange;
.void() weapon_think;
//float PLAYER_WEAPONSELECTION_DELAY = );
string w_deathtypestring;
-void(entity client, string s) centerprint_builtin = #73;
.vector dest1, dest2;
float gameover;
.float runes;
-.float welcomemessage_time;
.float version;
// minstagib vars
void timeoutHandler_Think();
void evaluateTimeout();
void evaluateTimein();
-string getTimeoutText(float addOneSecond);
.float spawnshieldtime;
.float() customizeentityforclient;
.float cvar_cl_handicap;
.float cvar_cl_playerdetailreduction;
-.float cvar_scr_centertime;
+.float cvar_cl_clippedspectating;
+
.string cvar_g_xonoticversion;
.string cvar_cl_weaponpriority;
.string cvar_cl_weaponpriorities[10];
.entity jumppadsused[NUM_JUMPPADSUSED];
string gamemode_name;
-float teams_matter;
float startitem_failed;
float weaponsInMap;
-void centerprint_atprio(entity e, float prio, string s);
-void centerprint_expire(entity e, float prio);
-void centerprint(entity e, string s);
-
.float respawn_countdown; // next number to count
float bot_waypoints_for_items;
// TODO implemented fall and falling
#define ALLPLAYERSOUNDS \
_VOICEMSG(death) \
- _VOICEMSG(fall) \
_VOICEMSG(drown) \
+ _VOICEMSG(fall) \
+ _VOICEMSG(fall) \
+ _VOICEMSG(falling) \
_VOICEMSG(gasp) \
_VOICEMSG(jump) \
+ _VOICEMSG(pain100) \
_VOICEMSG(pain25) \
_VOICEMSG(pain50) \
- _VOICEMSG(pain75) \
- _VOICEMSG(pain100)
+ _VOICEMSG(pain75)
+
#define ALLVOICEMSGS \
_VOICEMSG(attack) \
_VOICEMSG(attackinfive) \
+ _VOICEMSG(coverme) \
+ _VOICEMSG(defend) \
+ _VOICEMSG(freelance) \
+ _VOICEMSG(incoming) \
_VOICEMSG(meet) \
+ _VOICEMSG(needhelp) \
_VOICEMSG(seenflag) \
_VOICEMSG(taunt) \
_VOICEMSG(teamshoot)
ALLVOICEMSGS
#undef _VOICEMSG
-// reserved sound names for the future (models lack sounds for them):
+// 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(flagcarriertakingdamage) \
// _VOICEMSG(negative) \
// _VOICEMSG(seenenemy) \
-// _VOICEMSG(fall) \
-// _VOICEMSG(getflag) \
-// _VOICEMSG(incoming) \
-// _VOICEMSG(coverme) \
-// _VOICEMSG(needhelp) \
-// _VOICEMSG(defend) \
-// _VOICEMSG(freelance) \
-// _VOICEMSG(falling) \
string globalsound_fall;
string globalsound_metalfall;
.string target2;
.string target3;
.string target4;
+.float target_random;
.float trigger_reverse;
// Nexball
vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons
-// the QC VM sucks
-#define BITXOR(v,b) ((v) + (b) - 2 * ((v) & (b)))
-#define BITXOR_ASSIGN(v,b) ((v) += ((b) - 2 * ((v) & (b))))
-
.float wasplayer;
float servertime, serverprevtime, serverframetime;
..float current_ammo;
-.float weapon_load[WEP_MAXCOUNT]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(weapon_load);
+.float weapon_load[WEP_MAXCOUNT];
.float ammo_none; // used by the reloading system, must always be 0
.float clip_load;
.float old_clip_load;
.entity muzzle_flash;
.float misc_bulletcounter; // replaces uzi & hlac bullet counter.
+
+void PlayerUseKey();
float pps_pink;
void set_dom_state(entity e)
{
- // BIG ugly hack to make stat sending work
e.dom_total_pps = total_pps;
e.dom_pps_red = pps_red;
e.dom_pps_blue = pps_blue;
if (head.noise != "")
if(self.enemy)
- sound(self.enemy, CHAN_AUTO, head.noise, VOL_BASE, ATTN_NORM);
+ sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTN_NORM);
else
- sound(self, CHAN_TRIGGER, head.noise, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTN_NORM);
if (head.noise1 != "")
play2all(head.noise1);
self.delay = old_delay;
self.team = old_team;
- switch(self.team)
- {
- // "fix" pps when slightly under 0 because of approximation errors
- case COLOR_TEAM1:
- pps_red -= (points/wait_time);
- if (pps_red < 0) pps_red = 0;
- break;
- case COLOR_TEAM2:
- pps_blue -= (points/wait_time);
- if (pps_blue < 0) pps_blue = 0;
- break;
- case COLOR_TEAM3:
- pps_yellow -= (points/wait_time);
- if (pps_yellow < 0) pps_yellow = 0;
- break;
- case COLOR_TEAM4:
- pps_pink -= (points/wait_time);
- if (pps_pink < 0) pps_pink = 0;
- }
-
switch(self.goalentity.team)
{
- // "fix" pps when slightly over total_pps because of approximation errors
case COLOR_TEAM1:
- pps_red += (points/wait_time);
- if (pps_red > total_pps) pps_red = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-red", "", "");
break;
case COLOR_TEAM2:
- pps_blue += (points/wait_time);
- if (pps_blue > total_pps) pps_blue = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-blue", "", "");
break;
case COLOR_TEAM3:
- pps_yellow += (points/wait_time);
- if (pps_yellow > total_pps) pps_yellow = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-yellow", "", "");
break;
case COLOR_TEAM4:
- pps_pink += (points/wait_time);
- if (pps_pink > total_pps) pps_pink = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-pink", "", "");
}
+ total_pps = 0, pps_red = 0, pps_blue = 0, pps_yellow = 0, pps_pink = 0;
+ for(head = world; (head = find(head, classname, "dom_controlpoint")) != world; )
+ {
+ if (autocvar_g_domination_point_amt)
+ points = autocvar_g_domination_point_amt;
+ else
+ points = head.frags;
+ if (autocvar_g_domination_point_rate)
+ wait_time = autocvar_g_domination_point_rate;
+ else
+ wait_time = head.wait;
+ switch(head.goalentity.team)
+ {
+ case COLOR_TEAM1:
+ pps_red += points/wait_time;
+ break;
+ case COLOR_TEAM2:
+ pps_blue += points/wait_time;
+ break;
+ case COLOR_TEAM3:
+ pps_yellow += points/wait_time;
+ break;
+ case COLOR_TEAM4:
+ pps_pink += points/wait_time;
+ }
+ total_pps += points/wait_time;
+ }
+
WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_DOMPOINT, colormapPaletteColor(self.goalentity.team - 1, 0));
WaypointSprite_Ping(self.sprite);
self.wait = 5;
float points, waittime;
- if (autocvar_g_domination_point_rate)
- points = autocvar_g_domination_point_rate;
+ if (autocvar_g_domination_point_amt)
+ points = autocvar_g_domination_point_amt;
else
points = self.frags;
- if (autocvar_g_domination_point_amt)
- waittime = autocvar_g_domination_point_amt;
+ if (autocvar_g_domination_point_rate)
+ waittime = autocvar_g_domination_point_rate;
else
waittime = self.wait;
droptofloor();
waypoint_spawnforitem(self);
- WaypointSprite_SpawnFixed("dom-neut", self.origin + '0 0 32', self, sprite);
- WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_DOMPOINT, '0 1 1');
+ WaypointSprite_SpawnFixed("dom-neut", self.origin + '0 0 32', self, sprite, RADARICON_DOMPOINT, '0 1 1');
};
if(other == o)
return FALSE;
if(other.classname == "player")
- if(!teams_matter || o.team != other.team)
+ if(!teamplay || o.team != other.team)
if not (radar_showennemies)
return FALSE;
return TRUE;
//description:
//controls rendering scale of the object, 0 is forced to be 1, darkplaces uses 1/16th accuracy and a limit of 15.9375, can be used to make an object larger or smaller.
+//DP_ENT_TRAILEFFECTNUM
+//idea: LordHavoc
+//darkplaces implementation: LordHavoc
+//field definitions:
+.float traileffectnum;
+//description:
+//use a custom effectinfo.txt effect on this entity, assign it like this:
+//self.traileffectnum = particleeffectnum("mycustomeffect");
+//this will do both the dlight and particle trail as described in the effect, basically equivalent to trailparticles() in CSQC but performed on a server entity.
+
//DP_ENT_VIEWMODEL
//idea: LordHavoc
//darkplaces implementation: LordHavoc
//description:
//this is a very special capability, attachs the entity to the view of the client specified, origin and angles become relative to the view of that client, all effects can be used (multiple skins on a weapon model etc)... the entity is not visible to any other client.
-//DP_GECKO_SUPPORT
-//idea: Res2k, BlackHC
-//darkplaces implementation: Res2k, BlackHC
-//constant definitions:
-float GECKO_BUTTON_DOWN = 0;
-float GECKO_BUTTON_UP = 1;
-// either use down and up or just press but not all of them!
-float GECKO_BUTTON_PRESS = 2;
-// use this for mouse events if needed?
-float GECKO_BUTTON_DOUBLECLICK = 3;
-//builtin definitions:
-float(string name) gecko_create( string name ) = #487;
-void(string name) gecko_destroy( string name ) = #488;
-void(string name) gecko_navigate( string name, string URI ) = #489;
-float(string name) gecko_keyevent( string name, float key, float eventtype ) = #490;
-void gecko_mousemove( string name, float x, float y ) = #491;
-void gecko_resize( string name, float w, float h ) = #492;
-vector gecko_get_texture_extent( string name ) = #493;
-//engine-called QC prototypes:
-//string(string name, string query) Qecko_Query;
-//description:
-//provides an interface to the offscreengecko library and allows for internet browsing in games
-
//DP_GFX_EXTERNALTEXTURES
//idea: LordHavoc
//darkplaces implementation: LordHavoc
//description:
//MOVETYPE_BOUNCE but without gravity, and with full reflection (no speed loss like grenades have), in other words - bouncing laser bolts.
+//DP_MOVETYPEFLYWORLDONLY
+//idea: Samual
+//darkplaces implementation: Samual
+//movetype definitions:
+float MOVETYPE_FLY_WORLDONLY = 33;
+//description:
+//like MOVETYPE_FLY, but does all traces with MOVE_WORLDONLY, and is ignored by MOVETYPE_PUSH. Should only be combined with SOLID_NOT and SOLID_TRIGGER.
+
//DP_NULL_MODEL
//idea: Chris
//darkplaces implementation: divVerent
//the engine plays sound/cdtracks/track001.wav instead of cd track 1 and so on if found, this allows games and mods to have music tracks without using ambientsound.
//Note: also plays .ogg with DP_SND_OGGVORBIS extension.
+//DP_SND_SOUND7_WIP1
+//idea: divVerent
+//darkplaces implementation: divVerent
+//builtin definitions:
+void(entity e, float chan, string samp, float vol, float atten, float speed, float flags) sound7 = #8;
+float SOUNDFLAG_RELIABLE = 1;
+//description:
+//plays a sound, with some more flags
+//extensions to sound():
+//- channel may be in the range from -128 to 127; channels -128 to 0 are "auto",
+// i.e. support multiple sounds at once, but cannot be stopped/restarted
+//- a speed parameter has been reserved for later addition of pitch shifting.
+// it MUST be set to 0 for now, meaning "no pitch change"
+//- the flag SOUNDFLAG_RELIABLE can be specified, which makes the sound send
+// to MSG_ALL (reliable) instead of MSG_BROADCAST (unreliable, default);
+// similarily, SOUNDFLAG_RELIABLE_TO_ONE sends to MSG_ONE
+//- channel 0 is controlled by snd_channel0volume; channel 1 and -1 by
+// snd_channel1volume, etc. (so, a channel shares the cvar with its respective
+// auto-channel); however, the mod MUST define snd_channel8volume and upwards
+// in default.cfg if they are to be used, as the engine does not create them
+// to not litter the cvar list
+//- this extension applies to CSQC as well; CSQC_Event_Sound will get speed and
+// flags as extra 7th and 8th argument
+//- WIP2 ideas: SOUNDFLAG_RELIABLE_TO_ONE, SOUNDFLAG_NOPHS, SOUNDFLAG_FORCELOOP
+//- NOTE: to check for this, ALSO OR a check with DP_SND_SOUND7 to also support
+// the finished extension once done
+
//DP_SND_OGGVORBIS
//idea: Transfusion
//darkplaces implementation: Elric
void(entity e, vector force, vector force_pos) physics_addforce = #541; // apply a force from certain origin, length of force vector is power of force
void(entity e, vector torque) physics_addtorque = #542; // add relative torque
//description: provides Open Dynamics Engine support, requires extenal dll to be present or engine compiled with statical link option
-//be sure to checkextension for it to know if library i loaded and ready, also to enable physics set "physice_ode" cvar to 1
+//be sure to checkextension for it to know if library is loaded and ready, also to enable physics set "physics_ode" cvar to 1
//note: this extension is highly experimental and may be unstable
//note: use SOLID_BSP on entities to get a trimesh collision models on them
{
self.health = self.max_health;
self.takedamage = DAMAGE_NO;
+ self.bot_attack = FALSE;
self.event_damage = SUB_Null;
self.state = 1;
func_breakable_colormod();
WaypointSprite_UpdateHealth(self.sprite, self.health);
}
self.takedamage = DAMAGE_AIM;
+ self.bot_attack = TRUE;
self.event_damage = func_breakable_damage;
self.state = 0;
self.nextthink = 0; // cancel auto respawn
func_breakable_destroyed();
if(self.noise)
- sound (self, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
if(self.dmg)
RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world);
Net_LinkEntity(e, FALSE, 0.2, Damage_DamageInfo_SendEntity);
}
-#define DAMAGE_CENTERPRINT_SPACER NEWLINES
-
float checkrules_firstblood;
float yoda;
float IsDifferentTeam(entity a, entity b)
{
- if(teams_matter)
+ if(teamplay)
{
if(a.team == b.team)
return 0;
{
// regular frag
PlayerScore_Add(attacker, SP_KILLS, 1);
+ if(targ.playerid)
+ PlayerStats_Event(attacker, sprintf("kills-%d", targ.playerid), 1);
}
PlayerScore_Add(targ, SP_DEATHS, 1);
string s, a, msg;
float w, type;
- if (targ.classname == "player" || targ.classname == "corpse")
+ if (targ.classname == "player")
{
- if (targ.classname == "corpse")
- s = "A corpse";
- else
- s = targ.netname;
-
+ s = targ.netname;
a = attacker.netname;
if (targ == attacker) // suicides
if (targ.killcount > 2)
msg = ftos(targ.killcount);
- if(teams_matter && deathtype == DEATH_MIRRORDAMAGE)
+ if(teamplay && deathtype == DEATH_MIRRORDAMAGE)
{
if(attacker.team == COLOR_TEAM1)
deathtype = KILL_TEAM_RED;
Send_KillNotification(s, msg, ftos(w), deathtype, MSG_SUICIDE);
}
- else if (attacker.classname == "player" || attacker.classname == "gib")
+ else if (attacker.classname == "player")
{
- if(teams_matter && attacker.team == targ.team)
+ if(teamplay && attacker.team == targ.team)
{
if(attacker.team == COLOR_TEAM1)
type = KILL_TEAM_RED;
damage = 0;
force = '0 0 0';
}
- else if(teams_matter && attacker.team == targ.team)
+ else if(teamplay && attacker.team == targ.team)
{
if(autocvar_teamplay_mode == 1)
damage = 0;
if (targ.armorvalue && (deathtype == WEP_MINSTANEX) && damage)
{
targ.armorvalue -= 1;
- centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, "^3Remaining extra lives: ",ftos(targ.armorvalue)));
+ centerprint(targ, strcat("^3Remaining extra lives: ",ftos(targ.armorvalue)));
damage = 0;
targ.hitsound += 1;
attacker.hitsound += 1; // TODO change this to a future specific hitsound for armor hit
if (targ != attacker)
{
if ((targ.health >= 1) && (targ.classname == "player"))
- centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "Secondary fire inflicts no damage!"));
+ centerprint(attacker, "Secondary fire inflicts no damage!");
force = '0 0 0';
// keep mirrorforce
attacker = targ;
if(deathtype & HITTYPE_HEADSHOT)
damage *= 1 + damage_headshotbonus;
- if(targ.classname == "player")
+ entity victim;
+ if((targ.vehicle_flags & VHF_ISVEHICLE) && targ.owner)
+ victim = targ.owner;
+ else
+ victim = targ;
+
+ if(victim.classname == "player" || victim.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
{
- if(IsDifferentTeam(targ, attacker))
+ if(IsDifferentTeam(victim, attacker))
{
if(damage > 0)
{
if(deathtype != DEATH_FIRE)
{
- if(targ.BUTTON_CHAT)
+ if(victim.BUTTON_CHAT)
attacker.typehitsound += 1;
else
attacker.hitsound += 1;
if not(DEATH_ISSPECIAL(deathtype))
{
+ if(targ.classname == "player") // don't do this for vehicles
if(!g_minstagib)
- if(IsFlying(targ))
+ if(IsFlying(victim))
yoda = 1;
if(g_minstagib)
- if(targ.items & IT_STRENGTH)
+ if(victim.items & IT_STRENGTH)
yoda = 1;
if(deathtype & HITTYPE_HEADSHOT)
if(attacker.armorvalue > 0)
{
attacker.armorvalue = attacker.armorvalue - 1;
- centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "^3Remaining extra lives: ",ftos(attacker.armorvalue)));
+ centerprint(attacker, strcat("^3Remaining extra lives: ",ftos(attacker.armorvalue)));
attacker.hitsound += 1;
}
mirrordamage = 0;
============================================*/
-.string aiment_classname;
-.float aiment_deadflag;
-void SetMovetypeFollow(entity ent, entity e)
-{
- // FIXME this may not be warpzone aware
- ent.movetype = MOVETYPE_FOLLOW; // make the hole follow
- ent.solid = SOLID_NOT; // MOVETYPE_FOLLOW is always non-solid - this means this cannot be teleported by warpzones any more! Instead, we must notice when our owner gets teleported.
- ent.aiment = e; // make the hole follow bmodel
- ent.punchangle = e.angles; // the original angles of bmodel
- ent.view_ofs = ent.origin - e.origin; // relative origin
- ent.v_angle = ent.angles - e.angles; // relative angles
- ent.aiment_classname = strzone(e.classname);
- ent.aiment_deadflag = e.deadflag;
-}
-void UnsetMovetypeFollow(entity ent)
-{
- ent.movetype = MOVETYPE_FLY;
- PROJECTILE_MAKETRIGGER(ent);
- ent.aiment = world;
-}
-float LostMovetypeFollow(entity ent)
-{
-/*
- if(ent.movetype != MOVETYPE_FOLLOW)
- if(ent.aiment)
- error("???");
-*/
- if(ent.aiment)
- {
- if(ent.aiment.classname != ent.aiment_classname)
- return 1;
- if(ent.aiment.deadflag != ent.aiment_deadflag)
- return 1;
- }
- return 0;
-}
-
.float hook_length;
.float hook_switchweapon;
void GrapplingHook_Stop()
{
pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM);
self.state = 1;
self.think = GrapplingHookThink;
{
WriteByte(MSG_ENTITY, ENT_CLIENT_HOOK);
sf = sf & 0x7F;
- if(sound_allowed(MSG_BROADCAST, self.owner))
+ if(sound_allowed(MSG_BROADCAST, self.realowner))
sf |= 0x80;
WriteByte(MSG_ENTITY, sf);
if(sf & 1)
{
- WriteByte(MSG_ENTITY, num_for_edict(self.owner));
+ WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
}
if(sf & 2)
{
{
float spd, dist, minlength, pullspeed, ropestretch, ropeairfriction, rubberforce, newlength, rubberforce_overstretch, s;
vector dir, org, end, v0, dv, v, myorg, vs;
- if(self.owner.health <= 0 || self.owner.hook != self) // how did that happen?
+ if(self.realowner.health <= 0 || self.realowner.hook != self) // how did that happen?
{ // well, better fix it anyway
remove(self);
return;
}
if(LostMovetypeFollow(self))
{
- RemoveGrapplingHook(self.owner);
+ RemoveGrapplingHook(self.realowner);
return;
}
if(self.aiment)
self.nextthink = time;
- s = self.owner.cvar_cl_gunalign;
+ s = self.realowner.cvar_cl_gunalign;
if(s != 1 && s != 2 && s != 4)
s = 3; // default value
--s;
vs = hook_shotorigin[s];
- makevectors(self.owner.v_angle);
- org = self.owner.origin + self.owner.view_ofs + v_forward * vs_x + v_right * -vs_y + v_up * vs_z;
- myorg = WarpZone_RefSys_TransformOrigin(self.owner, self, org);
+ makevectors(self.realowner.v_angle);
+ org = self.realowner.origin + self.realowner.view_ofs + v_forward * vs_x + v_right * -vs_y + v_up * vs_z;
+ myorg = WarpZone_RefSys_TransformOrigin(self.realowner, self, org);
if(self.hook_length < 0)
self.hook_length = vlen(myorg - self.origin);
if(autocvar_g_grappling_hook_tarzan)
{
- v = v0 = WarpZone_RefSys_TransformVelocity(self.owner, self, self.owner.velocity);
+ v = v0 = WarpZone_RefSys_TransformVelocity(self.realowner, self, self.realowner.velocity);
// first pull the rope...
- if(self.owner.hook_state & HOOK_PULLING)
+ if(self.realowner.hook_state & HOOK_PULLING)
{
newlength = self.hook_length;
newlength = max(newlength - pullspeed * frametime, minlength);
self.hook_length = newlength;
}
- if(self.owner.hook_state & HOOK_RELEASING)
+ if(self.realowner.hook_state & HOOK_RELEASING)
{
newlength = dist;
self.hook_length = newlength;
v = v - dv * 0.5;
self.aiment.velocity = self.aiment.velocity - dv * 0.5;
self.aiment.flags &~= FL_ONGROUND;
- self.aiment.pusher = self.owner;
+ self.aiment.pusher = self.realowner;
self.aiment.pushltime = time + autocvar_g_maxpushtime;
}
}
- self.owner.flags &~= FL_ONGROUND;
+ self.realowner.flags &~= FL_ONGROUND;
}
- self.owner.velocity = WarpZone_RefSys_TransformVelocity(self, self.owner, v);
+ self.realowner.velocity = WarpZone_RefSys_TransformVelocity(self, self.realowner, v);
}
else
{
spd = pullspeed;
if(spd < 50)
spd = 0;
- self.owner.velocity = dir*spd;
- self.owner.movetype = MOVETYPE_FLY;
+ self.realowner.velocity = dir*spd;
+ self.realowner.movetype = MOVETYPE_FLY;
- self.owner.flags &~= FL_ONGROUND;
+ self.realowner.flags &~= FL_ONGROUND;
}
}
makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0');
- myorg = WarpZone_RefSys_TransformOrigin(self, self.owner, self.origin); // + v_forward * (-9);
+ myorg = WarpZone_RefSys_TransformOrigin(self, self.realowner, self.origin); // + v_forward * (-9);
if(myorg != self.hook_start)
{
void GrapplingHookTouch (void)
{
- if(SUB_OwnerCheck())
- return;
- if(SUB_NoImpactCheck())
- {
- RemoveGrapplingHook(self.owner);
- return;
- }
PROJECTILE_TOUCH;
GrapplingHook_Stop();
WarpZone_RefSys_BeginAddingIncrementally(self, self.aiment);
}
- //self.owner.disableclientprediction = TRUE;
+ //self.realowner.disableclientprediction = TRUE;
}
void GrapplingHook_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
self.health = self.health - damage;
if (self.health <= 0)
{
- if(attacker != self.owner)
+ if(attacker != self.realowner)
{
- self.owner.pusher = attacker;
- self.owner.pushltime = time + autocvar_g_maxpushtime;
+ self.realowner.pusher = attacker;
+ self.realowner.pushltime = time + autocvar_g_maxpushtime;
}
- RemoveGrapplingHook(self.owner);
+ RemoveGrapplingHook(self.realowner);
}
}
}
--s;
vs = hook_shotorigin[s];
- // UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
- sound (self, CHAN_WEAPON2, "weapons/hook_fire.wav", VOL_BASE, ATTN_NORM);
+ // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds
+ sound (self, CH_WEAPON_B, "weapons/hook_fire.wav", VOL_BASE, ATTN_NORM);
org = self.origin + self.view_ofs + v_forward * vs_x + v_right * -vs_y + v_up * vs_z;
tracebox(self.origin + self.view_ofs, '-3 -3 -3', '3 3 3', org, MOVE_NORMAL, self);
pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1);
missile = WarpZone_RefSys_SpawnSameRefSys(self);
- missile.owner = self;
+ missile.owner = missile.realowner = self;
self.hook = missile;
missile.classname = "grapplinghook";
void g_model_setcolormaptoactivator (void)
{
- if(teams_matter)
+ if(teamplay)
{
if(activator.team)
self.colormap = (activator.team - 1) * 0x11;
void setanim(entity e, vector anim, float looping, float override, float restart)
{
+ if (!anim)
+ return; // no animation was given to us! We can't use this.
+
if (anim_x == e.animstate_startframe)
if (anim_y == e.animstate_numframes)
if (anim_z == e.animstate_framerate)
stemp = self;
otemp = other;
+ if(stemp.target_random)
+ RandomSelection_Init();
+
for(i = 0; i < 4; ++i)
{
switch(i)
for(t = world; (t = find(t, targetname, s)); )
if(t.use)
{
- //print(stemp.classname, " ", stemp.targetname, " -> ", t.classname, " ", t.targetname, "\n");
- self = t;
- other = stemp;
- activator = act;
- self.use();
+ if(stemp.target_random)
+ {
+ RandomSelection_Add(t, 0, string_null, 1, 0);
+ }
+ else
+ {
+ self = t;
+ other = stemp;
+ activator = act;
+ self.use();
+ }
}
}
}
+ if(stemp.target_random && RandomSelection_chosen_ent)
+ {
+ self = RandomSelection_chosen_ent;
+ other = stemp;
+ activator = act;
+ self.use();
+ }
+
activator = act;
self = stemp;
other = otemp;
}
if (self.noise)
- sound (self.enemy, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self.enemy, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
// don't trigger again until reset
self.takedamage = DAMAGE_NO;
{
other.health = min(other.health + self.health, self.max_health);
other.pauserothealth_finished = max(other.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot);
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+ sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
}
}
}
{
other.gravity = g;
if(self.noise != "")
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+ sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
UpdateCSQCProjectile(self.owner);
}
};
else
snd = self.noise;
msg_entity = activator;
- soundto(MSG_ONE, self, CHAN_TRIGGER, snd, VOL_BASE * self.volume, self.atten);
+ soundto(MSG_ONE, self, CH_TRIGGER, snd, VOL_BASE * self.volume, self.atten);
}
void target_speaker_use_on()
{
}
else
snd = self.noise;
- sound(self, CHAN_TRIGGER, snd, VOL_BASE * self.volume, self.atten);
+ sound(self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten);
if(self.spawnflags & 3)
self.use = target_speaker_use_off;
}
void target_speaker_use_off()
{
- sound(self, CHAN_TRIGGER, "misc/null.wav", VOL_BASE * self.volume, self.atten);
+ sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASE * self.volume, self.atten);
self.use = target_speaker_use_on;
}
void target_speaker_reset()
if (self.active != ACTIVE_ACTIVE)
return;
- // FIXME: Better checking for what to push and not.
- if not(other.iscreature)
- if (other.classname != "corpse")
- if (other.classname != "body")
- if (other.classname != "gib")
- if (other.classname != "missile")
- if (other.classname != "rocket")
- if (other.classname != "casing")
- if (other.classname != "grenade")
- if (other.classname != "plasma")
- if (other.classname != "plasma_prim")
- if (other.classname != "plasma_chain")
- if (other.classname != "droppedweapon")
- if (other.classname != "nexball_basketball")
- if (other.classname != "nexball_football")
- return;
-
- if (other.deadflag && other.iscreature)
+ if (!isPushable(other))
return;
EXACTTRIGGER_TOUCH;
if (self.active != ACTIVE_ACTIVE)
return;
- // FIXME: Better checking for what to push and not.
- if not(other.iscreature)
- if (other.classname != "corpse")
- if (other.classname != "body")
- if (other.classname != "gib")
- if (other.classname != "missile")
- if (other.classname != "rocket")
- if (other.classname != "casing")
- if (other.classname != "grenade")
- if (other.classname != "plasma")
- if (other.classname != "plasma_prim")
- if (other.classname != "plasma_chain")
- if (other.classname != "droppedweapon")
- if (other.classname != "nexball_basketball")
- if (other.classname != "nexball_football")
- return;
-
- if (other.deadflag && other.iscreature)
+ if (!isPushable(other))
return;
EXACTTRIGGER_TOUCH;
if (self.active != ACTIVE_ACTIVE)
return;
- // FIXME: Better checking for what to push and not.
- if not(other.iscreature)
- if (other.classname != "corpse")
- if (other.classname != "body")
- if (other.classname != "gib")
- if (other.classname != "missile")
- if (other.classname != "rocket")
- if (other.classname != "casing")
- if (other.classname != "grenade")
- if (other.classname != "plasma")
- if (other.classname != "plasma_prim")
- if (other.classname != "plasma_chain")
- if (other.classname != "droppedweapon")
- if (other.classname != "nexball_basketball")
- if (other.classname != "nexball_football")
- return;
-
- if (other.deadflag && other.iscreature)
+ if (!isPushable(other))
return;
EXACTTRIGGER_TOUCH;
* players. Also plays reminder sounds.
*/
void timeoutHandler_Think() {
- local string timeStr;
local entity plr;
if (timeoutStatus == 1) {
if (remainingLeadTime > 0) {
//centerprint the information to every player
- timeStr = getTimeoutText(0);
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, timeStr);
+ Send_CSQC_Centerprint_Generic(plr, CPID_TIMEOUT_COUNTDOWN, "Timeout begins in %d seconds!", 1, remainingLeadTime);
}
}
remainingLeadTime -= 1;
}
else if (timeoutStatus == 2) {
if (remainingTimeoutTime > 0) {
- timeStr = getTimeoutText(0);
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, timeStr);
+ Send_CSQC_Centerprint_Generic(plr, CPID_TIMEOUT_COUNTDOWN, "Timeout ends in %d seconds!", 1, remainingTimeoutTime);
}
}
if(remainingTimeoutTime == autocvar_sv_timeout_resumetime) { //play a warning sound when only <sv_timeout_resumetime> seconds are left
//get rid of the countdown message
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, "");
+ Send_CSQC_Centerprint_Generic_Expire(plr, CPID_TIMEOUT_COUNTDOWN);
}
}
remove(self);
else if (timeoutStatus == 0) { //if a player called the resumegame command (which set timeoutStatus to 0 already)
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, "");
+ Send_CSQC_Centerprint_Generic_Expire(plr, CPID_TIMEOUT_COUNTDOWN);
}
}
remove(self);
BADCVAR("sv_vote_master_password");
BADCVAR("sys_colortranslation");
BADCVAR("sys_specialcharactertranslation");
+ BADCVAR("timeformat");
BADCVAR("timestamps");
BADPREFIX("developer_");
BADPREFIX("g_ban_");
BADPREFIX("g_chat_flood_");
+ BADPREFIX("g_playerstats_");
BADPREFIX("g_voice_flood_");
BADPREFIX("rcon_");
BADPREFIX("settemp_");
BADPREFIX("sv_weaponstats_");
// these can contain player IDs, so better hide
- BADCVAR("g_forced_team_red");
- BADCVAR("g_forced_team_blue");
- BADCVAR("g_forced_team_yellow");
- BADCVAR("g_forced_team_pink");
+ BADPREFIX("g_forced_team_");
// mapinfo
BADCVAR("fraglimit");
BADCVAR("g_ctf_ignore_frags");
BADCVAR("g_ctf_win_mode");
BADCVAR("g_domination_point_limit");
+ BADCVAR("g_friendlyfire");
BADCVAR("g_fullbrightitems");
BADCVAR("g_fullbrightplayers");
BADCVAR("g_keyhunt_point_limit");
BADCVAR("g_maplist_votable_abstain");
BADCVAR("g_maplist_votable_nodetail");
BADCVAR("g_maplist_votable_suggestions");
+ BADCVAR("g_maxplayers");
BADCVAR("g_minstagib");
+ BADCVAR("g_mirrordamage");
BADCVAR("g_nexball_goallimit");
BADCVAR("g_runematch_point_limit");
BADCVAR("g_start_delay");
+ BADCVAR("g_warmup");
BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay");
BADCVAR("hostname");
BADCVAR("log_file");
BADCVAR("maxplayers");
- BADCVAR("g_maxplayers");
BADCVAR("minplayers");
BADCVAR("net_address");
BADCVAR("port");
BADCVAR("sv_vote_master_commands");
BADCVAR("sv_vote_master_password");
BADCVAR("sv_vote_simple_majority_factor");
+ BADCVAR("sys_ticrate");
+ BADCVAR("teamplay_mode");
BADCVAR("timelimit_override");
- BADCVAR("g_warmup");
BADPREFIX("g_warmup_");
- BADCVAR("teamplay_mode");
if(autocvar_g_minstagib)
{
GameLogInit(); // prepare everything
if(autocvar_sv_eventlog)
{
- s = strcat(ftos(autocvar_sv_eventlog_files_counter), ".");
- s = strcat(s, ftos(random()));
+ s = sprintf("%d.%s.%06d", ftos(autocvar_sv_eventlog_files_counter), strftime(FALSE, "%s"), floor(random() * 1000000));
matchid = strzone(s);
GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s));
if(Map_Count == 0)
{
bprint( "Maplist is empty! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
if(allowReset)
{
bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
}
}
- if(teams_matter)
+ if(teamplay)
{
s = strcat(":labels:teamscores:", GetTeamScoreString(0, 0));
if(to_console)
string s;
if(!e.autoscreenshot) // initial call
{
- e.angles = e.v_angle;
- e.angles_x = -e.angles_x;
e.autoscreenshot = time + 0.8; // used for autoscreenshot
e.health = -2342;
// first intermission phase; voting phase has positive health (used to decide whether to send SVC_FINALE or not)
WriteByte(MSG_ONE, SVC_INTERMISSION);
}
}
-
- //e.velocity = '0 0 0';
- //e.fixangle = TRUE;
-
- // TODO halt weapon animation
}
FOR_EACH_CLIENT(e)
PlayerStats_AddGlobalInfo(e);
PlayerStats_Shutdown();
+ WeaponStats_Shutdown();
if(autocvar_sv_eventlog)
GameLogEcho(":gameover");
// TODO make everything use THIS winning condition (except LMS)
WinningConditionHelper();
- if(teams_matter)
+ if(teamplay)
{
team1_score = TeamScore_GetCompareValue(COLOR_TEAM1);
team2_score = TeamScore_GetCompareValue(COLOR_TEAM2);
float mapvote_maps_suggested[MAPVOTE_COUNT];
string mapvote_suggestions[MAPVOTE_COUNT];
float mapvote_suggestion_ptr;
-float mapvote_maxlen;
float mapvote_voters;
float mapvote_votes[MAPVOTE_COUNT];
float mapvote_run;
for(j = 0; j < mapvote_count; ++j)
if(mapvote_maps[j] == nextMap)
return;
- if(strlen(nextMap) > mapvote_maxlen)
- mapvote_maxlen = strlen(nextMap);
+ // suggestions might be no longer valid/allowed after gametype switch!
+ if(isSuggestion)
+ if(!MapInfo_CheckMap(nextMap))
+ return;
mapvote_maps[mapvote_count] = strzone(nextMap);
mapvote_maps_suggested[mapvote_count] = isSuggestion;
if(mapvote_count == 0)
{
bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
// removes the need to bound()
string doublehex = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFFF";
-float RADAR_WIDTH_MAX = 2048;
-float RADAR_HEIGHT_MAX = 2048;
+float RADAR_WIDTH_MAX = 512;
+float RADAR_HEIGHT_MAX = 512;
float sharpen_buffer[RADAR_WIDTH_MAX * 3];
void sharpen_set(float x, float v)
return;
}
- cvar_set("timelimit", ftos(new));
+ cvar_set("timelimit", ftos(new / 60));
+}
+
+float g_clientmodel_genericsendentity (entity to, float sf);
+void modelbug_make_svqc();
+void modelbug_make_csqc()
+{
+ Net_LinkEntity(self, TRUE, 0, g_clientmodel_genericsendentity);
+ self.think = modelbug_make_svqc;
+ self.nextthink = time + 1;
+ setorigin(self, self.origin - '0 0 8');
+}
+void modelbug_make_svqc()
+{
+ self.SendEntity = func_null;
+ self.think = modelbug_make_csqc;
+ self.nextthink = time + 1;
+ setorigin(self, self.origin + '0 0 8');
+}
+
+void modelbug()
+{
+ entity e;
+ e = spawn();
+ setorigin(e, nextent(world).origin);
+ precache_model("models_portal.md3");
+ setmodel(e, "models/portal.md3");
+ e.think = modelbug_make_svqc;
+ e.nextthink = time + 1;
}
void GameCommand(string command)
}
else
{
- centerprint_atprio(client, CENTERPRIO_ADMIN, strcat("^3", admin_name(), ":\n\n^7", argv(2)));
+ centerprint(client, strcat("^3", admin_name(), ":\n\n^7", argv(2)));
sprint(client, strcat("\{1}\{13}^3", admin_name(), "^7: ", argv(2), "\n"));
}
print("Message sent to ", client.netname, "\n");
if (argv(0) == "lockteams")
{
- if(teams_matter)
+ if(teamplay)
{
lockteams = 1;
bprint("^1The teams are now locked.\n");
if (argv(0) == "unlockteams")
{
- if(teams_matter)
+ if(teamplay)
{
lockteams = 0;
bprint("^1The teams are now unlocked.\n");
// 2 (10) no centerprint, admin message
// 3 (11) no centerprint, no admin message
- if(!teams_matter) { // death match
+ if(!teamplay) { // death match
print("Currently not playing a team game\n");
return;
}
return;
}
+ if(argv(0) == "modelbug")
+ {
+ modelbug();
+ return;
+ }
+
print("Invalid command. For a list of supported commands, try sv_cmd help.\n");
}
string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information
{
- local float nPlayerHealth = rint(enPlayer.health);
- local float nPlayerArmor = rint(enPlayer.armorvalue);
- local float nPlayerHandicap = enPlayer.cvar_cl_handicap;
- local float nPlayerPing = rint(enPlayer.ping);
- local string strPlayerPingColor;
- local string strMessage;
+ float nPlayerHealth = rint(enPlayer.health);
+ float nPlayerArmor = rint(enPlayer.armorvalue);
+ float nPlayerHandicap = enPlayer.cvar_cl_handicap;
+ float nPlayerPing = rint(enPlayer.ping);
+ string strPlayerPingColor;
+ string strMessage;
+
if(nPlayerPing >= 150)
strPlayerPingColor = "^1";
else
strPlayerPingColor = "^2";
if((autocvar_sv_fragmessage_information_stats) && (enPlayer.health >= 1))
- strMessage = strcat(strMessage, "\n^7(Health ^1", ftos(nPlayerHealth), "^7 / Armor ^2", ftos(nPlayerArmor), "^7)");
+ strMessage = strcat(strMessage, "^7(Health ^1", ftos(nPlayerHealth), "^7 / Armor ^2", ftos(nPlayerArmor), "^7)");
if(autocvar_sv_fragmessage_information_ping) {
if(clienttype(enPlayer) == CLIENTTYPE_BOT) // Bots have no ping
} else if(autocvar_sv_fragmessage_information_handicap) {
if(autocvar_sv_fragmessage_information_handicap == 2)
if(nPlayerHandicap <= 1)
- strMessage = strcat(strMessage, "\n^7(Handicap ^2Off^7)");
+ strMessage = strcat(strMessage, "^7(Handicap ^2Off^7)");
else
- strMessage = strcat(strMessage, "\n^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
+ strMessage = strcat(strMessage, "^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
else if(nPlayerHandicap > 1)
- strMessage = strcat(strMessage, "\n^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
+ strMessage = strcat(strMessage, "^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
}
+
+ if(strMessage) // add new line to the beginning if there is a message
+ strMessage = strcat("\n", strMessage);
+
return strMessage;
}
void bcenterprint(string s)
MUTATOR_CALLHOOK(GetCvars);
GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
GetCvars_handleFloat(s, f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
- GetCvars_handleFloat(s, f, cvar_scr_centertime, "scr_centertime");
GetCvars_handleString(s, f, cvar_g_xonoticversion, "g_xonoticversion");
GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap");
+ GetCvars_handleFloat(s, f, cvar_cl_clippedspectating, "cl_clippedspectating");
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete_AndBuildImpulseList);
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete);
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete);
return -1;
}
-#define CENTERPRIO_POINT 1
-#define CENTERPRIO_SPAM 2
-#define CENTERPRIO_VOTE 4
-#define CENTERPRIO_NORMAL 5
-#define CENTERPRIO_SHIELDING 7
-#define CENTERPRIO_MAPVOTE 9
-#define CENTERPRIO_IDLEKICK 50
-#define CENTERPRIO_ADMIN 99
-.float centerprint_priority;
-.float centerprint_expires;
-void centerprint_atprio(entity e, float prio, string s)
-{
- if (intermission_running)
- if (prio < CENTERPRIO_MAPVOTE)
- return;
- if (time > e.centerprint_expires)
- e.centerprint_priority = 0;
- if (prio >= e.centerprint_priority)
- {
- e.centerprint_priority = prio;
- if (timeoutStatus == 2)
- e.centerprint_expires = time + (e.cvar_scr_centertime * TIMEOUT_SLOWMO_VALUE);
- else
- e.centerprint_expires = time + e.cvar_scr_centertime;
- centerprint_builtin(e, s);
- }
-}
-void centerprint_expire(entity e, float prio)
-{
- if (prio == e.centerprint_priority)
- {
- e.centerprint_priority = 0;
- centerprint_builtin(e, "");
- }
-}
-void centerprint(entity e, string s)
-{
- centerprint_atprio(e, CENTERPRIO_NORMAL, s);
-}
-
// decolorizes and team colors the player name when needed
string playername(entity p)
{
string t;
- if (teams_matter && !intermission_running && p.classname == "player")
+ if (teamplay && !intermission_running && p.classname == "player")
{
t = Team_ColorCode(p.team);
return strcat(t, strdecolorize(p.netname));
// Sound functions
string precache_sound (string s) = #19;
-void(entity e, float chan, string samp, float vol, float atten) sound_builtin = #8;
float precache_sound_index (string s) = #19;
#define SND_VOLUME 1
return TRUE;
}
+#ifdef COMPAT_XON010_CHANNELS
+void(entity e, float chan, string samp, float vol, float atten) sound_builtin = #8;
void sound(entity e, float chan, string samp, float vol, float atten)
{
if (!sound_allowed(MSG_BROADCAST, e))
return;
sound_builtin(e, chan, samp, vol, atten);
}
+#else
+#undef sound
+void sound(entity e, float chan, string samp, float vol, float atten)
+{
+ if (!sound_allowed(MSG_BROADCAST, e))
+ return;
+ sound7(e, chan, samp, vol, atten, 0, 0);
+}
+#endif
+
void soundtoat(float dest, entity e, vector o, float chan, string samp, float vol, float atten)
{
float entno, idx;
sflags |= SND_VOLUME;
if (atten != 64)
sflags |= SND_ATTENUATION;
- if (entno >= 8192)
+ if (entno >= 8192 || chan < 0 || chan > 7)
sflags |= SND_LARGEENTITY;
if (idx >= 256)
sflags |= SND_LARGESOUND;
}
void soundat(entity e, vector o, float chan, string samp, float vol, float atten)
{
- soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten);
+ soundtoat(((chan & 8) ? MSG_ALL : MSG_BROADCAST), e, o, chan, samp, vol, atten);
}
void stopsoundto(float dest, entity e, float chan)
{
entno = num_for_edict(e);
- if (entno >= 8192)
+ if (entno >= 8192 || chan < 0 || chan > 7)
{
float idx, sflags;
idx = precache_sound_index("misc/null.wav");
{
//stuffcmd(e, strcat("play2 ", filename, "\n"));
msg_entity = e;
- soundtoat(MSG_ONE, world, '0 0 0', CHAN_AUTO, filename, VOL_BASE, ATTN_NONE);
+ soundtoat(MSG_ONE, world, '0 0 0', CH_INFO, filename, VOL_BASE, ATTN_NONE);
}
// use this one if you might be causing spam (e.g. from touch functions that might get called more than once per frame)
if (autocvar_bot_sound_monopoly)
return;
- sound(world, CHAN_AUTO, samp, VOL_BASE, ATTN_NONE);
+ sound(world, CH_INFO, samp, VOL_BASE, ATTN_NONE);
}
void PrecachePlayerSounds(string f);
#define WRITESPECTATABLE_MSG_ONE(statement) WRITESPECTATABLE_MSG_ONE_VARNAME(oldmsg_entity, statement)
#define WRITESPECTATABLE(msg,statement) if(msg == MSG_ONE) { WRITESPECTATABLE_MSG_ONE(statement); } else statement float WRITESPECTATABLE_workaround = 0
+
+void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration, float countdown_num)
+{
+ if (clienttype(e) == CLIENTTYPE_REAL)
+ {
+ msg_entity = e;
+ WRITESPECTATABLE_MSG_ONE({
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_NOTIFY);
+ WriteByte(MSG_ONE, CSQC_CENTERPRINT_GENERIC);
+ WriteByte(MSG_ONE, id);
+ WriteString(MSG_ONE, s);
+ if (id != 0 && s != "")
+ {
+ WriteByte(MSG_ONE, duration);
+ WriteByte(MSG_ONE, countdown_num);
+ }
+ });
+ }
+}
+void Send_CSQC_Centerprint_Generic_Expire(entity e, float id)
+{
+ Send_CSQC_Centerprint_Generic(e, id, "", 1, 0);
+}
// WARNING: this kills the trace globals
#define EXACTTRIGGER_TOUCH if(WarpZoneLib_ExactTrigger_Touch()) return
#define EXACTTRIGGER_INIT WarpZoneLib_ExactTrigger_Init()
void remove_unsafely(entity e)
{
+ if(e.classname == "spike")
+ error("Removing spikes is forbidden (crylink bug), please report");
remove_builtin(e);
}
#define SUB_OwnerCheck() (other && (other == self.owner))
+void RemoveGrapplingHook(entity pl);
+void W_Crylink_Dequeue(entity e);
float WarpZone_Projectile_Touch_ImpactFilter_Callback()
{
if(SUB_OwnerCheck())
return TRUE;
if(SUB_NoImpactCheck())
{
- remove(self);
+ if(self.classname == "grapplinghook")
+ RemoveGrapplingHook(self.realowner);
+ else if(self.classname == "spike")
+ {
+ W_Crylink_Dequeue(self);
+ remove(self);
+ }
+ else
+ remove(self);
return TRUE;
}
if(trace_ent && trace_ent.solid > SOLID_TRIGGER)
- UpdateCSQCProjectileNextFrame(self);
+ UpdateCSQCProjectile(self);
return FALSE;
}
#define PROJECTILE_TOUCH if(WarpZone_Projectile_Touch()) return
dprint(data);
dprint("\nEnd of data.\n");
- if (id == URI_GET_DISCARD)
+ if(url_URI_Get_Callback(id, status, data))
+ {
+ // handled
+ }
+ else if (id == URI_GET_DISCARD)
{
// discard
}
{
switch(algn)
{
- case 1: // right
+ default:
+ case 3: // right
break;
- case 2: // left
+ case 4: // left
vecs_y = -vecs_y;
break;
- default:
- case 3:
+ case 1:
if(allowcenter) // 2: allow center handedness
{
// center
}
break;
- case 4:
+ case 2:
if(allowcenter) // 2: allow center handedness
{
// center
{
if (visual)
{
- vecs = shotorg_adjustfromclient(vecs, y_is_right, TRUE, algn);
+ vecs_y = 0;
+ vecs_z -= 2;
}
else
{
}
else if (autocvar_g_shootfromcenter)
{
- if (visual)
- {
- vecs = shotorg_adjustfromclient(vecs, y_is_right, TRUE, algn);
- }
- else
- {
- vecs_y = 0;
- vecs_z -= 2;
- }
+ vecs_y = 0;
+ vecs_z -= 2;
}
else if ((s = autocvar_g_shootfromfixedorigin) != "")
{
e.think = defer_think;
e.nextthink = time + fdelay;
}
+
+.string aiment_classname;
+.float aiment_deadflag;
+void SetMovetypeFollow(entity ent, entity e)
+{
+ // FIXME this may not be warpzone aware
+ ent.movetype = MOVETYPE_FOLLOW; // make the hole follow
+ ent.solid = SOLID_NOT; // MOVETYPE_FOLLOW is always non-solid - this means this cannot be teleported by warpzones any more! Instead, we must notice when our owner gets teleported.
+ ent.aiment = e; // make the hole follow bmodel
+ ent.punchangle = e.angles; // the original angles of bmodel
+ ent.view_ofs = ent.origin - e.origin; // relative origin
+ ent.v_angle = ent.angles - e.angles; // relative angles
+ ent.aiment_classname = strzone(e.classname);
+ ent.aiment_deadflag = e.deadflag;
+}
+void UnsetMovetypeFollow(entity ent)
+{
+ ent.movetype = MOVETYPE_FLY;
+ PROJECTILE_MAKETRIGGER(ent);
+ ent.aiment = world;
+}
+float LostMovetypeFollow(entity ent)
+{
+/*
+ if(ent.movetype != MOVETYPE_FOLLOW)
+ if(ent.aiment)
+ error("???");
+*/
+ if(ent.aiment)
+ {
+ if(ent.aiment.classname != ent.aiment_classname)
+ return 1;
+ if(ent.aiment.deadflag != ent.aiment_deadflag)
+ return 1;
+ }
+ return 0;
+}
+
+float isPushable(entity e)
+{
+ if(e.iscreature)
+ return TRUE;
+ switch(e.classname)
+ {
+ case "body":
+ case "droppedweapon":
+ case "keepawayball":
+ case "nexball_basketball":
+ case "nexball_football":
+ return TRUE;
+ case "bullet": // antilagged bullets can't hit this either
+ return FALSE;
+ }
+ if (e.projectiledeathtype)
+ return TRUE;
+ return FALSE;
+}
return 0;
}
+float overtime_msg_time;
void onslaught_generator_think()
{
local float d;
self.nextthink = ceil(time + 1);
if (!gameover)
{
- if (autocvar_timelimit)
- if (time > game_starttime + autocvar_timelimit * 60)
+ if (autocvar_timelimit && time > game_starttime + autocvar_timelimit * 60)
{
+ if (!overtime_msg_time)
+ {
+ FOR_EACH_PLAYER(e)
+ centerprint(e, "^3Now playing ^1OVERTIME^3!\n^3Generators start now to self-damaging.\n^3The more control points your team holds,\n^3the more damage the enemy generator gets.");
+ overtime_msg_time = time;
+ }
// self.max_health / 300 gives 5 minutes of overtime.
// control points reduce the overtime duration.
- sound(self, CHAN_TRIGGER, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM);
d = 1;
e = findchain(classname, "onslaught_controlpoint");
while (e)
d = d * self.max_health / 300;
Damage(self, self, self, d, DEATH_HURTTRIGGER, self.origin, '0 0 0');
}
+ else if (overtime_msg_time)
+ overtime_msg_time = 0;
}
};
if(random() < 0.01)
{
pointparticles(particleeffectnum("electro_ballexplode"), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1);
- sound(self, CHAN_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM);
}
else
pointparticles(particleeffectnum("torch_small"), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1);
if(self.count==40||self.count==20)
{
onslaught_generator_ring_spawn(self.origin);
- sound(self, CHAN_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM);
}
// Throw some gibs
if(random() < 0.25)
{
te_explosion(self.origin);
- sound(self, CHAN_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
}
// Particles
te_explosion(org);
onslaught_generator_shockwave_spawn(org);
pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1);
- sound(self, CHAN_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
}
else
self.nextthink = time + 0.05;
// Throw some flaming gibs on damage, more damage = more chance for gib
if(random() < damage/220)
{
- sound(self, CHAN_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
i = random();
if(i < 0.3)
ons_throwgib(hitloc + '0 0 20', force * -1, "models/onslaught/gen_gib1.md3", 5, TRUE);
//sound on every hit
if (random() < 0.5)
- sound(self, CHAN_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM);
else
- sound(self, CHAN_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM);
}
//throw some gibs on damage
self.think = onslaught_generator_delayed;
self.nextthink = time + 0.2;
setmodel(self, "models/onslaught/generator.md3");
+ setsize(self, '-52 -52 -14', '52 52 75');
WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health);
WaypointSprite_UpdateHealth(self.sprite, self.health);
self.nextthink = time + 0.2;
InitializeEntity(self, onslaught_generator_delayed, INITPRIO_LAST);
- WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite);
+ WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite, RADARICON_NONE, '0 0 0');
WaypointSprite_UpdateRule(self.sprite, COLOR_TEAM2, SPRITERULE_TEAMPLAY);
WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health);
WaypointSprite_UpdateHealth(self.sprite, self.health);
pointparticles(particleeffectnum("sparks"), hitloc, force*-1, 1);
//sound on every hit
if (random() < 0.5)
- sound(self, CHAN_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM);
else
- sound(self, CHAN_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM);
if (self.health < 0)
{
- sound(self, CHAN_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
{
string t;
self.owner.waslinked = self.owner.islinked;
}
- if (self.punchangle_x > 2)
- self.punchangle_x = self.punchangle_x - 2;
- else if (self.punchangle_x < -2)
- self.punchangle_x = self.punchangle_x + 2;
- else
- self.punchangle_x = 0;
- if (self.punchangle_y > 2)
- self.punchangle_y = self.punchangle_y - 2;
- else if (self.punchangle_y < -2)
- self.punchangle_y = self.punchangle_y + 2;
- else
- self.punchangle_y = 0;
- if (self.punchangle_z > 2)
- self.punchangle_z = self.punchangle_z - 2;
- else if (self.punchangle_z < -2)
- self.punchangle_z = self.punchangle_z + 2;
- else
- self.punchangle_z = 0;
+
+ if (self.punchangle_x > 0)
+ {
+ self.punchangle_x = self.punchangle_x - 60 * sys_frametime;
+ if (self.punchangle_x < 0)
+ self.punchangle_x = 0;
+ }
+ else if (self.punchangle_x < 0)
+ {
+ self.punchangle_x = self.punchangle_x + 60 * sys_frametime;
+ if (self.punchangle_x > 0)
+ self.punchangle_x = 0;
+ }
+
+ if (self.punchangle_y > 0)
+ {
+ self.punchangle_y = self.punchangle_y - 60 * sys_frametime;
+ if (self.punchangle_y < 0)
+ self.punchangle_y = 0;
+ }
+ else if (self.punchangle_y < 0)
+ {
+ self.punchangle_y = self.punchangle_y + 60 * sys_frametime;
+ if (self.punchangle_y > 0)
+ self.punchangle_y = 0;
+ }
+
+ if (self.punchangle_z > 0)
+ {
+ self.punchangle_z = self.punchangle_z - 60 * sys_frametime;
+ if (self.punchangle_z < 0)
+ self.punchangle_z = 0;
+ }
+ else if (self.punchangle_z < 0)
+ {
+ self.punchangle_z = self.punchangle_z + 60 * sys_frametime;
+ if (self.punchangle_z > 0)
+ self.punchangle_z = 0;
+ }
+
self.angles_x = self.punchangle_x;
self.angles_y = self.punchangle_y + self.mangle_y;
self.angles_z = self.punchangle_z;
- self.mangle_y = self.mangle_y + 1.5;
+ self.mangle_y = self.mangle_y + 45 * sys_frametime;
- self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd / 8));
- self.cp_bob_spd = self.cp_bob_spd + 0.5;
+ self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd));
+ self.cp_bob_spd = self.cp_bob_spd + 1.875 * sys_frametime;
if(self.cp_bob_dmg_z > 0)
- self.cp_bob_dmg_z = self.cp_bob_dmg_z - 0.1;
+ self.cp_bob_dmg_z = self.cp_bob_dmg_z - 3 * sys_frametime;
else
self.cp_bob_dmg_z = 0;
setorigin(self,self.cp_origin + self.cp_bob_origin + self.cp_bob_dmg);
pointparticles(particleeffectnum("electricity_sparks"), self.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1);
if(random() > 0.8)
- sound(self, CHAN_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTN_NORM);
else if (random() > 0.5)
- sound(self, CHAN_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTN_NORM);
}
};
self.health = self.max_health;
self.count = autocvar_g_onslaught_cp_regen * sys_frametime; // slow repair rate from now on
self.think = onslaught_controlpoint_icon_think;
- sound(self, CHAN_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM);
bprint(ColoredTeamName(self.team), " captured ", self.owner.message, " control point\n");
self.owner.iscaptured = TRUE;
e.think = onslaught_controlpoint_icon_buildthink;
e.nextthink = time + sys_frametime;
e.count = (e.max_health - e.health) * sys_frametime / autocvar_g_onslaught_cp_buildtime; // how long it takes to build
- sound(e, CHAN_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM);
+ sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM);
self.team = e.team;
self.colormap = e.colormap;
WaypointSprite_UpdateBuildFinished(self.sprite, time + (e.max_health - e.health) / (e.count / sys_frametime));
waypoint_spawnforitem(self);
- WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite);
+ WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite, RADARICON_NONE, '0 0 0');
WaypointSprite_UpdateRule(self.sprite, COLOR_TEAM2, SPRITERULE_TEAMPLAY);
onslaught_updatelinks();
self = other;
other = temp;
+ /* PLEASE FIX THE SOUND CHANNEL BEFORE ACTIVATING THIS
if (self.classname == "monster_ogre")
sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);// play chainsaw drag sound
+ */
//dprint ("t_movetarget\n");
self.goalentity = self.movetarget = find (world, targetname, other.target);
if (other.enemy)
return; // fighting, not following a path
+ /* PLEASE FIX THE SOUND CHANNEL BEFORE ACTIVATING THIS
if (other.classname == "monster_ogre")
sound (other, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);// play chainsaw drag sound
+ */
monster_wanderpaththink();
};
if (random() < 0.005)
{
// blink for an instant, this causes the appear sound, alarming the player as if under attack
+ /* PLEASE FIX THE SOUND CHANNEL BEFORE ACTIVATING THIS
sound(self, CHAN_AUTO, "wizard/wsight.wav", 1, ATTN_NORM);
+ */
a = 1;
}
}
else
{
// if unghosting, make sure we have an enemy, otherwise stay ghosted (even if blinking) so we can't be shot while blinking
+ /* PLEASE FIX THE SOUND CHANNEL BEFORE ACTIVATING THIS
if (self.solid != SOLID_SLIDEBOX)
sound(self, CHAN_AUTO, "wizard/wsight.wav", 1, ATTN_NORM);
+ */
self.solid = SOLID_SLIDEBOX;
self.takedamage = DAMAGE_AIM;
}
+#ifdef SVQC
.vector moveto;
/**
}
*/
+/*
void movelib_move_simple(vector newdir,float velo,float blendrate)
{
self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo;
}
+*/
+#define movelib_move_simple(newdir,velo,blendrate) \
+ self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo
void movelib_beak_simple(float force)
{
Pitches and rolls the entity to match the gound.
Yed need to set v_up and v_forward (generally by calling makevectors) before calling this.
**/
+#endif
+
void movelib_groundalign4point(float spring_length, float spring_up, float blendrate)
{
vector a, b, c, d, e, r, push_angle, ahead, side;
entity e;
r = 0;
for(e = cb; e.cbc_next; e = e.cbc_next)
+ {
+ CallbackChain_ReturnValue = r;
r |= e.cbc_next.cbc_func();
+ }
return r; // callbacks return an error status, so 0 is default return value
}
#define CBC_ORDER_LAST 2
#define CBC_ORDER_ANY 4
+float CallbackChain_ReturnValue; // read-only field of the current return value
+
entity CallbackChain_New(string name);
float CallbackChain_Add(entity cb, float() func, float order)
float CallbackChain_Remove(entity cb, float() func);
#define MUTATOR_HOOKABLE(cb) entity HOOK_##cb
#define MUTATOR_CALLHOOK(cb) CallbackChain_Call(HOOK_##cb)
+#define MUTATOR_RETURNVALUE CallbackChain_ReturnValue
// INPUT
entity self;
float olditems; // also technically output, but since it is at the end of the function it's useless for that :P
+
+MUTATOR_HOOKABLE(PlayerUseKey);
+ // called when the use key is pressed
+ // if MUTATOR_RETURNVALUE is 1, don't do anything
+ // return 1 if the use key actually did something
return;
self.freezetag_frozen = 1;
self.freezetag_revive_progress = 0;
+ self.health = 1;
entity ice;
ice = spawn();
RemoveGrapplingHook(self);
// add waypoint
- WaypointSprite_Spawn("freezetag_frozen", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attached, TRUE);
- if(self.waypointsprite_attached)
- {
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_WAYPOINT, '0.25 0.90 1');
- }
+ WaypointSprite_Spawn("freezetag_frozen", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attached, TRUE, RADARICON_WAYPOINT, '0.25 0.90 1');
if(attacker == self)
{
{
self.freezetag_frozen = 0;
self.freezetag_revive_progress = 0;
+ self.health = autocvar_g_balance_health_start;
// remove the ice block
entity ice;
bprint("^7", frag_target.netname, "^1 was frozen by ^7", frag_attacker.netname, ".\n");
}
- frag_target.health = autocvar_g_balance_health_start; // "respawn" the player :P
+ frag_target.health = 1; // "respawn" the player :P
freezetag_CheckWinner();
if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * autocvar_g_freezetag_revive_speed, 1);
+ self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
if(self.freezetag_revive_progress >= 1)
{
else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1);
+ self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
}
else if(!n)
{
void ka_DropEvent(entity);
void ka_TimeScoring(void);
+entity ka_ball;
+
float ka_ballcarrier_waypointsprite_visible_for_player(entity);
void ka_Initialize() // run at the start of a match, initiates game mode
e.reset = ka_Reset;
e.touch = ka_TouchEvent;
e.owner = world;
+ ka_ball = e;
InitializeEntity(e, ka_RespawnBall, INITPRIO_SETLOCATION); // is this the right priority? Neh, I have no idea.. Well-- it works! So.
}
pointparticles(particleeffectnum("electro_combo"), oldballorigin, '0 0 0', 1);
pointparticles(particleeffectnum("electro_combo"), self.origin, '0 0 0', 1);
- WaypointSprite_Spawn("ka-ball", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, FALSE);
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '0 1 1');
+ WaypointSprite_Spawn("ka-ball", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAGCARRIER, '0 1 1');
WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
- sound(self, CHAN_AUTO, "keepaway/respawn.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
+ sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
}
else
{
if(other.classname != "player")
{ // The ball just touched an object, most likely the world
pointparticles(particleeffectnum("kaball_sparks"), self.origin, '0 0 0', 1);
- sound(self, CHAN_AUTO, "keepaway/touch.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTN_NORM);
return;
}
else if(self.wait > time) { return; }
// messages and sounds
Send_KillNotification(other.netname, "", "", KA_PICKUPBALL, MSG_KA);
WriteByte(MSG_BROADCAST, SVC_CENTERPRINT);
- WriteString(MSG_BROADCAST, strcat("\n\n", other.netname, "^7 has picked up the ball!\n"));
- sound(self.owner, CHAN_AUTO, "keepaway/pickedup.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
+ WriteString(MSG_BROADCAST, strcat(other.netname, "^7 has picked up the ball!"));
+ sound(self.owner, CH_TRIGGER, "keepaway/pickedup.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
// scoring
PlayerScore_Add(other, SP_KEEPAWAY_PICKUPS, 1);
// waypoints
- WaypointSprite_AttachCarrier("ka-ballcarrier", other);
+ WaypointSprite_AttachCarrier("ka-ballcarrier", other, RADARICON_FLAGCARRIER, '1 0 0');
other.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = ka_ballcarrier_waypointsprite_visible_for_player;
WaypointSprite_UpdateRule(other.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
- WaypointSprite_UpdateTeamRadar(other.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '1 0 0');
WaypointSprite_Ping(other.waypointsprite_attachedforcarrier);
WaypointSprite_Kill(self.waypointsprite_attachedforcarrier);
}
// messages and sounds
Send_KillNotification(plyr.netname, "", "", KA_DROPBALL, MSG_KA);
WriteByte(MSG_BROADCAST, SVC_CENTERPRINT);
- WriteString(MSG_BROADCAST, strcat("\n\n", plyr.netname, "^7 has dropped the ball!\n"));
- sound(other, CHAN_AUTO, "keepaway/dropped.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
+ WriteString(MSG_BROADCAST, strcat(plyr.netname, "^7 has dropped the ball!"));
+ sound(other, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
// scoring
// PlayerScore_Add(plyr, SP_KEEPAWAY_DROPS, 1); Not anymore, this is 100% the same as pickups and is useless.
// waypoints
- WaypointSprite_Spawn("ka-ball", 0, 0, ball, '0 0 64', world, ball.team, ball, waypointsprite_attachedforcarrier, FALSE);
+ WaypointSprite_Spawn("ka-ball", 0, 0, ball, '0 0 64', world, ball.team, ball, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAGCARRIER, '0 1 1');
WaypointSprite_UpdateRule(ball.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
- WaypointSprite_UpdateTeamRadar(ball.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '0 1 1');
WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier);
WaypointSprite_Kill(plyr.waypointsprite_attachedforcarrier);
}
}
else if(!frag_attacker.ballcarried)
if(autocvar_g_keepaway_noncarrier_warn)
- centerprint_atprio(frag_attacker, (CENTERPRIO_SPAM + 5), "Killing people while you don't have the ball gives no points!");
+ centerprint(frag_attacker, "Killing people while you don't have the ball gives no points!");
if(frag_attacker.ballcarried) // add to amount of kills while ballcarrier
PlayerScore_Add(frag_attacker, SP_SCORE, autocvar_g_keepaway_score_killac);
if(self.ballcarried)
self.items |= IT_KEY1;
- // drop the ball if the player presses the use button
- if(self.BUTTON_USE)
- if(self.ballcarried) { ka_DropEvent(self); }
+ return 0;
+}
+MUTATOR_HOOKFUNCTION(ka_PlayerUseKey)
+{
+ if(MUTATOR_RETURNVALUE == 0)
+ if(self.ballcarried)
+ {
+ ka_DropEvent(self);
+ return 1;
+ }
return 0;
}
MUTATOR_HOOK(PlayerPreThink, ka_PlayerPreThink, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerDamage_Calculate, ka_PlayerDamage, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerPowerups, ka_PlayerPowerups, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerUseKey, ka_PlayerUseKey, CBC_ORDER_ANY);
MUTATOR_ONADD
{
.float kh_dropperteam;
.entity kh_previous_owner;
.float kh_previous_owner_playerid;
+.float kh_cp_duration;
string kh_sound_capture = "kh/capture.wav";
string kh_sound_destroy = "kh/destroy.wav";
var kh_Think_t kh_Controller_Thinkfunc;
-void kh_Controller_SetThink(float t, string msg, kh_Think_t func) // runs occasionaly
+void kh_Controller_SetThink(float t, string msg, float centerprint_duration, kh_Think_t func) // runs occasionaly
{
kh_Controller_Thinkfunc = func;
kh_controller.cnt = ceil(t);
if(msg == "")
kh_Controller_Waitmsg = "";
else
+ {
+ kh_controller.kh_cp_duration = centerprint_duration;
kh_Controller_Waitmsg = strzone(msg);
+ }
if(t == 0)
kh_controller.nextthink = time; // force
}
+void kh_Controller_SetThink_NoMsg(float t, kh_Think_t func) // runs occasionaly
+{
+ kh_Controller_SetThink(t, "", 0, func);
+}
void kh_Controller_Think() // called a lot
{
FOR_EACH_PLAYER(e)
if(clienttype(e) == CLIENTTYPE_REAL)
- centerprint_atprio(e, CENTERPRIO_SPAM, s);
+ Send_CSQC_Centerprint_Generic(e, CPID_KH_MSG, s, self.kh_cp_duration, 0);
}
self.cnt -= 1;
}
if(key.kh_next == world)
{
// player is now a key carrier
- WaypointSprite_AttachCarrier("", player);
+ WaypointSprite_AttachCarrier("", player, RADARICON_FLAGCARRIER, colormapPaletteColor(player.team - 1, 0));
player.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = kh_KeyCarrier_waypointsprite_visible_for_player;
WaypointSprite_UpdateRule(player.waypointsprite_attachedforcarrier, player.team, SPRITERULE_TEAMPLAY);
if(player.team == COLOR_TEAM1)
WaypointSprite_UpdateSprites(player.waypointsprite_attachedforcarrier, "keycarrier-yellow", "keycarrier-friend", "keycarrier-yellow");
else if(player.team == COLOR_TEAM4)
WaypointSprite_UpdateSprites(player.waypointsprite_attachedforcarrier, "keycarrier-pink", "keycarrier-friend", "keycarrier-pink");
- WaypointSprite_UpdateTeamRadar(player.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, colormapPaletteColor(player.team - 1, 0));
if(!kh_no_radar_circles)
WaypointSprite_Ping(player.waypointsprite_attachedforcarrier);
}
void kh_Key_Collect(entity key, entity player) //a player picks up a dropped key
{
- sound(player, CHAN_AUTO, kh_sound_collect, VOL_BASE, ATTN_NORM);
+ sound(player, CH_TRIGGER, kh_sound_collect, VOL_BASE, ATTN_NORM);
if(key.kh_dropperteam != player.team)
{
kh_Key_Remove(key);
kh_no_radar_circles = FALSE;
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", kh_StartRound);
+ kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", 1, kh_StartRound);
}
void kh_WinnerTeam(float teem) // runs when a team wins
makevectors('0 1 0' * (self.cnt + mod(time, 360) * KH_KEY_XYSPEED));
setorigin(self, v_forward * KH_KEY_XYDIST + '0 0 1' * self.origin_z);
#endif
-
- if(self.owner.BUTTON_USE)
- if(time >= self.owner.kh_droptime + autocvar_g_balance_keyhunt_delay_drop)
- {
- self.owner.kh_droptime = time;
- self.kh_droptime = time; // prevent collecting this one for some time
- self.enemy = self.owner;
- self.pusher = world;
- kh_Scores_Event(self.owner, self, "dropkey", 0, 0);
- bprint(self.owner.netname, "^7 dropped the ", self.netname, "\n");
- sound(self.owner, CHAN_AUTO, kh_sound_drop, VOL_BASE, ATTN_NORM);
- makevectors(self.owner.v_angle);
- self.velocity = W_CalculateProjectileVelocity(self.owner.velocity, autocvar_g_balance_keyhunt_throwvelocity * v_forward, FALSE);
- kh_Key_AssignTo(self, world);
- self.pushltime = time + autocvar_g_balance_keyhunt_protecttime;
- self.kh_dropperteam = self.team;
- }
}
// if in nodrop or time over, end the round
{
if(self.siren_time < time)
{
- sound(self.owner, CHAN_AUTO, kh_sound_alarm, VOL_BASE, ATTN_NORM); // play a simple alarm
+ sound(self.owner, CH_TRIGGER, kh_sound_alarm, VOL_BASE, ATTN_NORM); // play a simple alarm
self.siren_time = time + 2.5; // repeat every 2.5 seconds
}
{
if(head.team == kh_interferemsg_team)
if(head.kh_next)
- centerprint(head, "All keys are in your team's hands!\n\nMeet the other key carriers ^1NOW^7!");
+ Send_CSQC_Centerprint_Generic(head, CPID_KH_MSG, "All keys are in your team's hands!\n\nMeet the other key carriers ^1NOW^7!", 0, 0);
else
- centerprint(head, "All keys are in your team's hands!\n\nHelp the key carriers to meet!");
+ Send_CSQC_Centerprint_Generic(head, CPID_KH_MSG, "All keys are in your team's hands!\n\nHelp the key carriers to meet!", 0, 0);
else
- centerprint(head, strcat("All keys are in the ", ColoredTeamName(kh_interferemsg_team), "^7's hands!\n\nInterfere ^1NOW^7!"));
+ Send_CSQC_Centerprint_Generic(head, CPID_KH_MSG, strcat("All keys are in the ", ColoredTeamName(kh_interferemsg_team), "^7's hands!\n\nInterfere ^1NOW^7!"), 0, 0);
}
}
centerprint(initial_owner, strcat("You are starting with the ", key.netname, "\n")); // message to player at start of round
- WaypointSprite_Spawn("key-dropped", 0, 0, key, '0 0 1' * KH_KEY_WP_ZSHIFT, world, key.team, key, waypointsprite_attachedforcarrier, FALSE);
+ WaypointSprite_Spawn("key-dropped", 0, 0, key, '0 0 1' * KH_KEY_WP_ZSHIFT, world, key.team, key, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAG, '0 1 1');
key.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = kh_Key_waypointsprite_visible_for_player;
- WaypointSprite_UpdateTeamRadar(key.waypointsprite_attachedforcarrier, RADARICON_FLAG, '0 1 1');
kh_Key_AssignTo(key, initial_owner);
}
return teem;
}
+void kh_Key_DropOne(entity key)
+{
+ // prevent collecting this one for some time
+ entity player;
+ player = key.owner;
+
+ key.kh_droptime = time;
+ key.enemy = player;
+
+ kh_Scores_Event(player, key, "dropkey", 0, 0);
+ PlayerScore_Add(player, SP_KH_LOSSES, 1);
+ bprint(player.netname, "^7 dropped the ", key.netname, "\n");
+ kh_Key_AssignTo(key, world);
+ makevectors(player.v_angle);
+ key.velocity = W_CalculateProjectileVelocity(player.velocity, autocvar_g_balance_keyhunt_throwvelocity * v_forward, FALSE);
+ key.pusher = world;
+ key.pushltime = time + autocvar_g_balance_keyhunt_protecttime;
+ key.kh_dropperteam = key.team;
+
+ sound(player, CH_TRIGGER, kh_sound_drop, VOL_BASE, ATTN_NORM);
+}
+
void kh_Key_DropAll(entity player, float suicide) // runs whenever a player dies
{
entity key;
if(suicide)
key.kh_dropperteam = player.team;
}
- sound(player, CHAN_AUTO, kh_sound_drop, VOL_BASE, ATTN_NORM);
+ sound(player, CH_TRIGGER, kh_sound_drop, VOL_BASE, ATTN_NORM);
}
}
if(time < game_starttime)
{
- kh_Controller_SetThink(game_starttime - time + 0.1, "", kh_WaitForPlayers);
+ kh_Controller_SetThink_NoMsg(game_starttime - time + 0.1, kh_WaitForPlayers);
return;
}
teams_missing = kh_CheckEnoughPlayers();
if(teams_missing == "")
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", kh_StartRound);
+ kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", 1, kh_StartRound);
else
- kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), kh_WaitForPlayers);
+ kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), -1, kh_WaitForPlayers);
}
void kh_EnableTrackingDevice() // runs after each round
FOR_EACH_PLAYER(player)
if(clienttype(player) == CLIENTTYPE_REAL)
- centerprint_expire(player, CENTERPRIO_SPAM);
+ Send_CSQC_Centerprint_Generic_Expire(player, CPID_KH_MSG);
kh_tracking_enabled = TRUE;
}
if(time < game_starttime)
{
- kh_Controller_SetThink(game_starttime - time + 0.1, "", kh_WaitForPlayers);
+ kh_Controller_SetThink_NoMsg(game_starttime - time + 0.1, kh_WaitForPlayers);
return;
}
teams_missing = kh_CheckEnoughPlayers();
if(teams_missing != "")
{
- kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), kh_WaitForPlayers);
+ kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), -1, kh_WaitForPlayers);
return;
}
FOR_EACH_PLAYER(player)
if(clienttype(player) == CLIENTTYPE_REAL)
- centerprint_expire(player, CENTERPRIO_SPAM);
+ Send_CSQC_Centerprint_Generic_Expire(player, CPID_KH_MSG);
for(i = 0; i < kh_teams; ++i)
{
}
kh_tracking_enabled = FALSE;
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_tracking, "Scanning frequency range...", kh_EnableTrackingDevice);
+ kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_tracking, "Scanning frequency range...", -1, kh_EnableTrackingDevice);
}
float kh_HandleFrags(entity attacker, entity targ, float f) // adds to the player score
// make a KH entity for controlling the game
kh_controller = spawn();
kh_controller.think = kh_Controller_Think;
- kh_Controller_SetThink(0, "", kh_WaitForPlayers);
+ kh_Controller_SetThink_NoMsg(0, kh_WaitForPlayers);
setmodel(kh_controller, "models/keyhunt/key.md3");
kh_key_dropped = kh_controller.modelindex;
{
if(self == other)
kh_Key_DropAll(self, TRUE);
- else if(other.classname == "player" || other.classname == "gib")
+ else if(other.classname == "player")
kh_Key_DropAll(self, FALSE);
else
kh_Key_DropAll(self, TRUE);
return 0;
}
+MUTATOR_HOOKFUNCTION(kh_PlayerUseKey)
+{
+ if(MUTATOR_RETURNVALUE == 0)
+ {
+ entity k;
+ k = self.kh_next;
+ if(k)
+ {
+ kh_Key_DropOne(k);
+ return 1;
+ }
+ }
+ return 0;
+}
+
MUTATOR_DEFINITION(gamemode_keyhunt)
{
MUTATOR_HOOK(MakePlayerObserver, kh_Key_DropAll, CBC_ORDER_ANY);
MUTATOR_HOOK(MatchEnd, kh_finalize, CBC_ORDER_ANY);
MUTATOR_HOOK(GetTeamCount, kh_GetTeamCount, CBC_ORDER_EXCLUSIVE);
MUTATOR_HOOK(SpectateCopy, kh_SpectateCopy, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerUseKey, kh_PlayerUseKey, CBC_ORDER_ANY);
MUTATOR_ONADD
{
// used by arena.qc ready-restart:
typedef void(void) kh_Think_t;
void kh_StartRound();
-void kh_Controller_SetThink(float t, string msg, kh_Think_t func);
+void kh_Controller_SetThink_NoMsg(float t, kh_Think_t func);
+ (autocvar_sv_dodging_up_speed * v_up);
if (autocvar_sv_dodging_sound == 1)
- PlayerSound(playersound_jump, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_jump, CH_PLAYER, VOICETYPE_PLAYERSOUND);
setanim(self, self.anim_jump, TRUE, FALSE, TRUE);
nix_weapon = nix_nextweapon;
nix_weapon_ammo = nix_nextweapon_ammo;
nix_nextweapon = 0;
- nix_nextchange = time + autocvar_g_balance_nix_roundtime;
+ if (!nix_nextchange) // no round played yet?
+ nix_nextchange = time; // start the first round now!
+ else
+ nix_nextchange = time + autocvar_g_balance_nix_roundtime;
//weapon_action(nix_weapon, WR_PRECACHE); // forget it, too slow
}
-
+
if(nix_nextchange != self.nix_lastchange_id) // this shall only be called once per round!
{
self.nix_lastchange_id = nix_nextchange;
if(dt >= 1 && dt <= 5)
self.nix_lastinfotime = -42;
else
- centerprint(self, strcat("\n\n^2Active weapon: ^3", W_Name(nix_weapon)));
+ Send_CSQC_Centerprint_Generic(self, CPID_NIX_WPNCHANGE, strcat("^2Active weapon: ^3", W_Name(nix_weapon)), 0, 0);
+
+ weapon_action(nix_weapon, WR_RESETPLAYER);
+
+ // all weapons must be fully loaded when we spawn
+ entity e;
+ e = get_weaponinfo(nix_weapon);
+ if(e.spawnflags & WEP_FLAG_RELOADABLE) // prevent accessing undefined cvars
+ self.weapon_load[nix_weapon] = cvar(strcat("g_balance_", e.netname, "_reload_ammo"));
+
+ // nex too
+ if(autocvar_g_balance_nex_charge)
+ {
+ if(autocvar_g_balance_nex_secondary_chargepool)
+ self.nex_chargepool_ammo = 1;
+ self.nex_charge = autocvar_g_balance_nex_charge_start;
+ }
}
if(self.nix_lastinfotime != dt)
{
self.nix_lastinfotime = dt; // initial value 0 should count as "not seen"
if(dt >= 1 && dt <= 5)
- centerprint(self, strcat("^3", ftos(dt), "^2 seconds until weapon change...\n\nNext weapon: ^3", W_Name(nix_nextweapon), "\n"));
+ Send_CSQC_Centerprint_Generic(self, CPID_NIX_WPNCHANGE, strcat("^3%d^2 seconds until weapon change...\n\nNext weapon: ^3", W_Name(nix_nextweapon)), 1, dt);
}
if(!(self.items & IT_UNLIMITED_WEAPON_AMMO) && time > self.nix_nextincr)
{
g_nix_with_laser = autocvar_g_nix_with_laser;
- nix_nextchange = time;
+ nix_nextchange = 0;
nix_nextweapon = 0;
NIX_precache();
ball.effects |= EF_NOSHADOW;
ball.scale = 1; // scale down.
- WaypointSprite_AttachCarrier("nb-ball", plyr);
+ WaypointSprite_AttachCarrier("nb-ball", plyr, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
WaypointSprite_UpdateRule(plyr.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
- WaypointSprite_UpdateTeamRadar(plyr.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
if (g_nexball_basketball_delay_hold)
{
}
WaypointSprite_Kill(ball.owner.waypointsprite_attachedforcarrier);
- //WaypointSprite_AttachCarrier("nb-ball", ball);
- WaypointSprite_Spawn("nb-ball", 0, 0, ball, '0 0 64', world, ball.team, ball, waypointsprite_attachedforcarrier, FALSE); // no health bar please
+ WaypointSprite_Spawn("nb-ball", 0, 0, ball, '0 0 64', world, ball.team, ball, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR); // no health bar please
WaypointSprite_UpdateRule(ball.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
- WaypointSprite_UpdateTeamRadar(ball.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
ball.owner.ballcarried = world;
ball.owner = world;
self.teamtime = 0;
self.pusher = world;
self.team = FALSE;
- sound (self, CHAN_PROJECTILE, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
LogNB("init", world);
}
if (other.solid == SOLID_BSP) {
if (time > self.lastground + 0.1)
{
- sound (self, CHAN_PROJECTILE, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
self.lastground = time;
}
if (vlen(self.velocity) && !self.cnt)
LogNB("caught", other);
GiveBall(other, self);
} else if (other.solid == SOLID_BSP) {
- sound (self, CHAN_PROJECTILE, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
if (vlen(self.velocity) && !self.cnt)
self.nextthink = min(time + g_nexball_delay_idle, self.teamtime);
}
pscore = 1;
}
- sound (ball, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
+ sound (ball, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
if(ball.team && pscore)
{
precache_sound (self.noise1);
precache_sound (self.noise2);
- WaypointSprite_AttachCarrier("nb-ball", self); // the ball's team is not set yet, no rule update needed
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
+ WaypointSprite_AttachCarrier("nb-ball", self, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR); // the ball's team is not set yet, no rule update needed
self.reset = ball_restart;
self.think = InitBall;
PROJECTILE_TOUCH;
if(attacker.team != other.team || g_nexball_basketball_teamsteal)
- if((ball = other.ballcarried) && (attacker.classname == "player" || attacker.classname == "gib"))
+ if((ball = other.ballcarried) && (attacker.classname == "player"))
{
other.velocity = other.velocity + normalize(self.velocity) * other.damageforcescale * autocvar_g_balance_nexball_secondary_force;
other.flags &~= FL_ONGROUND;
if(!attacker.ballcarried)
{
LogNB("stole", attacker);
- sound (other, CHAN_AUTO, ball.noise2, VOL_BASE, ATTN_NORM);
+ sound (other, CH_TRIGGER, ball.noise2, VOL_BASE, ATTN_NORM);
if(attacker.team == other.team && time > attacker.teamkill_complain)
{
if (!(ball = self.ballcarried))
return;
- W_SetupShot (self, FALSE, 4, "nexball/shoot1.wav", CHAN_WEAPON, 0);
+ W_SetupShot (self, FALSE, 4, "nexball/shoot1.wav", CH_WEAPON_A, 0);
tracebox(w_shotorg, BALL_MINS, BALL_MAXS, w_shotorg, MOVE_WORLDONLY, world);
if(trace_startsolid)
{
local entity missile;
if (!(balls & BALL_BASKET))
return;
- W_SetupShot (self, FALSE, 2, "nexball/shoot2.wav", CHAN_WEAPON, 0);
+ W_SetupShot (self, FALSE, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0);
// pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
missile = spawn ();
entity openlist;
entity closedlist;
-entity edgelist;
entity goal_node;
entity start_node;
var float buildpath_nodefilter(vector n,vector c,vector p);
var float pathlib_wpp_waypointcallback(entity wp, entity wp_prev);
-var const float pathlib_wpp_wpcb_null();
#ifdef DEBUGPATHING
#include "debug.qc"
float playerstats_db;
+string teamstats_last;
string playerstats_last;
string events_last;
.float playerstats_addedglobalinfo;
PlayerStats_AddEvent(PLAYERSTATS_MATCHES);
PlayerStats_AddEvent(PLAYERSTATS_JOINS);
PlayerStats_AddEvent(PLAYERSTATS_SCOREBOARD_VALID);
+ PlayerStats_AddEvent(PLAYERSTATS_RANK);
+
+ // accuracy stats
+ entity w;
+ float i;
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ {
+ w = get_weaponinfo(i);
+
+ PlayerStats_AddEvent(strcat("acc-", w.netname, "-hit"));
+ PlayerStats_AddEvent(strcat("acc-", w.netname, "-fired"));
+
+ PlayerStats_AddEvent(strcat("acc-", w.netname, "-cnt-hit"));
+ PlayerStats_AddEvent(strcat("acc-", w.netname, "-cnt-fired"));
+
+ PlayerStats_AddEvent(strcat("acc-", w.netname, "-frags"));
+ }
PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_3);
PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_5);
e.playerstats_id = strzone(sprintf("bot#%d", e.playerid));
else
e.playerstats_id = strzone(sprintf("player#%d", e.playerid));
-
+
string key;
key = sprintf("%s:*", e.playerstats_id);
}
}
-void PlayerStats_AddTeam(float t)
+void PlayerStats_AddTeam(float t) // TODO: doesn't this remain unused?
{
if(playerstats_db < 0)
return;
string key;
- key = sprintf("team#%d:*", t);
+ key = sprintf("%d", t);
string p;
p = db_get(playerstats_db, key);
if(p == "")
{
- if(playerstats_last)
+ if(teamstats_last)
{
- db_put(playerstats_db, key, playerstats_last);
- strunzone(playerstats_last);
+ db_put(playerstats_db, key, teamstats_last);
+ strunzone(teamstats_last);
}
else
db_put(playerstats_db, key, "#");
- playerstats_last = strzone(sprintf("team%d", t));
+ teamstats_last = strzone(key);
}
}
db_put(playerstats_db, key, ftos(val));
}
-void PlayerStats_TeamScore(float t, string event_id, float value)
+void PlayerStats_TeamScore(float t, string event_id, float value) // TODO: doesn't this remain unused?
{
string key;
float val;
M: map name
S: "hostname" of the server
C: number of "unpure" cvar changes
- P: player ID of an existing player; this also sets the owner for all following "n" and "e" lines (lower case!)
+ W: winning team ID
+ P: player ID of an existing player; this also sets the owner for all following "n", "e" and "t" lines (lower case!)
n: nickname of the player (optional)
+ t: team ID
e: followed by an event name, a space, and the event count/score
event names can be:
alivetime: total playing time of the player
total-<scoreboardname>: total score of that scoreboard item
scoreboard-<scoreboardname>: end-of-game score of that scoreboard item (can differ in non-team games)
achievement-<achievementname>: achievement counters
+ rank <number>: rank of player
+ acc-<weapon netname>-hit: total damage dealt
+ acc-<weapon netname>-fired: total damage that all fired projectiles *could* have dealt
+ acc-<weapon netname>-cnt-hit: amount of shots that actually hit
+ acc-<weapon netname>-cnt-fired: amount of fired shots
+ acc-<weapon netname>-frags: amount of frags dealt by weapon
*/
-//#NO AUTOCVARS START
-void PlayerStats_Shutdown()
+void PlayerStats_ready(entity fh, entity pass, float status)
{
string p, pn;
string e, en;
- string nn;
- float b;
- float i;
- string uri;
+ string nn, tt;
+ string s;
- if(playerstats_db < 0)
- return;
-
- uri = autocvar_g_playerstats_uri;
- if(uri != "")
+ switch(status)
{
- b = buf_create();
- i = 0;
-
- db_dump(playerstats_db, "foo.db");
-
- bufstr_set(b, i++, "V 1");
+ case URL_READY_CANWRITE:
+ url_fputs(fh, "V 1\n");
#ifdef WATERMARK
- bufstr_set(b, i++, sprintf("R %s", WATERMARK()));
+ url_fputs(fh, sprintf("R %s\n", WATERMARK()));
#endif
- bufstr_set(b, i++, sprintf("T %s.%06d", strftime(FALSE, "%s"), floor(random() * 1000000)));
- bufstr_set(b, i++, sprintf("G %s", GetGametype()));
- bufstr_set(b, i++, sprintf("M %s", GetMapname()));
- bufstr_set(b, i++, sprintf("S %s", cvar_string("hostname")));
- bufstr_set(b, i++, sprintf("C %d", cvar_purechanges_count));
- for(p = playerstats_last; (pn = db_get(playerstats_db, sprintf("%s:*", p))) != ""; p = pn)
- {
- bufstr_set(b, i++, sprintf("P %s", p));
- nn = db_get(playerstats_db, sprintf("%s:_netname", p));
- if(nn != "")
- bufstr_set(b, i++, sprintf("n %s", nn));
- for(e = events_last; (en = db_get(playerstats_db, sprintf("*:%s", e))) != ""; e = en)
+ url_fputs(fh, sprintf("T %s.%06d\n", strftime(FALSE, "%s"), floor(random() * 1000000)));
+ url_fputs(fh, sprintf("G %s\n", GetGametype()));
+ url_fputs(fh, sprintf("M %s\n", GetMapname()));
+ url_fputs(fh, sprintf("I %s\n", matchid));
+ url_fputs(fh, sprintf("S %s\n", cvar_string("hostname")));
+ url_fputs(fh, sprintf("C %d\n", cvar_purechanges_count));
+ for(p = playerstats_last; (pn = db_get(playerstats_db, sprintf("%s:*", p))) != ""; p = pn)
{
- float v;
- v = stof(db_get(playerstats_db, sprintf("%s:%s", p, e)));
- if(v != 0)
- bufstr_set(b, i++, sprintf("e %s %g", e, v));
+ url_fputs(fh, sprintf("P %s\n", p));
+ nn = db_get(playerstats_db, sprintf("%s:_playerid", p));
+ if(nn != "")
+ url_fputs(fh, sprintf("i %s\n", nn));
+ nn = db_get(playerstats_db, sprintf("%s:_netname", p));
+ if(nn != "")
+ url_fputs(fh, sprintf("n %s\n", nn));
+ if(teamplay)
+ {
+ tt = db_get(playerstats_db, sprintf("%s:_team", p));
+ url_fputs(fh, sprintf("t %s\n", tt));
+ }
+ for(e = events_last; (en = db_get(playerstats_db, sprintf("*:%s", e))) != ""; e = en)
+ {
+ float v;
+ v = stof(db_get(playerstats_db, sprintf("%s:%s", p, e)));
+ if(v != 0)
+ url_fputs(fh, sprintf("e %s %g\n", e, v));
+ }
}
- }
- bufstr_set(b, i++, "");
+ url_fputs(fh, "\n");
+ db_close(playerstats_db);
+ playerstats_db = -1;
+ url_fclose(fh, PlayerStats_ready, world);
+ break;
+ case URL_READY_CANREAD:
+ // url_fclose is processing, we got a response for writing the data
+ // this must come from HTTP
+ print("Got response from player stats server:\n");
+ while((s = url_fgets(fh)))
+ print(" ", s, "\n");
+ print("End of response.\n");
+ url_fclose(fh, PlayerStats_ready, world);
+ break;
+ case URL_READY_CLOSED:
+ // url_fclose has finished
+ print("Player stats written\n");
+ playerstats_waitforme = TRUE;
+ break;
+ case URL_READY_ERROR:
+ default:
+ print("Player stats writing failed: ", ftos(status), "\n");
+ playerstats_waitforme = TRUE;
+ if(playerstats_db >= 0)
+ {
+ db_close(playerstats_db);
+ playerstats_db = -1;
+ }
+ break;
+ }
+}
- if(autocvar_g_playerstats_debug)
- {
- for(i = 0; i < buf_getsize(b); ++i)
- print(bufstr_get(b, i), "\n");
- }
+//#NO AUTOCVARS START
+void PlayerStats_Shutdown()
+{
+ string uri;
- if(crypto_uri_postbuf(uri, URI_GET_PLAYERSTATS_SENT, "text/plain", "\n", b, 0))
- playerstats_requested = TRUE;
- else
- playerstats_waitforme = TRUE; // if posting fails, we must continue anyway
+ if(playerstats_db < 0)
+ return;
- buf_del(b);
+ uri = autocvar_g_playerstats_uri;
+ if(uri != "")
+ {
+ url_fopen(uri, FILE_APPEND, PlayerStats_ready, world);
+ playerstats_waitforme = FALSE;
}
else
+ {
playerstats_waitforme = TRUE;
-
- db_close(playerstats_db);
- playerstats_db = -1;
+ db_close(playerstats_db);
+ playerstats_db = -1;
+ }
}
//#NO AUTOCVARS END
// add global info!
if(p.alivetime)
+ {
PlayerStats_Event(p, PLAYERSTATS_ALIVETIME, time - p.alivetime);
+ p.alivetime = 0;
+ }
- if(p.alivetime)
- PlayerStats_Event(p, PLAYERSTATS_ALIVETIME, time - p.alivetime);
+ db_put(playerstats_db, sprintf("%s:_playerid", p.playerstats_id), ftos(p.playerid));
if(p.cvar_cl_allow_uid2name == 1 || clienttype(p) == CLIENTTYPE_BOT)
db_put(playerstats_db, sprintf("%s:_netname", p.playerstats_id), p.netname);
- if(p.alivetime > 0)
+ if(teamplay)
+ db_put(playerstats_db, sprintf("%s:_team", p.playerstats_id), ftos(p.team));
+
+ if(stof(db_get(playerstats_db, sprintf("%d:%s", p.playerstats_id, PLAYERSTATS_ALIVETIME))) > 0)
PlayerStats_Event(p, PLAYERSTATS_JOINS, 1);
strunzone(p.playerstats_id);
p.playerstats_id = string_null;
}
+void PlayerStats_Accuracy(entity p)
+{
+ entity a, w;
+ a = p.accuracy;
+ float i;
+
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ {
+ w = get_weaponinfo(i);
+
+ PlayerStats_Event(p, strcat("acc-", w.netname, "-hit"), a.accuracy_hit[i-1]);
+ PlayerStats_Event(p, strcat("acc-", w.netname, "-fired"), a.accuracy_fired[i-1]);
+
+ PlayerStats_Event(p, strcat("acc-", w.netname, "-cnt-hit"), a.accuracy_cnt_hit[i-1]);
+ PlayerStats_Event(p, strcat("acc-", w.netname, "-cnt-fired"), a.accuracy_cnt_fired[i-1]);
+
+ PlayerStats_Event(p, strcat("acc-", w.netname, "-frags"), a.accuracy_frags[i-1]);
+ }
+}
+
void PlayerStats_EndMatch(float finished)
{
- entity p;
- FOR_EACH_PLAYER(p)
+ entity p, winner;
+ winner = PlayerScore_Sort(score_dummyfield);
+ FOR_EACH_PLAYER(p) // spectators intentionally not included
{
PlayerScore_PlayerStats(p);
+ PlayerStats_Accuracy(p);
PlayerStats_Event(p, PLAYERSTATS_SCOREBOARD_VALID, 1);
if(finished)
{
PlayerStats_Event(p, PLAYERSTATS_WINS, p.winning);
PlayerStats_Event(p, PLAYERSTATS_MATCHES, 1);
+ PlayerStats_Event(p, PLAYERSTATS_RANK, p.score_dummyfield);
}
}
}
string PLAYERSTATS_MATCHES = "matches";
string PLAYERSTATS_JOINS = "joins";
string PLAYERSTATS_SCOREBOARD_VALID = "scoreboardvalid";
+string PLAYERSTATS_RANK = "rank";
string PLAYERSTATS_TOTAL = "total-";
string PLAYERSTATS_SCOREBOARD = "scoreboard-";
void Portal_Connect(entity teleporter, entity destination)
{
- teleporter.portal_transform = AnglesTransform_Divide(AnglesTransform_TurnDirectionFR(destination.mangle), teleporter.mangle);
+ teleporter.portal_transform = AnglesTransform_RightDivide(AnglesTransform_TurnDirectionFR(destination.mangle), teleporter.mangle);
teleporter.enemy = destination;
destination.enemy = teleporter;
if(killed)
{
fixedmakevectors(portal.mangle);
- sound(portal, CHAN_PROJECTILE, "porto/explode.wav", VOL_BASE, ATTN_NORM);
+ sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4);
remove(portal);
}
else
{
Portal_MakeBrokenPortal(portal);
- sound(portal, CHAN_PROJECTILE, "porto/expire.wav", VOL_BASE, ATTN_NORM);
+ sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTN_NORM);
SUB_SetFade(portal, time, 0.5);
}
}
../common/util.qh
../common/items.qh
../common/explosion_equation.qh
+../common/urllib.qh
autocvars.qh
constants.qh
//// tZork Turrets ////
tturrets/include/turrets_early.qh
+vehicles/vehicles_def.qh
campaign.qh
../common/campaign_common.qh
campaign.qc
../common/campaign_file.qc
../common/campaign_setup.qc
+../common/urllib.qc
../common/gamecommand.qc
gamecommand.qc
if(!self.race_penalty)
{
if(self.race_checkpoint)
- WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite);
+ WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite, RADARICON_NONE, '1 0.5 0');
else
- WaypointSprite_SpawnFixed("race-finish", o, self, sprite);
+ WaypointSprite_SpawnFixed("race-start-finish", o, self, sprite, RADARICON_NONE, '1 0.5 0');
}
self.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
race_timed_checkpoint = 1;
if(self.race_checkpoint == 0)
- WaypointSprite_SpawnFixed("race-start", o, self, sprite);
+ WaypointSprite_SpawnFixed("race-start", o, self, sprite, RADARICON_NONE, '1 0.5 0');
else
- WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite);
+ WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite, RADARICON_NONE, '1 0.5 0');
self.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
}
void ScoreRules_generic()
{
- if(teams_matter)
+ if(teamplay)
{
CheckAllowedTeams(world);
ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE);
vr = vectoangles(dir);
//vr_x *= -1;
- tracebox(self.origin , self.mins,self.maxs,self.origin + (dir * length) ,MOVE_NOMONSTERS,self);
+ tracebox(self.origin + '0 0 1' * step_up, self.mins, self.maxs, ('0 0 1' * step_up) + self.origin + (dir * length), MOVE_NOMONSTERS, self);
if(trace_fraction == 1.0)
{
//te_lightning1(self,self.origin,self.origin + (dir * length));
#ifdef TLIBS_TETSLIBS
void flocker_die()
{
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-
pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
self.owner.cnt += 1;
local entity oldself;
local float dm;
oldself = self;
- self = findfloat(world, iscreature, TRUE);
- while (self)
+ for(self = world; (self = findfloat(self, iscreature, TRUE)); )
{
- if (self.movetype != MOVETYPE_NOCLIP)
+ if (self.movetype == MOVETYPE_NOCLIP)
+ continue;
+ float vehic = (self.vehicle_flags & VHF_ISVEHICLE);
+ if (self.waterlevel)
{
- if (self.waterlevel)
+ if (!(self.flags & FL_INWATER))
+ {
+ self.flags |= FL_INWATER;
+ self.dmgtime = 0;
+ }
+ if(!vehic) // vehicles don't drown
{
- if (!(self.flags & FL_INWATER))
- {
- self.flags |= FL_INWATER;
- self.dmgtime = 0;
- }
if (self.waterlevel != WATERLEVEL_SUBMERGED)
{
if(self.air_finished < time + 9)
- PlayerSound(playersound_gasp, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ PlayerSound(playersound_gasp, CH_PLAYER, VOICETYPE_PLAYERSOUND);
self.air_finished = time + 12;
self.dmg = 2;
}
self.pain_finished = time + 0.5;
}
}
- if (self.dmgtime < time)
+ }
+ if (self.dmgtime < time)
+ {
+ self.dmgtime = time + 0.2;
+ if (self.watertype == CONTENT_LAVA)
{
- self.dmgtime = time + 0.2;
- if (self.watertype == CONTENT_LAVA)
+ if (self.watersound_finished < time)
{
- if (self.watersound_finished < time)
- {
- self.watersound_finished = time + 0.5;
- sound (self, CHAN_PLAYER, "player/lava.wav", VOL_BASE, ATTN_NORM);
- }
- Damage (self, world, world, 6 * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0');
+ self.watersound_finished = time + 0.5;
+ sound (self, CH_PLAYER, "player/lava.wav", VOL_BASE, ATTN_NORM);
}
- else if (self.watertype == CONTENT_SLIME)
+ Damage (self, world, world, 6 * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0');
+ }
+ else if (self.watertype == CONTENT_SLIME)
+ {
+ if (self.watersound_finished < time)
{
- if (self.watersound_finished < time)
- {
- self.watersound_finished = time + 0.5;
- sound (self, CHAN_PLAYER, "player/slime.wav", VOL_BASE, ATTN_NORM);
- }
- Damage (self, world, world, 2 * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0');
+ self.watersound_finished = time + 0.5;
+ sound (self, CH_PLAYER, "player/slime.wav", VOL_BASE, ATTN_NORM);
}
+ Damage (self, world, world, 2 * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0');
}
}
- else
+ }
+ else
+ {
+ if (self.flags & FL_INWATER)
{
- if (self.flags & FL_INWATER)
- {
- // play leave water sound
- self.flags &~= FL_INWATER;
- self.dmgtime = 0;
- }
- self.air_finished = time + 12;
- self.dmg = 2;
+ // play leave water sound
+ self.flags &~= FL_INWATER;
+ self.dmgtime = 0;
}
+ self.air_finished = time + 12;
+ self.dmg = 2;
+ }
+
+ if(!vehic) // vehicles don't get falling damage
+ {
// check for falling damage
float velocity_len = vlen(self.velocity);
if(!self.hook.state && !g_ca && !(g_cts && !autocvar_g_cts_selfdamage))
if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed)
Damage (self, world, world, 100000, DEATH_SHOOTING_STAR, self.origin, '0 0 0');
-
// play stupid sounds
if (g_footsteps)
if (!gameover)
if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)
{
if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS)
- GlobalSound(globalsound_metalstep, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ GlobalSound(globalsound_metalstep, CH_PLAYER, VOICETYPE_PLAYERSOUND);
else
- GlobalSound(globalsound_step, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+ GlobalSound(globalsound_step, CH_PLAYER, VOICETYPE_PLAYERSOUND);
}
}
}
- self.oldvelocity = self.velocity;
}
- self = findfloat(self, iscreature, TRUE);
+
+ self.oldvelocity = self.velocity;
}
self = oldself;
}
void SV_OnEntityPreSpawnFunction()
{
if(self.gametypefilter != "")
- if not(isGametypeInFilter(game, teams_matter, have_team_spawns, self.gametypefilter))
+ if not(isGametypeInFilter(game, teamplay, have_team_spawns, self.gametypefilter))
{
remove(self);
return;
return;
}
}
+
+void WarpZone_PostInitialize_Callback(void)
+{
+ // create waypoint links for warpzones
+ entity e;
+ for(e = world; (e = find(e, classname, "trigger_warpzone")); )
+ {
+ vector src, dst;
+ src = (e.absmin + e.absmax) * 0.5;
+ makevectors(e.warpzone_angles);
+ src = src + ((e.warpzone_origin - src) * v_forward) * v_forward + 16 * v_right;
+ dst = (e.enemy.absmin + e.enemy.absmax) * 0.5;
+ makevectors(e.enemy.warpzone_angles);
+ dst = dst + ((e.enemy.warpzone_origin - dst) * v_forward) * v_forward - 16 * v_right;
+ waypoint_spawnforteleporter_v(e, src, dst, 0);
+ }
+}
{
if not(other.iscreature)
return;
+ if (other.vehicle_flags & VHF_ISVEHICLE)
+ return;
EXACTTRIGGER_TOUCH;
{
Item_Show(self, 1);
if(!g_minstagib && self.items == IT_STRENGTH)
- sound (self, CHAN_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
else if(!g_minstagib && self.items == IT_INVINCIBLE)
- sound (self, CHAN_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
else
- sound (self, CHAN_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
setorigin (self, self.origin);
//pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1);
}
if(name)
{
- WaypointSprite_Spawn(name, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE);
+ WaypointSprite_Spawn(name, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE, RADARICON_POWERUP, rgb);
if(self.waypointsprite_attached)
- {
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_POWERUP, rgb);
- //WaypointSprite_UpdateMaxHealth(self.waypointsprite_attached, ITEM_RESPAWN_TICKS + 1);
WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
- }
}
}
- sound (self, CHAN_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound
if(self.waypointsprite_attached)
{
WaypointSprite_Ping(self.waypointsprite_attached);
{
pickedup = TRUE;
// play some cool sounds ;)
- centerprint(player, "\n");
if (clienttype(player) == CLIENTTYPE_REAL)
{
if(player.health <= 5)
if (!pickedup)
return 0;
- sound (player, CHAN_AUTO, item.item_pickupsound, VOL_BASE, ATTN_NORM);
+ sound (player, CH_TRIGGER, item.item_pickupsound, VOL_BASE, ATTN_NORM);
if (_switchweapon)
if (player.switchweapon != w_getbestweapon(player))
W_SwitchWeapon_Force(player, w_getbestweapon(player));
if(v1 <= v0 - t)
{
if(snd_decr != "")
- sound (e, CHAN_AUTO, snd_decr, VOL_BASE, ATTN_NORM);
+ sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTN_NORM);
}
else if(v0 >= v0 + t)
{
if(snd_incr != "")
- sound (e, CHAN_AUTO, snd_incr, VOL_BASE, ATTN_NORM);
+ sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTN_NORM);
}
}
void trigger_push_use()
{
- if(teams_matter)
+ if(teamplay)
self.team = activator.team;
}
void trigger_push_touch()
{
- if (self.active == ACTIVE_NOT)
- return;
+ vector move;
- // FIXME: add a .float for whether an entity should be tossed by jumppads
- if (!other.iscreature)
- if (other.classname != "corpse")
- if (other.classname != "body")
- if (other.classname != "gib")
- if (other.classname != "casing")
- if (other.classname != "droppedweapon")
- if (other.classname != "keepawayball")
- if (!other.projectiledeathtype || other.classname == "bullet")
+ if (self.active == ACTIVE_NOT)
return;
- if (other.deadflag && other.iscreature)
+ if (!isPushable(other))
return;
if(self.team)
EXACTTRIGGER_TOUCH;
- if(self.target)
- self.movedir = trigger_push_calculatevelocity(other.origin, self.enemy, self.height);
+ if(self.enemy)
+ {
+ other.velocity = trigger_push_calculatevelocity(other.origin, self.enemy, self.height);
+ }
+ else if(self.target)
+ {
+ entity e;
+ RandomSelection_Init();
+ for(e = world; (e = find(e, targetname, self.target)); )
+ {
+ if(e.cnt)
+ RandomSelection_Add(e, 0, string_null, e.cnt, 1);
+ else
+ RandomSelection_Add(e, 0, string_null, 1, 1);
+ }
+ other.velocity = trigger_push_calculatevelocity(other.origin, RandomSelection_chosen_ent, self.height);
+ }
+ else
+ {
+ other.velocity = self.movedir;
+ }
other.flags &~= FL_ONGROUND;
- other.velocity = self.movedir;
-
if (other.classname == "player")
{
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
{
// flash when activated
pointparticles(particleeffectnum("jumppad_activate"), other.origin, other.velocity, 1);
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+ sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
self.pushltime = time + 0.2;
}
local float ct;
.vector dest;
void trigger_push_findtarget()
{
- local entity e;
+ local entity e, t;
local vector org;
local float flighttime;
if (self.target)
{
- // find the target
- self.enemy = find(world, targetname, self.target);
- if (!self.enemy)
+ float n;
+ n = 0;
+ for(t = world; (t = find(t, targetname, self.target)); )
{
- objerror("trigger_push: target not found\n");
- remove(self);
- return;
+ ++n;
+ e = spawn();
+ setorigin(e, org);
+ setsize(e, PL_MIN, PL_MAX);
+ e.velocity = trigger_push_calculatevelocity(org, t, self.height);
+ tracetoss(e, e);
+ if(e.movetype == MOVETYPE_NONE)
+ waypoint_spawnforteleporter(self, trace_endpos, vlen(trace_endpos - org) / vlen(e.velocity));
+ remove(e);
}
- self.movedir = trigger_push_calculatevelocity(org, self.enemy, self.height);
- flighttime = trigger_push_calculatevelocity_flighttime;
+ if(n == 0)
+ {
+ // no dest!
+ objerror ("Jumppad with nonexistant target");
+ return;
+ }
+ else if(n == 1)
+ {
+ // exactly one dest - bots love that
+ self.enemy = find(e, targetname, self.target);
+ }
+ else
+ {
+ // have to use random selection every single time
+ self.enemy = world;
+ }
}
else
- flighttime = 0;
-
- // calculate the destination and spawn a teleporter spawnfunc_waypoint
- e = spawn();
- setorigin(e, org);
- setsize(e, PL_MIN, PL_MAX);
- e.velocity = self.movedir;
- tracetoss(e, e);
- self.dest = trace_endpos;
- remove(e);
-
- waypoint_spawnforteleporter(self, self.dest, flighttime);
+ {
+ e = spawn();
+ setorigin(e, org);
+ setsize(e, PL_MIN, PL_MAX);
+ e.velocity = self.movedir;
+ tracetoss(e, e);
+ waypoint_spawnforteleporter(self, trace_endpos, vlen(trace_endpos - org) / vlen(e.velocity));
+ remove(e);
+ }
};
/*
void plat_hit_top()
{
- sound (self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
self.state = 1;
self.think = plat_go_down;
self.nextthink = self.ltime + 3;
void plat_hit_bottom()
{
- sound (self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
self.state = 2;
};
void plat_go_down()
{
- sound (self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM);
self.state = 3;
SUB_CalcMove (self.pos2, self.speed, plat_hit_bottom);
};
void plat_go_up()
{
- sound (self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM);
self.state = 4;
SUB_CalcMove (self.pos1, self.speed, plat_hit_top);
};
plat_go_down ();
else if (self.state == 3)
plat_go_up ();
- else
- objerror ("plat_crush: bad self.state\n");
+ // when in other states, then the plat_crush event came delayed after
+ // plat state already had changed
+ // this isn't a bug per se!
}
};
void train_wait()
{
if(self.noise != "")
- stopsoundto(MSG_BROADCAST, self, CHAN_TRIGGER); // send this as unreliable only, as the train will resume operation shortly anyway
+ stopsoundto(MSG_BROADCAST, self, CH_TRIGGER_SINGLE); // send this as unreliable only, as the train will resume operation shortly anyway
if(self.wait < 0)
{
SUB_CalcMove(targ.origin - self.mins, self.speed, train_wait);
if(self.noise != "")
- sound(self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_IDLE);
+ sound(self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_IDLE);
};
void func_train_find()
if (self.noise != "")
{
precache_sound(self.noise);
- soundto(MSG_INIT, self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_IDLE);
+ soundto(MSG_INIT, self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_IDLE);
}
if (!self.speed)
self.speed = 4;
if (self.noise != "")
{
precache_sound(self.noise);
- soundto(MSG_INIT, self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_IDLE);
+ soundto(MSG_INIT, self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_IDLE);
}
self.active = ACTIVE_ACTIVE;
return;
if (self.noise != "")
- sound (self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
self.state = STATE_UP;
SUB_CalcMove (self.pos2, self.speed, button_wait);
void door_hit_top()
{
if (self.noise1 != "")
- sound (self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
self.state = STATE_TOP;
if (self.spawnflags & DOOR_TOGGLE)
return; // don't come down automatically
void door_hit_bottom()
{
if (self.noise1 != "")
- sound (self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
self.state = STATE_BOTTOM;
};
void door_go_down()
{
if (self.noise2 != "")
- sound (self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
if (self.max_health)
{
self.takedamage = DAMAGE_YES;
}
if (self.noise2 != "")
- sound (self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
self.state = STATE_UP;
SUB_CalcMove (self.pos2, self.speed, door_hit_top);
void door_rotating_hit_top()
{
if (self.noise1 != "")
- sound (self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
self.state = STATE_TOP;
if (self.spawnflags & DOOR_TOGGLE)
return; // don't come down automatically
void door_rotating_hit_bottom()
{
if (self.noise1 != "")
- sound (self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
if (self.lip==666) // self.lip is used to remember reverse opening direction for door_rotating
{
self.pos2 = '0 0 0' - self.pos2;
void door_rotating_go_down()
{
if (self.noise2 != "")
- sound (self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
if (self.max_health)
{
self.takedamage = DAMAGE_YES;
return;
}
if (self.noise2 != "")
- sound (self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
self.state = STATE_UP;
SUB_CalcAngleMove (self.pos2, self.speed, door_rotating_hit_top);
// Make a sound, wait a little...
if (self.noise1 != "")
- sound(self, CHAN_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
self.nextthink = self.ltime + 0.1;
temp = 1 - (self.spawnflags & SECRET_1ST_LEFT); // 1 or -1
self.dest2 = self.dest1 + v_forward * self.t_length;
SUB_CalcMove(self.dest1, self.speed, fd_secret_move1);
if (self.noise2 != "")
- sound(self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
};
// Wait after first movement...
self.nextthink = self.ltime + 1.0;
self.think = fd_secret_move2;
if (self.noise3 != "")
- sound(self, CHAN_TRIGGER, self.noise3, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NORM);
};
// Start moving sideways w/sound...
void fd_secret_move2()
{
if (self.noise2 != "")
- sound(self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
SUB_CalcMove(self.dest2, self.speed, fd_secret_move3);
};
void fd_secret_move3()
{
if (self.noise3 != "")
- sound(self, CHAN_TRIGGER, self.noise3, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NORM);
if (!(self.spawnflags & SECRET_OPEN_ONCE))
{
self.nextthink = self.ltime + self.wait;
void fd_secret_move4()
{
if (self.noise2 != "")
- sound(self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
SUB_CalcMove(self.dest1, self.speed, fd_secret_move5);
};
self.nextthink = self.ltime + 1.0;
self.think = fd_secret_move6;
if (self.noise3 != "")
- sound(self, CHAN_TRIGGER, self.noise3, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NORM);
};
void fd_secret_move6()
{
if (self.noise2 != "")
- sound(self, CHAN_TRIGGER, self.noise2, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTN_NORM);
SUB_CalcMove(self.oldorigin, self.speed, fd_secret_done);
};
//self.th_pain = fd_secret_use;
}
if (self.noise3 != "")
- sound(self, CHAN_TRIGGER, self.noise3, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NORM);
};
void secret_blocked()
if (self.noise != "")
{
precache_sound(self.noise);
- soundto(MSG_INIT, self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_IDLE);
+ soundto(MSG_INIT, self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_IDLE);
}
if (!self.speed)
if (self.noise != "")
{
precache_sound(self.noise);
- soundto(MSG_INIT, self, CHAN_TRIGGER, self.noise, VOL_BASE, ATTN_IDLE);
+ soundto(MSG_INIT, self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_IDLE);
}
if(!self.targetfactor)
void spawnfunc_ammo_cells() { spawnfunc_item_rockets(); }
// Rail -> Rifle
-void spawnfunc_weapon_railgun() { spawnfunc_weapon_sniperrifle(); }
+void spawnfunc_weapon_railgun() { spawnfunc_weapon_rifle(); }
void spawnfunc_ammo_slugs() { spawnfunc_item_bullets(); }
// BFG -> Crylink
// Q3 style filters (DO NOT USE, THIS IS COMPAT ONLY)
if(self.notq3a)
- if(!teams_matter || g_tdm || g_ctf)
+ if(!teamplay || g_tdm || g_ctf)
return 1;
if(self.notta)
- if not(!teams_matter || g_tdm || g_ctf)
+ if not(!teamplay || g_tdm || g_ctf)
return 1;
if(self.notsingle)
return 1;
if(self.notteam)
- if(teams_matter)
+ if(teamplay)
return 1;
if(self.notfree)
- if(!teams_matter)
+ if(!teamplay)
return 1;
if(self.gametype)
string gametypename;
// static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester", "teamtournament"};
gametypename = "ffa";
- if(teams_matter)
+ if(teamplay)
gametypename = "team";
if(g_arena)
gametypename = "tournament";
void trigger_teleport_use()
{
- if(teams_matter)
+ if(teamplay)
self.team = activator.team;
}
{
TDEATHLOOP(org)
{
- if not(teams_matter && autocvar_g_telefrags_teamplay && head.team == player.team)
+ if not(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team)
if(head.classname == "player")
if(head.health >= 1)
return 1;
{
if (player.classname == "player" && player.health >= 1)
{
- if not(teams_matter && autocvar_g_telefrags_teamplay && head.team == player.team)
+ if not(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team)
{
if(head.classname == "player")
if(head.health >= 1)
makevectors (to_angles);
- if(self.pushltime < time) // only show one teleport effect per teleporter per 0.2 seconds, for better fps
+ if(player.classname == "player") // don't play sounds or show particles for anything that isn't a player, maybe change later to block only observers
{
- if(tflags & TELEPORT_FLAG_SOUND)
- sound (player, CHAN_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTN_NORM);
- if(tflags & TELEPORT_FLAG_PARTICLES)
+ if(self.pushltime < time) // only show one teleport effect per teleporter per 0.2 seconds, for better fps
{
- pointparticles(particleeffectnum("teleport"), player.origin, '0 0 0', 1);
- pointparticles(particleeffectnum("teleport"), to + v_forward * 32, '0 0 0', 1);
+ if(tflags & TELEPORT_FLAG_SOUND)
+ sound (player, CH_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTN_NORM);
+ if(tflags & TELEPORT_FLAG_PARTICLES)
+ {
+ pointparticles(particleeffectnum("teleport"), player.origin, '0 0 0', 1);
+ pointparticles(particleeffectnum("teleport"), to + v_forward * 32, '0 0 0', 1);
+ }
+ self.pushltime = time + 0.2;
}
- self.pushltime = time + 0.2;
}
// Relocate the player
}
}
-void Teleport_Touch (void)
+void Simple_TeleportPlayer(entity teleporter, entity player)
{
- entity oldself, e;
- vector o;
+ vector locout;
+ entity e;
float p;
+
+ // Find the output teleporter
+ if(!teleporter.enemy)
+ {
+ RandomSelection_Init();
+ for(e = world; (e = find(e, targetname, teleporter.target)); )
+ {
+ p = 1;
+ if(autocvar_g_telefrags_avoid)
+ {
+ locout = e.origin + '0 0 1' * (1 - player.mins_z - 24);
+ if(check_tdeath(player, locout, '0 0 0', '0 0 0'))
+ p = 0;
+ }
+ RandomSelection_Add(e, 0, string_null, (e.cnt ? e.cnt : 1), p);
+ }
+ teleporter.enemy = RandomSelection_chosen_ent;
+ }
+
+ if(!teleporter.enemy) { sprint(player, "Teleport destination vanished. Sorry... please complain to the mapper.\n"); }
+
+ makevectors(teleporter.enemy.mangle);
+
+ if(teleporter.enemy.speed)
+ if(vlen(player.velocity) > teleporter.enemy.speed)
+ player.velocity = normalize(player.velocity) * max(0, teleporter.enemy.speed);
+
+ if(autocvar_g_teleport_maxspeed)
+ if(vlen(player.velocity) > autocvar_g_teleport_maxspeed)
+ player.velocity = normalize(player.velocity) * max(0, autocvar_g_teleport_maxspeed);
+
+ locout = teleporter.enemy.origin + '0 0 1' * (1 - player.mins_z - 24);
+ TeleportPlayer(teleporter, player, locout, teleporter.enemy.mangle, v_forward * vlen(player.velocity), '0 0 0', '0 0 0', TELEPORT_FLAGS_TELEPORTER);
+}
+
+void Teleport_Touch (void)
+{
+ entity oldself;
string s;
if (self.active != ACTIVE_ACTIVE)
return;
- if (other.health < 1)
+ if not(other.iscreature)
+ if (other.deadflag != DEAD_NO)
return;
- if not(other.flags & FL_CLIENT) // FIXME: Make missiles firable through the teleport too
+
+ // for gameplay: vehicles can't teleport
+ if (other.vehicle_flags & VHF_ISVEHICLE)
+ return;
+
+ if (other.deadflag != DEAD_NO)
return;
if(self.team)
EXACTTRIGGER_TOUCH;
- makevectors(self.enemy.mangle);
-
if(other.classname == "player")
RemoveGrapplingHook(other);
-
- if(self.enemy)
- {
- e = self.enemy;
- }
- else
- {
- RandomSelection_Init();
- for(e = world; (e = find(e, targetname, self.target)); )
- {
- p = 1;
- if(autocvar_g_telefrags_avoid)
- {
- o = e.origin + '0 0 1' * (1 - other.mins_z - 24);
- if(check_tdeath(other, o, '0 0 0', '0 0 0'))
- p = 0;
- }
- if(e.cnt)
- RandomSelection_Add(e, 0, string_null, e.cnt, p);
- else
- RandomSelection_Add(e, 0, string_null, 1, p);
- }
- e = RandomSelection_chosen_ent;
- }
-
- if(!e)
- {
- sprint(other, "Teleport destination vanished. Sorry... please complain to the mapper.\n");
- }
-
- if(e.speed)
- if(vlen(other.velocity) > e.speed)
- other.velocity = normalize(other.velocity) * max(0, e.speed);
- if(autocvar_g_teleport_maxspeed)
- if(vlen(other.velocity) > autocvar_g_teleport_maxspeed)
- other.velocity = normalize(other.velocity) * max(0, autocvar_g_teleport_maxspeed);
-
- o = e.origin + '0 0 1' * (1 - other.mins_z - 24);
- TeleportPlayer(self, other, o, e.mangle, v_forward * vlen(other.velocity), '0 0 0', '0 0 0', TELEPORT_FLAGS_TELEPORTER);
+
+ Simple_TeleportPlayer(self, other);
activator = other;
s = self.target; self.target = string_null;
if not(self.target) self.target = s;
oldself = self;
- self = e;
+ self = self.enemy;
SUB_UseTargets();
self = oldself;
}
entity e;
float n;
- RandomSelection_Init();
n = 0;
for(e = world; (e = find(e, targetname, self.target)); )
{
++n;
if(e.movetype == MOVETYPE_NONE)
- RandomSelection_Add(e, 0, string_null, 1, 1);
+ waypoint_spawnforteleporter(self, e.origin, 0);
if(e.classname != "info_teleport_destination")
print("^3MAPPER ERROR: teleporter does target an invalid teleport destination entity. Angles will not work.\n");
}
- if(RandomSelection_chosen_ent)
- waypoint_spawnforteleporter(self, RandomSelection_chosen_ent.origin, 0);
if(n == 0)
{
{
// exactly one dest - bots love that
self.enemy = find(e, targetname, self.target);
- self.dest = self.enemy.origin;
}
else
{
self.touch = Teleport_Touch;
}
+entity Teleport_Find(vector mi, vector ma)
+{
+ entity e;
+ for(e = world; (e = find(e, classname, "trigger_teleport")); )
+ if(WarpZoneLib_BoxTouchesBrush(mi, ma, e, world))
+ return e;
+ return world;
+}
+
+entity teleport_first;
+.entity teleport_next;
void spawnfunc_trigger_teleport (void)
{
self.angles = '0 0 0';
objerror ("Teleporter with no target");
return;
}
+
+ self.teleport_next = teleport_first;
+ teleport_first = self;
}
void WarpZone_PostTeleportPlayer_Callback(entity pl)
{
UpdateCSQCProjectileAfterTeleport(pl);
+ // "disown" projectiles after teleport
+ if(pl.owner == pl.realowner)
+ pl.owner = world;
if(pl.classname == "player")
{
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
{
if(intermission_running)
return 0; // no rebalancing whatsoever please
- if(!teams_matter)
+ if(!teamplay)
return 0;
if(autocvar_g_campaign)
return 0;
g_tdm = 1;
}
- teams_matter = 0;
+ teamplay = 0;
serverflags &~= SERVERFLAG_TEAMPLAY;
}
void ActivateTeamplay()
{
serverflags |= SERVERFLAG_TEAMPLAY;
- teams_matter = 1;
+ teamplay = 1;
}
void InitGameplayMode()
MUTATOR_ADD(gamemode_keepaway);
}
- if(teams_matter)
+ if(teamplay)
entcs_init();
// save it (for the next startup)
return versionmsg;
}
-
-void PrintWelcomeMessage(entity pl)
+string getwelcomemessage(void)
{
string s, modifications, motd;
- if(self.cvar_scr_centertime == 0) return;
-
- if(autocvar_g_campaign)
- {
- if(self.classname == "player" && !self.BUTTON_INFO)
- return;
- }
- else
- {
- if((time - self.jointime) > autocvar_welcome_message_time && !self.BUTTON_INFO)
- return;
- }
-
- if( !(timeoutStatus >= 1) ) { //really print the WelcomeMessage to the player every frame when timeout-seconds are shown or the game is restarted, to make sure that the shown number is accurate
- if(self.welcomemessage_time > time) return;
- self.welcomemessage_time = time + max(0.5, self.cvar_scr_centertime * 0.6);
- }
-
- if(autocvar_g_campaign)
- {
- centerprint(pl, campaign_message);
- return;
- }
-
-//TODO GreEn`mArine: make the timeout-messages clientside as well (just like the ready restart countdown)!
- if(!self.BUTTON_INFO)
- {
- // TODO get rid of this too
- local string specString;
- specString = NEWLINES;
- //if(time < game_starttime) //also show the countdown when being a spectator
- // specString = strcat(specString, "\n\n^1Game starts in ", ftos(ceil(game_starttime - time)), " seconds^7");
- //else
- if (timeoutStatus != 0)
- specString = strcat(specString, "\n\n", getTimeoutText(1));
- else
- {
- if(self.classname == "player")
- return;
- goto normal;
- }
- return centerprint_atprio(self, CENTERPRIO_SPAM, specString);
- }
-
-:normal
ret_string = "";
MUTATOR_CALLHOOK(BuildMutatorsPrettyString);
modifications = ret_string;
local string versionmessage;
versionmessage = GetClientVersionMessage();
- s = strcat(s, NEWLINES, "This is Xonotic ", autocvar_g_xonoticversion, "\n", versionmessage);
+ s = strcat("This is Xonotic ", autocvar_g_xonoticversion, "\n", versionmessage);
s = strcat(s, "^8\n\nmatch type is ^1", gamemode_name, "^8\n");
if(modifications != "")
s = strcat(s, "^8\nactive modifications: ^3", modifications, "^8\n");
- if(timeoutStatus != 0)
- s = strcat(s, "\n\n", getTimeoutText(1));
-
if (g_grappling_hook)
s = strcat(s, "\n\n^3grappling hook^8 is enabled, press 'e' to use it\n");
if (motd != "") {
s = strcat(s, "\n\n^8MOTD: ^7", strreplace("\\n", "\n", motd));
}
- s = strcat(s, "\n");
-
- centerprint(pl, s);
+ return s;
}
-
void SetPlayerColors(entity pl, float _color)
{
/*string s;
shirt = _color & 0xF0;
- if(teams_matter) {
+ if(teamplay) {
setcolor(pl, 16*pants + pants);
} else {
setcolor(pl, shirt + pants);
float smallest, selectedteam;
// don't join a team if we're not playing a team game
- if(!teams_matter)
+ if(!teamplay)
return 0;
// find out what teams are available
float scolor, dcolor, steam, dteam, dbotcount, scount, dcount;
// in normal deathmatch we can just apply the color and we're done
- if(!teams_matter) {
+ if(!teamplay) {
SetPlayerColors(self, _color);
return;
}
#define TTURRETS_ENABLED
#ifdef TTURRETS_ENABLED
-
-#message "with tZork turrets"
+#ifdef SVQC
+//#message "with tZork turrets"
float turret_count;
#define TSF_NO_PATHBREAK 8
/// Dont respawn
#define TSL_NO_RESPAWN 16
+/// Let this turret roam when idle.
+#define TSL_ROAM 32
/// target selection flags
.float target_select_flags;
.float target_select_playerbias;
/// Field of view
//.float target_select_fov;
-/// Last thimestamp this surret aquierd a valid target
+/// Last timestamp this turret aquierd a valid target
.float target_select_time;
-
+/// Throttle re-validation of current target
+.float target_validate_time;
/*
* Aim refers to real aiming, not gun pos (thats done by track)
*/
.void() turret_diehook;
.void() turret_respawnhook;
-/*
-#define TEH_THINK 2
-#define TEH_DAMAGE 4
-#define TEH_DIE 8
-#define TEH_RESPAWN 16
-#define TEH_TRACK 32
-#define TEH_AIM 64
-#define TEH_SELECT 128
-.float(float event_id) turret_eventhook;
-*/
-
-
/*
* Target selection, preferably but not nessesarely
* return a normalized result.
*/
/// Function to use for target evaluation. usualy turret_stdproc_targetscore_generic
-.float(entity e_turret, entity e_target) turret_score_target;
-
+.float(entity _turret, entity _target) turret_score_target;
/*
* Target selection
*/
/// Generic, fairly smart, bias-aware target selection.
-float turret_stdproc_targetscore_generic(entity e_turret, entity e_target);
+float turret_stdproc_targetscore_generic(entity _turret, entity _target);
/// Experimental supportunits targetselector
-float turret_stdproc_targetscore_support(entity e_turret,entity e_target);
+float turret_stdproc_targetscore_support(entity _turret,entity _target);
/*
* Aim functions
.vector tur_shotdir_updated;
void turrets_precash();
-
-
+#endif // SVQC
+
+// common
+.float turret_type;
+float TID_COMMON = 1;
+float TID_EWHEEL = 2;
+float TID_FLAC = 3;
+float TID_FUSION = 4;
+float TID_HELLION = 5;
+float TID_HK = 6;
+float TID_MACHINEGUN = 7;
+float TID_MLRS = 8;
+float TID_PHASER = 9;
+float TID_PLASMA = 10;
+float TID_PLASMA_DUAL = 11;
+float TID_TESLA = 12;
+float TID_WALKER = 13;
+float TID_LAST = 13;
+
+float TNSF_UPDATE = 2;
+float TNSF_STATUS = 4;
+float TNSF_SETUP = 8;
+float TNSF_ANG = 16;
+float TNSF_AVEL = 32;
+float TNSF_MOVE = 64;
+.float anim_start_time;
+float TNSF_ANIM = 128;
+
+float TNSF_FULL_UPDATE = 16777215;
#endif // TTURRETS_ENABLED
/*
-* Trow a turret gib
+* Spawn a boom, trow fake bits arround
+* and hide the real ones.
*/
-void turret_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+void turret_hide()
{
- self.velocity += vforce;
+ self.effects |= EF_NODRAW;
+ self.nextthink = time + self.respawntime - 0.2;
+ self.think = turret_stdproc_respawn;
}
-void turret_trowgib(
- vector v_from, vector v_to, vector v_colormod,
- string smodel,
- float f_lifetime, float f_fadetime, float b_burn)
-{
- local entity gib;
- local entity burn;
-
- gib = spawn();
-
- gib.classname = "turret_gib";
- setmodel(gib, smodel);
- setorigin(gib, v_from);
- SUB_SetFade(gib,time + f_lifetime, 2);
-
- gib.solid = SOLID_BBOX;
- gib.movetype = MOVETYPE_BOUNCE;
- gib.takedamage = DAMAGE_YES;
- gib.event_damage = turret_gib_damage;
- gib.health = -1;
- gib.effects = EF_LOWPRECISION;
- gib.flags = FL_NOTARGET;
- gib.colormod = v_colormod;
- gib.velocity = v_to;
-
- if (b_burn)
- {
- burn = spawn();
- burn.effects = EF_LOWPRECISION;//|EF_FLAME;
- setattachment(burn,gib,"");
- setorigin(burn,(gib.mins + gib.maxs) * 0.5);
- SUB_SetFade(burn,time + (f_lifetime * 0.5), 2);
- }
-}
-
-void turret_gib_boom()
-{
- entity gib;
- float i;
- string s;
-
- for (i = 1; i < 5; i = i +1)
- {
- gib = spawn();
- gib.classname = "turret_gib";
-
- s = strcat("models/turrets/head-gib",ftos(i));
- s = strcat(s,".md3");
- setmodel(gib, s);
-
- setorigin(gib,self.origin);
-
- SUB_SetFade(gib,time + 5,2);
-
- gib.solid = SOLID_BBOX;
- gib.movetype = MOVETYPE_BOUNCE;
- gib.gravity = 0.5;
- gib.damageforcescale = 2;
- gib.takedamage = DAMAGE_YES;
- gib.event_damage = turret_gib_damage;
- gib.health = -1;
- gib.effects = EF_LOWPRECISION;
- gib.flags = FL_NOTARGET;
- gib.velocity = self.velocity + (randomvec() * 700);
- gib.avelocity = randomvec() * 64;
- }
-
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 78);
- WriteCoord (MSG_BROADCAST, self.origin_x);
- WriteCoord (MSG_BROADCAST, self.origin_y);
- WriteCoord (MSG_BROADCAST, self.origin_z);
-
- remove(self);
-}
-
-void turret_trowgib2(
- vector v_from, vector v_to, vector v_colormod,
- entity e_mimic, float boomtime)
-{
- entity gib;
-
- gib = spawn();
-
- gib.classname = "turret_gib";
- setmodel(gib,e_mimic.model);
- setorigin(gib,v_from);
-
- gib.solid = SOLID_BBOX;
-
- gib.movetype = MOVETYPE_BOUNCE;
- gib.gravity = 0.75;
- gib.damageforcescale = 2;
- gib.takedamage = DAMAGE_YES;
- gib.event_damage = turret_gib_damage;
- gib.health = -1;
- gib.effects = EF_LOWPRECISION;
- gib.flags = FL_NOTARGET;
- gib.colormod = v_colormod;
- gib.velocity = v_to;
- gib.avelocity = randomvec() * 32;
- gib.think = turret_gib_boom;
- gib.nextthink = boomtime;
- //gib.effects = EF_FLAME;
-
-
-}
-/*
-* Spawn a boom, trow fake bits arround
-* and hide the real ones.
-*/
void turret_stdproc_die()
{
- vector org2;
- vector t_dir;
-
self.deadflag = DEAD_DEAD;
self.tur_head.deadflag = self.deadflag;
- sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = self.origin + '0 0 40';
-
-// Explotion grafix
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 78);
- WriteCoord (MSG_BROADCAST, org2_x);
- WriteCoord (MSG_BROADCAST, org2_y);
- WriteCoord (MSG_BROADCAST, org2_z);
-
// Unsolidify and hide real parts
self.solid = SOLID_NOT;
self.tur_head.solid = self.solid;
- self.alpha = -1;
- self.tur_head.alpha = self.alpha;
- self.customizeentityforclient = SUB_False;
- self.tur_head.customizeentityforclient = SUB_False;
-
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
- self.effects = 0;
- self.tur_head.effects = self.effects;
self.health = 0;
-// Trow fake parts arround
- // base
- if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
- {
- makevectors(self.angles);
- if (random() > 0.5)
- {
- turret_trowgib(self.origin, '0 0 0', '1 1 1', "models/turrets/base-gib2.md3", min(self.respawntime, 20), 1, 1);
-
- t_dir = (v_up * 700) + (randomvec() * 300);
- turret_trowgib(self.origin, t_dir, '1 1 1', "models/turrets/base-gib3.md3", min(self.respawntime, 10), 1, 1);
-
- t_dir = (v_up * 700) + (randomvec() * 300);
- turret_trowgib(self.origin, t_dir, '1 1 1', "models/turrets/base-gib4.md3", min(self.respawntime, 10), 1, 1);
- }
- else
- {
- turret_trowgib(self.origin, '0 0 0', '1 1 1', "models/turrets/base-gib1.md3", min(self.respawntime, 20), 1, 1);
- }
-
- // Blow the top part up into the air
- turret_trowgib2( self.origin + (v_up * 50), v_up * 150 + randomvec() * 50, '0.2 0.2 0.2', self.tur_head,time + 0.5 + (random() * 0.5));
- }
-
// Go boom
//RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
else
{
// Setup respawn
- self.nextthink = time + self.respawntime;
- self.think = turret_stdproc_respawn;
+ self.SendFlags |= TNSF_STATUS;
+ self.nextthink = time + 0.2;
+ self.think = turret_hide;
if (self.turret_diehook)
self.turret_diehook();
}
}
-var const float SUB_NullFloat();
void turret_stdproc_respawn()
{
// Make sure all parts belong to the same team since
// this function doubles as "teamchange" function.
-
self.tur_head.team = self.team;
- self.colormod = '0 0 0';
-
- switch(self.team)
- {
- case COLOR_TEAM1: // Red
- self.colormod = '1.4 0.8 0.8';
- break;
-
- case COLOR_TEAM2: // Blue
- self.colormod = '0.8 0.8 1.4';
- break;
-
- case COLOR_TEAM3: // Yellow
- self.colormod = '1.4 1.4 0.6';
- break;
-
- case COLOR_TEAM4: // Pink
- self.colormod = '1.4 0.6 1.4';
- break;
- }
+ self.effects &~= EF_NODRAW;
self.deadflag = DEAD_NO;
self.effects = EF_LOWPRECISION;
- self.tur_head.effects = self.effects;
self.solid = SOLID_BBOX;
- self.alpha = 1;
- self.tur_head.alpha = self.alpha;
- self.customizeentityforclient = SUB_NullFloat;
- self.tur_head.customizeentityforclient = SUB_NullFloat;
-
self.takedamage = DAMAGE_AIM;
self.event_damage = turret_stdproc_damage;
self.nextthink = time + self.ticrate;
self.think = turret_think;
+
+ self.SendFlags = TNSF_FULL_UPDATE;
if (self.turret_respawnhook)
self.turret_respawnhook();
-
}
/*
*/
void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
{
-
// Enougth allready!
- if (self.health <= 0)
+ if(self.deadflag == DEAD_DEAD)
return;
// Inactive turrets take no damage. (hm..)
if not (self.tur_active)
return;
- if (teams_matter)
+ if (teamplay)
if (self.team == attacker.team)
{
// This does not happen anymore. Re-enable if you fix that.
{
self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage;
self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage;
+
+ self.SendFlags |= TNSF_ANG;
+
}
if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
self.velocity = self.velocity + vforce;
-
- // FIXME: Better damage feedback?
if (self.health <= 0)
{
self.nextthink = time;
self.think = turret_stdproc_die;
}
+
+ self.SendFlags |= TNSF_STATUS;
}
#define cvar_base "g_turrets_unit_"
-
-/*
-float turret_customizeentityforclient()
-{
+.float clientframe;
+void turrets_setframe(float _frame, float client_only)
+{
+ if((client_only ? self.clientframe : self.frame ) != _frame)
+ {
+ self.SendFlags |= TNSF_ANIM;
+ self.anim_start_time = time;
+ }
+
+ if(client_only)
+ self.clientframe = _frame;
+ else
+ self.frame = _frame;
+
}
-float Turret_SendEntity(entity to, float sf)
+float turret_send(entity to, float sf)
{
+
+ WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
+ WriteByte(MSG_ENTITY, sf);
+ if(sf & TNSF_SETUP)
+ {
+ WriteByte(MSG_ENTITY, self.turret_type);
+
+ WriteCoord(MSG_ENTITY, self.origin_x);
+ WriteCoord(MSG_ENTITY, self.origin_y);
+ WriteCoord(MSG_ENTITY, self.origin_z);
+
+ WriteAngle(MSG_ENTITY, self.angles_x);
+ WriteAngle(MSG_ENTITY, self.angles_y);
+ }
+
+ if(sf & TNSF_ANG)
+ {
+ WriteShort(MSG_ENTITY, rint(self.tur_head.angles_x));
+ WriteShort(MSG_ENTITY, rint(self.tur_head.angles_y));
+ }
+
+ if(sf & TNSF_AVEL)
+ {
+ WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_x));
+ WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y));
+ }
+
+ if(sf & TNSF_MOVE)
+ {
+ WriteShort(MSG_ENTITY, rint(self.origin_x));
+ WriteShort(MSG_ENTITY, rint(self.origin_y));
+ WriteShort(MSG_ENTITY, rint(self.origin_z));
- WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
- WriteCoord(MSG_ENTITY, self.tur_head.angles_x);
- WriteCoord(MSG_ENTITY, self.tur_head.angles_y);
- WriteByte(MSG_ENTITY, self.tur_head.frame);
-
- //WriteCoord(MSG_ENTITY, self.tur_head.angles_z);
-
+ WriteShort(MSG_ENTITY, rint(self.velocity_x));
+ WriteShort(MSG_ENTITY, rint(self.velocity_y));
+ WriteShort(MSG_ENTITY, rint(self.velocity_z));
+
+ WriteShort(MSG_ENTITY, rint(self.angles_y));
+ }
+
+ if(sf & TNSF_ANIM)
+ {
+ WriteCoord(MSG_ENTITY, self.anim_start_time);
+ WriteByte(MSG_ENTITY, self.frame);
+ }
+
+ if(sf & TNSF_STATUS)
+ {
+ WriteByte(MSG_ENTITY, self.team);
+
+ if(self.health <= 0)
+ WriteByte(MSG_ENTITY, 0);
+ else
+ WriteByte(MSG_ENTITY, ceil((self.health / self.tur_health) * 255));
+ }
+
return TRUE;
}
-*/
void load_unit_settings(entity ent, string unitname, float is_reload)
{
ent.turret_respawnhook();
}
-
/**
** updates enemy distances, predicted impact point/time
** and updated aim<->predict impact distance.
self.tur_dist_impact_to_aimpos = 0;
else
self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos);
-
-
}
else
tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self);
** Handles head rotation according to
** the units .track_type and .track_flags
**/
+.float turret_framecounter;
void turret_stdproc_track()
{
vector target_angle; // This is where we want to aim
vector move_angle; // This is where we can aim
float f_tmp;
-
+ vector v1, v2;
+ v1 = self.tur_head.angles;
+ v2 = self.tur_head.avelocity;
+
if (self.track_flags == TFL_TRACK_NO)
return;
self.tur_head.angles_y = anglemods(self.tur_head.angles_y);
// Find the diffrence between where we currently aim and where we want to aim
- move_angle = target_angle - (self.angles + self.tur_head.angles);
- move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
+ //move_angle = target_angle - (self.angles + self.tur_head.angles);
+ //move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
+
+ move_angle = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(self.angles), AnglesTransform_FromAngles(target_angle))) - self.tur_head.angles;
+ move_angle = shortangle_vxy(move_angle, self.tur_head.angles);
switch(self.track_type)
{
if(self.tur_head.angles_y < -self.aim_maxrot)
self.tur_head.angles_y = self.aim_maxrot;
}
-
+
+ // CSQC
+ self.SendFlags = TNSF_ANG;
+
return;
case TFL_TRACKTYPE_FLUIDINERTIA:
{
self.tur_head.avelocity_x = 0;
self.tur_head.angles_x = self.aim_maxpitch;
+
+ self.SendFlags |= TNSF_ANG;
}
if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) < -self.aim_maxpitch)
{
self.tur_head.avelocity_x = 0;
self.tur_head.angles_x = -self.aim_maxpitch;
+
+ self.SendFlags |= TNSF_ANG;
}
}
{
self.tur_head.avelocity_y = 0;
self.tur_head.angles_y = self.aim_maxrot;
+
+ self.SendFlags |= TNSF_ANG;
}
if((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) < -self.aim_maxrot)
{
self.tur_head.avelocity_y = 0;
self.tur_head.angles_y = -self.aim_maxrot;
+
+ self.SendFlags |= TNSF_ANG;
}
}
+
+ self.SendFlags |= TNSF_AVEL;
+
+ // Force a angle update every 10'th frame
+ self.turret_framecounter += 1;
+ if(self.turret_framecounter >= 10)
+ {
+ self.SendFlags |= TNSF_ANG;
+ self.turret_framecounter = 0;
+ }
}
entity e;
self.nextthink = time + self.ticrate;
-
+
// ONS uses somewhat backwards linking.
- if (teams_matter)
+ if (teamplay)
{
if not (g_onslaught)
if (self.target)
if not (self.spawnflags & TSF_NO_AMMO_REGEN)
if (self.ammo < self.ammo_max)
self.ammo = min(self.ammo + self.ammo_recharge, self.ammo_max);
-
- if (self.health < (self.tur_health * 0.5))
- if(random() < 0.25)
- te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
// Inactive turrets needs to run the think loop,
// So they can handle animation and wake up if need be.
do_target_scan = 1;
// Old target (if any) invalid?
+ if(self.target_validate_time < time)
if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
{
self.enemy = world;
+ self.target_validate_time = time + 0.5;
do_target_scan = 1;
}
void turret_link()
{
- //Net_LinkEntity(self, FALSE, 0, Turret_SendEntity);
+ Net_LinkEntity(self, TRUE, 0, turret_send);
self.think = turret_think;
self.nextthink = time;
+ self.tur_head.effects = EF_NODRAW;
}
void turrets_manager_think()
* (unless you have a very good reason not to)
* if the return value is 0, the turret should be removed.
*/
-float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head)
+float turret_stdproc_init (string cvar_base_name, string base, string head, float _turret_type)
{
entity e, ee;
// Are turrets allowed?
if (autocvar_g_turrets == 0)
return 0;
-
-
+
+ if(_turret_type < 1 || _turret_type > TID_LAST)
+ {
+ dprint("Invalid / Unkown turret type\"", ftos(_turret_type), "\", aborting!\n");
+ return 0;
+ }
+ self.turret_type = _turret_type;
+
e = find(world, classname, "turret_manager");
if not (e)
{
e.nextthink = time + 2;
}
+ /*
if(csqc_shared)
{
dprint("WARNING: turret requested csqc_shared but this is not implemented. Expect strange things to happen.\n");
csqc_shared = 0;
}
-
+ */
+
if not (self.spawnflags & TSF_SUSPENDED)
droptofloor_builtin();
// Terrainbase spawnflag. This puts a enlongated model
// under the turret, so it looks ok on uneaven surfaces.
+ /* TODO: Handle this with CSQC
if (self.spawnflags & TSF_TERRAINBASE)
{
entity tb;
setorigin(tb,self.origin);
tb.solid = SOLID_BBOX;
}
+ */
self.cvar_basename = cvar_base_name;
- load_unit_settings(self,self.cvar_basename, 0);
+ load_unit_settings(self, self.cvar_basename, 0);
+ self.effects = EF_NODRAW;
+
// Handle turret teams.
if (autocvar_g_assault != 0)
{
if not (self.team)
self.team = 14; // Assume turrets are on the defending side if not explicitly set otehrwize
}
- else if not (teams_matter)
+ else if not (teamplay)
self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team, so they dont kill eachother.
else if(g_onslaught && self.targetname)
{
self.target_validate_flags = self.target_select_flags;
-
// Ammo stuff
if not (self.ammo_max)
self.ammo_max = self.shot_dmg * 10;
// Offsets & origins
if (!self.tur_shotorg) self.tur_shotorg = '50 0 50';
+
+ if (!self.health)
+ self.health = 150;
-// Gane hooks
+// Game hooks
if(MUTATOR_CALLHOOK(TurretSpawn))
return 0;
setorigin(self.tur_head, '0 0 0');
setattachment(self.tur_head, self, "tag_head");
- if (!self.health)
- self.health = 150;
-
self.tur_health = self.health;
self.solid = SOLID_BBOX;
self.tur_head.solid = SOLID_NOT;
else
self.idle_aim = '0 0 0';
- // Team color
- if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
- if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
-
// Attach stdprocs. override when and what needed
+ self.turret_firecheckfunc = turret_stdproc_firecheck;
+ self.turret_firefunc = turret_stdproc_fire;
+ self.event_damage = turret_stdproc_damage;
+
if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
- {
self.turret_score_target = turret_stdproc_targetscore_support;
- self.turret_firecheckfunc = turret_stdproc_firecheck;
- self.turret_firefunc = turret_stdproc_fire;
- self.event_damage = turret_stdproc_damage;
- }
else
- {
self.turret_score_target = turret_stdproc_targetscore_generic;
- self.turret_firecheckfunc = turret_stdproc_firecheck;
- self.turret_firefunc = turret_stdproc_fire;
- self.event_damage = turret_stdproc_damage;
- }
self.use = turret_stdproc_use;
self.bot_attack = TRUE;
- // Initiate the main AI loop
- if(csqc_shared)
- self.think = turret_link;
- else
- self.think = turret_think;
-
++turret_count;
self.nextthink = time + 1;
self.nextthink += turret_count * sys_frametime;
activator = ee;
self.use();
}
-
+
+ turret_link();
turret_stdproc_respawn();
+
+ if (!turret_tag_fire_update())
+ dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
return 1;
}
void turrets_precash()
{
- precache_model ("models/turrets/base-gib1.md3");
- precache_model ("models/turrets/base-gib2.md3");
- precache_model ("models/turrets/base-gib3.md3");
- precache_model ("models/turrets/base-gib4.md3");
-
- precache_model ("models/turrets/head-gib1.md3");
- precache_model ("models/turrets/head-gib2.md3");
- precache_model ("models/turrets/head-gib3.md3");
- precache_model ("models/turrets/head-gib4.md3");
- precache_model ("models/turrets/terrainbase.md3");
-
- //precache_model ("models/turrets/base.md3");
- //precache_model ("models/turrets/flac.md3");
- //precache_model ("models/turrets/pd_proj.md3");
- //precache_model ("models/turrets/reactor.md3");
- //precache_model ("models/turrets/mlrs_rocket.md3");
- //precache_model ("models/turrets/hellion.md3");
- //precache_model ("models/turrets/hunter2.md3");
- //precache_model ("models/turrets/hk.md3");
- //precache_model ("models/turrets/machinegun.md3");
- //precache_model ("models/turrets/rocket.md3");
- //precache_model ("models/turrets/mlrs.md3");
- //precache_model ("models/turrets/phaser.md3");
- //precache_model ("models/turrets/phaser_beam.md3");
- //precache_model ("models/turrets/plasmad.md3");
- //precache_model ("models/turrets/plasma.md3");
- //precache_model ("models/turrets/tesla_head.md3");
- //precache_model ("models/turrets/tesla_base.md3");
#ifdef TURRET_DEBUG
turrets_precache_debug_models();
#endif
-/*
-.float target_select_flags; /// target selection flags
-float TFL_TARGETSELECT_NO = 1; /// Dont select a target on its own.
-float TFL_TARGETSELECT_LOS = 2; /// Need line of sight
-float TFL_TARGETSELECT_PLAYERS = 4; /// Players are valid targets
-float TFL_TARGETSELECT_MISSILES = 8; /// Missiles are valid targets
-float TFL_TARGETSELECT_TRIGGERTARGET = 16; /// Responds to turret_trigger_target events
-float TFL_TARGETSELECT_ANGLELIMITS = 32; /// Angular limitations of turret head limits target selection
-float TFL_TARGETSELECT_RANGELIMTS = 64; /// Range limits apply in targetselection
-float TFL_TARGETSELECT_TEAMCHECK = 128; /// Consider team own <-> targets team
-float TFL_TARGETSELECT_NOBUILTIN = 256; /// Cant select targets on its own. needs to be triggerd or slaved.
-float TFL_TARGETSELECT_OWNTEAM = 512;
-*/
-
-float turret_stdproc_targetscore_support(entity e_turret,entity e_target)
+float turret_stdproc_targetscore_support(entity _turret,entity _target)
{
float score; // Total score
- float s_score,d_score;
+ float s_score, d_score;
- if (e_turret.enemy == e_target) s_score = 1;
+ if (_turret.enemy == _target) s_score = 1;
- d_score = min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);
+ d_score = min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
- score = (d_score * e_turret.target_select_rangebias) +
- (s_score * e_turret.target_select_samebias);
+ score = (d_score * _turret.target_select_rangebias) +
+ (s_score * _turret.target_select_samebias);
return score;
}
/*
* Generic bias aware score system.
*/
-float turret_stdproc_targetscore_generic(entity e_turret, entity e_target)
+float turret_stdproc_targetscore_generic(entity _turret, entity _target)
{
- //vector v_tmp;
float d_dist; // Defendmode Distance
-
float score; // Total score
-
float d_score; // Distance score
float a_score; // Angular score
float m_score; // missile score
float p_score; // player score
- //float da_score; // Distance from aimpoint score
-
float ikr; // ideal kill range
- /*
- if(!e_target)
- return 0;
- */
-
- if (e_turret.tur_defend)
+ if (_turret.tur_defend)
{
- d_dist = vlen(real_origin(e_target) - e_turret.tur_defend.origin);
- ikr = vlen(e_turret.origin - e_turret.tur_defend.origin);
- d_score = 1 - d_dist / e_turret.target_range;
+ d_dist = vlen(real_origin(_target) - _turret.tur_defend.origin);
+ ikr = vlen(_turret.origin - _turret.tur_defend.origin);
+ d_score = 1 - d_dist / _turret.target_range;
}
else
{
// Make a normlized value base on the targets distance from our optimal killzone
- ikr = e_turret.target_range_optimal;
- d_score = min(ikr,tvt_dist) / max(ikr,tvt_dist);
+ ikr = _turret.target_range_optimal;
+ d_score = min(ikr, tvt_dist) / max(ikr, tvt_dist);
}
- /*
- // Determine the maximum time it could take this turrent to aim at someting.
- max_aim_delay = (max(e_turret.aim_maxrot,e_turret.aim_maxpitch) / e_turret.aim_speed * 2);
-
- // Find out how long it would take to aim at this taget.
- aim_delay = (thadf+0.01) / e_turret.aim_speed;
-
- // Turn this info into a normalized value.
- aim_delay = (min(max_aim_delay,aim_delay) / max_aim_delay);
- a_score = 1 - aim_delay;
- */
-
- //a_score = 1 - (tvt_thadf / max(e_turret.aim_maxrot,e_turret.aim_maxpitch));
- a_score = 1 - tvt_thadf / e_turret.aim_maxrot;
+ a_score = 1 - tvt_thadf / _turret.aim_maxrot;
- if ((e_turret.target_select_missilebias > 0) && (e_target.flags & FL_PROJECTILE))
+ if ((_turret.target_select_missilebias > 0) && (_target.flags & FL_PROJECTILE))
m_score = 1;
- if ((e_turret.target_select_playerbias > 0) && (e_target.flags & FL_CLIENT))
+ if ((_turret.target_select_playerbias > 0) && (_target.flags & FL_CLIENT))
p_score = 1;
d_score = max(d_score, 0);
m_score = max(m_score, 0);
p_score = max(p_score, 0);
- score = (d_score * e_turret.target_select_rangebias) +
- (a_score * e_turret.target_select_anglebias) +
- (m_score * e_turret.target_select_missilebias) +
- (p_score * e_turret.target_select_playerbias);
+ score = (d_score * _turret.target_select_rangebias) +
+ (a_score * _turret.target_select_anglebias) +
+ (m_score * _turret.target_select_missilebias) +
+ (p_score * _turret.target_select_playerbias);
- if(e_turret.target_range < vlen(e_turret.tur_shotorg - real_origin(e_target)))
+ if(_turret.target_range < vlen(_turret.tur_shotorg - real_origin(_target)))
{
dprint("Wtf?\n");
score *= 0.001;
string sdt,sat,smt,spt;
sd = ftos(d_score);
- d_score *= e_turret.target_select_rangebias;
+ d_score *= _turret.target_select_rangebias;
sdt = ftos(d_score);
//sv = ftos(v_score);
- //v_score *= e_turret.target_select_samebias;
+ //v_score *= _turret.target_select_samebias;
//svt = ftos(v_score);
sa = ftos(a_score);
- a_score *= e_turret.target_select_anglebias;
+ a_score *= _turret.target_select_anglebias;
sat = ftos(a_score);
sm = ftos(m_score);
- m_score *= e_turret.target_select_missilebias;
+ m_score *= _turret.target_select_missilebias;
smt = ftos(m_score);
sp = ftos(p_score);
- p_score *= e_turret.target_select_playerbias;
+ p_score *= _turret.target_select_playerbias;
spt = ftos(p_score);
ss = ftos(score);
- bprint("^3Target scores^7 \[ ",e_turret.netname, " \] ^3for^7 \[ ", e_target.netname," \]\n");
+ bprint("^3Target scores^7 \[ ",_turret.netname, " \] ^3for^7 \[ ", _target.netname," \]\n");
bprint("^5Range:\[ ",sd, " \]^2+bias:\[ ",sdt," \]\n");
bprint("^5Angle:\[ ",sa, " \]^2+bias:\[ ",sat," \]\n");
bprint("^5Missile:\[ ",sm," \]^2+bias:\[ ",smt," \]\n");
}
/*
-float turret_stdproc_targetscore_close(entity e_turret,entity e_target)
+float turret_stdproc_targetscore_close(entity _turret,entity _target)
{
- return 1 - (tvt_dist / e_turret.target_range);
+ return 1 - (tvt_dist / _turret.target_range);
}
-float turret_stdproc_targetscore_far (entity e_turret,entity e_target)
+float turret_stdproc_targetscore_far (entity _turret,entity _target)
{
- return tvt_dist / e_turret.target_range;
+ return tvt_dist / _turret.target_range;
}
-float turret_stdproc_targetscore_optimal(entity e_turret,entity e_target)
+float turret_stdproc_targetscore_optimal(entity _turret,entity _target)
{
- return min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);
+ return min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
}
-float turret_stdproc_score_angular(entity e_turret,entity e_target)
+float turret_stdproc_score_angular(entity _turret,entity _target)
{
- return 1 - (tvt_thadf / e_turret.aim_maxrot);
+ return 1 - (tvt_thadf / _turret.aim_maxrot);
}
-float turret_stdproc_targetscore_defend(entity e_turret,entity e_target)
+float turret_stdproc_targetscore_defend(entity _turret,entity _target)
{
return 0;
- //min(e_target.origin,e_turret.tur_defend.origin) / max(e_target.origin,e_turret.tur_defend.origin);
+ //min(_target.origin,_turret.tur_defend.origin) / max(_target.origin,_turret.tur_defend.origin);
}
*/
{
}
+#if 0
+void turret_checkpoint_think()
+{
+ if(self.enemy)
+ te_lightning1(self,self.origin, self.enemy.origin);
+
+ self.nextthink = time + 0.25;
+}
+#endif
/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
-----------KEYS------------
target: .targetname of next waypoint in chain.
If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
*/
+//float tc_acum;
void turret_checkpoint_init()
{
- traceline(self.origin, self.origin - '0 0 1024', MOVE_WORLDONLY, self);
- setorigin(self,trace_endpos + '0 0 8');
+ traceline(self.origin + '0 0 16', self.origin - '0 0 1024', MOVE_WORLDONLY, self);
+ setorigin(self, trace_endpos + '0 0 32');
if(self.target != "")
{
- self.enemy = find(world,targetname,self.target);
+ self.enemy = find(world, targetname, self.target);
if(self.enemy == world)
dprint("A turret_checkpoint faild to find its target!\n");
}
+ //self.think = turret_checkpoint_think;
+ //self.nextthink = time + tc_acum + 0.25;
+ //tc_acum += 0.25;
}
void spawnfunc_turret_checkpoint()
{
setorigin(self,self.origin);
self.think = turret_checkpoint_init;
- self.nextthink = time + 0.1;
+ self.nextthink = time + 0.2;
}
// Compat.
#define ewheel_amin_bck_slow 3
#define ewheel_amin_bck_fast 4
-float ewheel_speed_fast;
-float ewheel_speed_slow;
-float ewheel_speed_slower;
-float ewheel_speed_stop;
-
-void turret_ewheel_loadcvars()
-{
- ewheel_speed_fast = autocvar_g_turrets_unit_ewheel_speed_fast;
- ewheel_speed_slow = autocvar_g_turrets_unit_ewheel_speed_slow;
- ewheel_speed_slower = autocvar_g_turrets_unit_ewheel_speed_slower;
- ewheel_speed_stop = autocvar_g_turrets_unit_ewheel_speed_stop;
-}
-
void turret_ewheel_projectile_explode()
{
- vector org2;
-
- org2 = findbetterlocation (self.origin, 8);
- pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
- //w_deathtypestring = "saw the eweel. to late.";
#ifdef TURRET_DEBUG
float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_EWHEEL, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_EWHEEL, world);
#endif
- sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
remove (self);
}
{
turret_do_updates(self);
- sound (self, CHAN_WEAPON, "weapons/lasergun_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/lasergun_fire.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
proj = spawn ();
}
}
-
+//#define EWHEEL_FANCYPATH
void ewheel_move_path()
{
-
+#ifdef EWHEEL_FANCYPATH
// Are we close enougth to a path node to switch to the next?
if (vlen(self.origin - self.pathcurrent.origin) < 64)
if (self.pathcurrent.path_next == world)
else
self.pathcurrent = self.pathcurrent.path_next;
-
+#else
+ if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ self.pathcurrent = self.pathcurrent.enemy;
+#endif
if (self.pathcurrent)
{
self.moveto = self.pathcurrent.origin;
self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
- movelib_move_simple(v_forward, ewheel_speed_fast, 0.4);
-
- return;
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_fast, 0.4);
}
}
void ewheel_move_enemy()
{
+ float newframe;
+
self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
//self.steerto = steerlib_standoff(self.enemy.origin,self.target_range_optimal);
{
if ( self.tur_head.spawnshieldtime < 1 )
{
- self.frame = ewheel_amin_fwd_fast;
- movelib_move_simple(v_forward, ewheel_speed_fast, 0.4);
+ newframe = ewheel_amin_fwd_fast;
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_fast, 0.4);
}
else if (self.tur_head.spawnshieldtime < 2)
{
- self.frame = ewheel_amin_fwd_slow;
- movelib_move_simple(v_forward, ewheel_speed_slow, 0.4);
+ newframe = ewheel_amin_fwd_slow;
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_slow, 0.4);
}
else
{
- self.frame = ewheel_amin_fwd_slow;
- movelib_move_simple(v_forward, ewheel_speed_slower, 0.4);
+ newframe = ewheel_amin_fwd_slow;
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_slower, 0.4);
}
}
else if (self.tur_dist_enemy < self.target_range_optimal * 0.5)
{
- self.frame = ewheel_amin_bck_slow;
- movelib_move_simple(v_forward * -1, ewheel_speed_slow, 0.4);
+ newframe = ewheel_amin_bck_slow;
+ movelib_move_simple(v_forward * -1, autocvar_g_turrets_unit_ewheel_speed_slow, 0.4);
}
else
{
- self.frame = ewheel_amin_stop;
- movelib_beak_simple(ewheel_speed_stop);
+ newframe = ewheel_amin_stop;
+ movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
+ }
+
+ if(self.frame != newframe)
+ {
+ self.frame = newframe;
+ self.SendFlags |= TNSF_ANIM;
+ self.anim_start_time = time;
}
}
void ewheel_move_idle()
{
+ if(self.frame != 0)
+ {
+ self.SendFlags |= TNSF_ANIM;
+ self.anim_start_time = time;
+ }
+
self.frame = 0;
if (vlen(self.velocity))
- movelib_beak_simple(ewheel_speed_stop);
+ movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
}
void ewheel_postthink()
{
float vz;
- vector wish_angle,real_angle;
-
- /*
- if(self.enemy)
- dprint("enemy!\n");
- else
- dprint("nothign =(!\n");
- */
+ vector wish_angle, real_angle;
vz = self.velocity_z;
self.angles_x = anglemods(self.angles_x);
self.angles_y = anglemods(self.angles_y);
- //self.angles_x *= -1;
fixedmakevectors(self.angles);
- //self.angles_x *= -1;
wish_angle = normalize(self.steerto);
wish_angle = vectoangles(wish_angle);
real_angle = wish_angle - self.angles;
- real_angle = shortangle_vxy(real_angle,self.tur_head.angles);
+ real_angle = shortangle_vxy(real_angle, self.tur_head.angles);
self.tur_head.spawnshieldtime = fabs(real_angle_y);
- real_angle_y = bound(-self.tur_head.aim_speed,real_angle_y,self.tur_head.aim_speed);
+ real_angle_y = bound(-self.tur_head.aim_speed, real_angle_y, self.tur_head.aim_speed);
self.angles_y = (self.angles_y + real_angle_y);
- // Simulate banking
- self.angles_z -= self.angles_z * frametime * 2;
- self.angles_z = bound(-45,self.angles_z + ((real_angle_y * -25) * frametime),45);
-
if(self.enemy)
ewheel_move_enemy();
else if(self.pathcurrent)
self.velocity_z = vz;
+
+ if(vlen(self.velocity))
+ self.SendFlags |= TNSF_MOVE;
}
void ewheel_respawnhook()
entity e;
// Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
- if(self.movetype != MOVETYPE_WALK)
+ if(self.movetype != MOVETYPE_WALK)
return;
self.velocity = '0 0 0';
dprint("Warning: not a turrret path\n");
else
{
+
+#ifdef EWHEEL_FANCYPATH
self.pathcurrent = WALKER_PATH(self.origin,e.origin);
self.pathgoal = e;
+#else
+ self.pathcurrent = e;
+#endif
}
}
}
{
self.velocity = '0 0 0';
- turret_trowgib2(self.origin, self.velocity + '0 0 400', '-0.6 -0.2 -02', self, 3 + time + random() * 2);
-
+#ifdef EWHEEL_FANCYPATH
if (self.pathcurrent)
pathlib_deletepath(self.pathcurrent.owner);
-
+#endif
self.pathcurrent = world;
}
{
entity e;
- if (self.netname == "") self.netname = "eWheel Turret";
+ if (self.netname == "")
+ self.netname = "eWheel Turret";
if (self.target != "")
{
self.turret_diehook = ewheel_diehook;
- if (turret_stdproc_init("ewheel_std",0,"models/turrets/ewheel-base2.md3","models/turrets/ewheel-gun1.md3") == 0)
+ if (turret_stdproc_init("ewheel_std", "models/turrets/ewheel-base2.md3", "models/turrets/ewheel-gun1.md3", TID_EWHEEL) == 0)
{
remove(self);
return;
}
self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
- self.target_select_flags = TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS;
- self.target_validate_flags = TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS;
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+
self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
self.iscreature = TRUE;
self.tur_head.aim_speed = autocvar_g_turrets_unit_ewheel_turnrate;
self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
//setorigin(self,self.origin + '0 0 128');
if (self.target != "")
{
dprint("Warning: not a turrret path\n");
else
{
+#ifdef EWHEEL_FANCYPATH
self.pathcurrent = WALKER_PATH(self.origin, e.origin);
self.pathgoal = e;
+#else
+ self.pathcurrent = e;
+#endif
}
}
}
precache_model ("models/turrets/ewheel-base2.md3");
precache_model ("models/turrets/ewheel-gun1.md3");
- precache_model ("models/pathlib/goodsquare.md3");
- precache_model ("models/pathlib/badsquare.md3");
- precache_model ("models/pathlib/square.md3");
-
- turret_ewheel_loadcvars();
-
self.think = turret_ewheel_dinit;
self.nextthink = time + 0.5;
}
turret_tag_fire_update();
- sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
proj = spawn ();
setorigin(proj, self.tur_shotorg);
setsize(proj, '0 0 0', '0 0 0');
void turret_flac_projectile_explode()
{
- float ftmp;
-
- // FIXME: tur_impacttime is not accurate enougth, this is a dirty hakk to make flac work.
-
- //w_deathtypestring = "got caught in the flack.";
-
-
-
if( (self.enemy != world) &&
(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3) )
{
// OMG HAXX!
setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
}
-
-
-
- te_explosion (self.origin);
-
- ftmp = crandom();
- if (ftmp<-0.7)
- sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
- else if (ftmp<0.4)
- sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
- else if (ftmp<1)
- sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
-
-
self.event_damage = SUB_Null;
-
#ifdef TURRET_DEBUG
- ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ float ftmp;
+ ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_FLAC, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + ftmp; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_FLAC, world);
#endif
remove (self);
self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
- if (turret_stdproc_init("flac_std",0,"models/turrets/base.md3","models/turrets/flac.md3") == 0)
+ if (turret_stdproc_init("flac_std", "models/turrets/base.md3", "models/turrets/flac.md3", TID_FLAC) == 0)
{
remove(self);
return;
self.damage_flags |= TFL_DMG_HEADSHAKE;
self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS | TFL_TARGETSELECT_MISSILESONLY;
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
// Our fire routine
self.turret_firefunc = turret_flac_attack;
self.track_flags = TFL_TRACK_NO;
// self.turret_respawnhook = turret_fusionreactor_respawnhook;
- if (turret_stdproc_init("fusreac_std",0,"models/turrets/base.md3","models/turrets/reactor.md3") == 0)
+ if (turret_stdproc_init("fusreac_std", "models/turrets/base.md3", "models/turrets/reactor.md3", TID_FUSION) == 0)
{
remove(self);
return;
else
self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire2"));
- sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
missile = spawn ();
setorigin(missile, self.tur_shotorg);
void turret_hellion_missile_explode()
{
- vector org2;
float d;
if(self.event_damage != SUB_Null)
return;
}
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
-
- // LordHavoc: TE_TEI_BIGEXPLOSION
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 78);
- WriteCoord (MSG_BROADCAST, org2_x);
- WriteCoord (MSG_BROADCAST, org2_y);
- WriteCoord (MSG_BROADCAST, org2_z);
-
- //w_deathtypestring = "could not dodge the twin missiles.";
self.event_damage = SUB_Null;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_HELLION, world);
#ifdef TURRET_DEBUG
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO;
self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
- if (turret_stdproc_init("hellion_std",0,"models/turrets/base.md3","models/turrets/hellion.md3") == 0)
+ if (turret_stdproc_init("hellion_std", "models/turrets/base.md3", "models/turrets/hellion.md3", TID_HELLION) == 0)
{
remove(self);
return;
}
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
self.turret_firefunc = turret_hellion_attack;
self.turret_postthink = turret_hellion_postthink;
}
local entity missile;
//local entity flash2;
- sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
missile = spawn ();
missile.solid = SOLID_BBOX;
self.cnt = time + 0.25;
self.nextthink = 0;
self.movetype = MOVETYPE_BOUNCE;
- sound (self, CHAN_VOICE, "", 0.4 * VOL_BASE, ATTN_NORM);
return;
}
void turret_hk_missile_explode()
{
- vector org2;
float d;
if(self.event_damage != SUB_Null)
if ((other == self.owner)||(other == self.owner.tur_head))
return;
- //w_deathtypestring = "got hunted to extinction";
- //vector org2;
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
-
- // LordHavoc: TE_TEI_BIGEXPLOSION
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 78);
- WriteCoord (MSG_BROADCAST, org2_x);
- WriteCoord (MSG_BROADCAST, org2_y);
- WriteCoord (MSG_BROADCAST, org2_z);
-
self.event_damage = SUB_Null;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_HK, world);
#ifdef TURRET_DEBUG
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.shoot_flags = TFL_SHOOT_CLEARTARGET;
- if (turret_stdproc_init("hk_std",0,"models/turrets/base.md3","models/turrets/hk.md3") == 0)
+ if (turret_stdproc_init("hk_std", "models/turrets/base.md3", "models/turrets/hk.md3", TID_HK) == 0)
{
remove(self);
return;
self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TEAMCHECK;
-
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
// Our fire routine
self.turret_firefunc = turret_hk_attack;
//.float bulletcounter;
void turret_machinegun_attack()
{
- sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
- fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, autocvar_g_balance_uzi_bulletconstant);
+ fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET_MACHINEGUN, 0, 1, autocvar_g_balance_uzi_bulletconstant);
endFireBallisticBullet();
- //w_deathtypestring = "had an alergic reaction due to 10 kilos of led";
- te_smallflash(self.tur_shotorg);
-
UziFlash();
setattachment(self.muzzle_flash, self.tur_head, "tag_fire");
}
if not (autocvar_g_antilag_bullets)
self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
- if (turret_stdproc_init("machinegun_std",0,"models/turrets/base.md3","models/turrets/machinegun.md3") == 0)
+ if (turret_stdproc_init("machinegun_std", "models/turrets/base.md3", "models/turrets/machinegun.md3", TID_MACHINEGUN) == 0)
{
remove(self);
return;
self.damage_flags |= TFL_DMG_HEADSHAKE;
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
// Our fire routine
self.turret_firefunc = turret_machinegun_attack;
turret_tag_fire_update();
- sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
missile = spawn ();
setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
void turret_mlrs_rocket_explode()
{
- vector org2;
if(self.event_damage != SUB_Null)
{
return;
}
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
- pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- //w_deathtypestring = "dident escape the rocket barrage";
#ifdef TURRET_DEBUG
float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_MLRS, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_MLRS, world);
#endif
// Target dead, Tell turret.
self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;// | TFL_AIM_GROUND2;
- if (turret_stdproc_init("mlrs_std",0,"models/turrets/base.md3","models/turrets/mlrs.md3") == 0)
+ if (turret_stdproc_init("mlrs_std", "models/turrets/base.md3", "models/turrets/mlrs.md3", TID_MLRS) == 0)
{
remove(self);
return;
self.shoot_flags |= TFL_SHOOT_VOLLYALWAYS;
self.volly_counter = self.shot_volly;
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
// Our fire routine
self.turret_firefunc = turret_mlrs_attack;
self.turret_postthink = turret_mlrs_postthink;
self.owner.attack_finished_single = time + self.owner.shot_refire;
self.owner.fireflag = 2;
self.owner.tur_head.frame = 10;
- sound (self, CHAN_PROJECTILE, "", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM);
remove(self);
return;
}
if (time - self.shot_spread > 0)
{
self.shot_spread = time + 2;
- sound (self, CHAN_VOICE, "turrets/phaser.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTN_NORM);
}
self.shot_force,
oldself.shot_dmg,
0.75,
- DEATH_TURRET);
+ DEATH_TURRET_PHASER);
self = oldself;
self.scale = vlen(self.owner.tur_shotorg - trace_endpos) / 256;
beam.enemy = self.enemy;
beam.bot_dodge = TRUE;
beam.bot_dodgerating = beam.shot_dmg;
- sound (beam, CHAN_PROJECTILE, "turrets/phaser.wav", VOL_BASE, ATTN_NORM);
+ sound (beam, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTN_NORM);
self.fireflag = 1;
beam.attack_finished_single = self.attack_finished_single;
setattachment(beam,self.tur_head,"tag_fire");
- soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ soundat (self, trace_endpos, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
if (self.tur_head.frame == 0)
self.tur_head.frame = 1;
self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
self.aim_flags = TFL_AIM_LEAD;
- if (turret_stdproc_init("phaser_std",0,"models/turrets/base.md3","models/turrets/phaser.md3") == 0)
+ if (turret_stdproc_init("phaser_std", "models/turrets/base.md3","models/turrets/phaser.md3", TID_PHASER) == 0)
{
remove(self);
return;
}
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
self.turret_firecheckfunc = turret_phaser_firecheck;
self.turret_firefunc = turret_phaser_attack;
self.turret_postthink = turret_phaser_postthink;
{
entity proj;
- sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
proj = spawn ();
{
entity proj;
- sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
proj = spawn ();
setorigin(proj, self.tur_shotorg);
setsize(proj, '0 0 0', '0 0 0');
void turret_plasma_projectile_explode()
{
- vector org2;
-
- org2 = findbetterlocation (self.origin, 8);
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 79);
- WriteCoord (MSG_BROADCAST, org2_x);
- WriteCoord (MSG_BROADCAST, org2_y);
- WriteCoord (MSG_BROADCAST, org2_z);
- WriteCoord (MSG_BROADCAST, 0); // SeienAbunae: groan... Useless clutter
- WriteCoord (MSG_BROADCAST, 0);
- WriteCoord (MSG_BROADCAST, 0);
- WriteByte (MSG_BROADCAST, 155);
-
self.event_damage = SUB_Null;
//w_deathtypestring = "ate to much plasma";
#ifdef TURRET_DEBUG
float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_PLASMA, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET_PLASMA, world);
#endif
- sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
remove (self);
}
self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2;
self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
- if (turret_stdproc_init("plasma_std",FALSE,"models/turrets/base.md3","models/turrets/plasma.md3") == 0)
+ if (turret_stdproc_init("plasma_std", "models/turrets/base.md3", "models/turrets/plasma.md3", TID_PLASMA) == 0)
{
remove(self);
return;
self.damage_flags |= TFL_DMG_HEADSHAKE;
self.firecheck_flags |= TFL_FIRECHECK_AFF;
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
// Our fireing routine
self.turret_firefunc = turret_plasma_attack;
self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2 ;
self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
- if (turret_stdproc_init("plasma_dual",0,"models/turrets/base.md3","models/turrets/plasmad.md3") == 0)
+ if (turret_stdproc_init("plasma_dual", "models/turrets/base.md3", "models/turrets/plasmad.md3", TID_PLASMA_DUAL) == 0)
{
remove(self);
return;
self.damage_flags |= TFL_DMG_HEADSHAKE;
self.firecheck_flags |= TFL_FIRECHECK_AFF;
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
// Our fireing routine
self.turret_firefunc = turret_plasma_dual_attack;
}
if (etarget)
- {
- te_smallflash(etarget.origin);
+ {
te_csqc_lightningarc(from.origin,etarget.origin);
- dprint("DMG:",ftos(damage),"\n");
- Damage(etarget, self, self, damage, DEATH_TURRET, etarget.origin, '0 0 0');
+ Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
etarget.railgunhit = 1;
}
self.aim_flags = TFL_AIM_NO;
self.track_flags = TFL_TRACK_NO;
- if (turret_stdproc_init("tesla_std",0,"models/turrets/tesla_base.md3","models/turrets/tesla_head.md3") == 0)
+ if (turret_stdproc_init("tesla_std", "models/turrets/tesla_base.md3", "models/turrets/tesla_head.md3", TID_TESLA) == 0)
{
remove(self);
return;
self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
self.turret_firefunc = turret_tesla_fire;
self.turret_postthink = turret_tesla_postthink;
self.turret_firecheckfunc = turret_tesla_firecheck;
#define ANIM_MEELE 9
#define ANIM_SWIM 10
#define ANIM_ROAM 11
-
.float animflag;
-.entity wkr_spawn;
#define WALKER_MIN '-70 -70 0'
#define WALKER_MAX '70 70 95'
#define WALKER_PATH(s,e) pathlib_astar(s,e)
-float walker_meele_dmg;
-float walker_meele_force;
-
-float walker_speed_stop;
-float walker_speed_walk;
-float walker_speed_run;
-float walker_speed_jump;
-float walker_speed_roam;
-float walker_speed_swim;
-
-float walker_std_rocket_dmg;
-float walker_std_rocket_radius;
-float walker_std_rocket_force;
-float walker_std_rocket_speed;
-float walker_std_rocket_turnrate;
-
-void walker_loadcvars()
-{
- walker_meele_dmg = autocvar_g_turrets_unit_walker_std_meele_dmg;
- walker_meele_force = autocvar_g_turrets_unit_walker_std_meele_force;
-
- walker_speed_stop = autocvar_g_turrets_unit_walker_speed_stop;
- walker_speed_walk = autocvar_g_turrets_unit_walker_speed_walk;
- walker_speed_run = autocvar_g_turrets_unit_walker_speed_run;
- walker_speed_jump = autocvar_g_turrets_unit_walker_speed_jump;
- walker_speed_roam = autocvar_g_turrets_unit_walker_speed_roam;
- walker_speed_swim = autocvar_g_turrets_unit_walker_speed_swim;
-
- walker_std_rocket_dmg = autocvar_g_turrets_unit_walker_std_rocket_dmg;
- walker_std_rocket_radius = autocvar_g_turrets_unit_walker_std_rocket_radius;
- walker_std_rocket_force = autocvar_g_turrets_unit_walker_std_rocket_force;
- walker_std_rocket_speed = autocvar_g_turrets_unit_walker_std_rocket_speed;
- walker_std_rocket_turnrate = autocvar_g_turrets_unit_walker_std_rocket_turnrate;
-
-}
-
-
-
float walker_firecheck()
{
if (self.animflag == ANIM_MEELE)
{
vector where;
entity e;
+
makevectors(self.angles);
where = self.origin + v_forward * 128;
- //w_deathtypestring = "tried to hug the cute spider thingy.";
e = findradius(where,32);
- while (e)
+ while (e)
{
if (turret_validate_target(self,e,self.target_validate_flags))
if (e != self && e.owner != self)
- Damage(e, self, self, walker_meele_dmg ,DEATH_TURRET,'0 0 0', v_forward * walker_meele_force);
+ Damage(e, self, self, autocvar_g_turrets_unit_walker_std_meele_dmg ,DEATH_TURRET_WALKER_MEELE,'0 0 0', v_forward * autocvar_g_turrets_unit_walker_std_meele_force);
e = e.chain;
}
}
-void walker_setnoanim()
-{
- self.frame = ANIM_NO;
- self.animflag = self.owner.frame;
- dprint("walker_setnoanim\n");
-
-}
-void walker_dly_meele_do_dmg()
+void walker_setnoanim()
{
- walker_meele_do_dmg();
- dprint("walker_dly_meele_do_dmg\n");
-
+ turrets_setframe(ANIM_NO, FALSE);
+ self.animflag = self.frame;
}
-
-void walker_animate()
-{
- vector real_angle;
- float vz;
-
- real_angle = vectoangles(self.steerto) - self.angles;
- vz = self.velocity_z;
-
- if (self.tur_head.frame != 0)
- self.tur_head.frame = self.tur_head.frame +1;
-
- if (self.tur_head.frame > 12)
- self.tur_head.frame = 0;
-
- switch (self.animflag)
- {
-
- case ANIM_NO:
- self.frame = 0;
- movelib_beak_simple(walker_speed_stop);
- break;
-
- /*
- case ANIM_REVERSE:
- if ((self.frame < 5) || (self.frame > 25))
- self.frame = 25;
-
- self.frame = self.frame -1;
- movelib_move_simple(v_forward * -1, walker_speed_walk, 0.6);
-
- if (self.frame < 5)
- self.frame = 25;
-
- break;
- */
-
- case ANIM_TURN:
- self.frame = ANIM_TURN;
- self.angles_y += bound(-15, shortangle_f(real_angle_y, self.angles_y), 15);
- movelib_beak_simple(walker_speed_stop);
- break;
-
- case ANIM_WALK:
- self.frame = ANIM_WALK;
- self.angles_y += bound(-10, shortangle_f(real_angle_y, self.angles_y), 10);
- movelib_move_simple(v_forward, walker_speed_walk, 0.6);
- break;
-
- case ANIM_RUN:
- self.frame = ANIM_RUN;
- self.angles_y += bound(-5, shortangle_f(real_angle_y, self.angles_y), 5);
- movelib_move_simple(v_forward, walker_speed_run, 0.6);
- break;
-
- case ANIM_STRAFE_L:
- self.frame = ANIM_STRAFE_L;
- self.angles_y += bound(-2.5, shortangle_f(real_angle_y, self.angles_y), 2.5);
- movelib_move_simple(v_right * -1, walker_speed_walk, 0.8);
- break;
-
- case ANIM_STRAFE_R:
- self.frame = ANIM_STRAFE_R;
- self.angles_y += bound(-2.5, shortangle_f(real_angle_y, self.angles_y), 2.5);
- movelib_move_simple(v_right, walker_speed_walk, 0.8);
- break;
-
- case ANIM_JUMP:
- self.frame = ANIM_JUMP;
- self.velocity += '0 0 1' * walker_speed_jump;
- break;
-
- case ANIM_LAND:
- self.frame = ANIM_LAND;
- break;
-
- case ANIM_PAIN:
- if(self.frame != ANIM_PAIN)
- defer(0.25,walker_setnoanim);
-
- self.frame = ANIM_PAIN;
-
- break;
-
- case ANIM_MEELE:
- if(self.frame != ANIM_MEELE)
- {
- defer(0.41, walker_setnoanim);
- defer(0.21, walker_dly_meele_do_dmg);
- }
-
- self.frame = ANIM_MEELE;
- movelib_beak_simple(walker_speed_stop);
- break;
-
- case ANIM_SWIM:
- self.frame = ANIM_SWIM;
- self.angles_y += bound(-10, shortangle_f(real_angle_y, self.angles_y), 10);
- self.angles_x += bound(-10, shortangle_f(real_angle_x, self.angles_x), 10);
- movelib_move_simple(v_forward, walker_speed_swim, 0.3);
- vz = self.velocity_z + sin(time * 4) * 8;
- break;
-
- case ANIM_ROAM:
- self.frame = ANIM_ROAM;
- self.angles_y += bound(-5, shortangle_f(real_angle_y, self.angles_y), 5);
- movelib_move_simple(v_forward ,walker_speed_roam, 0.5);
- break;
-
- }
-
- self.velocity_z = vz;
-
- if (self.flags & FL_ONGROUND)
- movelib_groundalign4point(300, 100, 0.25);
-
-}
-
-
void walker_rocket_explode()
{
- vector org2;
-
if (self.event_damage != SUB_Null)
{
self.event_damage = SUB_Null;
return;
}
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
-
- pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- RadiusDamage (self, self.owner, walker_std_rocket_dmg, 0, walker_std_rocket_radius, world,walker_std_rocket_force, DEATH_TURRET, world);
+ RadiusDamage (self, self.owner, autocvar_g_turrets_unit_walker_std_rocket_dmg, 0, autocvar_g_turrets_unit_walker_std_rocket_radius, world,autocvar_g_turrets_unit_walker_std_rocket_force, DEATH_TURRET_WALKER_ROCKET, world);
remove (self);
}
walker_rocket_explode();
}
-#define WALKER_ROCKET_MOVE movelib_move_simple(newdir, walker_std_rocket_speed, walker_std_rocket_turnrate); UpdateCSQCProjectile(self)
+#define WALKER_ROCKET_MOVE movelib_move_simple(newdir, autocvar_g_turrets_unit_walker_std_rocket_speed, autocvar_g_turrets_unit_walker_std_rocket_turnrate); UpdateCSQCProjectile(self)
void walker_rocket_loop();
void walker_rocket_think()
{
if (self.cnt < time)
{
if (edist < 1000)
- self.tur_shotorg = randomvec() * min(edist,64);
+ self.tur_shotorg = randomvec() * min(edist, 64);
else
- self.tur_shotorg = randomvec() * min(edist,256);
+ self.tur_shotorg = randomvec() * min(edist, 256);
self.cnt = time + 0.5;
}
if (edist < 256)
self.tur_shotorg = '0 0 0';
-
if (self.tur_health < time)
{
- self.think = walker_rocket_explode;
- self.nextthink = time;
+ self.think = walker_rocket_explode;
+ self.nextthink = time;
return;
}
- if (self.shot_dmg != 1337)
- if (random() < 0.01)
- {
- walker_rocket_loop();
- return;
- }
+ if (self.shot_dmg != 1337 && random() < 0.01)
+ {
+ walker_rocket_loop();
+ return;
+ }
m_speed = vlen(self.velocity);
// Enemy dead? just keep on the current heading then.
- if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
- {
- // Make sure we dont return to tracking a respawned entity
+ if (self.enemy == world || self.enemy.deadflag != DEAD_NO)
self.enemy = world;
- }
if (self.enemy)
{
- itime = max(edist / m_speed,1);
+ itime = max(edist / m_speed, 1);
newdir = steerlib_pull(self.enemy.origin + self.tur_shotorg);
}
else
- {
newdir = normalize(self.velocity);
- }
WALKER_ROCKET_MOVE;
}
return;
}
- if (vlen(self.origin - self.tur_shotorg) < 128 )
+ if (vlen(self.origin - self.tur_shotorg) < 100 )
{
self.think = walker_rocket_think;
return;
return;
}
- if (vlen(self.origin - self.tur_shotorg) < 128 )
+ if (vlen(self.origin - self.tur_shotorg) < 100 )
{
self.tur_shotorg = self.origin - '0 0 200';
self.think = walker_rocket_loop3;
void walker_rocket_loop()
{
self.nextthink = time;
- self.tur_shotorg = self.origin + '0 0 400';
+ self.tur_shotorg = self.origin + '0 0 300';
self.think = walker_rocket_loop2;
self.shot_dmg = 1337;
}
void walker_fire_rocket(vector org)
{
-
entity rocket;
-
-
- //self.angles_x *= -1;
+
fixedmakevectors(self.angles);
- //self.angles_x *= -1;
te_explosion (org);
rocket = spawn ();
setorigin(rocket, org);
- sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);
setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
rocket.classname = "walker_rocket";
rocket.owner = self;
-
rocket.bot_dodge = TRUE;
rocket.bot_dodgerating = 50;
-
rocket.takedamage = DAMAGE_YES;
-
rocket.damageforcescale = 2;
rocket.health = 25;
rocket.tur_shotorg = randomvec() * 512;
rocket.event_damage = walker_rocket_damage;
- rocket.nextthink = time;// + 0.25;
+ rocket.nextthink = time;
rocket.movetype = MOVETYPE_FLY;
- rocket.velocity = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * walker_std_rocket_speed;
+ rocket.velocity = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * autocvar_g_turrets_unit_walker_std_rocket_speed;
rocket.angles = vectoangles(rocket.velocity);
rocket.touch = walker_rocket_explode;
rocket.flags = FL_PROJECTILE;
CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
}
-void rv_think()
+.vector enemy_last_loc;
+.float enemy_last_time;
+void walker_move_to(vector _target, float _dist)
{
- float f;
- vector org;
- entity oldself;
-
- if (self.owner.deadflag != DEAD_NO)
+ switch (self.waterlevel)
{
- remove(self);
- return;
+ case WATERLEVEL_NONE:
+ if (_dist > 500)
+ self.animflag = ANIM_RUN;
+ else
+ self.animflag = ANIM_WALK;
+ case WATERLEVEL_WETFEET:
+ case WATERLEVEL_SWIMMING:
+ if (self.animflag != ANIM_SWIM)
+ self.animflag = ANIM_WALK;
+ else
+ self.animflag = ANIM_SWIM;
+ break;
+ case WATERLEVEL_SUBMERGED:
+ self.animflag = ANIM_SWIM;
}
- self.cnt = self.cnt -1;
+ self.moveto = _target;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
- if (self.cnt < 0)
+ if(self.enemy)
{
- remove(self);
- return;
+ self.enemy_last_loc = _target;
+ self.enemy_last_time = time;
}
-
- if (self.cnt > 1)
- f = gettagindex(self.owner,"tag_rocket01");
- else
- f = gettagindex(self.owner,"tag_rocket02");
-
- org = gettaginfo(self.owner,f);
-
- self.nextthink = time + 0.2;
- oldself = self;
- self = self.owner;
- walker_fire_rocket(org);
- self = oldself;
}
+//#define WALKER_FANCYPATHING
+
void walker_move_path()
{
+#ifdef WALKER_FANCYPATHING
// Are we close enougth to a path node to switch to the next?
if (vlen(self.origin - self.pathcurrent.origin) < 64)
if (self.pathcurrent.path_next == world)
else
self.pathcurrent = self.pathcurrent.path_next;
- switch (self.waterlevel)
- {
- case 0:
- self.animflag = ANIM_WALK;
- case 1:
- case 2:
- if (self.animflag == ANIM_WALK)
- self.animflag = ANIM_WALK;
- else
- self.animflag = ANIM_SWIM;
- break;
- case 3:
- self.animflag = ANIM_SWIM;
- }
-
self.moveto = self.pathcurrent.origin;
self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+ walker_move_to(self.moveto, 0);
+#else
+ if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ self.pathcurrent = self.pathcurrent.enemy;
+
+ if(!self.pathcurrent)
+ return;
+
+ self.moveto = self.pathcurrent.origin;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ walker_move_to(self.moveto, 0);
+#endif
}
-void walker_move_enemy()
-{
- switch (self.waterlevel)
- {
- case 0:
- if (self.tur_dist_enemy > 500)
- self.animflag = ANIM_RUN;
- else
- self.animflag = ANIM_WALK;
- case 1:
- case 2:
- if (self.animflag != ANIM_SWIM)
- self.animflag = ANIM_WALK;
- else
- self.animflag = ANIM_SWIM;
- break;
- case 3:
- self.animflag = ANIM_SWIM;
- }
-
- self.moveto = self.enemy.origin;
- self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
-
-}
-
-void walker_move_idle_pause()
-{
- self.moveto = self.origin;
- self.steerto = v_forward;
- self.animflag = ANIM_NO;
-}
-
-void walker_move_idle_roam()
-{
-}
-
-void walker_move_idle()
-{
-}
-
-float walker_attack_meele()
-{
-
- vector wish_angle;
-
-
- if (self.animflag == ANIM_SWIM || self.animflag == ANIM_MEELE)
- return 0;
-
- wish_angle = angleofs(self,self.enemy);
-
- if (self.tur_dist_enemy > autocvar_g_turrets_unit_walker_std_meele_range)
- return 0;
- else
- if (fabs(wish_angle_y) > 15)
- return 0;
-
- self.moveto = self.enemy.origin;
- self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
- self.animflag = ANIM_MEELE;
-
- return 1;
-}
-
-float walker_attack_rockets()
-{
- if (self.tur_head.attack_finished_single > time)
- return 0;
-
- if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_rockets_range_min)
- return 0;
-
- if (self.tur_dist_enemy > autocvar_g_turrets_unit_walker_std_rockets_range)
- return 0;
-
- entity rv;
+.float idletime;
- rv = spawn();
- rv.think = rv_think;
- rv.nextthink = time;
- rv.cnt = 4;
- rv.owner = self;
- self.tur_head.attack_finished_single = time + autocvar_g_turrets_unit_walker_std_rocket_refire;
-
- return 1;
-}
void walker_postthink()
{
-
- //self.angles_x *= -1;
fixedmakevectors(self.angles);
- //self.angles_x *= -1;
- if ((self.spawnflags & TSF_NO_PATHBREAK) && self.pathcurrent)
+ if (self.spawnflags & TSF_NO_PATHBREAK && self.pathcurrent)
walker_move_path();
else if (self.enemy == world)
{
if(self.pathcurrent)
walker_move_path();
else
- walker_move_idle_pause();
+ {
+ if(self.enemy_last_time != 0)
+ {
+ if(vlen(self.origin - self.enemy_last_loc) < 128 || time - self.enemy_last_time > 10)
+ self.enemy_last_time = 0;
+ else
+ walker_move_to(self.enemy_last_loc, 0);
+ }
+ else
+ {
+ if(self.animflag != ANIM_NO)
+ {
+ traceline(self.origin + '0 0 64', self.origin + '0 0 64' + v_forward * 128, MOVE_NORMAL, self);
+
+ if(trace_fraction != 1.0)
+ self.tur_head.idletime = -1337;
+ else
+ {
+ traceline(trace_endpos, trace_endpos - '0 0 256', MOVE_NORMAL, self);
+ if(trace_fraction == 1.0)
+ self.tur_head.idletime = -1337;
+ }
+
+ if(self.tur_head.idletime == -1337)
+ {
+ self.moveto = self.origin + randomvec() * 256;
+ self.tur_head.idletime = 0;
+ }
+
+ self.moveto = self.moveto * 0.9 + ((self.origin + v_forward * 500) + randomvec() * 400) * 0.1;
+ self.moveto_z = self.origin_z + 64;
+ walker_move_to(self.moveto, 0);
+ }
+
+ if(self.idletime < time)
+ {
+ if(random() < 0.5 || !(self.spawnflags & TSL_ROAM))
+ {
+ self.idletime = time + 1 + random() * 5;
+ self.moveto = self.origin;
+ self.animflag = ANIM_NO;
+ }
+ else
+ {
+ self.animflag = ANIM_WALK;
+ self.idletime = time + 4 + random() * 2;
+ self.moveto = self.origin + randomvec() * 256;
+ self.tur_head.moveto = self.moveto;
+ self.tur_head.idletime = 0;
+ }
+ }
+ }
+ }
}
else
{
- if not (self.animflag == ANIM_MEELE)
- if not (walker_attack_rockets())
- walker_attack_meele();
+ if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_meele_range && self.animflag != ANIM_MEELE)
+ {
+ vector wish_angle;
+
+ wish_angle = angleofs(self, self.enemy);
+ if (self.animflag != ANIM_SWIM)
+ if (fabs(wish_angle_y) < 15)
+ {
+ self.moveto = self.enemy.origin;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ self.animflag = ANIM_MEELE;
+ }
+ }
+ else if (self.tur_head.attack_finished_single < time)
+ {
+ if(self.tur_head.shot_volly)
+ {
+ self.animflag = ANIM_NO;
+
+ self.tur_head.shot_volly = self.tur_head.shot_volly -1;
+ if(self.tur_head.shot_volly == 0)
+ self.tur_head.attack_finished_single = time + autocvar_g_turrets_unit_walker_std_rocket_refire;
+ else
+ self.tur_head.attack_finished_single = time + 0.2;
+
+ if(self.tur_head.shot_volly > 1)
+ walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket01")));
+ else
+ walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket02")));
+ }
+ else
+ {
+ if (self.tur_dist_enemy > autocvar_g_turrets_unit_walker_std_rockets_range_min)
+ if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_rockets_range)
+ self.tur_head.shot_volly = 4;
+ }
+ }
+ else
+ {
+ if (self.animflag != ANIM_MEELE)
+ walker_move_to(self.enemy.origin, self.tur_dist_enemy);
+ }
+ }
- if not (self.animflag == ANIM_MEELE)
- walker_move_enemy();
+ //if(self.animflag != ANIM_NO)
+ {
+ vector real_angle;
+ float turny, turnx;
+ float vz;
+
+ real_angle = vectoangles(self.steerto) - self.angles;
+ vz = self.velocity_z;
+
+ switch (self.animflag)
+ {
+ case ANIM_NO:
+ movelib_beak_simple(autocvar_g_turrets_unit_walker_speed_stop);
+ break;
+
+ case ANIM_TURN:
+ turny = autocvar_g_turrets_unit_walker_turn;
+ movelib_beak_simple(autocvar_g_turrets_unit_walker_speed_stop);
+ break;
+
+ case ANIM_WALK:
+ turny = autocvar_g_turrets_unit_walker_turn_walk;
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_walk, 0.6);
+ break;
+
+ case ANIM_RUN:
+ turny = autocvar_g_turrets_unit_walker_turn_run;
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_run, 0.6);
+ break;
+
+ case ANIM_STRAFE_L:
+ turny = autocvar_g_turrets_unit_walker_turn_strafe;
+ movelib_move_simple(v_right * -1, autocvar_g_turrets_unit_walker_speed_walk, 0.8);
+ break;
+
+ case ANIM_STRAFE_R:
+ turny = autocvar_g_turrets_unit_walker_turn_strafe;
+ movelib_move_simple(v_right, autocvar_g_turrets_unit_walker_speed_walk, 0.8);
+ break;
+
+ case ANIM_JUMP:
+ self.velocity += '0 0 1' * autocvar_g_turrets_unit_walker_speed_jump;
+ break;
+
+ case ANIM_LAND:
+ break;
+
+ case ANIM_PAIN:
+ if(self.frame != ANIM_PAIN)
+ defer(0.25, walker_setnoanim);
+
+ break;
+
+ case ANIM_MEELE:
+ if(self.frame != ANIM_MEELE)
+ {
+ defer(0.41, walker_setnoanim);
+ defer(0.21, walker_meele_do_dmg);
+ }
+
+ movelib_beak_simple(autocvar_g_turrets_unit_walker_speed_stop);
+ break;
+
+ case ANIM_SWIM:
+ turny = autocvar_g_turrets_unit_walker_turn_swim;
+ turnx = autocvar_g_turrets_unit_walker_turn_swim;
+
+ self.angles_x += bound(-10, shortangle_f(real_angle_x, self.angles_x), 10);
+ movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_swim, 0.3);
+ vz = self.velocity_z + sin(time * 4) * 8;
+ break;
+
+ case ANIM_ROAM:
+ turny = autocvar_g_turrets_unit_walker_turn_walk;
+ movelib_move_simple(v_forward ,autocvar_g_turrets_unit_walker_speed_roam, 0.5);
+ break;
+ }
+
+ if(turny)
+ {
+ turny = bound( turny * -1, shortangle_f(real_angle_y, self.angles_y), turny );
+ self.angles_y += turny;
+ }
+
+ if(turnx)
+ {
+ turnx = bound( turnx * -1, shortangle_f(real_angle_x, self.angles_x), turnx );
+ self.angles_x += turnx;
+ }
+
+ self.velocity_z = vz;
}
+
+ if(self.origin != self.oldorigin)
+ self.SendFlags |= TNSF_MOVE;
+
+ self.oldorigin = self.origin;
+ turrets_setframe(self.animflag, FALSE);
- walker_animate();
}
void walker_attack()
{
- sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
- fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, autocvar_g_balance_uzi_bulletconstant);
+ sound (self, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
+ fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET_WALKER_GUN, 0, 1, autocvar_g_balance_uzi_bulletconstant);
endFireBallisticBullet();
- if (self.misc_bulletcounter == 2)
- {
-
- UziFlash();
- setattachment(self.muzzle_flash, self.tur_head, "tag_fire");
-
- self.misc_bulletcounter = 0;
- }
-
- self.misc_bulletcounter = self.misc_bulletcounter + 1;
- self.tur_head.frame = self.tur_head.frame + 1;
+ pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
}
void walker_respawnhook()
{
- vector vtmp;
entity e;
// Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
if(self.movetype != MOVETYPE_WALK)
return;
- setorigin(self, self.wkr_spawn.origin);
-
- self.angles = self.wkr_spawn.angles;
- vtmp = self.wkr_spawn.origin;
- vtmp_z += self.wkr_spawn.maxs_z;
- setorigin(self,vtmp);
-
+ setorigin(self, self.pos1);
+ self.angles = self.pos2;
+
if (self.target != "")
{
e = find(world,targetname,self.target);
void walker_diehook()
{
- turret_trowgib2(self.origin, self.velocity + v_up * 200, '-0.6 -0.2 -02', self,time + random() * 1);
- turret_trowgib2(self.origin + '0 0 64', self.velocity + v_forward * 150 + v_up * 150, '-0.2 -0.2 -02', self.tur_head, 3 + time + random() * 2);
-
+#ifdef self.pathcurrent
if (self.pathcurrent)
pathlib_deletepath(self.pathcurrent.owner);
+#endif
self.pathcurrent = world;
-
- if (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
- remove(self.wkr_spawn);
-
}
void turret_walker_dinit()
entity e;
if (self.netname == "") self.netname = "Walker Turret";
- self.wkr_spawn = spawn();
self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE ;
self.turret_diehook = walker_diehook;
self.ticrate = 0.05;
- if (turret_stdproc_init("walker_std",FALSE,"models/turrets/walker_body.md3","models/turrets/walker_head_minigun.md3") == 0)
+ if (turret_stdproc_init("walker_std", "models/turrets/walker_body.md3", "models/turrets/walker_head_minigun.md3", TID_WALKER) == 0)
{
remove(self);
return;
}
- if (!turret_tag_fire_update())
- dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
self.solid = SOLID_SLIDEBOX;
self.takedamage = DAMAGE_AIM;
- setmodel(self.wkr_spawn,"models/turrets/walker_spawn.md3");
-
- self.wkr_spawn.angles = self.angles;
- self.wkr_spawn.solid = SOLID_NOT;
setsize(self, WALKER_MIN, WALKER_MAX);
- setorigin(self,self.origin);
- //traceline(self.origin + '0 0 128', self.origin - '0 0 10000', MOVE_NORMAL, self);
+ setorigin(self, self.origin);
tracebox(self.origin + '0 0 128', self.mins,self.maxs,self.origin - '0 0 10000', MOVE_NORMAL, self);
-
- setorigin(self.wkr_spawn, trace_endpos + '0 0 4');
- setorigin(self, self.wkr_spawn.origin);
-
+ setorigin(self, trace_endpos + '0 0 4');
+ self.pos1 = self.origin;
+ self.pos2 = self.angles;
+
self.idle_aim = '0 0 0';
self.turret_firecheckfunc = walker_firecheck;
self.turret_firefunc = walker_attack;
if (self.target != "")
{
- e = find(world,targetname,self.target);
+ e = find(world, targetname, self.target);
if (!e)
{
dprint("Initital waypoint for walker does NOT exsist, fix your map!\n");
dprint("Warning: not a turrret path\n");
else
{
- self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+#ifdef WALKER_FANCYPATHING
+ self.pathcurrent = WALKER_PATH(self.origin, e.origin);
self.pathgoal = e;
+#else
+ self.pathcurrent = e;
+#endif
}
}
}
void spawnfunc_turret_walker()
{
- walker_loadcvars();
-
g_turrets_common_precash();
precache_model ("models/turrets/walker_head_minigun.md3");
precache_model ("models/turrets/walker_body.md3");
- precache_model ("models/turrets/walker_props.md3");
- precache_model ("models/turrets/walker_spawn.md3");
precache_model ( "models/turrets/rocket.md3");
precache_sound ( "weapons/rocket_impact.wav" );
--- /dev/null
+#ifdef SVQC
+// Auto cvars
+float autocvar_g_vehicle_bumblebee_speed_forward;
+float autocvar_g_vehicle_bumblebee_speed_strafe;
+float autocvar_g_vehicle_bumblebee_speed_up;
+float autocvar_g_vehicle_bumblebee_speed_down;
+float autocvar_g_vehicle_bumblebee_turnspeed;
+float autocvar_g_vehicle_bumblebee_pitchspeed;
+float autocvar_g_vehicle_bumblebee_pitchlimit;
+float autocvar_g_vehicle_bumblebee_friction;
+
+float autocvar_g_vehicle_bumblebee_energy;
+float autocvar_g_vehicle_bumblebee_energy_regen;
+float autocvar_g_vehicle_bumblebee_energy_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_health;
+float autocvar_g_vehicle_bumblebee_health_regen;
+float autocvar_g_vehicle_bumblebee_health_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_shield;
+float autocvar_g_vehicle_bumblebee_shield_regen;
+float autocvar_g_vehicle_bumblebee_shield_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_cannon_cost;
+float autocvar_g_vehicle_bumblebee_cannon_damage;
+float autocvar_g_vehicle_bumblebee_cannon_radius;
+float autocvar_g_vehicle_bumblebee_cannon_refire;
+float autocvar_g_vehicle_bumblebee_cannon_speed;
+float autocvar_g_vehicle_bumblebee_cannon_spread;
+float autocvar_g_vehicle_bumblebee_cannon_force;
+
+float autocvar_g_vehicle_bumblebee_cannon_turnspeed;
+float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down;
+float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up;
+float autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
+float autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
+
+float autocvar_g_vehicle_bumblebee_respawntime;
+
+float autocvar_g_vehicle_bumblebee_blowup_radius;
+float autocvar_g_vehicle_bumblebee_blowup_coredamage;
+float autocvar_g_vehicle_bumblebee_blowup_edgedamage;
+float autocvar_g_vehicle_bumblebee_blowup_forceintensity;
+
+#define BUMB_MIN '-120 -120 -40'
+#define BUMB_MAX '120 120 40'
+
+.entity gunner1;
+//.entity gunner2;
+.vector lastaim;
+float bumb_gunner_frame()
+{
+ entity vehic, gun, gunner;
+ float ftmp, ftmp2;
+ vector vtmp;
+
+ vehic = self.vehicle;
+ gun = self.vehicle.gun1;
+ gunner = self;
+
+ self = vehic;
+ vehic.solid = SOLID_NOT;
+ crosshair_trace(gunner);
+
+ //vtmp = gettaginfo(vehic, gettagindexvehic, "tag_hardpoint01"));
+ vtmp = gettaginfo(gun, gettagindex(gun, "muzzle"));
+ vtmp = vectoangles(normalize(trace_endpos - vtmp)); // Find the direction & angle
+ vtmp = shortangle_vxy(vtmp - (vehic.angles + gun.angles), vehic.angles + gun.angles); // Find aim offset
+
+ // Bind to aimspeed
+ ftmp2 = autocvar_g_vehicle_bumblebee_cannon_turnspeed * frametime; ftmp = -ftmp2;
+ vtmp_x = bound(ftmp, vtmp_x, ftmp2);
+ vtmp_y = bound(ftmp, vtmp_y, ftmp2);
+ // Bind to limts
+ gun.angles_x = bound(-autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down, vtmp_x + gun.angles_x, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up);
+ gun.angles_y = bound(-autocvar_g_vehicle_bumblebee_cannon_turnlimit_in, vtmp_y + gun.angles_y, autocvar_g_vehicle_bumblebee_cannon_turnlimit_out);
+
+ if(gunner.BUTTON_ATCK && gun.cnt <= time)
+ {
+ vtmp = gettaginfo(gun, gettagindex(gun, "muzzle"));
+ v_forward = normalize(v_forward);
+ vtmp += v_forward * 50;
+
+ fireBullet (vtmp, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
+ autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_SBMINIGUN, 0);
+
+ gun.cnt = time + 0.1;
+ }
+
+ setorigin(gunner, vehic.origin);
+ gunner.velocity = vehic.velocity;
+
+ vehic.solid = SOLID_BBOX;
+ gunner.BUTTON_ATCK = gunner.BUTTON_ATCK2 = gunner.BUTTON_CROUCH = 0;
+ self = gunner;
+ return 1;
+}
+
+void bumb_gunner_enter()
+{
+ if(self.gunner1 != world)
+ return;
+
+ self.gunner1 = other;
+ self.gunner1.vehicle = self;
+
+ msg_entity = other;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, self.gun1);
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+ if(self.tur_head)
+ {
+ WriteAngle(MSG_ONE, self.gun1.angles_x + self.angles_x); // tilt
+ WriteAngle(MSG_ONE, self.gun1.angles_y + self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ }
+ other.PlayerPhysplug = bumb_gunner_frame;
+}
+
+float bumb_pilot_frame()
+{
+ entity pilot, gunner, vehic;
+ vector newvel;
+
+ pilot = self;
+ vehic = self.vehicle;
+ self = vehic;
+
+ if(pilot.BUTTON_USE && vehic.deadflag == DEAD_NO)
+ {
+ self = vehic;
+ vehicles_exit(VHEF_NORMAL);
+ self = pilot;
+ return 0;
+ }
+
+ if(vehic.deadflag != DEAD_NO)
+ {
+ self = pilot;
+ pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = 0;
+ return 1;
+ }
+
+ crosshair_trace(pilot);
+
+ vector vang;
+ float ftmp;
+
+ vang = vehic.angles;
+ newvel = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
+ vang_x *= -1;
+ newvel_x *= -1;
+ if(newvel_x > 180) newvel_x -= 360;
+ if(newvel_x < -180) newvel_x += 360;
+ if(newvel_y > 180) newvel_y -= 360;
+ if(newvel_y < -180) newvel_y += 360;
+
+ ftmp = shortangle_f(pilot.v_angle_y - vang_y, vang_y);
+ if(ftmp > 180) ftmp -= 360; if(ftmp < -180) ftmp += 360;
+ vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity_y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed);
+
+ // Pitch
+ ftmp = 0;
+ if(pilot.movement_x > 0 && vang_x < autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = 5;
+ else if(pilot.movement_x < 0 && vang_x > -autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = -20;
+
+ newvel_x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x , autocvar_g_vehicle_bumblebee_pitchlimit);
+ ftmp = vang_x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit);
+ vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity_x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed);
+
+ vehic.angles_x = anglemods(vehic.angles_x);
+ vehic.angles_y = anglemods(vehic.angles_y);
+ vehic.angles_z = anglemods(vehic.angles_z);
+
+ makevectors('0 1 0' * vehic.angles_y);
+ newvel = vehic.velocity * -autocvar_g_vehicle_bumblebee_friction;
+
+ if(pilot.movement_x != 0)
+ {
+ if(pilot.movement_x > 0)
+ newvel += v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
+ else if(pilot.movement_x < 0)
+ newvel -= v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
+ }
+
+ if(pilot.movement_y != 0)
+ {
+ if(pilot.movement_y < 0)
+ newvel -= v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
+ else if(pilot.movement_y > 0)
+ newvel += v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
+ ftmp = newvel * v_right;
+ ftmp *= frametime * 0.1;
+ vehic.angles_z = bound(-15, vehic.angles_z + ftmp, 15);
+ }
+ else
+ {
+ vehic.angles_z *= 0.95;
+ if(vehic.angles_z >= -1 && vehic.angles_z <= -1)
+ vehic.angles_z = 0;
+ }
+
+ if(pilot.BUTTON_CROUCH)
+ newvel -= v_up * autocvar_g_vehicle_bumblebee_speed_down;
+ else if (pilot.BUTTON_JUMP)
+ newvel += v_up * autocvar_g_vehicle_bumblebee_speed_up;
+
+ vehic.velocity += newvel * frametime;
+ pilot.velocity = pilot.movement = vehic.velocity;
+ setorigin(pilot,vehic.origin + '0 0 32');
+
+
+ if(vehic.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime);
+
+ if(vehic.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime);
+
+ if(vehic.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(cnt, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime);
+
+ VEHICLE_UPDATE_PLAYER(health, bumblebee);
+ VEHICLE_UPDATE_PLAYER(energy, bumblebee);
+ if(vehic.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(shield, bumblebee);
+
+ pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = pilot.BUTTON_CROUCH = 0;
+ self = pilot;
+
+ return 1;
+}
+
+void bumb_think()
+{
+ self.velocity = self.velocity * 0.99;
+ self.nextthink = time + 0.1;
+}
+
+void bumb_enter()
+{
+ self.touch = bumb_gunner_enter;
+}
+
+void bumb_exit(float eject)
+{
+ self.owner = world;
+ self.touch = vehicles_touch;
+}
+
+void bumb_spawn()
+{
+ self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
+ self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
+ self.movetype = MOVETYPE_TOSS;
+ self.solid = SOLID_BBOX;
+ //self.vehicle_energy = 1;
+ self.movetype = MOVETYPE_FLY;
+ setorigin(self, self.origin + '0 0 25');
+}
+
+void bumb_die()
+{
+ self.health = 0;
+ self.event_damage = SUB_Null;
+ self.solid = SOLID_CORPSE;
+ self.takedamage = DAMAGE_NO;
+ self.deadflag = DEAD_DYING;
+ self.movetype = MOVETYPE_BOUNCE;
+
+ pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+}
+
+void bumb_dinit()
+{
+ if not (vehicle_initialize(
+ "Bumblebee",
+ "models/vehicles/bumblebee_body.dpm",
+ "",
+ "models/vehicles/spiderbot_cockpit.dpm",
+ "", "", "tag_viewport",
+ HUD_BUMBLEBEE,
+ BUMB_MIN, BUMB_MAX,
+ FALSE,
+ bumb_spawn, autocvar_g_vehicle_bumblebee_respawntime,
+ bumb_pilot_frame,
+ bumb_enter, bumb_exit,
+ bumb_die, bumb_think,
+ FALSE))
+ {
+ remove(self);
+ return;
+ }
+ self.gun1 = spawn();
+ setmodel(self.gun1, "models/vehicles/bumblebee_ray.dpm");
+ setattachment(self.gun1, self, "tag_hardpoint03");
+
+ self.gun1 = spawn();
+ self.gun2 = spawn();
+
+ self.gun1.owner = self;
+ self.gun2.owner = self;
+
+ setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm");
+ setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm");
+
+ setattachment(self.gun1, self, "tag_hardpoint01");
+ setattachment(self.gun2, self, "tag_hardpoint02");
+
+ vector ofs;
+ ofs = gettaginfo(self, gettagindex(self, "tag_hardpoint01"));
+ ofs -= self.origin;
+ setattachment(self.gun1, self, "");
+ setorigin(self.gun1, ofs);
+
+ ofs = gettaginfo(self, gettagindex(self, "tag_hardpoint02"));
+ ofs -= self.origin;
+ setattachment(self.gun2, self, "");
+ setorigin(self.gun2, ofs);
+
+
+}
+
+void spawnfunc_vehicle_bumblebee()
+{
+
+ precache_model ("models/vehicles/bumblebee_body.dpm");
+ precache_model ("models/vehicles/bumblebee_plasma_left.dpm");
+ precache_model ("models/vehicles/bumblebee_plasma_right.dpm");
+ precache_model ("models/vehicles/bumblebee_ray.dpm");
+
+ //vehicles_configcheck("vehicle_bumblebee.cfg", autocvar_g_vehicle_bumblebee_health);
+
+ if(autocvar_g_vehicle_bumblebee_energy)
+ if(autocvar_g_vehicle_bumblebee_energy_regen)
+ self.vehicle_flags |= VHF_ENERGYREGEN;
+
+ if(autocvar_g_vehicle_bumblebee_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_bumblebee_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_bumblebee_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
+ self.think = bumb_dinit;
+ self.nextthink = time + 1;
+}
+#endif // SVQC
+
+#ifdef CSQC
+void bumblebee_draw()
+{
+
+}
+
+void bumblebee_draw2d()
+{
+
+}
+
+void bumblebee_read_extra()
+{
+
+}
+
+void vehicle_bumblebee_assemble()
+{
+
+}
+#endif //CSQC
--- /dev/null
+vector collision_force;
+vector collision_angle;
+
+vector bb1[9];
+vector bb2[9];
+
+float collision_run()
+{
+ vector vtmp, vmin, vmax, vrot, vforce, vtmp2, vtmp3;
+ float i, fvel, bcol;
+
+
+ // Extract the 8 bbox corners from mins/maxs for self
+ vmax = self.maxs;
+ vmin = self.mins;
+ bb1[0] = vmax;
+ vtmp = vmax; vtmp_x = vmin_x; bb1[1] = vtmp;
+ vtmp = vmax; vtmp_y = vmin_y; bb1[2] = vtmp;
+ vtmp = vmin; vtmp_z = vmax_z; bb1[3] = vtmp;
+ bb1[4] = vmin;
+ vtmp = vmin; vtmp_x = vmax_x; bb1[5] = vtmp;
+ vtmp = vmin; vtmp_y = vmax_y; bb1[6] = vtmp;
+ vtmp = vmax; vtmp_z = vmin_z; bb1[7] = vtmp;
+
+ makevectors(self.angles + '-2 0 0' * self.angles_x);
+ bcol = 0;
+
+ // Pass1: Transform by rotation, ajust points by impact/s
+ for(i = 8; i >= 0; --i)
+ {
+ vtmp = bb1[i];
+ vtmp = self.origin + vtmp_x * v_forward - vtmp_y * v_right + vtmp_z * v_up;
+ traceline(self.origin, vtmp, MOVE_WORLDONLY, self);
+ te_lightning1(world,self.origin,vtmp);
+ if(trace_fraction != 1.0)
+ {
+ vforce += (trace_endpos - vtmp);
+ vtmp3 = self.origin + self.velocity * frametime;
+ vtmp2 = vectoangles(normalize(vtmp - vtmp3));
+ vrot += (vectoangles(normalize(trace_endpos - vtmp3)) - vtmp2);
+ bcol += 1;
+ }
+ }
+
+ if(bcol)
+ {
+
+ vtmp = self.origin + self.velocity * frametime;
+ self.angles += vrot * frametime;
+ self.velocity += vforce * frametime;
+
+ }
+
+}
+
--- /dev/null
+#ifdef VEHICLES_CSQC
+// SendFlags
+float VSF_SETUP = 1; /// Send vehicle type etc
+float VSF_ORIGIN = 2; /// Send location
+float VSF_MOVEMENT = 4; /// Send movement update (and angles)
+float VSF_AVEL = 8; /// Send Angular velocity
+float VSF_STATS = 16; /// Send ammo, health etc
+float VSF_EXTRA = 32; /// Send additional data (turret rotations etc). Handeld per vehicle type.
+float VSF_ANIMINFO = 64; /// Animation info
+float VSF_FULL_UPDATE = 16777215; /// Send everything
+
+float VSX_FAR = 1;
+float VSX_OWNER = 2;
+float VSX_GUN1 = 4;
+float VSX_GUN2 = 8;
+
+#ifdef SVQC
+#define VSX_FARDISTANCE 2000
+float send_vehile(entity to, float sf)
+{
+ float dist, xf;
+
+ var void WriteFunc(float, float);
+
+ dist = vlen(self.origin - to.origin);
+ if(to == self.owner)
+ xf |= VSX_OWNER;
+ else if(dist > VSX_FARDISTANCE)
+ xf |= VSX_FAR;
+
+ // Always send a movement and origin to owner
+ if(to == self.owner)
+ sf |= VSF_ORIGIN | VSF_MOVEMENT;
+
+ WriteByte(MSG_ENTITY, ENT_CLIENT_VEHICLE);
+
+ // We need to know client-side what was sent
+ WriteByte(MSG_ENTITY, sf);
+ WriteByte(MSG_ENTITY, xf);
+
+ if(sf & VSF_SETUP)
+ {
+ WriteByte(MSG_ENTITY, self.hud); //vehicle type = hud
+ WriteByte(MSG_ENTITY, self.team);
+ WriteShort(MSG_ENTITY, self.colormap);
+ WriteShort(MSG_ENTITY, self.vehicle_flags);
+ }
+
+ if(sf & VSF_ORIGIN)
+ {
+ WriteFunc = ((xf & VSX_FAR) ? WriteShort : WriteCoord);
+ WriteFunc(MSG_ENTITY, self.origin_x);
+ WriteFunc(MSG_ENTITY, self.origin_y);
+ WriteFunc(MSG_ENTITY, self.origin_z);
+ }
+
+ if(sf & VSF_MOVEMENT)
+ {
+ WriteFunc = ((xf & VSX_FAR) ? WriteShort : WriteCoord);
+ WriteFunc(MSG_ENTITY, self.velocity_x);
+ WriteFunc(MSG_ENTITY, self.velocity_y);
+ WriteFunc(MSG_ENTITY, self.velocity_z);
+
+ WriteFunc = ((xf & VSX_FAR) ? WriteShort : WriteAngle);
+ WriteFunc(MSG_ENTITY, self.angles_x);
+ WriteFunc(MSG_ENTITY, self.angles_y);
+ WriteFunc(MSG_ENTITY, self.angles_z);
+ }
+
+ if(sf & VSF_AVEL)
+ {
+ WriteFunc = ((xf & VSX_FAR) ? WriteShort : WriteCoord);
+ WriteFunc(MSG_ENTITY, self.avelocity_x);
+ WriteFunc(MSG_ENTITY, self.avelocity_y);
+ WriteFunc(MSG_ENTITY, self.avelocity_z);
+ }
+
+ if(sf & VSF_STATS)
+ {
+ WriteByte(MSG_ENTITY, self.vehicle_health);
+ if(xf & VSX_OWNER)
+ {
+ WriteByte(MSG_ENTITY, self.vehicle_shield);
+ WriteByte(MSG_ENTITY, self.vehicle_energy);
+
+ WriteByte(MSG_ENTITY, self.vehicle_ammo1);
+ WriteByte(MSG_ENTITY, self.vehicle_reload1);
+
+ WriteByte(MSG_ENTITY, self.vehicle_ammo2);
+ WriteByte(MSG_ENTITY, self.vehicle_reload2);
+
+ }
+ }
+
+ if(sf & VSF_EXTRA)
+ self.vehile_send_exta(to, sf);
+
+ return TRUE;
+}
+
+void net_link_vehile()
+{
+ self.SendFlags = 0xFFFFFF;
+ Net_LinkEntity(self, FALSE, 0, send_vehile);
+}
+#endif // SVQC
+
+#ifdef CSQC
+void vehicle_spiderbot_assemble()
+{
+
+}
+
+void vehicle_raptor_assemble()
+{
+
+}
+
+void vehicle_bumblebee_assemble()
+{
+
+}
+
+.float lastupdate;
+void read_vehicle(float bIsNew)
+{
+ float sf, xf;
+ var float ReadFunc();
+
+ sf = ReadByte();
+ xf = ReadByte();
+
+ if(xf & VSX_OWNER)
+ vehicle = self;
+
+ if(sf & VSF_SETUP)
+ {
+ self.vehicle_hud = ReadByte();
+ self.team = ReadByte();
+ self.colormap = ReadShort();
+ self.vehicle_flags = ReadShort();
+
+ switch(self.vehicle_hud)
+ {
+ case HUD_WAKIZASHI:
+ vehicle_racer_assemble();
+ break;
+ case HUD_SPIDERBOT:
+ vehicle_spiderbot_assemble();
+ break;
+ case HUD_RAPTOR:
+ vehicle_raptor_assemble();
+ break;
+ case HUD_BUMBLEBEE:
+ vehicle_bumblebee_assemble();
+ break;
+ default:
+ break;
+ }
+ }
+
+ if(self.vehicle_hud == HUD_WAKIZASHI && xf & VSX_OWNER)
+ {
+
+ vehicle_hudmodel.owner = self;
+ }
+
+ //if(xf & VSX_FAR)
+ // dprint("Client vehicle faaar set\n");
+
+ if(sf & VSF_ORIGIN)
+ {
+ ReadFunc = ((xf & VSX_FAR) ? ReadShort : ReadCoord);
+ self.origin_x = ReadFunc();
+ self.origin_y = ReadFunc();
+ self.origin_z = ReadFunc();
+
+ setorigin(self, self.origin);
+ //self.lastupdate = time;
+ }
+
+ if(sf & VSF_MOVEMENT)
+ {
+ ReadFunc = ((xf & VSX_FAR) ? ReadShort : ReadCoord);
+ self.velocity_x = ReadFunc();
+ self.velocity_y = ReadFunc();
+ self.velocity_z = ReadFunc();
+
+ ReadFunc = ((sf & VSX_FAR) ? ReadShort : ReadAngle);
+ self.angles_x = ReadFunc();
+ self.angles_y = ReadFunc();
+ self.angles_z = ReadFunc();
+
+ //self.lastupdate = time;
+ // self.move_velocity = self.velocity;
+ // self.move_angles = self.angles;
+ }
+
+ if(sf & VSF_AVEL)
+ {
+ ReadFunc = ((xf & VSX_FAR) ? ReadShort : ReadCoord);
+ self.avelocity_x = ReadFunc();
+ self.avelocity_y = ReadFunc();
+ self.avelocity_z = ReadFunc();
+
+ // self.move_avelocity = self.avelocity;
+ }
+
+ if(sf & VSF_STATS)
+ {
+ self.vehicle_health = ReadByte();
+ if(xf & VSX_OWNER)
+ {
+ self.vehicle_shield = ReadByte();
+ self.vehicle_energy = ReadByte();
+ self.vehicle_ammo1 = ReadByte();
+ self.vehicle_reload1 = ReadByte();
+ self.vehicle_ammo2 = ReadByte();
+ self.vehicle_reload2 = ReadByte();
+ }
+ }
+
+ if(sf & VSF_EXTRA)
+ self.vehile_read_exta(sf);
+
+}
+
+#endif // CSQC
+#else
+#ifdef CSQC
+.float lastupdate;
+void read_vehicle(float bIsNew)
+{
+
+}
+#endif
+#endif // VEHICLES_CSQC
-#define RACER_MIN '-80 -80 -40'
-#define RACER_MAX '80 80 40'
-#define RACER_TICRATE 0.05
+#define RACER_MIN '-120 -120 -40'
+#define RACER_MAX '120 120 40'
+#ifdef SVQC
void racer_exit(float eject);
void racer_enter();
-//void racer_think();
-float racer_power_air;
-float racer_power_solid;
-float racer_power_min;
-float racer_anglestabilizer;
-float racer_springlength;
-
-float racer_healthmax;
-float racer_shieldmax;
-float racer_energymax;
-
-float racer_pitchspeed;
-float racer_turnspeed;
-float racer_turnroll;
-float racer_speed_forward;
-float racer_speed_strafe;
-
-float racer_afterburn_cost;
-
-float jetfromtag_power;
-float jetfromtag_normpower;
-vector jetfromtag_origin;
-float jetfromtag_groundcontact;
-
-void racer_loadsettings()
-{
- racer_power_min = autocvar_g_vehicle_racer_power_min * 0.25;
- racer_power_air = autocvar_g_vehicle_racer_power_air * 0.25;
- racer_power_solid = autocvar_g_vehicle_racer_power_solid * 0.25;
-
- racer_springlength = autocvar_g_vehicle_racer_springlength;
- racer_anglestabilizer = autocvar_g_vehicle_racer_anglestabilizer;
- racer_pitchspeed = autocvar_g_vehicle_racer_pitchspeed;
- racer_turnspeed = autocvar_g_vehicle_racer_turnspeed;
- racer_turnroll = autocvar_g_vehicle_racer_turnroll;
- racer_speed_forward = autocvar_g_vehicle_racer_speed_forward;
- racer_speed_strafe = autocvar_g_vehicle_racer_speed_strafe;
-
- racer_afterburn_cost = autocvar_g_vehicle_racer_afterburn_cost;
-
- racer_healthmax = autocvar_g_vehicle_racer_health;
- racer_shieldmax = autocvar_g_vehicle_racer_shield;
- racer_energymax = autocvar_g_vehicle_racer_energy;
-
-}
-
-vector racer_jetfromtag(string tagname)
-{
- vector force_dir;
- float air_frac, solid_frac, air_pwr, solid_pwr;
-
- jetfromtag_origin = gettaginfo(self,gettagindex(self,tagname));
- v_forward = normalize(v_forward) * -1;
-
- force_dir = jetfromtag_origin - (v_forward * racer_springlength);
- traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
- //te_lightning1(world,jetfromtag_origin, force_dir);
-
- //trace_fraction *= trace_fraction;
-
- solid_frac = 1 - trace_fraction;
- air_frac = trace_fraction;
-
- if (trace_fraction != 1.0)
- jetfromtag_groundcontact = 1;
-
- solid_pwr = solid_frac * racer_power_solid;
- air_pwr = air_frac * racer_power_air;
-
- jetfromtag_power = solid_pwr + air_pwr;
- jetfromtag_normpower = jetfromtag_power / (racer_power_air + racer_power_solid);
-
- //te_lightning1(world,jetfromtag_origin,jetfromtag_origin + normalize(self.origin - force_dir) * max(jetfromtag_power, racer_power_min));
- //return normalize(self.origin - force_dir) * max(jetfromtag_power, racer_power_min);
- return v_forward * max(jetfromtag_power, racer_power_min);
-}
+// Auto cvars
+float autocvar_g_vehicle_racer_speed_afterburn;
+float autocvar_g_vehicle_racer_afterburn_cost;
+
+float autocvar_g_vehicle_racer_anglestabilizer;
+float autocvar_g_vehicle_racer_downforce;
+
+float autocvar_g_vehicle_racer_speed_forward;
+float autocvar_g_vehicle_racer_speed_strafe;
+float autocvar_g_vehicle_racer_springlength;
+float autocvar_g_vehicle_racer_upforcedamper;
+float autocvar_g_vehicle_racer_friction;
+
+float autocvar_g_vehicle_racer_hovertype;
+float autocvar_g_vehicle_racer_hoverpower;
+
+float autocvar_g_vehicle_racer_turnroll;
+float autocvar_g_vehicle_racer_turnspeed;
+float autocvar_g_vehicle_racer_pitchspeed;
+
+float autocvar_g_vehicle_racer_energy;
+float autocvar_g_vehicle_racer_energy_regen;
+float autocvar_g_vehicle_racer_energy_regen_pause;
+
+float autocvar_g_vehicle_racer_health;
+float autocvar_g_vehicle_racer_health_regen;
+float autocvar_g_vehicle_racer_health_regen_pause;
+
+float autocvar_g_vehicle_racer_shield;
+float autocvar_g_vehicle_racer_shield_regen;
+float autocvar_g_vehicle_racer_shield_regen_pause;
+
+float autocvar_g_vehicle_racer_cannon_cost;
+float autocvar_g_vehicle_racer_cannon_damage;
+float autocvar_g_vehicle_racer_cannon_radius;
+float autocvar_g_vehicle_racer_cannon_refire;
+float autocvar_g_vehicle_racer_cannon_speed;
+float autocvar_g_vehicle_racer_cannon_spread;
+float autocvar_g_vehicle_racer_cannon_force;
+
+float autocvar_g_vehicle_racer_rocket_accel;
+float autocvar_g_vehicle_racer_rocket_damage;
+float autocvar_g_vehicle_racer_rocket_radius;
+float autocvar_g_vehicle_racer_rocket_force;
+float autocvar_g_vehicle_racer_rocket_refire;
+float autocvar_g_vehicle_racer_rocket_speed;
+float autocvar_g_vehicle_racer_rocket_turnrate;
+
+float autocvar_g_vehicle_racer_rocket_locktarget;
+float autocvar_g_vehicle_racer_rocket_locking_time;
+float autocvar_g_vehicle_racer_rocket_locking_releasetime;
+float autocvar_g_vehicle_racer_rocket_locked_time;
+float autocvar_g_vehicle_racer_rocket_locked_maxangle;
+
+float autocvar_g_vehicle_racer_respawntime;
+
+float autocvar_g_vehicle_racer_blowup_radius;
+float autocvar_g_vehicle_racer_blowup_coredamage;
+float autocvar_g_vehicle_racer_blowup_edgedamage;
+float autocvar_g_vehicle_racer_blowup_forceintensity;
+
+var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
void racer_align4point()
{
- vector push_vector;
+ vector push_vector, v_add;
float fl_push, fr_push, bl_push, br_push;
- jetfromtag_groundcontact = 0;
- push_vector = racer_jetfromtag("tag_engine_fr");
- fr_push = jetfromtag_normpower;
- traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
- if(trace_fraction != 1)
- self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
+ push_vector = racer_force_from_tag("tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ fr_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, frametime, v_add, autocvar_g_vehicle_racer_collision_multiplier);
+
+ push_vector += racer_force_from_tag("tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ fl_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, frametime, v_add, autocvar_g_vehicle_racer_collision_multiplier);
- push_vector += racer_jetfromtag("tag_engine_fl");
- fl_push = jetfromtag_normpower;
- traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
- if(trace_fraction != 1)
- self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
+ push_vector += racer_force_from_tag("tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ br_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, frametime, v_add, autocvar_g_vehicle_racer_collision_multiplier);
- push_vector += racer_jetfromtag("tag_engine_br");
- br_push = jetfromtag_normpower;
- traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
- if(trace_fraction != 1)
- self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
+ push_vector += racer_force_from_tag("tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ bl_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, frametime, v_add, autocvar_g_vehicle_racer_collision_multiplier);
- push_vector += racer_jetfromtag("tag_engine_bl");
- bl_push = jetfromtag_normpower;
- traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
- if(trace_fraction != 1)
- self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
+ self.velocity += (push_vector * frametime);
- self.velocity = self.velocity + (push_vector * frametime);
- self.velocity_z -= autocvar_sv_gravity * frametime;
+ // Anti ocilation
+ if(self.velocity_z > 0)
+ self.velocity_z *= 1 - (autocvar_g_vehicle_racer_upforcedamper * frametime);
- push_vector_x = (fl_push - bl_push);
+ self.velocity += v_add;
+ //self.velocity_z -= autocvar_sv_gravity * frametime;
+
+ push_vector_x = (fl_push - bl_push);
push_vector_x += (fr_push - br_push);
push_vector_x *= 360;
push_vector_z += (br_push - bl_push);
push_vector_z *= 360;
- //if (push_vector_z != 0)
- if(self.angles_z > 0)
- self.angles_z = max(0, self.angles_z - (racer_anglestabilizer * frametime));
- else
- self.angles_z = min(0, self.angles_z + (racer_anglestabilizer * frametime));
- //else
- self.angles_z += push_vector_z * frametime;
-
- //if (push_vector_x != 0)
- if(self.angles_x > 0)
- self.angles_x = max(0, self.angles_x - (racer_anglestabilizer * frametime));
- else
- self.angles_x = min(0, self.angles_x + (racer_anglestabilizer * frametime));
- //else
- self.angles_x += push_vector_x * frametime;
-}
-
-void racer_bolt_explode()
-{
- vector org2;
-
- org2 = findbetterlocation (self.origin, 8);
- pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
- RadiusDamage (self, self.realowner, autocvar_g_vehicle_racer_laser_damage, 0, autocvar_g_vehicle_racer_laser_radius, world, 150, DEATH_WAKIGUN, world);
- sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
-
- remove (self);
-}
-
-void racer_rocket_explode()
-{
- vector org2;
-
- //if not(self.owner)
- // self.owner = self.realowner;
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
- pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- RadiusDamage (self, self.realowner ,autocvar_g_vehicle_racer_rocket_damage, 0, autocvar_g_vehicle_racer_rocket_radius, world, 150, DEATH_WAKIROCKET, world);
-
- remove (self);
-}
-
-void racer_rocket_touch()
-{
- if(other.owner == self.owner)
- return;
-
- PROJECTILE_TOUCH;
- /*
- if(pointcontents(self.origin) == CONTENT_SKY)
- {
- self.think = SUB_Remove;
- self.nextthink = time;
- return;
- }
- */
+ // Apply angle diffrance
+ self.angles_z += push_vector_z * frametime;
+ self.angles_x += push_vector_x * frametime;
- racer_rocket_explode();
+ // Apply stabilizer
+ self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * frametime);
+ self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * frametime);
}
void racer_fire_cannon(string tagname)
{
+ vector v;
entity bolt;
- bolt = spawn();
- bolt.solid = SOLID_TRIGGER;
- bolt.movetype = MOVETYPE_FLYMISSILE;
- bolt.flags = FL_PROJECTILE | FL_NOTARGET;
- bolt.owner = self;
- bolt.realowner = self.owner;
- bolt.touch = racer_bolt_explode;
- bolt.think = racer_bolt_explode;
- bolt.nextthink = time + 9;
- bolt.bot_dodge = TRUE;
- bolt.bot_dodgerating = autocvar_g_vehicle_racer_laser_damage;
- setorigin(bolt, gettaginfo(self,gettagindex(self,tagname)));
+ v = gettaginfo(self, gettagindex(self, tagname));
+ bolt = vehicles_projectile("wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
+ v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
+ autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0,
+ DEATH_WAKIGUN, PROJECTILE_WAKICANNON, 0, TRUE, TRUE);
- vector v;
- // FIXME this uses prydon cursor
- v = normalize(self.owner.cursor_trace_endpos - bolt.origin);
+ // Fix z-aim (for chase mode)
+ v = normalize(trace_endpos - bolt.origin);
v_forward_z = v_z * 0.5;
-
- bolt.velocity = v_forward * autocvar_g_vehicle_racer_laser_speed;
-
- CSQCProjectile(bolt, TRUE, PROJECTILE_LASER, TRUE);
+ bolt.velocity = v_forward * autocvar_g_vehicle_racer_cannon_speed;
}
void racer_rocket_groundhugger()
{
- vector newdir,olddir;
- float oldspeed, newspeed;
+ vector olddir, newdir;
+ float oldvel, newvel;
self.nextthink = time;
- if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
+ if(self.owner.deadflag != DEAD_NO || self.cnt < time)
{
- racer_rocket_explode();
+ self.use();
return;
}
return;
}
- olddir = normalize(self.velocity);
- oldspeed = vlen(self.velocity);
+ olddir = normalize(self.velocity);
+ oldvel = vlen(self.velocity);
+ newvel = oldvel + self.lip;
- tracebox(self.origin, self.mins, self.maxs, self.origin + olddir * 512, MOVE_WORLDONLY,self);
- if(trace_fraction >= 0.35)
+ tracebox(self.origin, self.mins, self.maxs, self.origin + olddir * 64, MOVE_WORLDONLY,self);
+ if(trace_fraction <= 0.5)
{
- traceline(trace_endpos, trace_endpos - '0 0 512', MOVE_NORMAL, self);
- if(trace_fraction != 1.0)
- newdir = trace_endpos + '0 0 32';
-
- newdir = normalize(newdir - self.origin);
+ // Hitting somethign soon, just speed ahead
+ self.velocity = olddir * newvel;
+ UpdateCSQCProjectile(self);
+ return;
}
- newspeed = oldspeed + self.lip;
- self.velocity = normalize(olddir + newdir * self.wait) * newspeed;
+ traceline(trace_endpos, trace_endpos - '0 0 64', MOVE_NORMAL, self);
+ if(trace_fraction != 1.0)
+ {
+ newdir = normalize(trace_endpos + '0 0 64' - self.origin) * autocvar_g_vehicle_racer_rocket_turnrate;
+ self.velocity = normalize(olddir + newdir) * newvel;
+ }
+ else
+ {
+ self.velocity = olddir * newvel;
+ self.velocity_z -= 1600 * sys_frametime; // 2x grav looks better for this one
+ }
UpdateCSQCProjectile(self);
+ return;
}
-void racer_rocket_think()
+void racer_rocket_tracker()
{
- vector newdir,olddir, eorg, edir;
- float oldspeed, newspeed, dist;
+ vector olddir, newdir;
+ float oldvel, newvel;
self.nextthink = time;
- if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
+ if (self.owner.deadflag != DEAD_NO || self.cnt < time)
{
- racer_rocket_explode();
+ self.use();
return;
}
}
olddir = normalize(self.velocity);
- oldspeed = vlen(self.velocity);
- fixedmakevectors(olddir);
- eorg = 0.5 * (self.enemy.absmin + self.enemy.absmax);
- edir = normalize(eorg - self.origin);
- dist = vlen(self.origin - self.enemy.origin);
+ oldvel = vlen(self.velocity);
+ newvel = oldvel + self.lip;
+ makevectors(vectoangles(olddir));
- if(dist > 512)
+ traceline(self.origin, self.origin + v_forward * 64 - '0 0 32', MOVE_NORMAL, self);
+ newdir = normalize(self.enemy.origin - self.origin);
+
+ if(vlen(newdir - v_forward) > autocvar_g_vehicle_racer_rocket_locked_maxangle)
{
- vector ddir;
- float p;
- p = dist / self.delay;
- p = max(0.05, p * 0.25);
- ddir = steerlib_traceavoid(p, oldspeed * 0.25);
- edir += ddir * 0.95;
+ //bprint("Target lost!\n");
+ //dprint("OF:", ftos(vlen(newdir - v_forward)), "\n");
+ self.think = racer_rocket_groundhugger;
+ return;
}
- newdir = normalize(olddir + edir * self.wait);
- newspeed = oldspeed + self.lip;
- self.velocity = normalize(olddir + newdir * self.wait) * newspeed;
+ if(trace_fraction != 1.0)
+ newdir_z += 16 * sys_frametime;
+
+ self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_racer_rocket_turnrate) * newvel;
+ self.velocity_z -= 800 * sys_frametime;
UpdateCSQCProjectile(self);
+ return;
}
-void racer_fire_rocket(string tagname)
+void racer_fire_rocket(string tagname, entity trg)
{
+ vector v;
entity rocket;
- rocket = spawn();
- setsize (rocket, '-1 -1 -1', '1 1 1');
- rocket.lip = autocvar_g_vehicle_racer_rocket_accel * sys_frametime;
- rocket.wait = autocvar_g_vehicle_racer_rocket_turnrate;
- rocket.solid = SOLID_BBOX;
- rocket.movetype = MOVETYPE_FLYMISSILE;
- rocket.flags = FL_PROJECTILE;
- rocket.owner = self;
- rocket.realowner = self.owner;
- rocket.touch = racer_rocket_touch;
- rocket.bot_dodge = TRUE;
- rocket.bot_dodgerating = autocvar_g_vehicle_racer_rocket_damage;
- setorigin(rocket, gettaginfo(self,gettagindex(self,tagname)));
-
- /*
- if( (self.tur_head.gun1) && (self.tur_head.cnt > time))
- rocket.enemy = self.tur_head.gun1;
-
- if(rocket.enemy)
- {
- rocket.delay = vlen(rocket.enemy.origin - rocket.origin);
- rocket.cnt = time + 9;
- rocket.velocity = v_forward * autocvar_g_vehicle_racer_rocket_speed;
- rocket.think = racer_rocket_think;
- rocket.nextthink = time;
- CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
- }
- else
- {
- */
- rocket.cnt = time + 9;
- rocket.velocity = v_forward * autocvar_g_vehicle_racer_rocket_speed;
- rocket.think = racer_rocket_groundhugger;
- rocket.nextthink = time;
- CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET, TRUE);
- //}
-}
-
-float racer_customizeentityforclient()
-{
+ v = gettaginfo(self, gettagindex(self, tagname));
+ rocket = vehicles_projectile("wakizashi_rocket_launch", "weapons/rocket_fire.wav",
+ v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
+ autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
+ DEATH_WAKIROCKET, PROJECTILE_WAKIROCKET, 20, FALSE, FALSE);
- if(self.deadflag == DEAD_DEAD)
- return FALSE;
+ rocket.lip = autocvar_g_vehicle_racer_rocket_accel * sys_frametime;
+ rocket.wait = autocvar_g_vehicle_racer_rocket_turnrate;
+ rocket.nextthink = time;
+ rocket.enemy = trg;
+ rocket.cnt = time + 15;
- /*
- if(other == self.owner)
- self.alpha = -1;
+ if(trg)
+ rocket.think = racer_rocket_tracker;
else
- self.alpha = 1;
- */
-
- return TRUE;
+ rocket.think = racer_rocket_groundhugger;
}
-float racer_pplug()
+float racer_frame()
{
entity player, racer;
- float ftmp, ftmp2;
vector df;
-
- if(autocvar_g_vehicle_racer_reload)
- {
- racer_loadsettings();
- cvar_set("g_vehicle_racer_reload","0");
- }
-
- player = self;
- racer = self.vehicle;
-
- player.BUTTON_ZOOM = 0;
- player.BUTTON_CROUCH = 0;
-
- self = racer;
-
- if(player.BUTTON_USE)
- {
- self = racer;
- racer_exit(0);
- self = player;
- return 0;
- }
-
+ float ftmp;
+
+ if(intermission_running)
+ return 1;
+
+ player = self;
+ racer = self.vehicle;
+ self = racer;
+
+ player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0;
+
+ vehicles_painframe();
+
if(racer.deadflag != DEAD_NO)
{
self = player;
return 1;
}
-
racer_align4point();
- racer.angles_x *= -1;
- makevectors(racer.angles);
+ crosshair_trace(player);
- // Rotate Body
- ftmp = racer_turnspeed * sys_frametime;
- ftmp2 = ftmp * -1;
+ racer.angles_x *= -1;
- ftmp = bound(ftmp2, shortangle_f(player.v_angle_y - racer.angles_y, racer.angles_y), ftmp);
- ftmp2 = anglemods(racer.angles_y + ftmp);
+ // Yaw
+ ftmp = autocvar_g_vehicle_racer_turnspeed * frametime;
+ ftmp = bound(-ftmp, shortangle_f(player.v_angle_y - racer.angles_y, racer.angles_y), ftmp);
+ racer.angles_y = anglemods(racer.angles_y + ftmp);
// Roll
- ftmp = bound(-45, shortangle_f(player.v_angle_z + ((racer.angles_y - ftmp2) * racer_turnroll), racer.angles_z), 45);
- ftmp = anglemods(racer.angles_z + ftmp);
- racer.angles_z = bound(-85, ftmp, 85);
+ racer.angles_z += -ftmp * autocvar_g_vehicle_racer_turnroll * frametime;
- // Turn
- racer.angles_y = ftmp2;
+ // Pitch
+ ftmp = autocvar_g_vehicle_racer_pitchspeed * frametime;
+ ftmp = bound(-ftmp, shortangle_f(player.v_angle_x - racer.angles_x, racer.angles_x), ftmp);
+ racer.angles_x = bound(-30, anglemods(racer.angles_x + ftmp), 30);
- // Pitch Body
- ftmp = racer_pitchspeed * sys_frametime;
- ftmp2 = ftmp * -1;
-
- ftmp = bound(ftmp2,shortangle_f(player.v_angle_x - racer.angles_x,racer.angles_x),ftmp);
- racer.angles_x = anglemods(racer.angles_x + ftmp);
+ makevectors(racer.angles);
racer.angles_x *= -1;
- df = racer.velocity * -0.5;
+
+ ftmp = racer.velocity_z;
+ df = racer.velocity * -autocvar_g_vehicle_racer_friction;
+ racer.velocity_z = ftmp;
if(player.movement_x != 0)
{
if(player.movement_x > 0)
- df += v_forward * racer_speed_forward;
+ df += v_forward * autocvar_g_vehicle_racer_speed_forward;
else if(player.movement_x < 0)
- df -= v_forward * racer_speed_forward;
+ df -= v_forward * autocvar_g_vehicle_racer_speed_forward;
}
if(player.movement_y != 0)
{
if(player.movement_y < 0)
- df -= v_right * racer_speed_strafe;
+ df -= v_right * autocvar_g_vehicle_racer_speed_strafe;
else if(player.movement_y > 0)
- df += v_right * racer_speed_strafe;
+ df += v_right * autocvar_g_vehicle_racer_speed_strafe;
}
-
- // limit _z to avoid flying on normal thrust
- if(df_z > 0)
- df_z = min(df_z,700);
-
-
+
+ if(vlen(player.movement) != 0)
+ {
+ if(self.sound_nexttime < time || self.sounds != 1)
+ {
+ self.sounds = 1;
+ self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ }
+ }
+ else
+ {
+ if(self.sound_nexttime < time || self.sounds != 0)
+ {
+ self.sounds = 0;
+ self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ }
+ }
+
// Afterburn
- if (player.BUTTON_JUMP)
- if(racer.vehicle_energy >= (racer_afterburn_cost * frametime))
+ if (player.BUTTON_JUMP && racer.vehicle_energy >= (autocvar_g_vehicle_racer_afterburn_cost * frametime))
{
- racer.wait = time + autocvar_g_vehicle_racer_energy_usepause;
- racer.vehicle_energy -= racer_afterburn_cost * frametime;
+ if(time - racer.wait > 0.2)
+ pointparticles(particleeffectnum("wakizashi_booster_smoke"), self.origin, '0 0 0', 1);
+
+ racer.wait = time;
+ racer.vehicle_energy -= autocvar_g_vehicle_racer_afterburn_cost * frametime;
df += (v_forward * autocvar_g_vehicle_racer_speed_afterburn);
+
+ if(self.invincible_finished < time)
+ {
+ traceline(self.origin, self.origin - '0 0 256', MOVE_NORMAL, self);
+ if(trace_fraction != 1.0)
+ pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1);
+
+ self.invincible_finished = time + 0.1 + (random() * 0.1);
+ }
+
+ if(self.strength_finished < time)
+ {
+ //self.sounds = 2;
+ self.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav");
+ sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ }
+ }
+ else
+ {
+ self.strength_finished = 0;
+ sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM);
}
+
racer.velocity += df * frametime;
racer.velocity = racer.velocity - df;
player.movement = racer.velocity;
- /*
- // for homing rockets
- // FIXME this uses prydon cursor
- if(self.owner.cursor_trace_ent)
- {
- self.tur_head.gun1 = self.owner.cursor_trace_ent;
- self.tur_head.cnt = time + 1;
- }
- */
-
if(player.BUTTON_ATCK)
if(time > racer.attack_finished_single)
- if(racer.vehicle_energy >= autocvar_g_vehicle_racer_laser_cost)
+ if(racer.vehicle_energy >= autocvar_g_vehicle_racer_cannon_cost)
{
- racer.vehicle_energy -= autocvar_g_vehicle_racer_laser_cost;
- racer.wait = time + autocvar_g_vehicle_racer_energy_usepause;
+ racer.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
+ racer.wait = time;
+ crosshair_trace(player);
if(racer.cnt)
{
racer_fire_cannon("tag_fire1");
racer_fire_cannon("tag_fire2");
racer.cnt = 1;
}
- racer.attack_finished_single = time + autocvar_g_vehicle_racer_laser_refire;
+ racer.attack_finished_single = time + autocvar_g_vehicle_racer_cannon_refire;
+ //self.owner.vehicle_energy = racer.vehicle_energy / autocvar_g_vehicle_racer_energy;
}
- if(player.BUTTON_ATCK2)
- if(time > racer.delay)
+ if(autocvar_g_vehicle_racer_rocket_locktarget)
{
- racer_fire_rocket("tag_rocket_r");
- racer_fire_rocket("tag_rocket_l");
- racer.delay = time + autocvar_g_vehicle_racer_rocket_refire;
- racer.lip = time;
+ vehicles_locktarget((1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime,
+ (1 / autocvar_g_vehicle_racer_rocket_locking_releasetime) * frametime,
+ autocvar_g_vehicle_racer_rocket_locked_time);
+ if(self.lock_target)
+ {
+ if(racer.lock_strength == 1)
+ UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '1 0 0', 0);
+ else if(self.lock_strength > 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 1 0', 0);
+ else if(self.lock_strength < 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 0 1', 0);
+ }
}
- player.vehicle_reload1 = (time - racer.lip) / (racer.delay-racer.lip);
- vehicle_stdproc_shiledregen(racer_shieldmax, frametime);
- vehicle_stdproc_healthregen(racer_healthmax, frametime);
-
- if (racer.wait < time)
- vehicle_stdproc_energyregen(racer_energymax, frametime);
- else
- player.vehicle_energy = (racer.vehicle_energy / racer_energymax);
-
- self = player;
+ if(time > racer.delay)
+ if(player.BUTTON_ATCK2)
+ {
+ self.misc_bulletcounter += 1;
+ racer.delay = time + 0.3;
+ if(self.misc_bulletcounter == 1)
+ racer_fire_rocket("tag_rocket_r", (self.lock_strength == 1 && self.lock_target) ? self.lock_target : world);
+ else if(self.misc_bulletcounter == 2)
+ {
+ racer_fire_rocket("tag_rocket_l", (self.lock_strength == 1 && self.lock_target) ? self.lock_target : world);
+ self.lock_strength = 0;
+ self.lock_target = world;
+ self.misc_bulletcounter = 0;
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- setorigin(player,racer.origin + '0 0 32');
- player.velocity = racer.velocity;
+ racer.delay = time + autocvar_g_vehicle_racer_rocket_refire;
+ racer.lip = time;
+ }
+ }
+ player.vehicle_reload1 = bound(0, 100 * ((time - racer.lip) / (racer.delay - racer.lip)), 100);
- return 1;
-}
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_racer_shield, autocvar_g_vehicle_racer_shield_regen_pause, autocvar_g_vehicle_racer_shield_regen, frametime);
-void racer_exitthink()
-{
- float a, b, c;
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_racer_health, autocvar_g_vehicle_racer_health_regen_pause, autocvar_g_vehicle_racer_health_regen, frametime);
- self.nextthink = time;
+ if(self.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(wait, vehicle_energy, autocvar_g_vehicle_racer_energy, autocvar_g_vehicle_racer_energy_regen_pause, autocvar_g_vehicle_racer_energy_regen, frametime);
- a = racer_anglestabilizer;
- b = racer_springlength;
- c = racer_power_solid;
- racer_anglestabilizer = 36;
- racer_springlength = 96;
- racer_power_solid = 300;
+ VEHICLE_UPDATE_PLAYER(health, racer);
+ VEHICLE_UPDATE_PLAYER(energy, racer);
- racer_align4point();
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(shield, racer);
- if(self.velocity_z < 0)
- self.velocity_z *= 0.95;
- racer_anglestabilizer = a;
- racer_springlength = b;
- racer_power_solid = c;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ setorigin(player,racer.origin + '0 0 32');
+ player.velocity = racer.velocity;
- self.velocity_x *= 0.95;
- self.velocity_y *= 0.95;
+ self = player;
+ return 1;
}
-void racer_spawnthink()
+void racer_think()
{
- float a, b, c;
- vector dorg;
-
- self.nextthink = time;
-
- a = racer_anglestabilizer;
- b = racer_springlength;
- c = racer_power_solid;
-
- racer_anglestabilizer = 36;
- racer_springlength = 96;
- racer_power_solid = 300;
-
- // self.velocity_z += sin(time * 128) * 4;
-
- racer_align4point();
+ /*
+ float a, b, c;a = autocvar_g_vehicle_racer_anglestabilizer;
+ b = autocvar_g_vehicle_racer_springlength;
+ c = autocvar_g_vehicle_racer_hoverpower;
- if(self.velocity_z < 0)
- self.velocity_z *= 0.98;
+ autocvar_g_vehicle_racer_anglestabilizer = 36;
+ autocvar_g_vehicle_racer_springlength = 96;
+ autocvar_g_vehicle_racer_hoverpower = 300;
+ */
- racer_anglestabilizer = a;
- racer_springlength = b;
- racer_power_solid = c;
+ racer_align4point(); //time - self.nextthink);
- self.velocity_x *= 0.95;
- self.velocity_y *= 0.95;
+ /*
+ //if(self.velocity_z > 0)
+ // self.velocity_z *= 0.95;
- dorg = self.pos1 - self.origin ;
+ autocvar_g_vehicle_racer_anglestabilizer = a;
+ autocvar_g_vehicle_racer_springlength = b;
+ autocvar_g_vehicle_racer_hoverpower = c;
+ */
- self.velocity_x = bound(-32, self.velocity_x + dorg_x, 32);
- self.velocity_y = bound(-32, self.velocity_y + dorg_y, 32);
+ self.velocity_x *= 0.9;
+ self.velocity_y *= 0.9;
+ self.velocity_z *= 0.8;
+ self.velocity_z += sin(time * 2) * 16;
+ self.nextthink = time; // + 0.05;
}
void racer_enter()
{
- self.owner = other;
-
-
- self.nextthink = 0;
- self.flags = 0;
- self.vehicle_hudmodel.viewmodelforclient = self.owner;
- self.colormap = self.owner.colormap;
-
- self.owner.PlayerPhysplug = racer_pplug;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.event_damage = SUB_Null;
- self.owner.vehicle = self;
- self.owner.angles = self.angles;
- self.owner.solid = SOLID_NOT;
- self.owner.movetype = MOVETYPE_NOCLIP;
- self.owner.alpha = -1;
- self.owner.hud = HUD_WAKIZASHI;
- self.owner.effects |= EF_NODRAW;
- self.owner.view_ofs = '0 0 0';
-
+ self.movetype = MOVETYPE_BOUNCE;
self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_racer_health);
self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_racer_shield);
-
- setorigin(other,self.origin + '0 0 32');
- other.velocity = self.velocity;
-
- other.flags &~= FL_ONGROUND;
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.vehicle_viewport);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, self.angles_x * -1); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
-}
-
-void racer_spawn();
-void racer_return()
-{
- pointparticles(particleeffectnum("teleport"), self.enemy.origin + '0 0 64', '0 0 0', 1);
- self.enemy.think = racer_spawn;
- self.enemy.nextthink = time;
- remove(self);
+
+ if(self.owner.flagcarried)
+ setorigin(self.owner.flagcarried, '-190 0 96');
}
void racer_exit(float eject)
{
- self.colormap = 1024;
- self.flags = FL_NOTARGET;
-
+ vector spot;
+
+ self.think = racer_think;
+ self.nextthink = time;
+ self.movetype = MOVETYPE_TOSS;
+ sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+
if not (self.owner)
return;
- msg_entity = self.owner;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.owner);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, 0); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
-
- if (self.deadflag == DEAD_NO)
- {
- self.think = racer_exitthink;
- self.nextthink = time;
- }
-
- self.owner.takedamage = DAMAGE_AIM;
- self.owner.solid = SOLID_SLIDEBOX;
- self.owner.movetype = MOVETYPE_WALK;
-
- setsize(self.owner,PL_MIN,PL_MAX);
-
- self.owner.effects &~= EF_NODRAW;
- self.owner.alpha = 1;
- self.owner.PlayerPhysplug = SUB_Null;
- self.owner.vehicle = world;
- self.owner.view_ofs = PL_VIEW_OFS;
- self.owner.event_damage = PlayerDamage;
- self.owner.hud = HUD_NORMAL;
-
- self.vehicle_hudmodel.viewmodelforclient = self;
-
+ makevectors(self.angles);
if(eject)
{
- makevectors(self.angles);
- setorigin(self.owner,self.origin + v_forward * 100);
+ spot = self.origin + v_forward * 100 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
self.owner.velocity = (v_up + v_forward * 0.25) * 750;
}
else
{
- self.owner.velocity = (v_forward) * -150;
- setorigin(self.owner,self.origin - v_forward * 128);
+ spot = self.origin - v_forward * 200 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
}
-
+
self.owner = world;
-
- if (self.deadflag != DEAD_NO)
- {
- entity ret;
- ret = spawn();
- ret.enemy = self;
- ret.think = racer_return;
- ret.nextthink = time + autocvar_g_vehicle_racer_respawntime;
- }
-}
-
-void racer_touch()
-{
- if(self.owner)
- {
- if(vlen(self.velocity) == 0)
- return;
-
- if(other.classname != "player")
- return;
-
- vector a;
- a = normalize(other.origin - self.origin);
- a = a - normalize(self.velocity);
-
- return;
- }
-
- if(other.classname != "player")
- return;
-
- if(other.deadflag != DEAD_NO)
- return;
-
- if(other.vehicle != world)
- return;
-
- racer_enter();
}
void racer_spawn()
{
- self.think = racer_spawnthink;
- self.nextthink = time;
-
- self.flags = FL_NOTARGET;
- self.effects = 0;
-
- self.vehicle_health = racer_healthmax;
- self.vehicle_shield = racer_shieldmax;
+ self.think = racer_think;
+ self.nextthink = time;
+ self.vehicle_health = autocvar_g_vehicle_racer_health;
+ self.vehicle_shield = autocvar_g_vehicle_racer_shield;
- self.event_damage = vehicle_stdproc_damage;
- self.touch = racer_touch;
+ self.movetype = MOVETYPE_TOSS;
+ self.solid = SOLID_SLIDEBOX;
+ self.delay = time;
+ self.scale = 0.5;
- self.iscreature = TRUE;
- self.scale = 0.5;
- self.movetype = MOVETYPE_FLY;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
-
- self.alpha = 1;
- self.colormap = 1024;
- self.deadflag = DEAD_NO;
- self.bot_attack = TRUE;
-
- self.vehicle_energy = 1;
- self.vehicle_hudmodel.viewmodelforclient = self;
-
- setorigin(self, self.pos1);
- self.angles = self.pos2;
-
- setsize(self,RACER_MIN * 0.5,RACER_MAX * 0.5);
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
- self.delay = time;
+ setsize(self, RACER_MIN * 0.5, RACER_MAX * 0.5);
}
void racer_blowup()
{
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
-
self.deadflag = DEAD_DEAD;
self.vehicle_exit(VHEF_NORMAL);
- RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_WAKIBLOWUP, world);
- self.alpha = -1;
+ RadiusDamage (self, self, autocvar_g_vehicle_racer_blowup_coredamage,
+ autocvar_g_vehicle_racer_blowup_edgedamage,
+ autocvar_g_vehicle_racer_blowup_radius, world,
+ autocvar_g_vehicle_racer_blowup_forceintensity,
+ DEATH_WAKIBLOWUP, world);
+
self.nextthink = time + autocvar_g_vehicle_racer_respawntime;
self.think = racer_spawn;
self.movetype = MOVETYPE_NONE;
self.effects = EF_NODRAW;
- self.avelocity_z = 0;
- self.colormod = '0 0 0';
+ self.colormod = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
- setorigin(self,self.pos1);
+ setorigin(self, self.pos1);
+ self.think = racer_spawn;
+ self.nextthink = time + autocvar_g_vehicle_racer_respawntime;
}
-void racer_dietouch()
+void racer_deadtouch()
{
- if(self.wait > time)
- return;
-
- self.wait = time + 0.75;
-
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+ self.avelocity_x *= 0.7;
+ self.cnt -= 1;
+ if(self.cnt <= 0)
+ racer_blowup();
}
void racer_die()
{
self.health = 0;
self.event_damage = SUB_Null;
- self.iscreature = FALSE;
- self.solid = SOLID_NOT;
+ self.solid = SOLID_CORPSE;
self.takedamage = DAMAGE_NO;
- self.touch = racer_dietouch;
self.deadflag = DEAD_DYING;
self.movetype = MOVETYPE_BOUNCE;
- self.wait = time;
-
- pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
- self.velocity += '0 0 128';
+ self.wait = time;
+ self.cnt = 1 + random() * 2;
+ self.touch = racer_deadtouch;
+
+ pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
if(random() < 0.5)
- self.avelocity_z = 16;
+ self.avelocity_z = 32;
else
- self.avelocity_z = -16;
+ self.avelocity_z = -32;
- self.colormod = '-0.5 -0.5 -0.5';
+ self.avelocity_x = -vlen(self.velocity) * 0.2;
+ self.velocity += '0 0 700';
+ self.colormod = '-0.5 -0.5 -0.5';
self.think = racer_blowup;
- self.nextthink = time + 3;
+ self.nextthink = 2 + time + random() * 3;
}
void racer_dinit()
{
+ if not (vehicle_initialize(
+ "Wakizashi",
+ "models/vehicles/wakizashi.dpm",
+ "null", // we need this so tur_head is networked and usable for sounds
+ "models/vehicles/wakizashi_cockpit.dpm",
+ "", "", "tag_viewport",
+ HUD_WAKIZASHI,
+ 0.5 * RACER_MIN, 0.5 * RACER_MAX,
+ FALSE,
+ racer_spawn, autocvar_g_vehicle_racer_respawntime,
+ racer_frame,
+ racer_enter, racer_exit,
+ racer_die, racer_think,
+ TRUE))
+ {
+ remove(self);
+ return;
+ }
- tracebox(self.origin + '0 0 100', RACER_MIN * 0.5, RACER_MAX * 0.5, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
- setorigin(self,trace_endpos);
-
- if (self.netname == "")
- self.netname = "Race PoD";
-
- self.cvar_basename = "g_vehicle_racer";
-
- self.vehicle_viewport = spawn();
- self.vehicle_hudmodel = spawn();
- //self.ccamera = spawn();
-
- setorigin(self, self.origin);
-
- setmodel(self,"models/vehicles/wakizashi.dpm");
- setmodel(self.vehicle_hudmodel, "models/vehicles/wakizashi_cockpit.dpm");
- setmodel (self.vehicle_viewport, "null");
+ if(autocvar_g_vehicle_racer_hovertype != 0)
+ racer_force_from_tag = vehicles_force_fromtag_maglev;
+ else
+ racer_force_from_tag = vehicles_force_fromtag_hover;
+ // FIXME: this be hakkz, fix the models insted (scale body, add tag_viewport to the hudmodel).
+ self.scale = 0.5;
setattachment(self.vehicle_hudmodel, self, "");
setattachment(self.vehicle_viewport, self, "tag_viewport");
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.customizeentityforclient = racer_customizeentityforclient;
-
- self.tur_head = spawn();
-
- self.pos1 = self.origin;
- self.pos2 = self.angles;
- self.angles = '0 0 0';
- self.angles = self.pos1;
-
- self.vehicle_die = racer_die;
- self.vehicle_exit = racer_exit;
-
- addstat(STAT_HUD, AS_INT, hud);
- addstat(STAT_VEHICLESTAT_HEALTH, AS_FLOAT, vehicle_health);
- addstat(STAT_VEHICLESTAT_SHIELD, AS_FLOAT, vehicle_shield);
- addstat(STAT_VEHICLESTAT_ENERGY, AS_FLOAT, vehicle_energy);
-
- addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
- addstat(STAT_VEHICLESTAT_RELOAD1, AS_FLOAT, vehicle_reload1);
-
- addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
- addstat(STAT_VEHICLESTAT_RELOAD2, AS_FLOAT, vehicle_reload2);
-
- racer_spawn();
+ self.mass = 900;
}
void spawnfunc_vehicle_racer()
{
- g_turrets_common_precash();
- racer_loadsettings();
+ self.vehicle_flags |= VHF_DMGSHAKE;
+ self.vehicle_flags |= VHF_DMGROLL;
- self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN;
-
- /*
- traceline(self.origin,self.origin - '0 0 2048',MOVE_WORLDONLY,self);
- if(trace_startsolid)
- {
- dprint("WARNING: vehicle_racer placed in solid\n");
- traceline(self.origin + '0 0 512' ,self.origin - '0 0 2048',MOVE_WORLDONLY,self);
- if(trace_startsolid || trace_fraction == 1.0)
- {
- dprint("ERROR: vehicle_racer placed in more then 512 units into solid\n");
- remove(self);
- return;
- }
- }
- */
-
- if(trace_fraction != 1.0)
- setorigin(self,trace_endpos + '0 0 128');
- else
- dprint("WARNING: vehicle_racer placed more then 2048 units above ground.\n");
+ precache_sound ("weapons/lasergun_fire.wav");
+ precache_sound ("weapons/rocket_fire.wav");
+
+ precache_sound ("vehicles/racer_idle.wav");
+ precache_sound ("vehicles/racer_move.wav");
+ precache_sound ("vehicles/racer_boost.wav");
+ precache_model ("models/vhshield.md3");
precache_model ("models/vehicles/wakizashi.dpm");
precache_model ("models/vehicles/wakizashi_cockpit.dpm");
- precache_model ("maps/bspmodel.bsp");
+ vehicles_configcheck("vehicle_racer.cfg", autocvar_g_vehicle_racer_health);
+ if(autocvar_g_vehicle_racer_energy)
+ if(autocvar_g_vehicle_racer_energy_regen)
+ self.vehicle_flags |= VHF_ENERGYREGEN;
+
+ if(autocvar_g_vehicle_racer_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_racer_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_racer_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
self.think = racer_dinit;
- self.nextthink = time + 1;
+
+ if(g_assault)
+ self.nextthink = time + 0.5;
+ else
+ self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
}
+#endif // SVQC
-#define RAPTOR_MIN '-40 -40 0'
-#define RAPTOR_MAX '40 40 40'
-
-float raptor_movestyle;
-float raptor_turnspeed;
-float raptor_turnroll;
-float raptor_pitchspeed;
-float raptor_speed_forward;
-float raptor_speed_strafe;
-float raptor_speed_up;
-float raptor_speed_down;
-
-float raptor_bomblet_waves;
-float raptor_bomblet_wavefirst;
-float raptor_bomblet_wavenext;
-float raptor_bomblet_wawespread;
-float raptor_bomblets;
-float raptor_bomblet_damage;
-float raptor_bomblet_edgedamage;
-float raptor_bomblet_radius;
-float raptor_bomblet_force;
-float raptor_bombs_refire;
-
-float raptor_beam_dps;
-float raptor_beam_fops;
-float raptor_beam_aps;
-float raptor_beam_size;
-float raptor_beam_leangth;
-float raptor_beam_refire;
-
-float raptor_shield_max;
-float raptor_shield_regen;
-
-float raptor_health_max;
-float raptor_health_regen;
-
-float raptor_energy_max;
-float raptor_energy_regen;
+#ifdef SVQC
+#define RAPTOR_MIN '-80 -80 0'
+#define RAPTOR_MAX '80 80 70'
+
+float autocvar_g_vehicle_raptor_respawntime;
+
+float autocvar_g_vehicle_raptor_movestyle;
+float autocvar_g_vehicle_raptor_turnspeed;
+float autocvar_g_vehicle_raptor_pitchspeed;
+float autocvar_g_vehicle_raptor_pitchlimit;
+
+float autocvar_g_vehicle_raptor_speed_forward;
+float autocvar_g_vehicle_raptor_speed_strafe;
+float autocvar_g_vehicle_raptor_speed_up;
+float autocvar_g_vehicle_raptor_speed_down;
+float autocvar_g_vehicle_raptor_friction;
+
+float autocvar_g_vehicle_raptor_bomblets;
+float autocvar_g_vehicle_raptor_bomblet_alt;
+float autocvar_g_vehicle_raptor_bomblet_time;
+float autocvar_g_vehicle_raptor_bomblet_damage;
+float autocvar_g_vehicle_raptor_bomblet_spread;
+float autocvar_g_vehicle_raptor_bomblet_edgedamage;
+float autocvar_g_vehicle_raptor_bomblet_radius;
+float autocvar_g_vehicle_raptor_bomblet_force;
+float autocvar_g_vehicle_raptor_bomblet_explode_delay;
+float autocvar_g_vehicle_raptor_bombs_refire;
+
+float autocvar_g_vehicle_raptor_cannon_turnspeed;
+float autocvar_g_vehicle_raptor_cannon_turnlimit;
+float autocvar_g_vehicle_raptor_cannon_pitchlimit_up;
+float autocvar_g_vehicle_raptor_cannon_pitchlimit_down;
+
+float autocvar_g_vehicle_raptor_cannon_locktarget;
+float autocvar_g_vehicle_raptor_cannon_locking_time;
+float autocvar_g_vehicle_raptor_cannon_locking_releasetime;
+float autocvar_g_vehicle_raptor_cannon_locked_time;
+float autocvar_g_vehicle_raptor_cannon_predicttarget;
+
+float autocvar_g_vehicle_raptor_cannon_cost;
+float autocvar_g_vehicle_raptor_cannon_damage;
+float autocvar_g_vehicle_raptor_cannon_radius;
+float autocvar_g_vehicle_raptor_cannon_refire;
+float autocvar_g_vehicle_raptor_cannon_speed;
+float autocvar_g_vehicle_raptor_cannon_spread;
+float autocvar_g_vehicle_raptor_cannon_force;
+
+float autocvar_g_vehicle_raptor_energy;
+float autocvar_g_vehicle_raptor_energy_regen;
+float autocvar_g_vehicle_raptor_energy_regen_pause;
+
+float autocvar_g_vehicle_raptor_health;
+float autocvar_g_vehicle_raptor_health_regen;
+float autocvar_g_vehicle_raptor_health_regen_pause;
+
+float autocvar_g_vehicle_raptor_shield;
+float autocvar_g_vehicle_raptor_shield_regen;
+float autocvar_g_vehicle_raptor_shield_regen_pause;
void raptor_spawn();
-void raptor_return();
-float raptor_pplug();
+float raptor_frame();
float raptor_takeoff();
-float raptor_land();
.entity bomb1;
.entity bomb2;
float raptor_altitude(float amax)
{
- tracebox(self.origin, self.mins, self.maxs, '0 0 -1' * amax, TRUE, self);
- if(trace_fraction == 1)
- return amax+1;
- else
- return vlen(self.origin - trace_endpos);
+ tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * amax), TRUE, self);
+ return vlen(self.origin - trace_endpos);
}
-void raptor_loadsettings()
-{
- raptor_movestyle = CCVAR("_movestyle");
- raptor_turnspeed = CCVAR("_turnspeed");
- raptor_turnroll = CCVAR("_turnroll");
- raptor_pitchspeed = CCVAR("_pitchspeed");
- raptor_speed_forward = CCVAR("_speed_forward");
- raptor_speed_strafe = CCVAR("_speed_strafe");
- raptor_speed_up = CCVAR("_speed_up");
- raptor_speed_down = CCVAR("_speed_down");
-
- raptor_bomblet_waves = CCVAR("_bomblet_waves ");
- raptor_bomblet_wavefirst = CCVAR("_bomblet_wavefirst");
- raptor_bomblet_wavenext = CCVAR("_bomblet_wavenext");
- raptor_bomblet_wawespread = CCVAR("_bomblet_wawespread");
- raptor_bomblets = CCVAR("_bomblets");
- raptor_bomblet_damage = CCVAR("_bomblet_damage");
- raptor_bomblet_edgedamage = CCVAR("_bomblet_edgedamage");
- raptor_bomblet_radius = CCVAR("_bomblet_radius");
- raptor_bomblet_force = CCVAR("_bomblet_force ");
- raptor_bombs_refire = CCVAR("_bombs_refire");
-
- raptor_beam_dps = CCVAR("_beam_dps");
- raptor_beam_fops = CCVAR("_beam_fops");
- raptor_beam_aps = CCVAR("_beam_aps");
- raptor_beam_size = CCVAR("_beam_size");
- raptor_beam_leangth = CCVAR("_beam_length");
- raptor_beam_refire = CCVAR("_beam_refire");
-
- raptor_shield_max = CCVAR("_shield");
- raptor_shield_regen = CCVAR("_shield_regen");
-
- raptor_health_max = CCVAR("_health");
- raptor_health_regen = CCVAR("_health_regen");
-
- raptor_energy_max = CCVAR("_energy");
- raptor_energy_regen = CCVAR("_energy_regen");
-}
-void raptor_bombs_return()
+void raptor_bomblet_boom()
{
- self.owner.bomb1.alpha = 1;
- self.owner.bomb2.alpha = 1;
+ RadiusDamage (self, self.realowner, autocvar_g_vehicle_raptor_bomblet_damage,
+ autocvar_g_vehicle_raptor_bomblet_edgedamage,
+ autocvar_g_vehicle_raptor_bomblet_radius, world,
+ autocvar_g_vehicle_raptor_bomblet_force, DEATH_RAPTOR_BOMB, world);
remove(self);
}
-void raptor_bomblet_boom()
+void raptor_bomblet_touch()
{
- if(other.enemy == self.enemy)
+ if(other == self.owner)
return;
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
- RadiusDamage (self, self.enemy, raptor_bomblet_damage, raptor_bomblet_edgedamage, raptor_bomblet_radius, world, raptor_bomblet_force, DEATH_SBROCKET, world);
- remove(self);
+ PROJECTILE_TOUCH;
+ self.think = raptor_bomblet_boom;
+ self.nextthink = time + random() * autocvar_g_vehicle_raptor_bomblet_explode_delay;
}
void raptor_bomb_burst()
{
- self.angles = vectoangles(self.velocity);
-
- if(self.cnt < time)
+ if(self.cnt > time)
+ if(autocvar_g_vehicle_raptor_bomblet_alt)
{
- entity bomblet;
- float i,v;
- vector d;
-
- makevectors(self.angles);
- v = vlen(self.velocity) + random();
- d = normalize(self.velocity);
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
-
- for(i = 0; i < raptor_bomblets; ++i)
- {
-
- bomblet = spawn();
- setorigin(bomblet,self.origin);
-
- setmodel(bomblet,"models/vehicles/raptor_bomb.dpm");
- bomblet.scale = 0.5;
-
- bomblet.owner = self.owner;
- bomblet.enemy = self.enemy;
-
- bomblet.solid = SOLID_TRIGGER;
- bomblet.movetype = MOVETYPE_BOUNCE;
- bomblet.touch = raptor_bomblet_boom;
-
- bomblet.think = raptor_bomblet_boom;
- bomblet.nextthink = time + 5;
-
- //bomblet.modelflags = MF_ROCKET;
- bomblet.modelflags = MF_GRENADE;
-
- bomblet.velocity = normalize(d + randomvec() * raptor_bomblet_wawespread) * v;
-
- bomblet.angles = vectoangles(bomblet.velocity);
- }
-
- self.wait -= 1;
- if(self.wait <= 0)
+ self.nextthink = time;
+ traceline(self.origin, self.origin + (normalize(self.velocity) * autocvar_g_vehicle_raptor_bomblet_alt), MOVE_NORMAL, self);
+ if((trace_fraction == 1.0) || (vlen(self.origin - self.owner.origin) < autocvar_g_vehicle_raptor_bomblet_radius))
{
- remove(self);
+ UpdateCSQCProjectile(self);
return;
}
-
- self.cnt = time + raptor_bomblet_wavenext;
}
- self.nextthink = time;
-}
+ entity bomblet;
+ float i;
-void raptor_bomb_touch()
-{
- raptor_bomb_burst();
+ Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_RAPTOR_BOMB_SPLIT, self);
+
+ for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i)
+ {
+ bomblet = spawn();
+ setorigin(bomblet, self.origin);
+
+ bomblet.movetype = MOVETYPE_TOSS;
+ bomblet.touch = raptor_bomblet_touch;
+ bomblet.think = raptor_bomblet_boom;
+ bomblet.nextthink = time + 5;
+ bomblet.owner = self.owner;
+ bomblet.realowner = self.realowner;
+ bomblet.velocity = normalize(normalize(self.velocity) + (randomvec() * autocvar_g_vehicle_raptor_bomblet_spread)) * vlen(self.velocity);
+
+ PROJECTILE_MAKETRIGGER(bomblet);
+ CSQCProjectile(bomblet, TRUE, PROJECTILE_RAPTORBOMBLET, TRUE);
+ }
+
+ remove(self);
}
void raptor_bombdrop()
{
entity bomb_1, bomb_2;
- self.bomb1.alpha = 0.25;
- self.bomb2.alpha = 0.25;
-
bomb_1 = spawn();
bomb_2 = spawn();
- setmodel(bomb_1,"models/vehicles/raptor_bomb.dpm");
- setmodel(bomb_2,"models/vehicles/raptor_bomb.dpm");
-
setorigin(bomb_1, gettaginfo(self, gettagindex(self, "bombmount_left")));
setorigin(bomb_2, gettaginfo(self, gettagindex(self, "bombmount_right")));
- bomb_1.movetype = bomb_2.movetype = MOVETYPE_TOSS;
- bomb_1.velocity = bomb_2.velocity = self.velocity;
- bomb_1.touch = bomb_2.touch = raptor_bomb_touch;
- bomb_1.think = bomb_2.think = raptor_bomb_burst;
- bomb_1.nextthink = bomb_2.nextthink = time;
- bomb_1.cnt = bomb_2.cnt = time + raptor_bomblet_wavefirst;
- bomb_1.wait = bomb_2.wait = raptor_bomblet_waves;
-
- bomb_1.avelocity = bomb_2.avelocity = '0 0 180';
- bomb_1.owner = bomb_2.owner = self;
- bomb_1.enemy = bomb_2.enemy = self.owner;
- bomb_1.angles = bomb_2.angles = self.angles;
+ bomb_1.movetype = bomb_2.movetype = MOVETYPE_BOUNCE;
+ bomb_1.velocity = bomb_2.velocity = self.velocity;
+ bomb_1.touch = bomb_2.touch = raptor_bomb_burst;
+ bomb_1.think = bomb_2.think = raptor_bomb_burst;
+ bomb_1.cnt = bomb_2.cnt = time + 10;
+
+ if(autocvar_g_vehicle_raptor_bomblet_alt)
+ bomb_1.nextthink = bomb_2.nextthink = time;
+ else
+ bomb_1.nextthink = bomb_2.nextthink = time + autocvar_g_vehicle_raptor_bomblet_time;
+
+ bomb_1.owner = bomb_2.owner = self;
+ bomb_1.realowner = bomb_2.realowner = self.owner;
bomb_1.solid = bomb_2.solid = SOLID_BBOX;
+ bomb_1.gravity = bomb_2.gravity = 1;
- bomb_1 = spawn();
- bomb_1.owner = self;
- bomb_1.think = raptor_bombs_return;
- bomb_1.nextthink = time + raptor_bombs_refire;
+ PROJECTILE_MAKETRIGGER(bomb_1);
+ PROJECTILE_MAKETRIGGER(bomb_2);
+
+ CSQCProjectile(bomb_1, TRUE, PROJECTILE_RAPTORBOMB, TRUE);
+ CSQCProjectile(bomb_2, TRUE, PROJECTILE_RAPTORBOMB, TRUE);
}
-void raptor_animator_think()
+
+void raptor_fire_cannon(entity gun, string tagname)
{
- self.owner.frame += 1;
- if(self.owner.frame == self.cnt)
- remove(self);
- else
- self.nextthink = time + self.wait;
+ vehicles_projectile("raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
+ gettaginfo(gun, gettagindex(gun, tagname)), normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
+ autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0,
+ DEATH_RAPTOR_CANNON, PROJECTILE_RAPTORCANNON, 0, TRUE, TRUE);
}
-void raptor_setanim(float start, float end, float length)
+void raptor_think()
{
- entity ani;
- if(self.tur_head.enemy)
- ani = self.tur_head.enemy;
- else
- ani = spawn();
-
- self.tur_head.enemy = ani;
- ani.owner = self;
- self.frame = start;
- ani.cnt = end;
- ani.wait = sys_frametime / length;
- ani.think = raptor_animator_think;
- ani.nextthink = time + ani.wait;
}
-void raptor_beam (vector start, vector end, vector smin, vector smax, float bforce, float f_dmg, float deathtype)
+void raptor_enter()
{
- vector hitloc, force, endpoint, dir;
- entity ent;
+ self.owner.PlayerPhysplug = raptor_takeoff;
+ self.movetype = MOVETYPE_BOUNCEMISSILE;
+ self.solid = SOLID_SLIDEBOX;
+ self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_raptor_health);
+ self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_raptor_shield);
+ self.velocity_z = 1; // Nudge upwards to takeoff sequense can work.
+ self.tur_head.exteriormodeltoclient = self.owner;
- dir = normalize(end - start);
- force = dir * bforce;
+ self.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
+ self.lip = time;
- // go a little bit into the wall because we need to hit this wall later
- end = end + dir;
+ if(self.owner.flagcarried)
+ setorigin(self.owner.flagcarried, '-20 0 96');
- // trace multiple times until we hit a wall, each obstacle will be made unsolid.
- // note down which entities were hit so we can damage them later
- while (1)
- {
- tracebox(start, smin, smax, end, FALSE, world);
-
- // if it is world we can't hurt it so stop now
- if (trace_ent == world || trace_fraction == 1)
- break;
-
- if (trace_ent.solid == SOLID_BSP)
- break;
-
- // make the entity non-solid so we can hit the next one
- trace_ent.railgunhit = TRUE;
- trace_ent.railgunhitloc = end;
- trace_ent.railgunhitsolidbackup = trace_ent.solid;
-
- // make the entity non-solid
- trace_ent.solid = SOLID_NOT;
- }
-
- endpoint = trace_endpos;
-
- // find all the entities the railgun hit and hurt them
- ent = findchainfloat(railgunhit, TRUE);
- while (ent)
- {
- // get the details we need to call the damage function
- ent.solid = ent.railgunhitsolidbackup;
- hitloc = ent.railgunhitloc;
- ent.railgunhitloc = '0 0 0';
- ent.railgunhitsolidbackup = SOLID_NOT;
- ent.railgunhit = FALSE;
-
- // apply the damage
- if (ent.takedamage)
- Damage (ent, self, self, f_dmg, deathtype, hitloc, force);
-
- ent = ent.chain;
- }
- trace_endpos = endpoint;
}
-
-void raptor_enter()
+void raptor_land()
{
- // Remove this when bots know how to use vehicles
- if (clienttype(other) != CLIENTTYPE_REAL)
- return;
-
- if(teams_matter)
- if(self.team)
- if(self.team != other.team)
- return;
-
- self.owner = other;
- self.switchweapon = other.switchweapon;
-
- self.event_damage = vehicle_stdproc_damage;
- self.colormap = self.owner.colormap;
- self.vehicle_hudmodel.viewmodelforclient = self.owner;
- self.nextthink = 0;
- self.owner.angles = self.angles;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.solid = SOLID_NOT;
- self.owner.movetype = MOVETYPE_NOCLIP;
- self.owner.alpha = -1;
- self.owner.PlayerPhysplug = raptor_takeoff;
- self.owner.vehicle = self;
- self.owner.event_damage = SUB_Null;
- self.owner.hud = HUD_RAPTOR;
- self.owner.vehicle_health = self.vehicle_health / raptor_health_max;
- self.owner.vehicle_shield = self.vehicle_shield / raptor_shield_max;
- self.owner.view_ofs = '0 0 1';
- self.owner.vehicle_ammo1 = self.vehicle_ammo1;
- self.owner.vehicle_ammo2 = self.vehicle_ammo2;
- self.owner.vehicle_reload1 = self.vehicle_reload1;
- self.owner.vehicle_reload2 = self.vehicle_reload2;
-
- other.flags &~= FL_ONGROUND;
- self.flags &~= FL_ONGROUND;
- self.frame = 0;
- raptor_setanim(0, 25, 1);
+ float hgt;
+
+ hgt = raptor_altitude(512);
+ self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime);
+ self.angles_x *= 0.95;
+ self.angles_z *= 0.95;
- self.team = self.owner.team;
- self.flags -= FL_NOTARGET;
+ if(hgt < 128)
+ if(self.frame != 0)
+ self.frame = max(self.frame - 0.25, 0);
- self.velocity = '0 0 1';
+ self.bomb1.gun1.avelocity_y = 90 + ((self.frame / 25) * 2000);
+ self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y;
- setorigin(other,self.origin + '0 0 32');
- other.velocity = self.velocity;
-
- other.flags &~= FL_ONGROUND;
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.vehicle_viewport);
+ if(hgt < 16)
+ {
+ self.movetype = MOVETYPE_TOSS;
+ self.think = raptor_think;
+ }
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, self.angles_x * -1); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
+ self.nextthink = time;
}
void raptor_exit(float eject)
{
- self.colormap = 1024;
- self.flags = FL_NOTARGET;
-
- if not (self.owner)
- return;
-
- msg_entity = self.owner;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.owner);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, 0); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
+ vector spot;
+ self.tur_head.exteriormodeltoclient = world;
- if (self.deadflag == DEAD_NO)
+ if(self.deadflag == DEAD_NO)
{
- //self.think = racer_exitthink;
- self.nextthink = time;
+ self.think = raptor_land;
+ self.nextthink = time;
}
- self.owner.takedamage = DAMAGE_AIM;
- self.owner.solid = SOLID_SLIDEBOX;
- self.owner.movetype = MOVETYPE_WALK;
-
- setsize(self.owner,PL_MIN,PL_MAX);
-
- self.owner.effects &~= EF_NODRAW;
- self.owner.alpha = 1;
- self.owner.PlayerPhysplug = SUB_Null;
- self.owner.vehicle = world;
- self.owner.view_ofs = PL_VIEW_OFS;
- self.owner.event_damage = PlayerDamage;
- self.owner.hud = HUD_NORMAL;
- //self.exteriormodeltoclient = self;
-
- self.vehicle_hudmodel.viewmodelforclient = self;
+ if not (self.owner)
+ return;
+ makevectors(self.angles);
if(eject)
{
- makevectors(self.angles);
- setorigin(self.owner,self.origin + v_forward * 100);
+ spot = self.origin + v_forward * 100 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
self.owner.velocity = (v_up + v_forward * 0.25) * 750;
}
else
{
- self.owner.velocity = (v_forward) * -150;
- setorigin(self.owner,self.origin - v_forward * 128);
+ spot = self.origin - v_forward * 200 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
}
-
+
self.owner = world;
-
- if (self.deadflag != DEAD_NO)
- {
- entity ret;
- ret = spawn();
- ret.enemy = self;
- ret.think = raptor_return;
- ret.nextthink = time + autocvar_g_vehicle_racer_respawntime;
- }
}
-
-float raptor_pplug()
+float raptor_takeoff()
{
- entity player, vhic;
- float ftmp, ftmp2, energy_used;
- vector df;
-
-
- if(autocvar_g_vehicle_raptor_reload)
- {
- raptor_loadsettings();
- cvar_set("g_vehicle_raptor_reload","0");
- }
-
+ entity player, raptor;
+
player = self;
- vhic = self.vehicle;
- self = vhic;
-
- if(player.BUTTON_USE)
+ raptor = self.vehicle;
+ self = raptor;
+ if(self.sound_nexttime < time)
+ {
+ self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ }
+
+ // Takeoff sequense
+ if(raptor.frame < 25)
{
- self = vhic;
- raptor_exit(0);
- self = player;
- return 0;
- }
+ raptor.frame += 0.25;
+ raptor.velocity_z = min(raptor.velocity_z * 1.5, 256);
+ self.bomb1.gun1.avelocity_y = 90 + ((raptor.frame / 25) * 25000);
+ self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
- if(vhic.deadflag != DEAD_NO)
- {
- self = player;
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- return 1;
+ setorigin(player, raptor.origin + '0 0 32');
}
+ else
+ player.PlayerPhysplug = raptor_frame;
+
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime);
- vhic.angles_x *= -1;
- // Rotate Body
- ftmp = raptor_turnspeed * sys_frametime;
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime);
- ftmp = bound(-ftmp, shortangle_f(player.v_angle_y - vhic.angles_y, vhic.angles_y), ftmp);
+ if(self.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime);
- // Roll
- //ftmp = bound(-90,shortangle_f(player.v_angle_z + ((vhic.angles_y - ftmp2) * raptor_turnroll), vhic.angles_z),90);
- //ftmp = safeangle(vhic.angles_z + ftmp);
- //vhic.angles_z = ftmp;
- // Turn
- vhic.angles_y = anglemods(vhic.angles_y + ftmp);
+ raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
+ player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
- // Pitch Body
- ftmp = raptor_pitchspeed * sys_frametime;
+ VEHICLE_UPDATE_PLAYER(health, raptor);
+ VEHICLE_UPDATE_PLAYER(energy, raptor);
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(shield, raptor);
- ftmp = bound(-ftmp, shortangle_f(player.v_angle_x - vhic.angles_x,vhic.angles_x), ftmp);
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
+ self = player;
+ return 1;
+}
- vhic.angles_x = bound(-60,anglemods(vhic.angles_x + ftmp),60);
- vhic.angles_x *= -1;
+float raptor_frame()
+{
+ entity player, raptor;
+ float ftmp, ftmp2;
+ vector df;
+
+ if(intermission_running)
+ return 1;
- if(raptor_movestyle == 1)
+ player = self;
+ raptor = self.vehicle;
+ self = raptor;
+ vehicles_painframe();
+ /*
+ ftmp = vlen(self.velocity);
+ if(ftmp > autocvar_g_vehicle_raptor_speed_forward)
+ ftmp = 1;
+ else
+ ftmp = ftmp / autocvar_g_vehicle_raptor_speed_forward;
+ */
+
+ if(self.sound_nexttime < time)
+ {
+ self.sound_nexttime = time + 7.955812;
+ //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp, ATTN_NORM );
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTN_NORM);
+ self.wait = ftmp;
+ }
+ /*
+ else if(fabs(ftmp - self.wait) > 0.2)
{
- ftmp = vhic.angles_z;
- vhic.angles_z = 0;
- ftmp2 = vhic.angles_x;
- vhic.angles_x = 0;
- fixedmakevectors(vhic.angles);
- vhic.angles_z = ftmp;
- vhic.angles_x = ftmp2;
+ sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp, ATTN_NORM );
+ sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTN_NORM);
+ self.wait = ftmp;
+ }
+ */
+
+ if(raptor.deadflag != DEAD_NO)
+ {
+ self = player;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ return 1;
}
+ crosshair_trace(player);
+
+ vector vang;
+ vang = raptor.angles;
+ df = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
+ vang_x *= -1;
+ df_x *= -1;
+ if(df_x > 180) df_x -= 360;
+ if(df_x < -180) df_x += 360;
+ if(df_y > 180) df_y -= 360;
+ if(df_y < -180) df_y += 360;
+
+ ftmp = shortangle_f(player.v_angle_y - vang_y, vang_y);
+ if(ftmp > 180) ftmp -= 360; if(ftmp < -180) ftmp += 360;
+ raptor.avelocity_y = bound(-autocvar_g_vehicle_raptor_turnspeed, ftmp + raptor.avelocity_y * 0.9, autocvar_g_vehicle_raptor_turnspeed);
+
+ // Pitch
+ ftmp = 0;
+ if(player.movement_x > 0 && vang_x < autocvar_g_vehicle_raptor_pitchlimit) ftmp = 5;
+ else if(player.movement_x < 0 && vang_x > -autocvar_g_vehicle_raptor_pitchlimit) ftmp = -20;
+
+ df_x = bound(-autocvar_g_vehicle_raptor_pitchlimit, df_x , autocvar_g_vehicle_raptor_pitchlimit);
+ ftmp = vang_x - bound(-autocvar_g_vehicle_raptor_pitchlimit, df_x + ftmp, autocvar_g_vehicle_raptor_pitchlimit);
+ raptor.avelocity_x = bound(-autocvar_g_vehicle_raptor_pitchspeed, ftmp + raptor.avelocity_x * 0.9, autocvar_g_vehicle_raptor_pitchspeed);
+
+ raptor.angles_x = anglemods(raptor.angles_x);
+ raptor.angles_y = anglemods(raptor.angles_y);
+ raptor.angles_z = anglemods(raptor.angles_z);
+
+ if(autocvar_g_vehicle_raptor_movestyle == 1)
+ makevectors('0 1 0' * raptor.angles_y);
else
- fixedmakevectors(vhic.angles);
+ makevectors(player.v_angle);
- df = vhic.velocity * -1;
+ df = raptor.velocity * -autocvar_g_vehicle_raptor_friction;
if(player.movement_x != 0)
{
if(player.movement_x > 0)
- df += v_forward * raptor_speed_forward;
+ df += v_forward * autocvar_g_vehicle_raptor_speed_forward;
else if(player.movement_x < 0)
- df -= v_forward * raptor_speed_forward;
+ df -= v_forward * autocvar_g_vehicle_raptor_speed_forward;
}
if(player.movement_y != 0)
{
if(player.movement_y < 0)
- df -= v_right * raptor_speed_strafe;
+ df -= v_right * autocvar_g_vehicle_raptor_speed_strafe;
else if(player.movement_y > 0)
- df += v_right * raptor_speed_strafe;
+ df += v_right * autocvar_g_vehicle_raptor_speed_strafe;
- vhic.angles_z = bound(-30,vhic.angles_z + (player.movement_y / raptor_speed_strafe),30);
+ raptor.angles_z = bound(-30,raptor.angles_z + (player.movement_y / autocvar_g_vehicle_raptor_speed_strafe),30);
}
else
{
- vhic.angles_z *= 0.95;
- if(vhic.angles_z >= -1 && vhic.angles_z <= -1)
- vhic.angles_z = 0;
+ raptor.angles_z *= 0.95;
+ if(raptor.angles_z >= -1 && raptor.angles_z <= -1)
+ raptor.angles_z = 0;
}
if(player.BUTTON_CROUCH)
- df -= v_up * raptor_speed_down;
+ df -= v_up * autocvar_g_vehicle_raptor_speed_down;
else if (player.BUTTON_JUMP)
- df += v_up * raptor_speed_up;
- //else
- //df_z = vhic.velocity_z * -1;
-
- vhic.velocity += df * frametime;
- player.velocity = player.movement = vhic.velocity;
- setorigin(player,vhic.origin + '0 0 32');
+ df += v_up * autocvar_g_vehicle_raptor_speed_up;
- // Aim the gunz
- /*
- vector target_angle, move_angle, org1, org2, targ;
+ raptor.velocity += df * frametime;
+ player.velocity = player.movement = raptor.velocity;
+ setorigin(player, raptor.origin + '0 0 32');
- makevectors(player.v_angle);
-
- //targ = (vhic.origin + player.view_ofs) + v_forward * MAX_SHOT_DISTANCE;
- targ = player.cursor_trace_endpos;
-
- org1 = gettaginfo(vhic.gun1,gettagindex(vhic.gun1, "fire1"));
- org2 = gettaginfo(vhic.gun2,gettagindex(vhic.gun2, "fire1"));
+ vector vf, ad;
+ // Target lock & predict
+ if(autocvar_g_vehicle_raptor_cannon_locktarget)
+ {
- traceline(vhic.origin + player.view_ofs, targ, FALSE, vhic);
- targ = trace_endpos;
+ vehicles_locktarget((1 / autocvar_g_vehicle_raptor_cannon_locking_time) * frametime,
+ (1 / autocvar_g_vehicle_raptor_cannon_locking_releasetime) * frametime,
+ autocvar_g_vehicle_raptor_cannon_locked_time);
- // Find the direction
- target_angle = vectoangles(normalize(targ - org1)); // And make a angle
+ if(self.lock_target != world)
+ if(autocvar_g_vehicle_raptor_cannon_predicttarget)
+ if(self.lock_strength == 1)
+ {
+ float i, distance, impact_time;
+
+ vf = real_origin(raptor.lock_target);
+ ad = vf;
+ for(i = 0; i < 4; ++i)
+ {
+ distance = vlen(ad - raptor.origin);
+ impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
+ ad = vf + raptor.lock_target.velocity * impact_time;
+ }
+ trace_endpos = ad;
+ }
- // Find the diffrence between where we currently aim and where we want to aim
- move_angle = target_angle - (vhic.angles + vhic.gun1.angles);
- move_angle = shortangle_vxy(move_angle,(vhic.angles + vhic.gun1.angles));
- vhic.gun1.angles_x = bound(-10, move_angle_x + vhic.gun1.angles_x, 10);
- vhic.gun1.angles_y = bound(-15, move_angle_y + vhic.gun1.angles_y, 15);
+ if(self.lock_target)
+ {
+ if(raptor.lock_strength == 1)
+ UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '1 0 0', 1);
+ else if(self.lock_strength > 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 1 0', 1);
+ else if(self.lock_strength < 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 0 1', 1);
+ }
+ }
- // Find the direction
- target_angle = vectoangles(normalize(targ - org2)); // And make a angle
+ // Aim the gunz
+ ftmp2 = autocvar_g_vehicle_raptor_cannon_turnspeed * frametime;
+ ftmp = -ftmp2;
+
+ // Gun1
+ df = gettaginfo(raptor.gun1, gettagindex(raptor.gun1, "fire1"));
+ //ad = df;
+ //vf = v_forward;
+ df = vectoangles(normalize(trace_endpos - df)); // Find the direction & angle
+ df = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(raptor.angles), AnglesTransform_FromAngles(df))) - raptor.gun1.angles;
+ df = shortangle_vxy(df, raptor.gun1.angles);
+
+ // Bind to aimspeed
+ df_x = bound(ftmp, df_x, ftmp2);
+ df_y = bound(ftmp, df_y, ftmp2);
+ // Bind to limts
+ raptor.gun1.angles_x = bound(-autocvar_g_vehicle_raptor_cannon_pitchlimit_down, df_x + raptor.gun1.angles_x, autocvar_g_vehicle_raptor_cannon_pitchlimit_up);
+ raptor.gun1.angles_y = bound(-autocvar_g_vehicle_raptor_cannon_turnlimit, df_y + raptor.gun1.angles_y, autocvar_g_vehicle_raptor_cannon_turnlimit);
+
+ // Gun2
+ df = gettaginfo(raptor.gun2, gettagindex(raptor.gun2, "fire1"));
+ //ad += df;
+ //vf += v_forward;
+ df = vectoangles(normalize(trace_endpos - df)); // Find the direction & angle
+ df = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(raptor.angles), AnglesTransform_FromAngles(df))) - raptor.gun2.angles;
+ df = shortangle_vxy(df, raptor.gun2.angles);
+
+ // Bind to aimspeed
+ df_x = bound(ftmp, df_x, ftmp2);
+ df_y = bound(ftmp, df_y, ftmp2);
+ // Bind to limts
+ raptor.gun2.angles_x = bound(-autocvar_g_vehicle_raptor_cannon_pitchlimit_down, df_x + raptor.gun2.angles_x, autocvar_g_vehicle_raptor_cannon_pitchlimit_up);
+ raptor.gun2.angles_y = bound(-autocvar_g_vehicle_raptor_cannon_turnlimit, df_y + raptor.gun2.angles_y, autocvar_g_vehicle_raptor_cannon_turnlimit);
- move_angle = target_angle - (vhic.angles + vhic.gun2.angles);
- move_angle = shortangle_vxy(move_angle,(vhic.angles + vhic.gun2.angles));
- vhic.gun2.angles_x = bound(-15,move_angle_x + vhic.gun2.angles_x,15);
- vhic.gun2.angles_y = bound(-20,move_angle_y + vhic.gun2.angles_y,20);
- */
+ /*
+ ad = ad * 0.5;
+ v_forward = vf * 0.5;
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, raptor);
+ UpdateAuxiliaryXhair(player, trace_endpos, '0 1 0', 0);
+ */
+
if(player.BUTTON_ATCK)
- if(vhic.vehicle_energy > (raptor_beam_aps * sys_frametime))
+ if(raptor.attack_finished_single <= time)
+ if(raptor.vehicle_energy > autocvar_g_vehicle_raptor_cannon_cost)
{
- vector start;
- self = player;
-
- start = gettaginfo(vhic.gun1, gettagindex(vhic.gun1, "fire1"));
- traceline(start, start + v_forward * MAX_SHOT_DISTANCE, TRUE, player);
- te_lightning1(vhic.gun1, start, trace_endpos);
- raptor_beam(start, trace_endpos, '-1 -1 -1' * raptor_beam_size, '1 1 1' * raptor_beam_size, raptor_beam_fops * sys_frametime, raptor_beam_dps * sys_frametime, DEATH_SBROCKET);
-
-
- start = gettaginfo(vhic.gun2, gettagindex(vhic.gun2, "fire1"));
- traceline(start, start + v_forward * MAX_SHOT_DISTANCE, TRUE, player);
- te_lightning1(vhic.gun2, start, trace_endpos);
- raptor_beam(start, trace_endpos, '-1 -1 -1' * raptor_beam_size, '1 1 1' * raptor_beam_size, raptor_beam_fops * sys_frametime, raptor_beam_dps * sys_frametime, DEATH_SBROCKET);
-
- self = vhic;
-
- vhic.vehicle_energy -= raptor_beam_aps * sys_frametime;
- vhic.cnt = time + 1;
+ raptor.misc_bulletcounter += 1;
+ raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire;
+ if(raptor.misc_bulletcounter <= 2)
+ raptor_fire_cannon(self.gun1, "fire1");
+ else if(raptor.misc_bulletcounter == 3)
+ raptor_fire_cannon(self.gun2, "fire1");
+ else
+ {
+ raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire * 2;
+ raptor_fire_cannon(self.gun2, "fire1");
+ raptor.misc_bulletcounter = 0;
+ }
+ raptor.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost;
+ self.cnt = time;
}
- if(vhic.cnt < time)
- vhic.vehicle_energy = min(vhic.vehicle_energy += raptor_energy_regen * frametime, raptor_energy_max);
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime);
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime);
- player.vehicle_energy = vhic.vehicle_energy / raptor_energy_max;
+ if(self.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime);
+ if(time > raptor.delay)
if(player.BUTTON_ATCK2)
- if(time > vhic.delay)
{
raptor_bombdrop();
- vhic.delay = time + raptor_bombs_refire;
+ raptor.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
+ raptor.lip = time;
}
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
- vehicle_stdproc_shiledregen(raptor_shield_max, frametime);
- vehicle_stdproc_healthregen(raptor_health_max, frametime);
-
- self = player;
-
- return 1;
-}
-
-float raptor_takeoff()
-{
- entity player, vhic;
+ raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
+ player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
- if(self.vehicle.frame < 25)
- return 1;
-
- player = self;
- vhic = self.vehicle;
- self = vhic;
-
- if(raptor_altitude(512) <= 256)
- {
- vhic.velocity_z = min(vhic.velocity_z * 1.5, 256);
- }
- else
- {
- player.PlayerPhysplug = raptor_pplug;
- }
-
- player.BUTTON_CROUCH = player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- self = player;
+ VEHICLE_UPDATE_PLAYER(health, raptor);
+ VEHICLE_UPDATE_PLAYER(energy, raptor);
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(shield, raptor);
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
return 1;
}
-float raptor_land()
+void raptor_blowup()
{
- return 0;
-}
+ self.deadflag = DEAD_DEAD;
+ self.vehicle_exit(VHEF_NORMAL);
+ RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_WAKIBLOWUP, world);
-void raptor_return()
-{
- pointparticles(particleeffectnum("teleport"), self.enemy.origin + '0 0 64', '0 0 0', 1);
- self.enemy.think = raptor_spawn;
- self.enemy.nextthink = time;
- remove(self);
-}
+ self.alpha = -1;
+ self.movetype = MOVETYPE_NONE;
+ self.effects = EF_NODRAW;
+ self.colormod = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
-void raptor_think()
-{
+ setorigin(self, self.pos1);
+ self.touch = SUB_Null;
+ self.nextthink = 0;
}
-void raptor_touch()
+void raptor_diethink()
{
- if(self.owner)
+ if(random() < 0.1)
{
- if(vlen(self.velocity) == 0)
- return;
-
- if(other.classname != "player")
- return;
-
- return;
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
}
-
- if(other.classname != "player")
- return;
-
- if(other.deadflag != DEAD_NO)
- return;
-
- if(other.vehicle != world)
- return;
-
- raptor_enter();
+ self.nextthink = time + 0.1;
}
void raptor_die()
{
self.health = 0;
self.event_damage = SUB_Null;
- self.iscreature = FALSE;
- self.solid = SOLID_NOT;
+ self.solid = SOLID_CORPSE;
self.takedamage = DAMAGE_NO;
- //self.touch = racer_dietouch;
self.deadflag = DEAD_DYING;
self.movetype = MOVETYPE_BOUNCE;
- self.wait = time;
+ self.think = raptor_diethink;
+ self.nextthink = time;
+
+ pointparticles(particleeffectnum("explosion_medium"), findbetterlocation (self.origin, 16), '0 0 0', 1);
- pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+ self.velocity_z += 600;
- self.velocity += '0 0 128';
-
- if(random() < 0.5)
- self.avelocity_z = 45;
- else
- self.avelocity_z = -45;
+ self.avelocity = '0 0.5 1' * (random() * 400);
+ self.avelocity -= '0 0.5 1' * (random() * 400);
self.colormod = '-0.5 -0.5 -0.5';
-
- self.think = raptor_spawn;
- self.nextthink = time + 5;
+ self.touch = raptor_blowup;
}
void raptor_spawn()
{
- self.flags = FL_NOTARGET;
- self.effects = 0;
-
- self.vehicle_health = raptor_health_max;
- self.vehicle_shield = raptor_shield_max;
-
- self.event_damage = vehicle_stdproc_damage;
- self.touch = raptor_touch;
-
- self.iscreature = TRUE;
- self.movetype = MOVETYPE_FLY;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
-
- self.alpha = 1;
- self.colormap = 1024;
- self.deadflag = DEAD_NO;
- self.bot_attack = TRUE;
-
- self.colormod = '1 1 1';
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
-
+ self.frame = 0;
+ self.vehicle_health = autocvar_g_vehicle_raptor_health;
+ self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
+ self.movetype = MOVETYPE_TOSS;
+ self.solid = SOLID_SLIDEBOX;
self.vehicle_energy = 1;
- self.vehicle_hudmodel.viewmodelforclient = self;
- setorigin(self, self.pos1);
- self.angles = self.pos2;
+ self.bomb1.gun1.avelocity_y = 90;
+ self.bomb1.gun2.avelocity_y = -90;
- setsize(self,RAPTOR_MIN ,RAPTOR_MAX );
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+ setsize(self, RAPTOR_MIN, RAPTOR_MAX );
self.delay = time;
}
-float raptor_customizeentityforclient()
+// If we dont do this ever now and then, the raptors rotors
+// stop working, presumably due to angle overflow. cute.
+void raptor_rotor_anglefix()
{
- if(self.deadflag == DEAD_DEAD)
- return FALSE;
-
- /*
- if(other == self.owner)
- self.alpha = -1;
- else
- self.alpha = 1;
- */
-
- return TRUE;
+ self.gun1.angles_y = anglemods(self.gun1.angles_y);
+ self.gun2.angles_y = anglemods(self.gun2.angles_y);
+ self.nextthink = time + 15;
}
void raptor_dinit()
{
+ entity spinner;
+ vector ofs;
+
+ if not (vehicle_initialize(
+ "Raptor",
+ "models/vehicles/raptor.dpm",
+ "",
+ "models/vehicles/raptor_cockpit.dpm",
+ "", "tag_hud", "tag_camera",
+ HUD_RAPTOR,
+ RAPTOR_MIN, RAPTOR_MAX,
+ FALSE,
+ raptor_spawn, autocvar_g_vehicle_raptor_respawntime,
+ raptor_frame,
+ raptor_enter, raptor_exit,
+ raptor_die, raptor_think,
+ FALSE))
+ {
+ remove(self);
+ return;
+ }
- if (self.netname == "")
- self.netname = "Raptor";
-
- setorigin(self, self.origin);
+ //FIXME: Camera is in a bad place in HUD model.
+ //setorigin(self.vehicle_viewport, '25 0 5');
self.frame = 0;
- setmodel(self,"models/vehicles/raptor.dpm");
-
self.bomb1 = spawn();
self.bomb2 = spawn();
+ self.gun1 = spawn();
+ self.gun2 = spawn();
- setmodel(self.bomb1,"models/vehicles/raptor_bomb.dpm");
- setmodel(self.bomb2,"models/vehicles/raptor_bomb.dpm");
+ setmodel(self.bomb1,"models/vehicles/clusterbomb_folded.md3");
+ setmodel(self.bomb2,"models/vehicles/clusterbomb_folded.md3");
+ setmodel(self.gun1, "models/vehicles/raptor_gun.dpm");
+ setmodel(self.gun2, "models/vehicles/raptor_gun.dpm");
+ setmodel(self.tur_head, "models/vehicles/raptor_body.dpm");
setattachment(self.bomb1, self,"bombmount_left");
setattachment(self.bomb2, self,"bombmount_right");
+ setattachment(self.tur_head, self,"root");
- if not (self.vehicle_hudmodel)
- {
- self.vehicle_hudmodel = spawn();
- setmodel(self.vehicle_hudmodel, "models/vehicles/raptor_cockpit.dpm");
- //setattachment(self.vehicle_hudmodel, self, "tag_viewport");
- setattachment(self.vehicle_hudmodel, self, "tag_hud");
- }
+ // FIXME Guns mounts to angled bones
+ self.bomb1.angles = self.angles;
+ self.angles = '0 0 0';
+ // This messes up gun-aim, so work arround it.
+ //setattachment(self.gun1, self, "gunmount_left");
+ ofs = gettaginfo(self, gettagindex(self, "gunmount_left"));
+ ofs -= self.origin;
+ setattachment(self.gun1, self, "");
+ setorigin(self.gun1, ofs);
- if not (self.vehicle_viewport)
- {
- self.vehicle_viewport = spawn();
- setmodel (self.vehicle_viewport, "null");
- setattachment(self.vehicle_viewport, self.vehicle_hudmodel, "tag_camera");
- }
+ //setattachment(self.gun2, self, "gunmount_right");
+ ofs = gettaginfo(self, gettagindex(self, "gunmount_right"));
+ ofs -= self.origin;
+ setattachment(self.gun2, self, "");
+ setorigin(self.gun2, ofs);
- if not (self.gun1)
- {
- self.gun1 = spawn();
- setmodel(self.gun1, "models/vehicles/raptor_gun.dpm");
- setattachment(self.gun1, self, "gunmount_left");
- }
+ self.angles = self.bomb1.angles;
+ self.bomb1.angles = '0 0 0';
- if not (self.gun2)
- {
- self.gun2 = spawn();
- setmodel(self.gun2, "models/vehicles/raptor_gun.dpm");
- setattachment(self.gun2, self, "gunmount_right");
- }
-
- self.tur_head = spawn();
- self.pos1 = self.origin;
- self.pos2 = self.angles;
-
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.customizeentityforclient = raptor_customizeentityforclient;
-
- self.vehicle_die = raptor_die;
- self.vehicle_exit = raptor_exit;
-
-
- entity spinner;
spinner = spawn();
spinner.owner = self;
setmodel(spinner,"models/vehicles/spinner.dpm");
setattachment(spinner, self, "engine_left");
spinner.movetype = MOVETYPE_NOCLIP;
spinner.avelocity = '0 90 0';
+ self.bomb1.gun1 = spinner;
spinner = spawn();
spinner.owner = self;
setattachment(spinner, self, "engine_right");
spinner.movetype = MOVETYPE_NOCLIP;
spinner.avelocity = '0 -90 0';
+ self.bomb1.gun2 = spinner;
- addstat(STAT_HUD, AS_INT, hud);
- addstat(STAT_VEHICLESTAT_HEALTH, AS_FLOAT, vehicle_health);
- addstat(STAT_VEHICLESTAT_SHIELD, AS_FLOAT, vehicle_shield);
- addstat(STAT_VEHICLESTAT_ENERGY, AS_FLOAT, vehicle_energy);
-
- addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
- addstat(STAT_VEHICLESTAT_RELOAD1, AS_FLOAT, vehicle_reload1);
+ // Sigh.
+ self.bomb1.think = raptor_rotor_anglefix;
+ self.bomb1.nextthink = time;
- addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
- addstat(STAT_VEHICLESTAT_RELOAD2, AS_FLOAT, vehicle_reload2);
-
- raptor_spawn();
+ self.mass = 1 ;
}
void spawnfunc_vehicle_raptor()
{
- self.cvar_basename = "g_vehicle_raptor";
- raptor_loadsettings();
+ vehicles_configcheck("vehicle_raptor.cfg", autocvar_g_vehicle_raptor_health);
- self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN;
+ self.vehicle_flags |= VHF_DMGSHAKE;
+ self.vehicle_flags |= VHF_DMGROLL;
+
+ if(autocvar_g_vehicle_raptor_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
- traceline(self.origin, self.origin - '0 0 2048', MOVE_WORLDONLY, self);
- if(trace_startsolid)
- {
- dprint("WARNING: vehicle_raptor placed in solid\n");
- traceline(self.origin + '0 0 512' ,self.origin - '0 0 2048',MOVE_WORLDONLY,self);
- if(trace_startsolid || trace_fraction == 1.0)
- {
- dprint("ERROR: vehicle_raptor placed in more then 512 units into solid\n");
- remove(self);
- return;
- }
- }
+ if(autocvar_g_vehicle_raptor_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
- if(trace_fraction != 1.0)
- setorigin(self,trace_endpos + '0 0 8');
- else
- dprint("WARNING: vehicle_racer placed more then 2048 units above ground.\n");
+ if(autocvar_g_vehicle_raptor_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
+ if(autocvar_g_vehicle_raptor_energy_regen)
+ self.vehicle_flags |= VHF_ENERGYREGEN;
precache_model ("models/vehicles/raptor.dpm");
precache_model ("models/vehicles/raptor_gun.dpm");
precache_model ("models/vehicles/spinner.dpm");
precache_model ("models/vehicles/raptor_cockpit.dpm");
- precache_model ("models/vehicles/raptor_bomb.dpm");
-
-
+ //precache_model ("models/vehicles/clusterbomb.md3");
+ precache_model ("models/vehicles/clusterbomb_folded.md3");
+ precache_model ("models/vehicles/raptor_body.dpm");
+
+ precache_sound ("vehicles/raptor_fly.wav");
+ precache_sound ("vehicles/raptor_speed.wav");
+
self.think = raptor_dinit;
- self.nextthink = time + 1;
-}
-
-
-void spawnfunc_vehicle_raptor2()
-{
- entity iqm,dpm,md3;
-
- precache_model ("models/vehicles/test.iqm");
- precache_model ("models/vehicles/test.dpm");
- precache_model ("models/vehicles/test.md3");
-
- iqm = spawn();
- dpm = spawn();
- md3 = spawn();
- iqm.scale = md3.scale = dpm.scale = 10;
-
- //setmodel(iqm,"models/vehicles/test.iqm");
- //setmodel(dpm,"models/vehicles/test.dpm");
- setmodel(md3,"models/vehicles/test.md3");
-
- setorigin(iqm, self.origin + '0 0 16');
- setorigin(dpm, self.origin + '0 20 32');
- setorigin(iqm, self.origin + '0 40 48');
+
+ if(g_assault)
+ self.nextthink = time + 0.5;
+ else
+ self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_raptor_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
}
+#endif // SVQC
-const vector spiderbot_MIN = '-75 -75 0';
-const vector spiderbot_MAX = '75 75 100';
-
-#define spiderbot_spawnpnt wkr_spawn
+const vector SPIDERBOT_MIN = '-75 -75 10';
+const vector SPIDERBOT_MAX = '75 75 125';
+
+#ifdef SVQC
+float autocvar_g_vehicle_spiderbot_respawntime;
+
+float autocvar_g_vehicle_spiderbot_speed_stop;
+float autocvar_g_vehicle_spiderbot_speed_strafe;
+float autocvar_g_vehicle_spiderbot_speed_walk;
+float autocvar_g_vehicle_spiderbot_turnspeed;
+float autocvar_g_vehicle_spiderbot_movement_inertia;
+
+float autocvar_g_vehicle_spiderbot_springlength;
+float autocvar_g_vehicle_spiderbot_springup;
+float autocvar_g_vehicle_spiderbot_springblend;
+
+float autocvar_g_vehicle_spiderbot_head_pitchlimit_down;
+float autocvar_g_vehicle_spiderbot_head_pitchlimit_up;
+float autocvar_g_vehicle_spiderbot_head_pitchspeed;
+float autocvar_g_vehicle_spiderbot_head_turnlimit;
+float autocvar_g_vehicle_spiderbot_head_turnspeed;
+
+//float autocvar_g_vehicle_spiderbot_energy;
+//float autocvar_g_vehicle_spiderbot_energy_regen;
+//float autocvar_g_vehicle_spiderbot_energy_regen_pause;
+
+float autocvar_g_vehicle_spiderbot_health;
+float autocvar_g_vehicle_spiderbot_health_regen;
+float autocvar_g_vehicle_spiderbot_health_regen_pause;
+
+float autocvar_g_vehicle_spiderbot_shield;
+float autocvar_g_vehicle_spiderbot_shield_regen;
+float autocvar_g_vehicle_spiderbot_shield_regen_pause;
+
+float autocvar_g_vehicle_spiderbot_minigun_damage;
+float autocvar_g_vehicle_spiderbot_minigun_refire;
+float autocvar_g_vehicle_spiderbot_minigun_spread;
+float autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
+float autocvar_g_vehicle_spiderbot_minigun_ammo_max;
+float autocvar_g_vehicle_spiderbot_minigun_ammo_regen;
+float autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause;
+
+float autocvar_g_vehicle_spiderbot_rocket_damage;
+float autocvar_g_vehicle_spiderbot_rocket_force;
+float autocvar_g_vehicle_spiderbot_rocket_radius;
+float autocvar_g_vehicle_spiderbot_rocket_speed;
+float autocvar_g_vehicle_spiderbot_rocket_refire;
+float autocvar_g_vehicle_spiderbot_rocket_reload;
+float autocvar_g_vehicle_spiderbot_rocket_health;
+float autocvar_g_vehicle_spiderbot_rocket_noise;
+float autocvar_g_vehicle_spiderbot_rocket_turnrate;
+float autocvar_g_vehicle_spiderbot_rocket_lifetime;
void spiderbot_exit(float eject);
void spiderbot_enter();
-
-void spiderbot_rocket_explode()
-{
- vector org2;
-
- if(self.event_damage != SUB_Null)
- {
- self.event_damage = SUB_Null;
- self.think = spiderbot_rocket_explode;
- self.nextthink = time;
- return;
- }
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
- pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- w_deathtypestring = "dident escape the rocket barrage";
-
- if(!self.owner)
- self.owner = self.realowner;
-
- RadiusDamage (self, self.owner,
- autocvar_g_vehicle_spiderbot_rocket_damage,
- autocvar_g_vehicle_spiderbot_rocket_edgedamage,
- autocvar_g_vehicle_spiderbot_rocket_radius, world,
- autocvar_g_vehicle_spiderbot_rocket_force, DEATH_SBROCKET, world);
-
- remove (self);
-}
-
-void spiderbot_rocket_touch()
-{
- if(self.owner)
- {
- if(other == self.owner.vehicle)
- return;
-
- if(other == self.owner.vehicle.tur_head)
- return;
- }
-
- PROJECTILE_TOUCH;
- spiderbot_rocket_explode();
-}
+void spiderbot_spawn();
void spiderbot_rocket_unguided()
{
- vector newdir,olddir;
+ vector newdir, olddir;
self.nextthink = time;
-
olddir = normalize(self.velocity);
newdir = normalize(self.pos1 - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
UpdateCSQCProjectile(self);
- if (self.owner.deadflag != DEAD_NO || self.cnt < time)
- spiderbot_rocket_explode();
-
+ if (self.owner.deadflag != DEAD_NO || self.cnt < time || vlen(self.pos1 - self.origin) < 16)
+ self.use();
}
void spiderbot_rocket_guided()
self.nextthink = time;
- if not (self.owner.vehicle)
+ if not (self.realowner.vehicle)
self.think = spiderbot_rocket_unguided;
- crosshair_trace(self.owner);
+ crosshair_trace(self.realowner);
olddir = normalize(self.velocity);
newdir = normalize(trace_endpos - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
UpdateCSQCProjectile(self);
if (self.owner.deadflag != DEAD_NO || self.cnt < time)
- spiderbot_rocket_explode();
-}
-
-void spiderbot_rocket_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
- self.health -= damage;
- self.velocity += force;
- if(self.health < 1)
- spiderbot_rocket_explode();
+ self.use();
}
void spiderbot_guide_release()
{
entity rkt;
- rkt = findchainentity(owner,self.owner);
+ rkt = findchainentity(realowner, self.owner);
if not (rkt)
return;
crosshair_trace(self.owner);
-
while(rkt)
{
if(rkt.think == spiderbot_rocket_guided)
rkt.pos1 = trace_endpos;
rkt.think = spiderbot_rocket_unguided;
}
-
rkt = rkt.chain;
}
}
void spiderbot_rocket_do()
{
+
+ vector v;
entity rocket;
if (self.owner.BUTTON_ATCK2)
return;
}
-
self.wait = 1;
}
else
if not (self.owner.BUTTON_ATCK2)
return;
- sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
- rocket = spawn ();
- setsize (rocket, '-1 -1 -1', '1 1 1'); // give it some size so it can be shot
- setorigin(rocket,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
- te_explosion (rocket.origin);
-
crosshair_trace(self.owner);
- rocket.classname = "spiderbot_rocket";
- rocket.bot_dodge = TRUE;
- rocket.bot_dodgerating = autocvar_g_vehicle_spiderbot_rocket_damage;
- rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
- rocket.health = autocvar_g_vehicle_spiderbot_rocket_health;
- rocket.takedamage = DAMAGE_AIM;
- rocket.event_damage = spiderbot_rocket_damage;
- rocket.owner = self.owner;
- rocket.nextthink = time;
- rocket.movetype = MOVETYPE_FLYMISSILE;
- rocket.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * autocvar_g_vehicle_spiderbot_rocket_speed;
- rocket.angles = vectoangles(rocket.velocity);
- rocket.think = spiderbot_rocket_guided;
- rocket.touch = spiderbot_rocket_touch;
- rocket.flags = FL_PROJECTILE;
- rocket.solid = SOLID_TRIGGER;
- rocket.pos1 = trace_endpos;
-
- CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+ v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
+ rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
+ v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
+ autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
+ DEATH_SBROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, FALSE, FALSE);
+
+ rocket.cnt = time + 15;
+ rocket.classname = "spiderbot_rocket";
+ rocket.pos1 = trace_endpos;
+ rocket.think = spiderbot_rocket_guided;
+ rocket.nextthink = time;
+ rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
self.tur_head.frame += 1;
if (self.tur_head.frame == 9)
self.gun2.cnt = time + self.attack_finished_single;
}
-/*
-void spiderbot_minigun_fire_Flash_Go() {
- if (self.frame > 10)
- {
- self.alpha = -1;
- setmodel(self,"");
- return;
- }
-
- self.frame = self.frame + 2;
- self.alpha = self.alpha - 0.2;
- self.scale -= 0.01;
- self.nextthink = time + 0.02;
-}
-*/
-
-void spiderbot_minigun_fire(entity gun, float trail)
-{
- vector v;
-
- v = gettaginfo(gun,gettagindex(gun,"barrels"));
- v_forward = normalize(v_forward);
-
- sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
-
- fireBullet (v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
- autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_SBMINIGUN, 0);
-
-
- UziFlash();
- setattachment(self.muzzle_flash, self.tur_head, "tag_fire");
-
- if(trail)
- trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
-}
-
-void spiderbot_miniguns_do()
-{
- float ftmp;
-
- if((self.vehicle_reload1 == 1) || (!self.owner.BUTTON_ATCK))
- {
-
- ftmp = 1 / autocvar_g_vehicle_spiderbot_minigun_cooldown * sys_frametime;
- self.owner.vehicle_reload1 = max(self.owner.vehicle_reload1 - ftmp, 0);
- if(self.owner.vehicle_reload1 <= 0)
- self.vehicle_reload1 = 0;
-
- return ;
- }
-
- if (self.owner.BUTTON_ATCK)
- {
-
- // Animate miniguns
- self.gun1.angles_z += (1440 * sys_frametime);
- self.gun2.angles_z -= (1440 * sys_frametime);
- if(self.gun1.angles_z >= 360)
- {
- self.gun1.angles_z = 0;
- self.gun2.angles_z = 360;
- }
-
- if (self.tur_head.attack_finished_single < time)
- {
- // Fire bullets, alternating trails left<->right
- self = self.owner;
- if(self.misc_bulletcounter == 1)
- {
- spiderbot_minigun_fire(self.vehicle.gun1, 0);
- spiderbot_minigun_fire(self.vehicle.gun2, 1);
- self.misc_bulletcounter = 0;
- }
- else
- {
- spiderbot_minigun_fire(self.vehicle.gun1, 1);
- spiderbot_minigun_fire(self.vehicle.gun2, 0);
- self.misc_bulletcounter += 1;
- }
-
- self = self.vehicle;
-
- ftmp = autocvar_g_vehicle_spiderbot_minigun_refire / autocvar_g_vehicle_spiderbot_minigun_heat;
- self.owner.vehicle_reload1 += ftmp;
-
- if(self.owner.vehicle_reload1 >= 1)
- {
- self.vehicle_reload1 = 1;
- self.owner.vehicle_reload1 = 1;
- self.tur_head.attack_finished_single = autocvar_g_vehicle_spiderbot_minigun_cooldown + time;
- }
- else
- self.tur_head.attack_finished_single = autocvar_g_vehicle_spiderbot_minigun_refire + time;
- }
-
- self = self.owner;
- return;
- }
-}
-
-float spiderbot_pplug()
+float spiderbot_frame()
{
vector ad;
- entity player,spider;
+ entity player, spider;
float ftmp;
- if not (self.owner)
- {
- }
-
+ if(intermission_running)
+ return 1;
+
player = self;
spider = self.vehicle;
+ self = spider;
- player.BUTTON_ZOOM = 0;
- player.BUTTON_CROUCH = 0;
- player.switchweapon = 0;
-
- if(player.BUTTON_USE)
- {
- self = spider;
- spiderbot_exit(0);
- self = player;
- return 0;
- }
+ vehicles_painframe();
+
+ player.BUTTON_ZOOM = 0;
+ player.BUTTON_CROUCH = 0;
+ player.switchweapon = 0;
crosshair_trace(player);
- ad = vectoangles(normalize(trace_endpos - gettaginfo(spider.tur_head,gettagindex(spider.tur_head,"tag_hud")))) - (spider.tur_head.angles + spider.angles);
+ //UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload2) + ('0 1 0' * (1 - player.vehicle_reload2)), 2);
- fixedmakevectors(spider.angles);
- if(ad_x > 180) ad_x -= 360;
+ //player.v_angle_x *= -1;
+ //gettaginfo(spider.tur_head, 0);
+ //ad = player.v_angle - vectoangles2(v_forward, v_up);
+ //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
+ //player.v_angle_x *= -1;
+ ad = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(spider.angles), AnglesTransform_FromVAngles(player.v_angle))) - spider.tur_head.angles;
+
+ if(ad_x > 180) ad_x -= 360;
if(ad_x < -180) ad_x += 360;
- if(ad_y > 180) ad_y -= 360;
+ if(ad_y > 180) ad_y -= 360;
if(ad_y < -180) ad_y += 360;
-
+
// Rotate head
ftmp = autocvar_g_vehicle_spiderbot_head_turnspeed * sys_frametime;
ad_y = bound(-ftmp, ad_y, ftmp);
spider.tur_head.angles_y = bound(autocvar_g_vehicle_spiderbot_head_turnlimit * -1, spider.tur_head.angles_y + ad_y, autocvar_g_vehicle_spiderbot_head_turnlimit);
// Pitch head
+#if 0 // Enable to pich by cross-trace (more precise in chase, but less predictable)
+ ad = vectoangles(normalize(trace_endpos - gettaginfo(spider.tur_head,gettagindex(spider.tur_head,"tag_hud")))) - (spider.tur_head.angles + spider.angles);
+ if(ad_x > 180) ad_x -= 360;
+ if(ad_x < -180) ad_x += 360;
+#endif
ftmp = autocvar_g_vehicle_spiderbot_head_pitchspeed * sys_frametime;
- ad_x = bound(-ftmp, ad_x, ftmp);
+ ad_x = bound(ftmp * -1, ad_x, ftmp);
spider.tur_head.angles_x = bound(autocvar_g_vehicle_spiderbot_head_pitchlimit_down, spider.tur_head.angles_x + ad_x, autocvar_g_vehicle_spiderbot_head_pitchlimit_up);
// Turn Body
ftmp = autocvar_g_vehicle_spiderbot_turnspeed * sys_frametime;
ftmp = bound(-ftmp, spider.tur_head.angles_y, ftmp);
- self = spider;
+ makevectors(spider.angles + '-2 0 0' * spider.angles_x);
+
+/*
+ vector ofs;
+ ofs = self.origin + v_up * 128;
+ te_lightning1(world, ofs, ofs + v_up * 32);
+ te_lightning1(world, ofs, ofs + v_right * 128);
+ te_lightning1(world, ofs, ofs + v_forward * 256);
+*/
+
+ movelib_groundalign4point(autocvar_g_vehicle_spiderbot_springlength, autocvar_g_vehicle_spiderbot_springup, autocvar_g_vehicle_spiderbot_springblend);
+
if(spider.flags & FL_ONGROUND)
{
- if(player.BUTTON_JUMP && self.tur_head.wait < time)
+ if(spider.frame == 4 && self.tur_head.wait != 0)
{
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ spider.frame = 5;
+ }
+
+ if(player.BUTTON_JUMP && self.tur_head.wait < time)
+ {
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n");
+ self.delay = 0;
+
self.tur_head.wait = time + 2;
player.BUTTON_JUMP = 0;
spider.velocity = v_forward * 700 + v_up * 600;
{
if(vlen(player.movement) == 0)
{
+ if(self.sound_nexttime < time || self.delay != 3)
+ {
+ self.delay = 3;
+ self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav");
+ //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ }
movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
spider.frame = 5;
}
}
player.movement_y = 0;
movelib_move_simple(normalize(v_forward * player.movement_x),autocvar_g_vehicle_spiderbot_speed_walk,autocvar_g_vehicle_spiderbot_movement_inertia);
+
+ if(self.sound_nexttime < time || self.delay != 1)
+ {
+ self.delay = 1;
+ self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ //dprint("spiderbot_walk:", ftos(soundlength("vehicles/spiderbot_walk.wav")), "\n");
+ }
}
else if(player.movement_y != 0)
{
spider.frame = 3;
}
movelib_move_simple(normalize(v_right * player.movement_y),autocvar_g_vehicle_spiderbot_speed_strafe,autocvar_g_vehicle_spiderbot_movement_inertia);
+ if(self.sound_nexttime < time || self.delay != 2)
+ {
+ self.delay = 2;
+ self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTN_NORM);
+ //dprint("spiderbot_strafe:", ftos(soundlength("vehicles/spiderbot_strafe.wav")), "\n");
+ }
}
+ }
+ }
+ }
+
+ self.angles_x = bound(-45, self.angles_x, 45);
+ self.angles_z = bound(-45, self.angles_z, 45);
+
+ if(player.BUTTON_ATCK)
+ {
+ spider.cnt = time;
+ if(spider.vehicle_ammo1 >= autocvar_g_vehicle_spiderbot_minigun_ammo_cost && spider.tur_head.attack_finished_single <= time)
+ {
+ entity gun;
+ vector v;
+ spider.misc_bulletcounter += 1;
+
+ self = player;
+
+ mod(spider.misc_bulletcounter, 2) ? gun = spider.gun1 : gun = spider.gun2;
+ v = gettaginfo(gun, gettagindex(gun, "barrels"));
+ v_forward = normalize(v_forward);
+ v += v_forward * 50;
+ fireBullet (v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
+ autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_SBMINIGUN, 0);
+
+ sound (gun, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
+ trailparticles(self, particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
+ pointparticles(particleeffectnum("spiderbot_minigun_muzzleflash"), v, v_forward * 2500, 1);
+
+ self = spider;
+
+ spider.vehicle_ammo1 -= autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
+ spider.tur_head.attack_finished_single = time + autocvar_g_vehicle_spiderbot_minigun_refire;
+ player.vehicle_ammo1 = (spider.vehicle_ammo1 / autocvar_g_vehicle_spiderbot_minigun_ammo_max) * 100;
+ spider.gun1.angles_z += 45;
+ spider.gun2.angles_z -= 45;
+ if(spider.gun1.angles_z >= 360)
+ {
+ spider.gun1.angles_z = 0;
+ spider.gun2.angles_z = 0;
}
}
- movelib_groundalign4point(300,100,0.25);
}
+ else
+ vehicles_regen(cnt, vehicle_ammo1, autocvar_g_vehicle_spiderbot_minigun_ammo_max,
+ autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause,
+ autocvar_g_vehicle_spiderbot_minigun_ammo_regen, frametime);
+
- spiderbot_miniguns_do();
spiderbot_rocket_do();
- vehicle_stdproc_shiledregen(CCVAR("_shield"), frametime);
- vehicle_stdproc_healthregen(CCVAR("_health"), frametime);
+
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_spiderbot_shield, autocvar_g_vehicle_spiderbot_shield_regen_pause, autocvar_g_vehicle_spiderbot_shield_regen, frametime);
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_spiderbot_health, autocvar_g_vehicle_spiderbot_health_regen_pause, autocvar_g_vehicle_spiderbot_health_regen, frametime);
player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
player.vehicle_ammo2 = spider.tur_head.frame;
if(spider.gun2.cnt <= time)
- player.vehicle_reload2 = 1;
+ player.vehicle_reload2 = 100;
else
- player.vehicle_reload2 = 1 - ((spider.gun2.cnt - time) / spider.attack_finished_single);
+ player.vehicle_reload2 = 100 - ((spider.gun2.cnt - time) / spider.attack_finished_single) * 100;
- setorigin(player,spider.origin + '0 0 64');
+ setorigin(player, spider.origin + '0 0 1' * SPIDERBOT_MAX_z);
player.velocity = spider.velocity;
- self = player;
+ VEHICLE_UPDATE_PLAYER(health, spiderbot);
+
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(shield, spiderbot);
+
+#if 1 // 0 to enable per-gun impact aux crosshairs
+ // Avarage gun impact point's -> aux cross
+ vector vf;
+ ad = gettaginfo(spider.gun1, gettagindex(spider.gun1, "barrels"));
+ vf = v_forward;
+ ad += gettaginfo(spider.gun2, gettagindex(spider.gun2, "barrels"));
+ vf += v_forward;
+ ad = ad * 0.5;
+ v_forward = vf * 0.5;
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
+ UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
+
+#else
+ ad = gettaginfo(spider.gun1, gettagindex(spider.gun1, "barrels"));
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
+ UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
+
+ ad = gettaginfo(spider.gun2, gettagindex(spider.gun2, "barrels"));
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
+ UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 1);
+#endif
+ self = player;
return 1;
}
void spiderbot_enter()
{
- // Remove this when bots know how to use the spiderbot
- if (clienttype(other) != CLIENTTYPE_REAL)
- return;
-
- self.colormod = self.tur_head.colormod = '0 0 0';
-
- if(teams_matter)
- if(self.team)
- if(self.team != other.team)
- return;
+ self.movetype = MOVETYPE_WALK;
- self.owner = other;
- self.switchweapon = other.switchweapon;
-
- self.event_damage = vehicle_stdproc_damage ;
- self.colormap = self.owner.colormap;
- self.tur_head.colormap = self.owner.colormap;
- self.vehicle_hudmodel.viewmodelforclient = self.owner;
- self.nextthink = 0;
- self.owner.angles = self.angles;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.solid = SOLID_NOT;
- self.owner.movetype = MOVETYPE_NOCLIP;
- self.owner.alpha = -1;
- self.owner.PlayerPhysplug = spiderbot_pplug;
- self.owner.vehicle = self;
- self.owner.event_damage = SUB_Null;
- self.owner.hud = HUD_SPIDERBOT;
self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_spiderbot_health);
self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_spiderbot_shield);
- self.owner.view_ofs = '0 0 0';
- self.owner.vehicle_ammo1 = self.vehicle_ammo1;
- self.owner.vehicle_ammo2 = self.vehicle_ammo2;
- self.owner.vehicle_reload1 = self.vehicle_reload1;
- self.owner.vehicle_reload2 = self.vehicle_reload2;
-
- //if(other.flags & FL_ONGROUND)
- other.flags &~= FL_ONGROUND;
- //if(self.flags & FL_ONGROUND)
- self.flags &~= FL_ONGROUND;
-
- self.team = self.owner.team;
- self.flags -= FL_NOTARGET;
-
- if(clienttype(other) == CLIENTTYPE_REAL)
+ if(self.owner.flagcarried)
{
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity(MSG_ONE, self.vehicle_viewport);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
- WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
+ setattachment(self.owner.flagcarried, self.tur_head, "");
+ setorigin(self.owner.flagcarried, '-20 0 120');
}
}
void spiderbot_exit(float eject)
{
entity e;
- self.frame = 5;
-
- self.flags |= FL_NOTARGET;
-
+ vector spot;
+
e = findchain(classname,"spiderbot_rocket");
while(e)
{
e = e.chain;
}
- self.owner.switchweapon = self.switchweapon;
-
- self.velocity = '0 0 0';
- if(clienttype(self.owner) == CLIENTTYPE_REAL)
- {
- msg_entity = self.owner;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.owner);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, 0); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
- }
-
- self.think = spiderbot_think;
- self.nextthink = time;
- self.owner.takedamage = DAMAGE_AIM;
- self.owner.solid = SOLID_SLIDEBOX;
- self.owner.movetype = MOVETYPE_WALK;
-
- setsize(self.owner,PL_MIN,PL_MAX);
-
- self.owner.alpha = 1;
- self.owner.PlayerPhysplug = SUB_Null;
- self.owner.vehicle = world;
- self.owner.view_ofs = PL_VIEW_OFS;
- self.owner.hud = HUD_NORMAL;
- self.owner.event_damage = PlayerDamage;
-
- self.colormap = 1024;
- self.tur_head.colormap = 1024;
-
- if not (teams_matter)
- self.team = 0;
- else
- {
- self.team = self.spiderbot_spawnpnt.team ;
- if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
- if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
- self.tur_head.colormod = self.colormod;
- }
-
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.tur_head.nodrawtoclient = self;
-
- setattachment(self.owner,world,"");
+ self.velocity = '0 0 0';
+ self.think = spiderbot_think;
+ self.nextthink = time;
+ self.frame = 5;
+ self.movetype = MOVETYPE_WALK;
+
+ if not (self.owner)
+ return;
makevectors(self.angles);
if(eject)
{
- setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
+ spot = self.origin + v_forward * 100 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
self.owner.velocity = (v_up + v_forward * 0.25) * 750;
}
else
- setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
-
+ {
+ spot = self.origin - v_forward * 200 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
+ }
+
self.owner = world;
}
-float spiderbot_crushable(entity e)
+void spiderbot_spawn()
{
- if(e.classname == "corpse")
- return 1;
-
- if(e.classname == "player")
- return 1;
-
- if(e.classname == "monster_zombie")
- return 1;
-
- return 0;
+ self.frame = 5;
+ self.tur_head.frame = 1;
+ self.think = spiderbot_think;
+ self.nextthink = time;
+ self.vehicle_health = autocvar_g_vehicle_spiderbot_health;
+ self.vehicle_shield = autocvar_g_vehicle_spiderbot_shield;
+ self.movetype = MOVETYPE_WALK;
+ self.solid = SOLID_SLIDEBOX;
+ self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
+ self.tur_head.angles = '0 0 0';
+
+ setorigin(self, self.pos1 + '0 0 128');
+ self.angles = self.pos2;
}
-void spiderbot_touch()
+void spiderbot_headfade()
{
- if(self.owner)
- {
- if(vlen(self.velocity) == 0)
- return;
-
- if not (spiderbot_crushable(other))
- return;
-
- //todo: add check for velocity/angle here (so we dont cush players runing into us from behind)
+ self.think = spiderbot_headfade;
+ self.nextthink = self.fade_time;
+ self.alpha = 1 - (time - self.fade_time) * self.fade_rate;
- Damage(other,self,self.owner,autocvar_g_vehicle_spiderbot_crush_dmg,DEATH_SBCRUSH,'0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicle_spiderbot_crush_force );
- return;
+ if(self.cnt < time || self.alpha < 0.1)
+ {
+ if(self.alpha > 0.1)
+ {
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("explosion_big"), self.origin + '0 0 100', '0 0 0', 1);
+ }
+ remove(self);
}
-
- if(other.classname != "player")
- return;
-
- if(other.deadflag != DEAD_NO)
- return;
-
- if(other.vehicle != world)
- return;
-
- spiderbot_enter();
-}
-
-float spiderbot_customizeentityforclient()
-{
- if(self.deadflag == DEAD_DEAD)
- return FALSE;
-
- return TRUE;
-}
-
-void spiderbot_spawn()
-{
- self.frame = 5;
- self.think = spiderbot_think;
- self.nextthink = time;
-
- setsize(self,spiderbot_MIN,spiderbot_MAX);
-
- self.owner = world;
- self.velocity = '0 0 0';
- self.vehicle_health = CCVAR("_health");
- self.vehicle_shield = CCVAR("_shield");
- self.event_damage = vehicle_stdproc_damage;
- self.iscreature = TRUE;
- self.movetype = MOVETYPE_WALK;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
- self.touch = spiderbot_touch;
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
- self.tur_head.angles = '0 0 0';
- self.colormap = 1024;
- self.tur_head.colormap = 1024;
- self.deadflag = DEAD_NO;
- self.bot_attack = TRUE;
- self.flags |= FL_NOTARGET;
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.tur_head.frame = 1;
-
- setorigin(self,self.spiderbot_spawnpnt.origin + '0 0 1.25' * spiderbot_MAX_z);
- self.angles = self.spiderbot_spawnpnt.angles;
-
- if (self.team == COLOR_TEAM1)
- self.colormod = '1.4 0.8 0.8';
- else if (self.team == COLOR_TEAM2)
- self.colormod = '0.8 0.8 1.4';
- else
- self.colormod = '0 0 0';
-
- self.tur_head.colormod = self.colormod;
-
-
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
}
void spiderbot_blowup()
{
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+ if(self.cnt > time)
+ {
+ if(random() < 0.1)
+ {
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+ }
+ self.nextthink = time + 0.1;
+ return;
+ }
+
+ entity h, g1, g2, b;
+ b = spawn();
+ h = spawn();
+ g1 = spawn();
+ g2 = spawn();
+
+ setmodel(b, "models/vehicles/spiderbot.dpm");
+ setmodel(h, "models/vehicles/spiderbot_top.dpm");
+ setmodel(g1, "models/vehicles/spiderbot_barrels.dpm");
+ setmodel(g2, "models/vehicles/spiderbot_barrels.dpm");
+
+ setorigin(b, self.origin);
+ b.frame = 11;
+ b.angles = self.angles;
+ setsize(b, self.mins, self.maxs);
+
+ setorigin(h, gettaginfo(self, gettagindex(self, "tag_head")));
+ h.movetype = MOVETYPE_BOUNCE;
+ h.solid = SOLID_BBOX;
+ h.velocity = v_up * (500 + random() * 500) + randomvec() * 128;
+ h.modelflags = MF_ROCKET;
+ h.effects = EF_FLAME | EF_LOWPRECISION;
+ h.avelocity = randomvec() * 360;
+
+ h.alpha = 1;
+ h.cnt = time + (3.5 * random());
+ h.fade_rate = 1 / min(autocvar_g_vehicle_spiderbot_respawntime, 10);
+ h.fade_time = time;
+ h.think = spiderbot_headfade;
+ h.nextthink = time;
+
+ setorigin(g1, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint01")));
+ g1.movetype = MOVETYPE_TOSS;
+ g1.solid = SOLID_CORPSE;
+ g1.velocity = v_forward * 700 + (randomvec() * 32);
+ g1.avelocity = randomvec() * 180;
+
+ setorigin(g2, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint02")));
+ g2.movetype = MOVETYPE_TOSS;
+ g2.solid = SOLID_CORPSE;
+ g2.velocity = v_forward * 700 + (randomvec() * 32);
+ g2.avelocity = randomvec() * 180;
+
+ h.colormod = b.colormod = g1.colormod = g2.colormod = '-2 -2 -2';
+
+ SUB_SetFade(b, time + 5, min(autocvar_g_vehicle_spiderbot_respawntime, 1));
+ //SUB_SetFade(h, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
+ SUB_SetFade(g1, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
+ SUB_SetFade(g2, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_SBBLOWUP, world);
self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
- self.nextthink = time + autocvar_g_vehicle_spiderbot_respawntime;
- self.think = spiderbot_spawn;
self.movetype = MOVETYPE_NONE;
-
- setorigin(self, self.tur_aimpos);
+ self.deadflag = DEAD_DEAD;
+ self.solid = SOLID_NOT;
+ self.tur_head.effects &~= EF_FLAME;
+ self.vehicle_hudmodel.viewmodelforclient = self;
}
void spiderbot_die()
{
-
- self.health = 0;
- self.event_damage = SUB_Null;
- self.iscreature = FALSE;
- self.solid = SOLID_NOT;
- self.takedamage = DAMAGE_NO;
- self.touch = SUB_Null;
- self.nextthink = time + random() * 2;
- self.think = spiderbot_blowup;
- self.deadflag = DEAD_DEAD;
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.frame = 0;
- self.tur_head.frame = 1;
-
+ self.health = 0;
+ self.event_damage = SUB_Null;
+ self.takedamage = DAMAGE_NO;
+ self.touch = SUB_Null;
+ self.cnt = 3.4 + time + random() * 2;
+ self.think = spiderbot_blowup;
+ self.nextthink = time;
+ self.deadflag = DEAD_DYING;
+ self.frame = 5;
+ self.tur_head.effects |= EF_FLAME;
+ self.colormod = self.tur_head.colormod = '-1 -1 -1';
+ self.frame = 10;
+ self.movetype = MOVETYPE_TOSS;
}
void vewhicle_spiderbot_dinit()
{
+ if not (vehicle_initialize(
+ "Spiderbot",
+ "models/vehicles/spiderbot.dpm",
+ "models/vehicles/spiderbot_top.dpm",
+ "models/vehicles/spiderbot_cockpit.dpm",
+ "tag_head", "tag_hud", "",
+ HUD_SPIDERBOT,
+ SPIDERBOT_MIN, SPIDERBOT_MAX,
+ FALSE,
+ spiderbot_spawn, autocvar_g_vehicle_spiderbot_respawntime,
+ spiderbot_frame,
+ spiderbot_enter, spiderbot_exit,
+ spiderbot_die, spiderbot_think,
+ FALSE))
+ {
+ remove(self);
+ return;
+ }
- self.spiderbot_spawnpnt = spawn();
- self.spiderbot_spawnpnt.angles = self.angles;
-
- setorigin(self,self.origin);
- tracebox(self.origin + '0 0 100', spiderbot_MIN, spiderbot_MAX, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
- setorigin(self.spiderbot_spawnpnt,trace_endpos);
-
- if(self.team && !teams_matter)
- self.team = 0;
- else
- self.spiderbot_spawnpnt.team = self.team;
-
- addstat(STAT_HUD, AS_INT, hud);
- addstat(STAT_VEHICLESTAT_HEALTH, AS_FLOAT, vehicle_health);
- addstat(STAT_VEHICLESTAT_SHIELD, AS_FLOAT, vehicle_shield);
- addstat(STAT_VEHICLESTAT_ENERGY, AS_FLOAT, vehicle_energy);
- addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
- addstat(STAT_VEHICLESTAT_RELOAD1, AS_FLOAT, vehicle_reload1);
- addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
- addstat(STAT_VEHICLESTAT_RELOAD2, AS_FLOAT, vehicle_reload2);
-
- if (self.netname == "")
- self.netname = "spiderbot";
- self.tur_head = spawn();
self.gun1 = spawn();
self.gun2 = spawn();
- self.vehicle_viewport = spawn();
- self.vehicle_hudmodel = spawn();
- self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN | VHF_DEATHEJECT;
- self.cvar_basename = "g_vehicle_spiderbot";
- self.gravity = 2;
- setmodel(self, "models/vehicles/spiderbot.dpm");
- setmodel(self.tur_head, "models/vehicles/spiderbot_top.dpm");
setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
setmodel(self.gun2, "models/vehicles/spiderbot_barrels.dpm");
- setmodel(self.vehicle_hudmodel, "models/vehicles/spiderbot_cockpit.dpm");
- setmodel(self.vehicle_viewport, "null");
-
- setattachment(self.tur_head, self, "tag_head");
- setattachment(self.vehicle_hudmodel, self.tur_head, "tag_hud");
- setattachment(self.vehicle_viewport, self.vehicle_hudmodel, "");
setattachment(self.gun1, self.tur_head, "tag_hardpoint01");
setattachment(self.gun2, self.tur_head, "tag_hardpoint02");
- self.tur_head.owner = self;
- self.customizeentityforclient = spiderbot_customizeentityforclient;
-
- self.tur_aimpos = self.origin;
-
- spiderbot_spawn();
-
- self.vehicle_die = spiderbot_die;
- self.vehicle_exit = spiderbot_exit;
+ self.gravity = 2;
+ self.mass = 5000;
}
void spawnfunc_vehicle_spiderbot()
{
+ self.vehicle_flags |= VHF_DMGSHAKE;
+ //self.vehicle_flags |= VHF_DMGROLL;
+ //self.vehicle_flags |= VHF_DMGHEADROLL;
+
precache_model ( "models/vhshield.md3");
precache_model ( "models/vehicles/spiderbot.dpm");
precache_model ( "models/vehicles/spiderbot_top.dpm");
precache_model ( "models/vehicles/spiderbot_cockpit.dpm");
precache_model ( "models/uziflash.md3");
- precache_sound ( "weapons/rocket_impact.wav" );
-
- //self.team = -1;
+ precache_sound ( "weapons/uzi_fire.wav" );
+ precache_sound ( "weapons/rocket_impact.wav");
+
+ precache_sound ( "vehicles/spiderbot_die.wav");
+ precache_sound ( "vehicles/spiderbot_idle.wav");
+ precache_sound ( "vehicles/spiderbot_jump.wav");
+ precache_sound ( "vehicles/spiderbot_strafe.wav");
+ precache_sound ( "vehicles/spiderbot_walk.wav");
+ precache_sound ( "vehicles/spiderbot_land.wav");
+
+ vehicles_configcheck("vehicle_spiderbot.cfg", autocvar_g_vehicle_spiderbot_health);
+ if(autocvar_g_vehicle_spiderbot_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_spiderbot_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_spiderbot_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
self.think = vewhicle_spiderbot_dinit;
- self.nextthink = time + 0.5;
+
+ if(g_assault)
+ self.nextthink = time + 0.5;
+ else
+ self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_spiderbot_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
}
+#endif // SVQC
-void vehicle_stdproc_enter()
+float autocvar_g_vehicles_crush_dmg;
+float autocvar_g_vehicles_crush_force;
+float autocvar_g_vehicles_delayspawn;
+float autocvar_g_vehicles_delayspawn_jitter;
+float autocvar_g_vehicles_allow_flagcarry;
+
+void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
+void vehicles_return();
+void vehicles_enter();
+void vehicles_touch();
+void vehicles_reset_colors();
+void vehicles_clearrturn();
+void vehicles_setreturn();
+
+
+/** AuxiliaryXhair*
+ Send additional points of interest to be drawn, to vehicle owner
+**/
+float MAX_AXH = 4;
+.entity AuxiliaryXhair[MAX_AXH];
+
+float SendAuxiliaryXhair(entity to, float sf)
+{
+
+ WriteByte(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
+
+ WriteByte(MSG_ENTITY, self.cnt);
+
+ WriteCoord(MSG_ENTITY, self.origin_x);
+ WriteCoord(MSG_ENTITY, self.origin_y);
+ WriteCoord(MSG_ENTITY, self.origin_z);
+
+ WriteByte(MSG_ENTITY, rint(self.colormod_x * 255));
+ WriteByte(MSG_ENTITY, rint(self.colormod_y * 255));
+ WriteByte(MSG_ENTITY, rint(self.colormod_z * 255));
+
+ return TRUE;
+}
+
+void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
+{
+ entity axh;
+
+ axh_id = bound(0, axh_id, MAX_AXH);
+ axh = own.AuxiliaryXhair[axh_id];
+
+ if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
+ {
+ axh = spawn();
+ axh.cnt = axh_id;
+ axh.drawonlytoclient = own;
+ axh.owner = own;
+ Net_LinkEntity(axh, FALSE, 0, SendAuxiliaryXhair);
+ }
+
+ setorigin(axh, loc);
+ axh.colormod = clr;
+ axh.SendFlags = 0x01;
+ own.AuxiliaryXhair[axh_id] = axh;
+}
+
+/*
+// SVC_TEMPENTITY based, horrible with even 50 ping. hm.
+// WriteByte(MSG_ONE, SVC_TEMPENTITY) uses reliable messagess, never use for thinsg that need continous updates.
+void SendAuxiliaryXhair2(entity own, vector loc, vector clr, float axh_id)
{
+ msg_entity = own;
+
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_AUXILIARYXHAIR);
+
+ WriteByte(MSG_ONE, axh_id);
+
+ WriteCoord(MSG_ONE, loc_x);
+ WriteCoord(MSG_ONE, loc_y);
+ WriteCoord(MSG_ONE, loc_z);
+
+ WriteByte(MSG_ONE, rint(clr_x * 255));
+ WriteByte(MSG_ONE, rint(clr_y * 255));
+ WriteByte(MSG_ONE, rint(clr_z * 255));
+
}
+*/
+// End AuxiliaryXhair
-void vehicle_stdproc_exit(float eject)
+/**
+ Notifies the client that he enterd a vehicle, and sends
+ realavent data.
+
+ only sends vehicle_id atm (wich is a HUD_* constant, ex. HUD_SPIDERBOT)
+**/
+void CSQCVehicleSetup(entity own, float vehicle_id)
{
+ msg_entity = own;
+
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_VEHICLESETUP);
+ WriteByte(MSG_ONE, vehicle_id);
}
-void vehicle_stdproc_shiledregen(float rmax, float dt)
+/** vehicles_locktarget
+
+ Generic target locking.
+
+ Figure out if what target is "locked" (if any), for missile tracking as such.
+
+ after calling, "if(self.lock_target != world && self.lock_strength == 1)" mean
+ you have a locked in target.
+
+ Exspects a crosshair_trace() or equivalent to be
+ dont before calling.
+
+**/
+.entity lock_target;
+.float lock_strength;
+.float lock_time;
+.float lock_soundtime;
+void vehicles_locktarget(float incr, float decr, float _lock_time)
{
- if(self.vehicle_shield < rmax)
- if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)
+ if(self.lock_target && self.lock_target.deadflag != DEAD_NO)
{
- self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") * dt, rmax);
+ self.lock_target = world;
+ self.lock_strength = 0;
+ self.lock_time = 0;
+ }
- if(self.owner)
- self.owner.vehicle_shield = self.vehicle_shield / rmax;
+ if(self.lock_time > time)
+ {
+ if(self.lock_target)
+ if(self.lock_soundtime < time)
+ {
+ self.lock_soundtime = time + 0.5;
+ play2(self.owner, "vehicles/locked.wav");
+ }
+
+ return;
}
+
+ if(trace_ent != world)
+ {
+ if(teamplay && trace_ent.team == self.team)
+ trace_ent = world;
+
+ if(trace_ent.deadflag != DEAD_NO)
+ trace_ent = world;
+
+ if not (trace_ent.vehicle_flags & VHF_ISVEHICLE || trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
+ trace_ent = world;
+ }
+
+ if(self.lock_target == world && trace_ent != world)
+ self.lock_target = trace_ent;
+
+ if(self.lock_target && trace_ent == self.lock_target)
+ {
+ if(self.lock_strength != 1 && self.lock_strength + incr >= 1)
+ {
+ play2(self.owner, "vehicles/lock.wav");
+ self.lock_soundtime = time + 0.8;
+ }
+ else if (self.lock_strength != 1 && self.lock_soundtime < time)
+ {
+ play2(self.owner, "vehicles/locking.wav");
+ self.lock_soundtime = time + 0.3;
+ }
+
+ }
+
+ // Have a locking target
+ // Trace hit current target
+ if(trace_ent == self.lock_target && trace_ent != world)
+ {
+ self.lock_strength = min(self.lock_strength + incr, 1);
+ if(self.lock_strength == 1)
+ self.lock_time = time + _lock_time;
+ }
+ else
+ {
+ if(trace_ent)
+ self.lock_strength = max(self.lock_strength - decr * 2, 0);
+ else
+ self.lock_strength = max(self.lock_strength - decr, 0);
+
+ if(self.lock_strength == 0)
+ self.lock_target = world;
+ }
+}
+
+#define VEHICLE_UPDATE_PLAYER(fld,vhname) \
+self.owner.vehicle_##fld = (self.vehicle_##fld / autocvar_g_vehicle_##vhname##_##fld) * 100
+
+#define vehicles_sweap_collision(orig,vel,dt,acm,mult) \
+traceline(orig, orig + vel * dt, MOVE_NORMAL, self); \
+if(trace_fraction != 1) \
+ acm += normalize(self.origin - trace_endpos) * (vlen(vel) * mult)
+
+// Hover movement support
+float force_fromtag_power;
+float force_fromtag_normpower;
+vector force_fromtag_origin;
+vector vehicles_force_fromtag_hover(string tag_name, float spring_length, float max_power)
+{
+ force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
+ v_forward = normalize(v_forward) * -1;
+ traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, self);
+
+ force_fromtag_power = (1 - trace_fraction) * max_power;
+ force_fromtag_normpower = force_fromtag_power / max_power;
+
+ return v_forward * force_fromtag_power;
}
-void vehicle_stdproc_healthregen(float rmax, float dt)
+// Experimental hovermode wich uses attraction/repulstion from surface insted of gravity/repulsion
+// Can possibly be use to move abt any surface (inclusing walls/celings)
+vector vehicles_force_fromtag_maglev(string tag_name, float spring_length, float max_power)
{
- if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)
- if(self.vehicle_health < rmax)
+ force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
+ v_forward = normalize(v_forward) * -1;
+ traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, self);
+
+ // TODO - this may NOT be compatible with wall/celing movement, unhardcode 0.25 (engine count multiplier)
+ if(trace_fraction == 1.0)
{
- self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") * dt, rmax);
+ force_fromtag_normpower = -0.25;
+ return '0 0 -200';
+ }
- if(self.owner)
- self.owner.vehicle_health = self.vehicle_health / rmax;
+ force_fromtag_power = ((1 - trace_fraction) - trace_fraction) * max_power;
+ force_fromtag_normpower = force_fromtag_power / max_power;
+
+ return v_forward * force_fromtag_power;
+}
+
+// Generic vehile projectile system
+void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+ // Ignore damage from oterh projectiles from my owner (dont mess up volly's)
+ if(inflictor.owner == self.owner)
+ return;
+
+ self.health -= damage;
+ self.velocity += force;
+ if(self.health < 1)
+ {
+ self.takedamage = DAMAGE_NO;
+ self.event_damage = SUB_Null;
+ self.think = self.use;
+ self.nextthink = time;
}
+
+}
+
+void vehicles_projectile_explode()
+{
+ if(self.owner && other != world)
+ {
+ if(other == self.owner.vehicle)
+ return;
+
+ if(other == self.owner.vehicle.tur_head)
+ return;
+ }
+
+ PROJECTILE_TOUCH;
+
+ self.event_damage = SUB_Null;
+ RadiusDamage (self, self.realowner, self.shot_dmg, 0, self.shot_radius, self, self.shot_force, self.totalfrags, other);
+
+ remove (self);
+}
+
+entity vehicles_projectile(string _mzlfx, string _mzlsound,
+ vector _org, vector _vel,
+ float _dmg, float _radi, float _force, float _size,
+ float _deahtype, float _projtype, float _health,
+ float _cull, float _clianim)
+{
+ entity proj;
+
+ proj = spawn();
+
+ PROJECTILE_MAKETRIGGER(proj);
+ setorigin(proj, _org);
+
+ proj.shot_dmg = _dmg;
+ proj.shot_radius = _radi;
+ proj.shot_force = _force;
+ proj.totalfrags = _deahtype;
+ proj.solid = SOLID_BBOX;
+ proj.movetype = MOVETYPE_FLYMISSILE;
+ proj.flags = FL_PROJECTILE;
+ proj.bot_dodge = TRUE;
+ proj.bot_dodgerating = _dmg;
+ proj.velocity = _vel;
+ proj.touch = vehicles_projectile_explode;
+ proj.use = vehicles_projectile_explode;
+ proj.owner = self;
+ proj.realowner = self.owner;
+ proj.think = SUB_Remove;
+ proj.nextthink = time + 30;
+
+ if(_health)
+ {
+ proj.takedamage = DAMAGE_AIM;
+ proj.event_damage = vehicles_projectile_damage;
+ proj.health = _health;
+ }
+ else
+ proj.flags = FL_PROJECTILE | FL_NOTARGET;
+
+ if(_mzlsound)
+ sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTN_NORM);
+
+ if(_mzlfx)
+ pointparticles(particleeffectnum(_mzlfx), proj.origin, proj.velocity, 1);
+
+
+ setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
+
+ CSQCProjectile(proj, _clianim, _projtype, _cull);
+
+ return proj;
+}
+// End generic vehile projectile system
+
+/** vehicles_spawn
+ Exetuted for all vehicles on (re)spawn.
+ Sets defaults for newly spawned units.
+**/
+void vehicles_spawn()
+{
+ dprint("Spawning vehicle: ", self.netname, "\n");
+
+ // De-own & reset
+ self.vehicle_hudmodel.viewmodelforclient = self;
+
+ self.owner = world;
+ self.touch = vehicles_touch;
+ self.event_damage = vehicles_damage;
+ self.iscreature = TRUE;
+ self.movetype = MOVETYPE_WALK;
+ self.solid = SOLID_SLIDEBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.deadflag = DEAD_NO;
+ self.bot_attack = TRUE;
+ self.flags = FL_NOTARGET;
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+
+ // Reset locking
+ self.lock_strength = 0;
+ self.lock_target = world;
+ self.misc_bulletcounter = 0;
+
+ // Return to spawn
+ self.angles = self.pos2;
+ setorigin(self, self.pos1 + '0 0 128');
+ // Show it
+ pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+
+ vehicles_reset_colors();
+ self.vehicle_spawn();
}
-void vehicle_stdproc_energyregen(float rmax, float dt)
+// Better way of determening whats crushable needed! (fl_crushable?)
+float vehicles_crushable(entity e)
{
- if(self.vehicle_energy < rmax)
+ if(e.classname == "player")
+ return TRUE;
+
+ if(e.classname == "monster_zombie")
+ return TRUE;
+
+ return FALSE;
+}
+
+void vehicles_touch()
+{
+ // Vehicle currently in use
+ if(self.owner)
{
- self.vehicle_energy = min(self.vehicle_energy + CCVAR("_energy_regen") * dt, rmax);
+ // Colided with world?
+ if(other == world)
+ {
+ }
+ else
+ {
+ if(other.vehicle_flags & VHF_ISVEHICLE)
+ {
+ //other.velocity += self.velocity * (self.mass / other.mass);
+ }
+ else if(vehicles_crushable(other))
+ {
+ if(vlen(self.velocity) != 0)
+ Damage(other, self, self.owner, autocvar_g_vehicles_crush_dmg, DEATH_VHCRUSH, '0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicles_crush_force);
+ }
+ }
+ return;
+ }
+
+ if(other.classname != "player")
+ return;
+
+ if(other.deadflag != DEAD_NO)
+ return;
+
+ if(other.vehicle != world)
+ return;
+
+ // Remove this when bots know how to use vehicles.
+ if (clienttype(other) != CLIENTTYPE_REAL)
+ return;
+
+ vehicles_enter();
+}
+
+void vehicles_enter()
+{
+ // Remove this when bots know how to use vehicles
+ if (clienttype(other) != CLIENTTYPE_REAL)
+ return;
+
+ if(self.phase > time)
+ return;
+
+ if(teamplay)
+ if(self.team)
+ if(self.team != other.team)
+ return;
+
+ self.vehicle_ammo1 = 0;
+ self.vehicle_ammo2 = 0;
+ self.vehicle_reload1 = 0;
+ self.vehicle_reload2 = 0;
+ self.vehicle_energy = 0;
+
+ self.owner = other;
+ self.switchweapon = other.switchweapon;
+
+ // .viewmodelforclient works better.
+ //self.vehicle_hudmodel.drawonlytoclient = self.owner;
+
+ self.vehicle_hudmodel.viewmodelforclient = self.owner;
+
+ self.event_damage = vehicles_damage;
+ self.nextthink = 0;
+ self.owner.angles = self.angles;
+ self.owner.takedamage = DAMAGE_NO;
+ self.owner.solid = SOLID_NOT;
+ self.owner.movetype = MOVETYPE_NOCLIP;
+ self.owner.alpha = -1;
+ self.owner.vehicle = self;
+ self.owner.event_damage = SUB_Null;
+ self.owner.view_ofs = '0 0 0';
+ self.colormap = self.owner.colormap;
+ if(self.tur_head)
+ self.tur_head.colormap = self.owner.colormap;
+
+ self.owner.hud = self.hud;
+ self.owner.PlayerPhysplug = self.PlayerPhysplug;
+
+ self.owner.vehicle_ammo1 = self.vehicle_ammo1;
+ self.owner.vehicle_ammo2 = self.vehicle_ammo2;
+ self.owner.vehicle_reload1 = self.vehicle_reload1;
+ self.owner.vehicle_reload2 = self.vehicle_reload2;
+
+ // Cant do this, hides attached objects too.
+ //self.exteriormodeltoclient = self.owner;
+ //self.tur_head.exteriormodeltoclient = self.owner;
+
+ other.flags &~= FL_ONGROUND;
+ self.flags &~= FL_ONGROUND;
+
+ self.team = self.owner.team;
+ self.flags -= FL_NOTARGET;
+
+ msg_entity = other;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, self.vehicle_viewport);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+ if(self.tur_head)
+ {
+ WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
+ WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ }
+ else
+ {
+ WriteAngle(MSG_ONE, self.angles_x * -1); // tilt
+ WriteAngle(MSG_ONE, self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ }
+
+ vehicles_clearrturn();
+
+ CSQCVehicleSetup(self.owner, self.hud);
+
+ if(other.flagcarried)
+ {
+ if(!autocvar_g_vehicles_allow_flagcarry)
+ DropFlag(other.flagcarried, world, world);
+ else
+ {
+ other.flagcarried.scale = 1;
+ setattachment(other.flagcarried, self, "");
+ setorigin(other, '0 0 96');
+ }
+ }
+
+ self.vehicle_enter();
+}
+
+/** vehicles_findgoodexit
+ Locates a valid location for the player to exit the vehicle.
+ Will first try prefer_spot, then up 100 random spots arround the vehicle
+ wich are in direct line of sight and empty enougth to hold a players bbox
+**/
+vector vehicles_findgoodexit(vector prefer_spot)
+{
+ //vector exitspot;
+ float mysize;
+
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, prefer_spot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return prefer_spot;
+
+ mysize = vlen(self.maxs - self.mins);
+ float i;
+ vector v, v2;
+ v2 = 0.5 * (self.absmin + self.absmax);
+ for(i = 0; i < 100; ++i)
+ {
+ v = randomvec();
+ v_z = 0;
+ v = v2 + normalize(v) * mysize;
+ tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return v;
+ }
+
+ /*
+ exitspot = (self.origin + '0 0 48') + v_forward * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+
+ exitspot = (self.origin + '0 0 48') - v_forward * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+
+ exitspot = (self.origin + '0 0 48') + v_right * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+
+ exitspot = (self.origin + '0 0 48') - v_right * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+ */
+
+ return self.origin;
+}
+
+/** vehicles_exit
+ Standarrd vehicle release fucntion.
+ custom code goes in self.vehicle_exit
+**/
+void vehicles_exit(float eject)
+{
+ entity oldself;
+ if(self.flags & FL_CLIENT)
+ {
+ oldself = self;
+ self = self.vehicle;
+ }
+
+ self.flags |= FL_NOTARGET;
+
+ if (self.owner)
+ {
+ msg_entity = self.owner;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.owner);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+ WriteAngle(MSG_ONE, 0); // pich
+ WriteAngle(MSG_ONE, self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+
+ setsize(self.owner, PL_MIN,PL_MAX);
+
+ self.owner.takedamage = DAMAGE_AIM;
+ self.owner.solid = SOLID_SLIDEBOX;
+ self.owner.movetype = MOVETYPE_WALK;
+ self.owner.effects &~= EF_NODRAW;
+ self.owner.alpha = 1;
+ self.owner.PlayerPhysplug = SUB_Null;
+ self.owner.vehicle = world;
+ self.owner.view_ofs = PL_VIEW_OFS;
+ self.owner.event_damage = PlayerDamage;
+ self.owner.hud = HUD_NORMAL;
+ self.owner.switchweapon = self.switchweapon;
+ //self.owner.BUTTON_USE = 0;
+ }
+
+ if(self.deadflag == DEAD_NO)
+ self.avelocity = '0 0 0';
+
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ self.tur_head.nodrawtoclient = world;
+ vehicles_setreturn();
+
+ self.phase = time + 1;
+
+ if(!teamplay)
+ self.team = 0;
+ else
+ self.team = self.tur_head.team;
+
+ if(self.owner.flagcarried)
+ {
+ self.owner.flagcarried.scale = 0.6;
+ setattachment(self.owner.flagcarried, self.owner, "");
+ setorigin(self.owner.flagcarried, FLAG_CARRY_POS);
+ }
+
+ sound (self, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTN_NORM);
+ self.vehicle_exit(eject);
+ self.owner = world;
+ vehicles_reset_colors();
+
+ if(oldself)
+ self = oldself;
+}
+
+
+void vehicles_regen(.float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time)
+{
+ if(self.regen_field < field_max)
+ if(self.timer + rpause < time)
+ {
+ self.regen_field = min(self.regen_field + regen * delta_time, field_max);
if(self.owner)
- self.owner.vehicle_energy = self.vehicle_energy / rmax;
+ self.owner.regen_field = (self.regen_field / field_max) * 100;
}
}
void shieldhit_think()
{
- self.alpha = self.alpha - 0.2;
+ self.alpha -= 0.1;
if (self.alpha <= 0)
{
- setmodel(self,"");
+ //setmodel(self, "");
self.alpha = -1;
}
else
}
}
-void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void vehicles_painframe()
{
+//.float pain_finished; //Added by Supajoe
+
+ if(self.owner.vehicle_health <= 50)
+ if(self.pain_frame < time)
+ {
+ float _ftmp;
+ _ftmp = self.owner.vehicle_health / 50;
+ self.pain_frame = time + 0.1 + (random() * 0.5 * _ftmp);
+ pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+ if(self.vehicle_flags & VHF_DMGSHAKE)
+ self.velocity += randomvec() * 30;
+
+ if(self.vehicle_flags & VHF_DMGROLL)
+ if(self.vehicle_flags & VHF_DMGHEADROLL)
+ self.tur_head.angles += randomvec();
+ else
+ self.angles += randomvec();
+
+ }
+}
- float ddmg_take;
-
+void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
self.dmg_time = time;
if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
{
-
-
- if (wasfreed(self.tur_head.enemy) || self.tur_head.enemy == world)
+ if (wasfreed(self.vehicle_shieldent) || self.vehicle_shieldent == world)
{
- self.tur_head.enemy = spawn();
- self.tur_head.enemy.effects = EF_LOWPRECISION;
- }
+ self.vehicle_shieldent = spawn();
+ self.vehicle_shieldent.effects = EF_LOWPRECISION;
- setmodel(self.tur_head.enemy, "models/vhshield.md3");
- setattachment(self.tur_head.enemy, self, "");
+ setmodel(self.vehicle_shieldent, "models/vhshield.md3");
+ setattachment(self.vehicle_shieldent, self, "");
+ setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
+ self.vehicle_shieldent.scale = 256 / vlen(self.maxs - self.mins);
+ self.vehicle_shieldent.think = shieldhit_think;
+ }
- self.tur_head.enemy.colormod = '1 1 1';
- self.tur_head.enemy.alpha = 0.45;
- self.tur_head.enemy.scale = (256 / vlen(self.maxs - self.mins));
- self.tur_head.enemy.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;
- self.tur_head.enemy.think = shieldhit_think;
- self.tur_head.enemy.nextthink = time;
+ self.vehicle_shieldent.colormod = '1 1 1';
+ self.vehicle_shieldent.alpha = 0.45;
+ self.vehicle_shieldent.angles = vectoangles(normalize(hitloc - (self.origin + self.vehicle_shieldent.origin))) - self.angles;
+ self.vehicle_shieldent.nextthink = time;
self.vehicle_shield -= damage;
+
if(self.vehicle_shield < 0)
{
- self.tur_head.enemy.colormod = '10 0 -1';
- ddmg_take = fabs(self.vehicle_shield);
- self.vehicle_shield = 0;
- self.tur_head.enemy.alpha = 0.75;
- self.vehicle_health -= ddmg_take;
+ self.vehicle_health -= fabs(self.vehicle_shield);
+ self.vehicle_shieldent.colormod = '2 0 0';
+ self.vehicle_shield = 0;
+ self.vehicle_shieldent.alpha = 0.75;
+
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); // FIXME: PLACEHOLDER
}
+ else
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM); // FIXME: PLACEHOLDER
+
}
else
- self.vehicle_health -= damage;
-
- if(self.owner)
{
- self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
-
- if(self.vehicle_flags & VHF_HASSHIELD)
- self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
+ self.vehicle_health -= damage;
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); // FIXME: PLACEHOLDER
}
+ self.velocity += force; // * (vlen(force) / self.mass);
+
if(self.vehicle_health <= 0)
{
if(self.owner)
if(self.vehicle_flags & VHF_DEATHEJECT)
- self.vehicle_exit(VHEF_EJECT);
+ vehicles_exit(VHEF_EJECT);
+ else
+ vehicles_exit(VHEF_RELESE);
self.vehicle_die();
+ vehicles_setreturn();
+ }
+}
+
+void vehicles_clearrturn()
+{
+ entity ret;
+ // Remove "return helper", if any.
+ ret = findchain(classname, "vehicle_return");
+ while(ret)
+ {
+ if(ret.enemy == self)
+ {
+ ret.classname = "";
+ ret.think = SUB_Remove;
+ ret.nextthink = time + 0.1;
+
+ if(ret.waypointsprite_attached)
+ WaypointSprite_Kill(ret.waypointsprite_attached);
+
+ return;
+ }
+ ret = ret.chain;
+ }
+}
+
+void vehicles_return()
+{
+ pointparticles(particleeffectnum("teleport"), self.enemy.origin + '0 0 64', '0 0 0', 1);
+
+ self.enemy.think = vehicles_spawn;
+ self.enemy.nextthink = time;
+
+ if(self.waypointsprite_attached)
+ WaypointSprite_Kill(self.waypointsprite_attached);
+
+ remove(self);
+}
+
+void vehicles_showwp_goaway()
+{
+ if(self.waypointsprite_attached)
+ WaypointSprite_Kill(self.waypointsprite_attached);
+
+ remove(self);
+
+}
+
+void vehicles_showwp()
+{
+ entity oldself;
+ vector rgb;
+
+ if(self.cnt)
+ {
+ self.think = vehicles_return;
+ self.nextthink = self.cnt;
+ }
+ else
+ {
+ self.think = vehicles_return;
+ self.nextthink = time +1;
+
+ oldself = self;
+ self = spawn();
+ setmodel(self, "null");
+ self.team = oldself.enemy.team;
+ self.enemy = oldself.enemy;
+ setorigin(self, oldself.enemy.pos1);
+
+ self.nextthink = time + 5;
+ self.think = vehicles_showwp_goaway;
+ }
+
+ if(teamplay && self.team)
+ rgb = TeamColor(self.team);
+ else
+ rgb = '1 1 1';
+ WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE, RADARICON_POWERUP, rgb);
+ if(self.waypointsprite_attached)
+ {
+ WaypointSprite_UpdateRule(self.waypointsprite_attached, self.enemy.team, SPRITERULE_DEFAULT);
+ if(oldself == world)
+ WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, self.nextthink);
+ WaypointSprite_Ping(self.waypointsprite_attached);
+ }
+
+ if(oldself != world)
+ self = oldself;
+}
+
+void vehicles_setreturn()
+{
+ entity ret;
+
+ vehicles_clearrturn();
+
+ ret = spawn();
+ ret.classname = "vehicle_return";
+ ret.enemy = self;
+ ret.team = self.team;
+ ret.think = vehicles_showwp;
+
+ if(self.deadflag != DEAD_NO)
+ {
+ ret.cnt = time + self.vehicle_respawntime;
+ ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 5);
+ }
+ else
+ {
+ ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1);
+ }
+
+ setmodel(ret, "null");
+ setorigin(ret, self.pos1 + '0 0 96');
+
+}
+
+void vehicles_configcheck(string configname, float check_cvar)
+{
+ if(check_cvar == 0)
+ localcmd(strcat("exec ", configname, "\n"));
+}
+
+void vehicles_reset_colors()
+{
+ entity e;
+ float _effects, _colormap;
+ vector _glowmod, _colormod;
+
+ if(autocvar_g_nodepthtestplayers)
+ _effects = EF_NODEPTHTEST;
+
+ if(autocvar_g_fullbrightplayers)
+ _effects |= EF_FULLBRIGHT;
+
+ if(self.team)
+ _colormap = 1024 + (self.team - 1) * 17;
+ else
+ _colormap = 1024;
+
+ _glowmod = '0 0 0';
+ _colormod = '0 0 0';
+
+ // Find all ents attacked to main model and setup effects, colormod etc.
+ e = findchainentity(tag_entity, self);
+ while(e)
+ {
+ if(e != self.vehicle_shieldent)
+ {
+ e.effects = _effects; // | EF_LOWPRECISION;
+ e.colormod = _colormod;
+ e.colormap = _colormap;
+ e.alpha = 1;
+ }
+ e = e.chain;
}
+ self.vehicle_hudmodel.effects = self.effects = _effects; // | EF_LOWPRECISION;
+ self.vehicle_hudmodel.colormod = self.colormod = _colormod;
+ self.vehicle_hudmodel.colormap = self.colormap = _colormap;
+ self.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
+
+ self.alpha = 1;
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+ self.effects = _effects;
+}
+
+float vehicle_initialize(string net_name,
+ string bodymodel,
+ string topmodel,
+ string hudmodel,
+ string toptag,
+ string hudtag,
+ string viewtag,
+ float vhud,
+ vector min_s,
+ vector max_s,
+ float nodrop,
+ void() spawnproc,
+ float _respawntime,
+ float() physproc,
+ void() enterproc,
+ void(float extflag) exitfunc,
+ void() dieproc,
+ void() thinkproc,
+ float use_csqc)
+{
+ addstat(STAT_HUD, AS_INT, hud);
+ addstat(STAT_VEHICLESTAT_HEALTH, AS_INT, vehicle_health);
+ addstat(STAT_VEHICLESTAT_SHIELD, AS_INT, vehicle_shield);
+ addstat(STAT_VEHICLESTAT_ENERGY, AS_INT, vehicle_energy);
+
+ addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
+ addstat(STAT_VEHICLESTAT_RELOAD1, AS_INT, vehicle_reload1);
+
+ addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
+ addstat(STAT_VEHICLESTAT_RELOAD2, AS_INT, vehicle_reload2);
+
+ if(bodymodel == "")
+ error("vehicles: missing bodymodel!");
+
+ if(hudmodel == "")
+ error("vehicles: missing hudmodel!");
+
+ if(net_name == "")
+ self.netname = self.classname;
+ else
+ self.netname = net_name;
+
+ if(self.team && !teamplay)
+ self.team = 0;
+
+ self.vehicle_flags |= VHF_ISVEHICLE;
+
+ setmodel(self, bodymodel);
+
+ self.vehicle_viewport = spawn();
+ self.vehicle_hudmodel = spawn();
+ self.tur_head = spawn();
+ self.tur_head.owner = self;
+ self.takedamage = DAMAGE_AIM;
+ self.bot_attack = TRUE;
+ self.iscreature = TRUE;
+ self.hud = vhud;
+
+ self.vehicle_die = dieproc;
+ self.vehicle_exit = exitfunc;
+ self.vehicle_enter = enterproc;
+ self.PlayerPhysplug = physproc;
+ self.event_damage = vehicles_damage;
+ self.touch = vehicles_touch;
+ self.think = vehicles_spawn;
+ self.nextthink = time;
+ self.vehicle_respawntime = _respawntime;
+ self.vehicle_spawn = spawnproc;
+
+ if(autocvar_g_nodepthtestplayers)
+ self.effects = self.effects | EF_NODEPTHTEST;
+
+ if(autocvar_g_fullbrightplayers)
+ self.effects = self.effects | EF_FULLBRIGHT;
+
+ setmodel(self.vehicle_hudmodel, hudmodel);
+ setmodel(self.vehicle_viewport, "null");
+
+
+ if(topmodel != "")
+ {
+ setmodel(self.tur_head, topmodel);
+ setattachment(self.tur_head, self, toptag);
+ setattachment(self.vehicle_hudmodel, self.tur_head, hudtag);
+ setattachment(self.vehicle_viewport, self.vehicle_hudmodel, viewtag);
+ }
+ else
+ {
+ setattachment(self.tur_head, self, "");
+ setattachment(self.vehicle_hudmodel, self, hudtag);
+ setattachment(self.vehicle_viewport, self.vehicle_hudmodel, viewtag);
+ }
+
+ setsize(self, min_s, max_s);
+ if not (nodrop)
+ {
+ setorigin(self, self.origin);
+ tracebox(self.origin + '0 0 100', min_s, max_s, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
+ setorigin(self, trace_endpos);
+ }
+ self.pos1 = self.origin;
+ self.pos2 = self.angles;
+ self.tur_head.team = self.team;
+
+ return TRUE;
}
void bugmenot()
self.vehicle_enter = self.vehicle_exit;
self.vehicle_die = self.vehicle_exit;
self.vehicle_spawn = self.vehicle_exit;
- //self.vehicle_message = self.vehicle_exit;
+ self.AuxiliaryXhair = self.AuxiliaryXhair;
}
-//#define VEHICLES_ENABLED
#ifdef VEHICLES_ENABLED
-
-#message "with tZork vehicles (experimental)"
-
-float SVC_SETVIEWPORT = 5; // Net.Protocol 0x05
-float SVC_SETVIEWANGLES = 10; // Net.Protocol 0x0A
-float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80
-
-#define CCVAR(part) cvar(strcat(self.cvar_basename,part))
-//.string cvar_basename;
-
-.float vehicle_flags;
-#define VHF_HASSHIELD 2
-#define VHF_SHIELDREGEN 4
-#define VHF_HEALTHREGEN 8
-#define VHF_DEATHEJECT 16
-#define VHF_ENERGYREGEN 32
-
-.float hud;
-
-.entity gun1;
-.entity gun2;
-
-.entity shield;
-
-.float vehicle_health;
-.float vehicle_shield;
-.float vehicle_energy;
-
-.float vehicle_ammo1;
-.float vehicle_reload1;
-
-.float vehicle_ammo2;
-.float vehicle_reload2;
-
-.entity vehicle;
-.entity vehicle_viewport;
-.entity vehicle_hudmodel;
-
-//.float anim_start;
-//.float anim_end;
-
-.float dmg_time;
-
-#define VHEF_NORMAL 0
-#define VHEF_EJECT 1
-
-var .void(float exit_flags) vehicle_exit;
-var .void() vehicle_enter;
-var .void() vehicle_die;
-var .void() vehicle_spawn;
-//var .float(float message) vehicle_message;
-
#include "vehicles.qc"
-#include "spiderbot.qc"
#include "racer.qc"
+#include "spiderbot.qc"
#include "raptor.qc"
-
+//#include "bumblebee.qc"
#endif
--- /dev/null
+// #define VEHICLES_USE_ODE
+#define VEHICLES_ENABLED
+#ifdef VEHICLES_ENABLED
+
+//#message "with tZork vehicles (experimental)"
+
+.float vehicle_flags;
+float VHF_ISVEHICLE = 2; /// Indicates vehicle
+float VHF_HASSHIELD = 4; /// Vehicle has shileding
+float VHF_SHIELDREGEN = 8; /// Vehicles shield regenerates
+float VHF_HEALTHREGEN = 16; /// Vehicles health regenerates
+float VHF_ENERGYREGEN = 32; /// Vehicles energy regenerates
+float VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage
+float VHF_MOVE_GROUND = 128; /// Vehicle moves on gound
+float VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound
+float VHF_MOVE_FLY = 512; /// Vehicle is airborn
+float VHF_DMGSHAKE = 1024;
+float VHF_DMGROLL = 2048;
+float VHF_DMGHEADROLL = 4096;
+
+.entity gun1;
+.entity gun2;
+
+.float vehicle_health; /// If self is player this is 0..100 indicating precentage of health left on vehicle. If self is vehile, this is the real health value.
+.float vehicle_energy; /// If self is player this is 0..100 indicating precentage of energy left on vehicle. If self is vehile, this is the real energy value.
+.float vehicle_shield; /// If self is player this is 0..100 indicating precentage of shield left on vehicle. If self is vehile, this is the real shield value.
+.entity vehicle_shieldent; /// Entity to disply the shild effect on damage
+
+.float vehicle_ammo1; /// If self is player this field's use depends on the individual vehile. If self is vehile, this is the real ammo1 value.
+.float vehicle_reload1; /// If self is player this field's use depends on the individual vehile. If self is vehile, this is the real reload1 value.
+.float vehicle_ammo2; /// If self is player this field's use depends on the individual vehile. If self is vehile, this is the real ammo2 value.
+.float vehicle_reload2; /// If self is player this field's use depends on the individual vehile. If self is vehile, this is the real reload2 value.
+
+.entity vehicle;
+.entity vehicle_viewport;
+.entity vehicle_hudmodel;
+
+.float sound_nexttime;
+#define VOL_VEHICLEENGINE 1
+
+.float hud;
+.float dmg_time;
+.float vehicle_respawntime;
+.void() vehicle_spawn;
+
+void vehicles_exit(float eject);
+var .void(float exit_flags) vehicle_exit;
+float VHEF_NORMAL = 0; /// User pressed exit key
+float VHEF_EJECT = 1; /// User pressed exit key 3 times fast (not implemented) or vehile is dying
+float VHEF_RELESE = 2; /// Release ownership, client possibly allready dissconnected / went spec / changed team / used "kill" (not implemented)
+
+float SVC_SETVIEWPORT = 5; // Net.Protocol 0x05
+float SVC_SETVIEWANGLES = 10; // Net.Protocol 0x0A
+float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80
+
+var .void() vehicle_enter; /// Vehicles custom funciton to be executed when owner exit it
+var .void() vehicle_die; /// Vehicles custom function to be executed when vehile die
+var .void() vehicle_spawn; /// Vehicles custom fucntion to be efecuted when vehicle (re)spawns
+
+#ifdef VEHICLES_USE_ODE
+void(entity e, float physics_enabled) physics_enable = #540; // enable or disable physics on object
+void(entity e, vector force, vector force_pos) physics_addforce = #541; // apply a force from certain origin, length of force vector is power of force
+void(entity e, vector torque) physics_addtorque = #542; // add relative torque
+#endif // VEHICLES_USE_ODE
+#endif // VEHICLES_ENABLED
return TRUE;
}
-void VoteDialog_UpdateHighlight(float selected) {
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_VOTE);
- WriteByte(MSG_ONE, 1);
- WriteByte(MSG_ONE, selected);
-}
-
-void VoteDialog_Reset() {
- WriteByte(MSG_ALL, SVC_TEMPENTITY);
- WriteByte(MSG_ALL, TE_CSQC_VOTERESET);
-}
-
float GameCommand_Vote(string s, entity e) {
local float playercount;
float argc;
bprint("\{1}^2* ^3", VoteNetname(votecaller), "^2 calls a vote for ", votecalledvote_display, "\n");
if(autocvar_sv_eventlog)
GameLogEcho(strcat(":vote:vcall:", ftos(votecaller.playerid), ":", votecalledvote_display));
- VoteCount(); // needed if you are the only one
Nagger_VoteChanged();
+ VoteCount(); // needed if you are the only one
msg_entity = e;
- VoteDialog_UpdateHighlight(1);
local entity player;
FOR_EACH_REALCLIENT(player)
if(!votecalled) {
print_to(e, "^1No vote called.");
} else if(e == votecaller) { // the votecaller can stop a vote
- VoteDialog_Reset();
VoteStop(e);
} else if(!e) { // server admin / console can too
- VoteDialog_Reset();
VoteStop(e);
} else if(e.vote_master) { // masters can too
- VoteDialog_Reset();
VoteStop(e);
} else {
print_to(e, "^1You are not allowed to stop that Vote.");
bprint("\{1}^2* ^3", VoteNetname(votecaller), "^2 calls a vote to become ^3master^2.\n");
if(autocvar_sv_eventlog)
GameLogEcho(strcat(":vote:vcall:", ftos(votecaller.playerid), ":", votecalledvote_display));
- VoteCount(); // needed if you are the only one
Nagger_VoteChanged();
+ VoteCount(); // needed if you are the only one
}
} else {
print_to(e, "^1Vote to become master is NOT allowed.");
} else if(e.vote_vote == 0
|| autocvar_sv_vote_change) {
msg_entity = e;
- VoteDialog_UpdateHighlight(1);
print_to(e, "^1You accepted the vote.");
e.vote_vote = 1;
- centerprint_expire(e, CENTERPRIO_VOTE);
if(!autocvar_sv_vote_singlecount) {
VoteCount();
}
} else if(e.vote_vote == 0
|| autocvar_sv_vote_change) {
msg_entity = e;
- VoteDialog_UpdateHighlight(2);
print_to(e, "^1You rejected the vote.");
e.vote_vote = -1;
- centerprint_expire(e, CENTERPRIO_VOTE);
if(!autocvar_sv_vote_singlecount) {
VoteCount();
}
} else if(e.vote_vote == 0
|| autocvar_sv_vote_change) {
msg_entity = e;
- VoteDialog_UpdateHighlight(3);
print_to(e, "^1You abstained from your vote.");
e.vote_vote = -2;
- centerprint_expire(e, CENTERPRIO_VOTE);
if(!autocvar_sv_vote_singlecount) {
VoteCount();
}
FOR_EACH_CLIENT(player)
{
player.vote_vote = 0;
- centerprint_expire(player, CENTERPRIO_VOTE);
}
if(votecalled)
votecalled = FALSE;
votecalledmaster = FALSE;
votefinished = 0;
+ votecalledvote = string_null;
+ votecalledvote_display = string_null;
+
+ Nagger_VoteChanged();
}
void VoteAccept() {
VoteReset();
}
-void VoteSpam(float yescount, float nocount, float abstaincount, float notvoters, float mincount, string result)
+void VoteSpam(float notvoters, float mincount, string result)
{
string s;
if(mincount >= 0)
{
- s = strcat("\{1}^2* vote results: ^1", ftos(yescount), "^2:^1");
- s = strcat(s, ftos(nocount), "^2 (^1");
+ s = strcat("\{1}^2* vote results: ^1", ftos(vote_yescount), "^2:^1");
+ s = strcat(s, ftos(vote_nocount), "^2 (^1");
s = strcat(s, ftos(mincount), "^2 needed), ^1");
- s = strcat(s, ftos(abstaincount), "^2 didn't care, ^1");
+ s = strcat(s, ftos(vote_abstaincount), "^2 didn't care, ^1");
s = strcat(s, ftos(notvoters), "^2 didn't vote\n");
}
else
{
- s = strcat("\{1}^2* vote results: ^1", ftos(yescount), "^2:^1");
- s = strcat(s, ftos(nocount), "^2, ^1");
- s = strcat(s, ftos(abstaincount), "^2 didn't care, ^1");
+ s = strcat("\{1}^2* vote results: ^1", ftos(vote_yescount), "^2:^1");
+ s = strcat(s, ftos(vote_nocount), "^2, ^1");
+ s = strcat(s, ftos(vote_abstaincount), "^2 didn't care, ^1");
s = strcat(s, ftos(notvoters), "^2 didn't have to vote\n");
}
bprint(s);
if(autocvar_sv_eventlog)
{
- s = strcat(":vote:v", result, ":", ftos(yescount));
- s = strcat(s, ":", ftos(nocount));
- s = strcat(s, ":", ftos(abstaincount));
+ s = strcat(":vote:v", result, ":", ftos(vote_yescount));
+ s = strcat(s, ":", ftos(vote_nocount));
+ s = strcat(s, ":", ftos(vote_abstaincount));
s = strcat(s, ":", ftos(notvoters));
s = strcat(s, ":", ftos(mincount));
GameLogEcho(s);
}
}
-void VoteDialog_Update(float msg, float vyes, float vno, float needed) {
- WriteByte(msg, SVC_TEMPENTITY);
- WriteByte(msg, TE_CSQC_VOTE);
- WriteByte(msg, 0);
- WriteByte(msg, vyes);
- WriteByte(msg, vno);
- WriteByte(msg, needed);
-}
-
void VoteCount() {
local float playercount;
playercount = 0;
- local float yescount;
- yescount = 0;
- local float nocount;
- nocount = 0;
- local float abstaincount;
- abstaincount = 0;
+ vote_yescount = 0;
+ vote_nocount = 0;
+ vote_abstaincount = 0;
local entity player;
//same for real players
local float realplayercount;
local float realplayerabstaincount;
realplayercount = realplayernocount = realplayerabstaincount = realplayeryescount = 0;
+ Nagger_VoteCountChanged();
+
FOR_EACH_REALCLIENT(player)
{
if(player.vote_vote == -1) {
- ++nocount;
+ ++vote_nocount;
} else if(player.vote_vote == 1) {
- ++yescount;
+ ++vote_yescount;
} else if(player.vote_vote == -2) {
- ++abstaincount;
+ ++vote_abstaincount;
}
++playercount;
//do the same for real players
//in tournament mode, if we have at least one player then don't make the vote dependent on spectators (so specs don't have to press F1)
if(autocvar_sv_vote_nospectators)
if(realplayercount > 0) {
- yescount = realplayeryescount;
- nocount = realplayernocount;
- abstaincount = realplayerabstaincount;
+ vote_yescount = realplayeryescount;
+ vote_nocount = realplayernocount;
+ vote_abstaincount = realplayerabstaincount;
playercount = realplayercount;
}
float votefactor, simplevotefactor;
votefactor = bound(0.5, autocvar_sv_vote_majority_factor, 0.999);
simplevotefactor = autocvar_sv_vote_simple_majority_factor;
- float needed;
- needed = floor((playercount - abstaincount) * max(votefactor, simplevotefactor)) + 1;
- VoteDialog_Update(MSG_ALL, yescount, nocount, needed);
+
+ // FIXME this number is a guess
+ vote_needed_absolute = floor((playercount - vote_abstaincount) * votefactor) + 1;
+ if(simplevotefactor)
+ {
+ simplevotefactor = bound(votefactor, simplevotefactor, 0.999);
+ vote_needed_simple = floor((vote_yescount + vote_nocount) * simplevotefactor) + 1;
+ }
+ else
+ vote_needed_simple = 0;
if(votecalledmaster
&& playercount == 1) {
}
VoteReset();
} else {
- if(yescount > (playercount - abstaincount) * votefactor)
+ if(vote_yescount >= vote_needed_absolute)
{
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, -1, "yes");
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, -1, "yes");
VoteAccept();
- VoteDialog_Reset();
}
- else if(nocount >= (playercount - abstaincount) * (1 - votefactor)) // that means, yescount cannot reach minyes any more
+ else if(vote_nocount > playercount - vote_abstaincount - vote_needed_absolute) // that means, vote_yescount cannot reach vote_needed_absolute any more
{
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, -1, "no");
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, -1, "no");
VoteReject();
- VoteDialog_Reset();
}
else if(time > votefinished)
{
if(simplevotefactor)
{
string result;
- simplevotefactor = bound(votefactor, simplevotefactor, 0.999);
- if(yescount > (yescount + nocount) * simplevotefactor)
+ if(vote_yescount >= vote_needed_simple)
result = "yes";
- else if(yescount + nocount > 0)
+ else if(vote_yescount + vote_nocount > 0)
result = "no";
else
result = "timeout";
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, floor(min((playercount - abstaincount) * votefactor, (yescount + nocount) * simplevotefactor)) + 1, result);
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, min(vote_needed_absolute, vote_needed_simple), result);
if(result == "yes")
VoteAccept();
else if(result == "no")
}
else
{
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, floor((playercount - abstaincount) * votefactor) + 1, "timeout");
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, vote_needed_absolute, "timeout");
VoteTimeout();
}
- VoteDialog_Reset();
}
}
}
.float vote_master;
.float vote_next;
.float vote_vote;
+float vote_yescount;
+float vote_nocount;
+float vote_abstaincount;
+float vote_needed_absolute;
+float vote_needed_simple;
float VoteCheckNasty(string cmd);
entity GetKickVoteVictim(string vote, string cmd, entity caller);
void VoteReject();
void VoteTimeout();
void VoteStop(entity stopper);
-void VoteSpam(float yescount, float nocount, float abstaincount, float notvoters, float mincount, string result);
+void VoteSpam(float notvoters, float mincount, string result);
void VoteCount();
#include "w_hook.qc"
#include "w_hlac.qc"
#include "w_tuba.qc"
-#include "w_sniperrifle.qc"
+#include "w_rifle.qc"
#include "w_fireball.qc"
#include "w_seeker.qc"
local entity ent, endent;
local float endq3surfaceflags;
float totaldmg;
+ entity o;
float length;
vector beampos;
// trace multiple times until we hit a wall, each obstacle will be made
// non-solid so we can hit the next, while doing this we spawn effects and
// note down which entities were hit so we can damage them later
+ o = self;
while (1)
{
if(self.antilag_debug)
- WarpZone_traceline_antilag (self, start, end, FALSE, self, self.antilag_debug);
+ WarpZone_traceline_antilag (self, start, end, FALSE, o, self.antilag_debug);
else
- WarpZone_traceline_antilag (self, start, end, FALSE, self, ANTILAG_LATENCY(self));
+ WarpZone_traceline_antilag (self, start, end, FALSE, o, ANTILAG_LATENCY(self));
+ if(o && WarpZone_trace_firstzone)
+ {
+ o = world;
+ continue;
+ }
// if it is world we can't hurt it so stop now
if (trace_ent == world || trace_fraction == 1)
if(!pseudoprojectile)
pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume
- soundtoat(MSG_ONE, pseudoprojectile, beampos, CHAN_PROJECTILE, snd, VOL_BASE * f, ATTN_NONE);
+ soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, snd, VOL_BASE * f, ATTN_NONE);
}
if(pseudoprojectile)
f = ExponentialFalloff(mindist, maxdist, halflifedist, ent.railgundistance);
ffs = ExponentialFalloff(mindist, maxdist, forcehalflifedist, ent.railgundistance);
- if(accuracy_isgooddamage(self.owner, ent))
+ if(accuracy_isgooddamage(self.realowner, ent))
totaldmg += bdamage * f;
// apply the damage
damage_headshotbonus = self.dmg_edge * f;
railgun_start = self.origin - 2 * frametime * self.velocity;
railgun_end = self.origin + 2 * frametime * self.velocity;
- g = accuracy_isgooddamage(self.owner, other);
- Damage(other, self, self.owner, self.dmg * f, self.projectiledeathtype, self.origin, self.dmg_force * normalize(self.velocity) * f);
+ g = accuracy_isgooddamage(self.realowner, other);
+ Damage(other, self, self.realowner, self.dmg * f, self.projectiledeathtype, self.origin, self.dmg_force * normalize(self.velocity) * f);
damage_headshotbonus = 0;
if(headshot)
if(self.dmg_edge > 0)
{
if(headshot)
- AnnounceTo(self.owner, "headshot");
+ AnnounceTo(self.realowner, "headshot");
if(yoda)
- AnnounceTo(self.owner, "awesome");
+ AnnounceTo(self.realowner, "awesome");
}
// calculate hits for ballistic weapons
// do not exceed 100%
q = min(self.dmg * q, self.dmg_total + f * self.dmg) - self.dmg_total;
self.dmg_total += f * self.dmg;
- accuracy_add(self.owner, self.owner.weapon, 0, q);
+ accuracy_add(self.realowner, self.realowner.weapon, 0, q);
}
}
entity proj;
proj = spawn();
proj.classname = "bullet";
- proj.owner = self;
+ proj.owner = proj.realowner = self;
PROJECTILE_MAKETRIGGER(proj);
if(gravityfactor > 0)
{
trace_fraction = 0;
fireBallisticBullet_trace_callback_ent = self;
fireBallisticBullet_trace_callback_eff = eff;
- WarpZone_TraceToss_ThroughZone(self, oldself, world, fireBallisticBullet_trace_callback);
+ // FIXME can we somehow do this with just ONE trace?
+ WarpZone_TraceToss(self, self.owner);
+ if(self.owner && WarpZone_trace_firstzone)
+ {
+ self.owner = world;
+ self.velocity = v0;
+ self.gravity = g0;
+ continue;
+ }
+ WarpZone_TraceToss_ThroughZone(self, self.owner, world, fireBallisticBullet_trace_callback);
self.velocity = v0;
self.gravity = g0;
if ((trace_fraction != 1.0) && (pointcontents (trace_endpos) != CONTENT_SKY))
{
- pointparticles(particleeffectnum("TE_KNIGHTSPIKE"),end,trace_plane_normal * 2500,1);
- if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
- Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, self);
+ if not (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, self);
+
Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force);
- //void(float effectnum, vector org, vector vel, float howmany) pointparticles = #337; // same as in CSQC
}
trace_endpos = end;
}
if(e == world)
error("W_Crylink_CheckLinks: entity is world");
- if(e.classname != "spike")
- error("W_Crylink_CheckLinks: entity is not a spike");
+ if(e.classname != "spike" || wasfreed(e))
+ error(sprintf("W_Crylink_CheckLinks: entity is not a spike but a %s (freed: %d)", e.classname, wasfreed(e)));
p = e;
for(i = 0; i < 1000; ++i)
own.crylink_lastgroup = ((me == next) ? world : next);
prev.queuenext = next;
next.queueprev = prev;
+ me.classname = "spike_oktoremove";
if(me != next)
W_Crylink_CheckLinks(next);
}
if(e.queuenext != e2)
W_Crylink_LinkExplode(e.queuenext, e2);
+ e.classname = "spike_oktoremove";
remove (e);
}
remove(self);
}
-
// NO bounce protection, as bounces are limited!
void W_Crylink_Touch (void)
{
float finalhit;
float f;
- //PROJECTILE_TOUCH;
- local entity savenext, saveprev, saveown;
- saveown = self.realowner;
- savenext = self.queuenext;
- saveprev = self.queueprev;
- if(WarpZone_Projectile_Touch())
- {
- if(wasfreed(self))
- W_Crylink_Dequeue_Raw(saveown, saveprev, self, savenext);
- return;
- }
+ PROJECTILE_TOUCH;
float a;
a = bound(0, 1 - (time - self.fade_time) * self.fade_rate, 1);
{
float finalhit;
float f;
- //PROJECTILE_TOUCH;
- local entity savenext, saveprev, saveown;
- savenext = self.queuenext;
- saveprev = self.queueprev;
- saveown = self.realowner;
- if(WarpZone_Projectile_Touch())
- {
- if(wasfreed(self))
- W_Crylink_Dequeue_Raw(saveown, saveprev, self, savenext);
- return;
- }
+ PROJECTILE_TOUCH;
float a;
a = bound(0, 1 - (time - self.fade_time) * self.fade_rate, 1);
if(autocvar_g_balance_crylink_primary_joinexplode)
maxdmg += autocvar_g_balance_crylink_primary_joinexplode_damage;
- W_SetupShot (self, FALSE, 2, "weapons/crylink_fire.wav", CHAN_WEAPON, maxdmg);
+ W_SetupShot (self, FALSE, 2, "weapons/crylink_fire.wav", CH_WEAPON_A, maxdmg);
forward = v_forward;
right = v_right;
up = v_up;
counter = counter + 1;
}
- self.crylink_lastgroup = proj;
- W_Crylink_CheckLinks(proj);
+ if(autocvar_g_balance_crylink_primary_joinspread != 0 || autocvar_g_balance_crylink_primary_jointime != 0)
+ {
+ self.crylink_lastgroup = proj;
+ W_Crylink_CheckLinks(proj);
+ self.crylink_waitrelease = 1;
+ }
}
void W_Crylink_Attack2 (void)
if(autocvar_g_balance_crylink_secondary_joinexplode)
maxdmg += autocvar_g_balance_crylink_secondary_joinexplode_damage;
- W_SetupShot (self, FALSE, 2, "weapons/crylink_fire2.wav", CHAN_WEAPON, maxdmg);
+ W_SetupShot (self, FALSE, 2, "weapons/crylink_fire2.wav", CH_WEAPON_A, maxdmg);
shots = autocvar_g_balance_crylink_secondary_shots;
pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots);
counter = counter + 1;
}
- self.crylink_lastgroup = proj;
+ if(autocvar_g_balance_crylink_secondary_joinspread != 0 || autocvar_g_balance_crylink_secondary_jointime != 0)
+ {
+ self.crylink_lastgroup = proj;
+ W_Crylink_CheckLinks(proj);
+ self.crylink_waitrelease = 2;
+ }
}
void spawnfunc_weapon_crylink (void)
{
if(autocvar_g_balance_crylink_reload_ammo && self.clip_load < min(autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_secondary_ammo)) // forced reload
weapon_action(self.weapon, WR_RELOAD);
- else if (self.BUTTON_ATCK)
+
+ if (self.BUTTON_ATCK)
{
- if (!self.crylink_waitrelease)
+ if (self.crylink_waitrelease != 1)
if (weapon_prepareattack(0, autocvar_g_balance_crylink_primary_refire))
{
W_Crylink_Attack();
weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_crylink_primary_animtime, w_ready);
- if(autocvar_g_balance_crylink_primary_joinspread != 0 || autocvar_g_balance_crylink_primary_jointime != 0)
- self.crylink_waitrelease = 1;
}
}
- else if(self.BUTTON_ATCK2 && autocvar_g_balance_crylink_secondary)
+
+ if(self.BUTTON_ATCK2 && autocvar_g_balance_crylink_secondary)
{
- if (!self.crylink_waitrelease)
+ if (self.crylink_waitrelease != 2)
if (weapon_prepareattack(1, autocvar_g_balance_crylink_secondary_refire))
{
W_Crylink_Attack2();
weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_crylink_secondary_animtime, w_ready);
- if(autocvar_g_balance_crylink_secondary_joinspread != 0 || autocvar_g_balance_crylink_secondary_jointime != 0)
- self.crylink_waitrelease = 2;
}
}
- else
+
+ if ((self.crylink_waitrelease == 1 && !self.BUTTON_ATCK) || (self.crylink_waitrelease == 2 && !self.BUTTON_ATCK2))
{
- if (self.crylink_waitrelease && (!self.crylink_lastgroup || time > self.crylink_lastgroup.teleport_time))
+ if (!self.crylink_lastgroup || time > self.crylink_lastgroup.teleport_time)
{
// fired and released now!
if(self.crylink_lastgroup)
{
pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM);
}
}
else if(req == WR_PRECACHE)
if (e.classname == "plasma")
{
// change owner to whoever caused the combo explosion
- e.owner = own;
+ e.realowner = own;
e.takedamage = DAMAGE_NO;
e.classname = "plasma_chain";
e.think = W_Plasma_Explode_Combo;
{
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
- if(IsDifferentTeam(self.owner, other))
+ if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
- AnnounceTo(self.owner, "electrobitch");
+ AnnounceTo(self.realowner, "electrobitch");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
if (self.movetype == MOVETYPE_BOUNCE)
{
- RadiusDamage (self, self.owner, autocvar_g_balance_electro_secondary_damage, autocvar_g_balance_electro_secondary_edgedamage, autocvar_g_balance_electro_secondary_radius, world, autocvar_g_balance_electro_secondary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_electro_secondary_damage, autocvar_g_balance_electro_secondary_edgedamage, autocvar_g_balance_electro_secondary_radius, world, autocvar_g_balance_electro_secondary_force, self.projectiledeathtype, other);
}
else
{
- W_Plasma_TriggerCombo(self.origin, autocvar_g_balance_electro_primary_comboradius, self.owner);
- RadiusDamage (self, self.owner, autocvar_g_balance_electro_primary_damage, autocvar_g_balance_electro_primary_edgedamage, autocvar_g_balance_electro_primary_radius, world, autocvar_g_balance_electro_primary_force, self.projectiledeathtype, other);
+ W_Plasma_TriggerCombo(self.origin, autocvar_g_balance_electro_primary_comboradius, self.realowner);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_electro_primary_damage, autocvar_g_balance_electro_primary_edgedamage, autocvar_g_balance_electro_primary_radius, world, autocvar_g_balance_electro_primary_force, self.projectiledeathtype, other);
}
remove (self);
void W_Plasma_Explode_Combo (void)
{
- W_Plasma_TriggerCombo(self.origin, autocvar_g_balance_electro_combo_comboradius, self.owner);
+ W_Plasma_TriggerCombo(self.origin, autocvar_g_balance_electro_combo_comboradius, self.realowner);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, autocvar_g_balance_electro_combo_damage, autocvar_g_balance_electro_combo_edgedamage, autocvar_g_balance_electro_combo_radius, world, autocvar_g_balance_electro_combo_force, WEP_ELECTRO | HITTYPE_BOUNCE, world); // use THIS type for a combo because primary can't bounce
+ RadiusDamage (self, self.realowner, autocvar_g_balance_electro_combo_damage, autocvar_g_balance_electro_combo_edgedamage, autocvar_g_balance_electro_combo_radius, world, autocvar_g_balance_electro_combo_force, WEP_ELECTRO | HITTYPE_BOUNCE, world); // use THIS type for a combo because primary can't bounce
remove (self);
}
W_Plasma_Explode ();
} else {
//UpdateCSQCProjectile(self);
- spamsound (self, CHAN_PROJECTILE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
}
if (inflictor.classname == "plasma_chain" || inflictor.classname == "plasma_prim")
{
// change owner to whoever caused the combo explosion
- self.owner = inflictor.owner;
+ self.realowner = inflictor.realowner;
self.classname = "plasma_chain";
self.think = W_Plasma_Explode_Combo;
self.nextthink = time + min(autocvar_g_balance_electro_combo_radius, vlen(self.origin - inflictor.origin)) / autocvar_g_balance_electro_combo_speed; // delay combo chains, looks cooler
W_DecreaseAmmo(ammo_cells, autocvar_g_balance_electro_primary_ammo, autocvar_g_balance_electro_reload_ammo);
- W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', FALSE, 2, "weapons/electro_fire.wav", CHAN_WEAPON, autocvar_g_balance_electro_primary_damage);
+ W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', FALSE, 2, "weapons/electro_fire.wav", CH_WEAPON_A, autocvar_g_balance_electro_primary_damage);
pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
proj = spawn ();
proj.classname = "plasma_prim";
- proj.owner = self;
+ proj.owner = proj.realowner = self;
proj.bot_dodge = TRUE;
proj.bot_dodgerating = autocvar_g_balance_electro_primary_damage;
proj.use = W_Plasma_Explode;
setsize(proj, '0 0 -3', '0 0 -3');
proj.flags = FL_PROJECTILE;
- //sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
- //sounds bad
-
CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);
other = proj; MUTATOR_CALLHOOK(EditProjectile);
W_DecreaseAmmo(ammo_cells, autocvar_g_balance_electro_secondary_ammo, autocvar_g_balance_electro_reload_ammo);
- W_SetupShot_ProjectileSize (self, '0 0 -4', '0 0 -4', FALSE, 2, "weapons/electro_fire2.wav", CHAN_WEAPON, autocvar_g_balance_electro_secondary_damage);
+ W_SetupShot_ProjectileSize (self, '0 0 -4', '0 0 -4', FALSE, 2, "weapons/electro_fire2.wav", CH_WEAPON_A, autocvar_g_balance_electro_secondary_damage);
w_shotdir = v_forward; // no TrueAim for grenades please
proj = spawn ();
proj.classname = "plasma";
- proj.owner = self;
+ proj.owner = proj.realowner = self;
proj.use = W_Plasma_Explode;
proj.think = adaptor_think2use_hittype_splash;
proj.bot_dodge = TRUE;
{
WriteByte(MSG_ENTITY, ENT_CLIENT_LGBEAM);
sf = sf & 0x7F;
- if(sound_allowed(MSG_BROADCAST, self.owner))
+ if(sound_allowed(MSG_BROADCAST, self.realowner))
sf |= 0x80;
WriteByte(MSG_ENTITY, sf);
if(sf & 1)
{
- WriteByte(MSG_ENTITY, num_for_edict(self.owner));
+ WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
WriteCoord(MSG_ENTITY, autocvar_g_balance_electro_primary_range);
}
if(sf & 2)
.float prevlgfire;
float lgbeam_checkammo()
{
- if(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)
+ if(self.realowner.items & IT_UNLIMITED_WEAPON_AMMO)
return TRUE;
else if(autocvar_g_balance_electro_reload_ammo)
- return self.owner.clip_load > 0;
+ return self.realowner.clip_load > 0;
else
- return self.owner.ammo_cells > 0;
+ return self.realowner.ammo_cells > 0;
}
+entity lgbeam_owner_ent;
void lgbeam_think()
{
entity owner_player;
- owner_player = self.owner;
+ owner_player = self.realowner;
owner_player.prevlgfire = time;
if (self != owner_player.lgbeam)
}
W_SetupShot_Range(owner_player, TRUE, 0, "", 0, autocvar_g_balance_electro_primary_damage * dt, autocvar_g_balance_electro_primary_range);
- WarpZone_traceline_antilag(owner_player, w_shotorg, w_shotend, MOVE_NORMAL, owner_player, ANTILAG_LATENCY(owner_player));
+ if(!lgbeam_owner_ent)
+ {
+ lgbeam_owner_ent = spawn();
+ lgbeam_owner_ent.classname = "lgbeam_owner_ent";
+ }
+ WarpZone_traceline_antilag(lgbeam_owner_ent, w_shotorg, w_shotend, MOVE_NORMAL, lgbeam_owner_ent, ANTILAG_LATENCY(owner_player));
// apply the damage
if(trace_ent)
{
// only play fire sound if 0.5 sec has passed since player let go the fire button
if(time - self.prevlgfire > 0.5)
- sound (self, CHAN_WEAPON, "weapons/lgbeam_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/lgbeam_fire.wav", VOL_BASE, ATTN_NORM);
entity beam, oldself;
beam.classname = "lgbeam";
beam.solid = SOLID_NOT;
beam.think = lgbeam_think;
- beam.owner = self;
+ beam.owner = beam.realowner = self;
beam.movetype = MOVETYPE_NONE;
beam.shot_spread = 0;
beam.bot_dodge = TRUE;
{
pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
}
else
{
// this is sent as "primary (w_deathtype & HITTYPE_BOUNCE)" to distinguish it from (w_deathtype & HITTYPE_SECONDARY) bounced balls
pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
}
}
}
self.takedamage = DAMAGE_NO;
// 1. dist damage
- d = (self.owner.health + self.owner.armorvalue);
+ d = (self.realowner.health + self.realowner.armorvalue);
RadiusDamage (self, self.realowner, autocvar_g_balance_fireball_primary_damage, autocvar_g_balance_fireball_primary_edgedamage, autocvar_g_balance_fireball_primary_radius, world, autocvar_g_balance_fireball_primary_force, self.projectiledeathtype, other);
if(self.realowner.health + self.realowner.armorvalue >= d)
if(!self.cnt)
// 2. bfg effect
// NOTE: this cannot be made warpzone aware by design. So, better intentionally ignore warpzones here.
for(e = findradius(self.origin, autocvar_g_balance_fireball_primary_bfgradius); e; e = e.chain)
- if(e != self.owner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.owner || IsDifferentTeam(e, self))
+ if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.realowner || IsDifferentTeam(e, self))
{
// can we see fireball?
traceline(e.origin + e.view_ofs, self.origin, MOVE_NORMAL, e);
RandomSelection_Init();
for(e = WarpZone_FindRadius(self.origin, dist, TRUE); e; e = e.chain)
- if(e != self.owner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.owner || IsDifferentTeam(e, self))
+ if(e != self.realowner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.realowner || IsDifferentTeam(e, self))
{
p = e.origin;
p_x += e.mins_x + random() * (e.maxs_x - e.mins_x);
{
local entity proj;
- W_SetupShot_ProjectileSize (self, '-16 -16 -16', '16 16 16', FALSE, 2, "weapons/fireball_fire2.wav", CHAN_WEAPON, autocvar_g_balance_fireball_primary_damage + autocvar_g_balance_fireball_primary_bfgdamage);
+ W_SetupShot_ProjectileSize (self, '-16 -16 -16', '16 16 16', FALSE, 2, "weapons/fireball_fire2.wav", CH_WEAPON_A, autocvar_g_balance_fireball_primary_damage + autocvar_g_balance_fireball_primary_bfgdamage);
pointparticles(particleeffectnum("fireball_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
W_DecreaseAmmo(ammo_fuel, autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_reload_ammo);
W_Fireball_AttackEffect(0, '-1.25 -3.75 0');
- sound (self, CHAN_WEAPON, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_SINGLE, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM);
weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_fireball_primary_animtime, W_Fireball_Attack1_Frame1);
}
f_diff = '+1.25 +3.75 0';
break;
}
- W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', FALSE, 2, "weapons/fireball_fire.wav", CHAN_WEAPON, autocvar_g_balance_fireball_secondary_damage);
+ W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', FALSE, 2, "weapons/fireball_fire.wav", CH_WEAPON_A, autocvar_g_balance_fireball_secondary_damage);
traceline(w_shotorg, w_shotorg + f_diff_x * v_up + f_diff_y * v_right, MOVE_NORMAL, self);
w_shotorg = trace_endpos;
org2 = w_org + w_backoff * 16;
pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom
+ sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom
}
}
else if(req == WR_PRECACHE)
{
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
- if(IsDifferentTeam(self.owner, other))
+ if(IsDifferentTeam(self.realowner, other))
if(other.deadflag == DEAD_NO)
if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ AnnounceTo(self.realowner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
if(self.movetype == MOVETYPE_NONE)
self.velocity = self.oldvelocity;
- RadiusDamage (self, self.owner, autocvar_g_balance_grenadelauncher_primary_damage, autocvar_g_balance_grenadelauncher_primary_edgedamage, autocvar_g_balance_grenadelauncher_primary_radius, world, autocvar_g_balance_grenadelauncher_primary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_grenadelauncher_primary_damage, autocvar_g_balance_grenadelauncher_primary_edgedamage, autocvar_g_balance_grenadelauncher_primary_radius, world, autocvar_g_balance_grenadelauncher_primary_force, self.projectiledeathtype, other);
remove (self);
}
{
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
- if(IsDifferentTeam(self.owner, other))
- if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ if(IsDifferentTeam(self.realowner, other))
+ if(other.deadflag == DEAD_NO)
+ if(IsFlying(other))
+ AnnounceTo(self.realowner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
if(self.movetype == MOVETYPE_NONE)
self.velocity = self.oldvelocity;
- RadiusDamage (self, self.owner, autocvar_g_balance_grenadelauncher_secondary_damage, autocvar_g_balance_grenadelauncher_secondary_edgedamage, autocvar_g_balance_grenadelauncher_secondary_radius, world, autocvar_g_balance_grenadelauncher_secondary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_grenadelauncher_secondary_damage, autocvar_g_balance_grenadelauncher_secondary_edgedamage, autocvar_g_balance_grenadelauncher_secondary_radius, world, autocvar_g_balance_grenadelauncher_secondary_force, self.projectiledeathtype, other);
remove (self);
}
float r;
r = random() * 6;
if(r < 1)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
else if(r < 2)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
else if(r < 3)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
else if(r < 4)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
else if(r < 5)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
self.gl_bouncecnt += 1;
}
else if(autocvar_g_balance_grenadelauncher_primary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
{
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
// let it stick whereever it is
self.oldvelocity = self.velocity;
// do not respond to any more touches
self.solid = SOLID_NOT;
- self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_primary_lifetime2);
+ self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_primary_lifetime_stick);
}
}
float r;
r = random() * 6;
if(r < 1)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
else if(r < 2)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
else if(r < 3)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
else if(r < 4)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
else if(r < 5)
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
self.gl_bouncecnt += 1;
+
+ if (autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce && self.gl_bouncecnt == 1)
+ self.nextthink = time + autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce;
+
}
else if(autocvar_g_balance_grenadelauncher_secondary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
{
- spamsound (self, CHAN_PROJECTILE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
// let it stick whereever it is
self.oldvelocity = self.velocity;
// do not respond to any more touches
self.solid = SOLID_NOT;
- self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_secondary_lifetime2);
+ self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_secondary_lifetime_stick);
}
}
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_grenadelauncher_primary_ammo, autocvar_g_balance_grenadelauncher_reload_ammo);
- W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 4, "weapons/grenade_fire.wav", CHAN_WEAPON, autocvar_g_balance_grenadelauncher_primary_damage);
+ W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 4, "weapons/grenade_fire.wav", CH_WEAPON_A, autocvar_g_balance_grenadelauncher_primary_damage);
w_shotdir = v_forward; // no TrueAim for grenades please
pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
gren = spawn ();
- gren.owner = self;
+ gren.owner = gren.realowner = self;
gren.classname = "grenade";
gren.bot_dodge = TRUE;
gren.bot_dodgerating = autocvar_g_balance_grenadelauncher_primary_damage;
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_grenadelauncher_secondary_ammo, autocvar_g_balance_grenadelauncher_reload_ammo);
- W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 4, "weapons/grenade_fire.wav", CHAN_WEAPON, autocvar_g_balance_grenadelauncher_secondary_damage);
+ W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 4, "weapons/grenade_fire.wav", CH_WEAPON_A, autocvar_g_balance_grenadelauncher_secondary_damage);
w_shotdir = v_forward; // no TrueAim for grenades please
pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
gren = spawn ();
- gren.owner = self;
+ gren.owner = gren.realowner = self;
gren.classname = "grenade";
gren.bot_dodge = TRUE;
gren.bot_dodgerating = autocvar_g_balance_grenadelauncher_secondary_damage;
if (cvar("g_balance_grenadelauncher_secondary_remote_detonateprimary"))
{
nadefound = 0;
- for(nade = world; (nade = find(nade, classname, "grenade")); ) if(nade.owner == self)
+ for(nade = world; (nade = find(nade, classname, "grenade")); ) if(nade.realowner == self)
{
if(!nade.gl_detonate_later)
{
}
}
if(nadefound)
- sound (self, CHAN_WEAPON2, "weapons/rocket_det.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_B, "weapons/rocket_det.wav", VOL_BASE, ATTN_NORM);
}
else if (weapon_prepareattack(1, autocvar_g_balance_grenadelauncher_secondary_refire))
{
org2 = w_org + w_backoff * 12;
pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_hagar_primary_ammo, autocvar_g_balance_hagar_reload_ammo);
- W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CHAN_WEAPON, autocvar_g_balance_hagar_primary_damage);
+ W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CH_WEAPON_A, autocvar_g_balance_hagar_primary_damage);
pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_hagar_secondary_ammo, autocvar_g_balance_hagar_reload_ammo);
- W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CHAN_WEAPON, autocvar_g_balance_hagar_secondary_damage);
+ W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CH_WEAPON_A, autocvar_g_balance_hagar_secondary_damage);
pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
weapon_prepareattack_do(1, autocvar_g_balance_hagar_secondary_refire);
- W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CHAN_WEAPON, autocvar_g_balance_hagar_secondary_damage);
+ W_SetupShot (self, FALSE, 2, "weapons/hagar_fire.wav", CH_WEAPON_A, autocvar_g_balance_hagar_secondary_damage);
pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
forward = v_forward;
if(self.hagar_load)
{
// if we pressed primary fire while loading, unload all rockets and abort
+ self.weaponentity.state = WS_READY;
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_hagar_secondary_ammo * self.hagar_load * -1, autocvar_g_balance_hagar_reload_ammo); // give back ammo
self.hagar_load = 0;
- sound(self, CHAN_WEAPON, "weapons/hagar_beep.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_WEAPON_A, "weapons/hagar_beep.wav", VOL_BASE, ATTN_NORM);
// pause until we can load rockets again, once we re-press the alt fire button
self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_load_speed;
if(!self.hagar_loadblock && self.hagar_loadstep < time)
{
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_hagar_secondary_ammo, autocvar_g_balance_hagar_reload_ammo);
+ self.weaponentity.state = WS_INUSE;
self.hagar_load += 1;
- sound(self, CHAN_WEAPON2, "weapons/hagar_load.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_WEAPON_B, "weapons/hagar_load.wav", VOL_BASE, ATTN_NORM);
self.hagar_loadstep = time + autocvar_g_balance_hagar_secondary_load_speed;
}
else if(!self.hagar_loadbeep && self.hagar_load) // prevents the beep from playing each frame
{
// if this is the last rocket we can load, play a beep sound to notify the player
- sound(self, CHAN_WEAPON, "weapons/hagar_beep.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_WEAPON_A, "weapons/hagar_beep.wav", VOL_BASE, ATTN_NORM);
self.hagar_loadbeep = TRUE;
}
}
if(self.hagar_load)
{
- self.weapon_forbidchange = TRUE;
if(!self.BUTTON_ATCK2 || ((loaded || !enough_ammo) && self.hagar_loadstep < time && !autocvar_g_balance_hagar_secondary_load_hold))
+ {
+ self.weaponentity.state = WS_READY;
W_Hagar_Attack2_Load_Release();
+ }
}
else
{
- self.weapon_forbidchange = FALSE;
self.hagar_loadbeep = FALSE;
}
// we aren't checking ammo during an attack, so we must do it here
if not(weapon_action(self.weapon, WR_CHECKAMMO1) + weapon_action(self.weapon, WR_CHECKAMMO2))
{
+ // note: this doesn't force the switch
W_SwitchToOtherWeapon(self);
return;
}
}
}
}
+ else if (req == WR_GONETHINK)
+ {
+ // we lost the weapon and want to prepare switching away
+ if(self.hagar_load)
+ {
+ self.weaponentity.state = WS_READY;
+ W_Hagar_Attack2_Load_Release();
+ }
+ }
else if (req == WR_PRECACHE)
{
precache_model ("models/weapons/g_hagar.md3");
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
else
- sound(self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
}
}
else if(req == WR_PRECACHE)
self.event_damage = SUB_Null;
if(self.projectiledeathtype & HITTYPE_SECONDARY)
- RadiusDamage (self, self.owner, autocvar_g_balance_hlac_secondary_damage, autocvar_g_balance_hlac_secondary_edgedamage, autocvar_g_balance_hlac_secondary_radius, world, autocvar_g_balance_hlac_secondary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_hlac_secondary_damage, autocvar_g_balance_hlac_secondary_edgedamage, autocvar_g_balance_hlac_secondary_radius, world, autocvar_g_balance_hlac_secondary_force, self.projectiledeathtype, other);
else
- RadiusDamage (self, self.owner, autocvar_g_balance_hlac_primary_damage, autocvar_g_balance_hlac_primary_edgedamage, autocvar_g_balance_hlac_primary_radius, world, autocvar_g_balance_hlac_primary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_hlac_primary_damage, autocvar_g_balance_hlac_primary_edgedamage, autocvar_g_balance_hlac_primary_radius, world, autocvar_g_balance_hlac_primary_force, self.projectiledeathtype, other);
remove (self);
}
if(self.crouch)
spread = spread * autocvar_g_balance_hlac_primary_spread_crouchmod;
- W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", CHAN_WEAPON, autocvar_g_balance_hlac_primary_damage);
+ W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_A, autocvar_g_balance_hlac_primary_damage);
pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
if (!g_norecoil)
{
}
missile = spawn ();
- missile.owner = self;
+ missile.owner = missile.realowner = self;
missile.classname = "hlacbolt";
missile.bot_dodge = TRUE;
if(self.crouch)
spread = spread * autocvar_g_balance_hlac_secondary_spread_crouchmod;
- W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", CHAN_WEAPON, autocvar_g_balance_hlac_secondary_damage);
+ W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_A, autocvar_g_balance_hlac_secondary_damage);
pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
missile = spawn ();
- missile.owner = self;
+ missile.owner = missile.realowner = self;
missile.classname = "hlacbolt";
missile.bot_dodge = TRUE;
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
f = self.dmg_last - dmg_remaining_next;
self.dmg_last = dmg_remaining_next;
- RadiusDamage (self, self.owner, self.dmg * f, self.dmg_edge * f, self.dmg_radius, self.owner, self.dmg_force * f, self.projectiledeathtype, world);
+ RadiusDamage (self, self.realowner, self.dmg * f, self.dmg_edge * f, self.dmg_radius, self.realowner, self.dmg_force * f, self.projectiledeathtype, world);
self.projectiledeathtype |= HITTYPE_BOUNCE;
//RadiusDamage (self, world, self.dmg * f, self.dmg_edge * f, self.dmg_radius, world, self.dmg_force * f, self.projectiledeathtype, world);
local entity gren;
W_DecreaseAmmo(ammo_cells, autocvar_g_balance_hook_secondary_ammo, FALSE);
- W_SetupShot (self, FALSE, 4, "weapons/hookbomb_fire.wav", CHAN_WEAPON, autocvar_g_balance_hook_secondary_damage);
+ W_SetupShot (self, FALSE, 4, "weapons/hookbomb_fire.wav", CH_WEAPON_A, autocvar_g_balance_hook_secondary_damage);
gren = spawn ();
- gren.owner = self;
+ gren.owner = gren.realowner = self;
gren.classname = "hookbomb";
gren.bot_dodge = TRUE;
gren.bot_dodgerating = autocvar_g_balance_hook_secondary_damage;
org2 = w_org + w_backoff * 2;
pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
self.event_damage = SUB_Null;
if (self.dmg)
- RadiusDamage (self, self.owner, autocvar_g_balance_laser_secondary_damage, autocvar_g_balance_laser_secondary_edgedamage, autocvar_g_balance_laser_secondary_radius, world, autocvar_g_balance_laser_secondary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_laser_secondary_damage, autocvar_g_balance_laser_secondary_edgedamage, autocvar_g_balance_laser_secondary_radius, world, autocvar_g_balance_laser_secondary_force, self.projectiledeathtype, other);
else
- RadiusDamage (self, self.owner, autocvar_g_balance_laser_primary_damage, autocvar_g_balance_laser_primary_edgedamage, autocvar_g_balance_laser_primary_radius, world, autocvar_g_balance_laser_primary_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_laser_primary_damage, autocvar_g_balance_laser_primary_edgedamage, autocvar_g_balance_laser_primary_radius, world, autocvar_g_balance_laser_primary_force, self.projectiledeathtype, other);
remove (self);
}
s_forward = v_forward * cos(a * DEG2RAD) + v_up * sin(a * DEG2RAD);
if(nodamage)
- W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", CHAN_WEAPON2, 0);
+ W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_B, 0);
else if(issecondary == 1)
- W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", CHAN_WEAPON2, autocvar_g_balance_laser_secondary_damage);
+ W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_B, autocvar_g_balance_laser_secondary_damage);
else
- W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", CHAN_WEAPON2, autocvar_g_balance_laser_primary_damage);
+ W_SetupShot_Dir (self, s_forward, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_B, autocvar_g_balance_laser_primary_damage);
pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
missile = spawn ();
- missile.owner = self;
+ missile.owner = missile.realowner = self;
missile.classname = "laserbolt";
missile.dmg = 0;
if(!nodamage)
{
WriteByte(MSG_ENTITY, ENT_CLIENT_GAUNTLET);
sf = sf & 0x7F;
- if(sound_allowed(MSG_BROADCAST, self.owner))
+ if(sound_allowed(MSG_BROADCAST, self.realowner))
sf |= 0x80;
WriteByte(MSG_ENTITY, sf);
if(sf & 1)
{
- WriteByte(MSG_ENTITY, num_for_edict(self.owner));
+ WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
}
if(sf & 2)
{
}
.entity gauntletbeam;
.float prevgauntletfire;
+entity lgbeam_owner_ent;
void gauntletbeam_think()
{
float damage, myforce, myradius;
myforce = autocvar_g_balance_laser_secondary_force;
myradius = autocvar_g_balance_laser_secondary_radius;
- self.owner.prevgauntletfire = time;
- if (self.owner.weaponentity.state != WS_INUSE || self != self.owner.gauntletbeam || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK2)
+ self.realowner.prevgauntletfire = time;
+ if (self.realowner.weaponentity.state != WS_INUSE || self != self.realowner.gauntletbeam || self.realowner.deadflag != DEAD_NO || !self.realowner.BUTTON_ATCK2)
{
remove(self);
return;
self.nextthink = time;
- makevectors(self.owner.v_angle);
+ makevectors(self.realowner.v_angle);
float dt;
dt = frametime;
- W_SetupShot_Range(self.owner, TRUE, 0, "", 0, damage * dt, myradius);
- WarpZone_traceline_antilag(self.owner, w_shotorg, w_shotend, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner));
+ W_SetupShot_Range(self.realowner, TRUE, 0, "", 0, damage * dt, myradius);
+ if(!lgbeam_owner_ent)
+ {
+ lgbeam_owner_ent = spawn();
+ lgbeam_owner_ent.classname = "lgbeam_owner_ent";
+ }
+ WarpZone_traceline_antilag(lgbeam_owner_ent, w_shotorg, w_shotend, MOVE_NORMAL, lgbeam_owner_ent, ANTILAG_LATENCY(self.owner));
// apply the damage
if(trace_ent)
// only play fire sound if 0.5 sec has passed since player let go the fire button
if(time - self.prevgauntletfire > 0.5)
{
- sound (self, CHAN_WEAPON, "weapons/gauntlet_fire.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, "weapons/gauntlet_fire.wav", VOL_BASE, ATTN_NORM);
}
entity beam, oldself;
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
weapon_defaultspawnfunc(WEP_MINE_LAYER);
}
-void W_Mine_Stick ()
+void W_Mine_Stick (entity to)
{
- spamsound (self, CHAN_PROJECTILE, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM);
// in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile
newmine.bot_dodgerating = self.bot_dodgerating;
newmine.owner = self.owner;
+ newmine.realowner = self.realowner;
setsize(newmine, '-4 -4 -4', '4 4 4');
setorigin(newmine, self.origin);
setmodel(newmine, "models/mine.md3");
newmine.angles = vectoangles(-trace_plane_normal); // face against the surface
+ newmine.oldvelocity = self.velocity;
+
newmine.takedamage = self.takedamage;
newmine.damageforcescale = self.damageforcescale;
newmine.health = self.health;
remove(self);
self = newmine;
+
+ if(to)
+ SetMovetypeFollow(self, to);
}
void W_Mine_Explode ()
{
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
- if(IsDifferentTeam(self.owner, other))
- if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ if(IsDifferentTeam(self.realowner, other))
+ if(other.deadflag == DEAD_NO)
+ if(IsFlying(other))
+ AnnounceTo(self.realowner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
- RadiusDamage (self, self.owner, autocvar_g_balance_minelayer_damage, autocvar_g_balance_minelayer_edgedamage, autocvar_g_balance_minelayer_radius, world, autocvar_g_balance_minelayer_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_minelayer_damage, autocvar_g_balance_minelayer_edgedamage, autocvar_g_balance_minelayer_radius, world, autocvar_g_balance_minelayer_force, self.projectiledeathtype, other);
- if (self.owner.weapon == WEP_MINE_LAYER)
+ if (self.realowner.weapon == WEP_MINE_LAYER)
{
entity oldself;
oldself = self;
- self = self.owner;
+ self = self.realowner;
if (!weapon_action(WEP_MINE_LAYER, WR_CHECKAMMO1))
{
self.cnt = WEP_MINE_LAYER;
}
self = oldself;
}
- self.owner.minelayer_mines -= 1;
+ self.realowner.minelayer_mines -= 1;
remove (self);
}
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
- RadiusDamage (self, self.owner, autocvar_g_balance_minelayer_remote_damage, autocvar_g_balance_minelayer_remote_edgedamage, autocvar_g_balance_minelayer_remote_radius, world, autocvar_g_balance_minelayer_remote_force, self.projectiledeathtype | HITTYPE_BOUNCE, world);
+ if(self.movetype == MOVETYPE_NONE || self.movetype == MOVETYPE_FOLLOW)
+ self.velocity = self.oldvelocity;
- if (self.owner.weapon == WEP_MINE_LAYER)
+ RadiusDamage (self, self.realowner, autocvar_g_balance_minelayer_remote_damage, autocvar_g_balance_minelayer_remote_edgedamage, autocvar_g_balance_minelayer_remote_radius, world, autocvar_g_balance_minelayer_remote_force, self.projectiledeathtype | HITTYPE_BOUNCE, world);
+
+ if (self.realowner.weapon == WEP_MINE_LAYER)
{
entity oldself;
oldself = self;
- self = self.owner;
+ self = self.realowner;
if (!weapon_action(WEP_MINE_LAYER, WR_CHECKAMMO1))
{
self.cnt = WEP_MINE_LAYER;
}
self = oldself;
}
- self.owner.minelayer_mines -= 1;
+ self.realowner.minelayer_mines -= 1;
remove (self);
}
void W_Mine_RemoteExplode ()
{
- if(self.owner.deadflag == DEAD_NO)
+ if(self.realowner.deadflag == DEAD_NO)
if((self.spawnshieldtime >= 0)
? (time >= self.spawnshieldtime) // timer
- : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > autocvar_g_balance_minelayer_remote_radius) // safety device
+ : (vlen(NearestPointOnBox(self.realowner, self.origin) - self.origin) > autocvar_g_balance_minelayer_remote_radius) // safety device
)
{
W_Mine_DoRemoteExplode();
head = findradius(self.origin, autocvar_g_balance_minelayer_radius);
while(head)
{
- if(head == self.owner || !IsDifferentTeam(head, self.owner))
+ if(head == self.realowner || !IsDifferentTeam(head, self.realowner))
return;
head = head.chain;
}
{
float minecount;
entity mine;
- for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == e)
+ for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.realowner == e)
minecount += 1;
return minecount;
entity head;
self.nextthink = time;
+
+ if(self.movetype == MOVETYPE_FOLLOW)
+ {
+ if(LostMovetypeFollow(self))
+ {
+ UnsetMovetypeFollow(self);
+ self.movetype = MOVETYPE_NONE;
+ }
+ }
// our lifetime has expired, it's time to die - mine_time just allows us to play a sound for this
// TODO: replace this mine_trigger.wav sound with a real countdown
if ((time > self.cnt) && (!self.mine_time))
{
if(autocvar_g_balance_minelayer_lifetime_countdown > 0)
- spamsound (self, CHAN_PROJECTILE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
self.mine_time = time + autocvar_g_balance_minelayer_lifetime_countdown;
self.mine_explodeanyway = 1; // make the mine super aggressive -- Samual: Rather, make it not care if a team mate is near.
}
// a player's mines shall explode if he disconnects or dies
// TODO: Do this on team change too -- Samual: But isn't a player killed when they switch teams?
- if(self.owner.classname != "player" || self.owner.deadflag != DEAD_NO)
+ if(self.realowner.classname != "player" || self.realowner.deadflag != DEAD_NO)
{
other = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
while(head)
{
if(head.classname == "player" && head.deadflag == DEAD_NO)
- if(head != self.owner && IsDifferentTeam(head, self.owner)) // don't trigger for team mates
+ if(head != self.realowner && IsDifferentTeam(head, self.realowner)) // don't trigger for team mates
if(!self.mine_time)
{
- spamsound (self, CHAN_PROJECTILE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
self.mine_time = time + autocvar_g_balance_minelayer_time;
}
head = head.chain;
}
// remote detonation
- if (self.owner.weapon == WEP_MINE_LAYER)
- if (self.owner.deadflag == DEAD_NO)
+ if (self.realowner.weapon == WEP_MINE_LAYER)
+ if (self.realowner.deadflag == DEAD_NO)
if (self.minelayer_detonate)
W_Mine_RemoteExplode();
}
void W_Mine_Touch (void)
{
+ if(self.movetype == MOVETYPE_NONE || self.movetype == MOVETYPE_FOLLOW)
+ return; // we're already a stuck mine, why do we get called? TODO does this even happen?
+
PROJECTILE_TOUCH;
- if(!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))
- W_Mine_Stick();
- else if(self.movetype != MOVETYPE_NONE) // don't unstick a locked mine when someone touches it
- self.velocity = '0 0 0';
+
+ if(other && other.classname == "player" && other.deadflag == DEAD_NO)
+ {
+ // hit a player
+ // don't stick
+ }
+ else
+ {
+ W_Mine_Stick(other);
+ }
}
void W_Mine_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_minelayer_ammo, autocvar_g_balance_minelayer_reload_ammo);
- W_SetupShot_ProjectileSize (self, '-4 -4 -4', '4 4 4', FALSE, 5, "weapons/mine_fire.wav", CHAN_WEAPON, autocvar_g_balance_minelayer_damage);
+ W_SetupShot_ProjectileSize (self, '-4 -4 -4', '4 4 4', FALSE, 5, "weapons/mine_fire.wav", CH_WEAPON_A, autocvar_g_balance_minelayer_damage);
pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
mine = WarpZone_RefSys_SpawnSameRefSys(self);
- mine.owner = self;
+ mine.owner = mine.realowner = self;
if(autocvar_g_balance_minelayer_detonatedelay >= 0)
mine.spawnshieldtime = time + autocvar_g_balance_minelayer_detonatedelay;
else
entity mine;
float minfound;
- for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == self)
+ for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.realowner == self)
{
if(detonate)
{
mine = find(world, classname, "mine");
while (mine)
{
- if (mine.owner != self)
+ if (mine.realowner != self)
{
mine = find(mine, classname, "mine");
continue;
// count potential damage according to type of target
if (targ == self)
selfdamage = selfdamage + d;
- else if (targ.team == self.team && teams_matter)
+ else if (targ.team == self.team && teamplay)
teamdamage = teamdamage + d;
else if (bot_shouldattack(targ))
enemydamage = enemydamage + d;
desirabledamage = enemydamage;
if (time > self.invincible_finished && time > self.spawnshieldtime)
desirabledamage = desirabledamage - selfdamage * autocvar_g_balance_selfdamagepercent;
- if (teams_matter && self.team)
+ if (teamplay && self.team)
desirabledamage = desirabledamage - teamdamage;
mine = find(world, classname, "mine");
while (mine)
{
- if (mine.owner != self)
+ if (mine.realowner != self)
{
mine = find(mine, classname, "mine");
continue;
if (self.BUTTON_ATCK2)
{
if(W_PlacedMines(TRUE))
- sound (self, CHAN_WEAPON2, "weapons/mine_det.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_B, "weapons/mine_det.wav", VOL_BASE, ATTN_NORM);
}
}
else if (req == WR_PRECACHE)
org2 = w_org + w_backoff * 12;
pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
float flying;
flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
- W_SetupShot (self, TRUE, 0, "weapons/minstanexfire.wav", CHAN_WEAPON, 10000);
+ W_SetupShot (self, TRUE, 0, "weapons/minstanexfire.wav", CH_WEAPON_A, 10000);
yoda = 0;
damage_goodhits = 0;
// teamcolor / hit beam effect
vector v;
v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
- if(teams_matter)
+ if(teamplay)
{
switch(self.team)
{
.float minstagib_nextthink;
-void minstagib_ammocheck (void)
+.float minstagib_needammo;
+void minstagib_stop_countdown(void)
{
- if (time < self.minstagib_nextthink || self.deadflag || gameover)
+ if (self.minstagib_needammo)
+ {
+ self.health = 100;
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MINSTA_FINDAMMO);
+ }
+ self.minstagib_needammo = FALSE;
+}
+void minstagib_ammocheck(void)
+{
+ if (time < self.minstagib_nextthink)
return;
- if (self.ammo_cells <= 0)
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if (self.deadflag || gameover || self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
+ minstagib_stop_countdown();
+ else
{
+ self.minstagib_needammo = TRUE;
if (self.health == 5)
{
- centerprint(self, "you're dead now...\n");
Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "terminated");
}
else if (self.health == 10)
{
- centerprint(self, "^11^7 second left to find some ammo\n");
Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "1");
}
else if (self.health == 20)
{
- centerprint(self, "^12^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "2");
}
else if (self.health == 30)
{
- centerprint(self, "^13^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "3");
}
else if (self.health == 40)
{
- centerprint(self, "^14^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "4");
}
else if (self.health == 50)
{
- centerprint(self, "^15^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "5");
}
else if (self.health == 60)
{
- centerprint(self, "^36^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "6");
}
else if (self.health == 70)
{
- centerprint(self, "^37^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "7");
}
else if (self.health == 80)
{
- centerprint(self, "^38^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "8");
}
else if (self.health == 90)
{
- centerprint(self, "^39^7 seconds left to find some ammo\n");
+ Send_CSQC_Centerprint_Generic(self, CPID_MINSTA_FINDAMMO, "^1%d^7 seconds left to find some ammo", 1, 9);
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "9");
}
else if (self.health == 100)
{
- centerprint(self, "get some ammo or\nyou'll be dead in ^310^7 seconds...");
+ Send_CSQC_Centerprint_Generic(self, CPID_MINSTA_FINDAMMO, "get some ammo or\nyou'll be dead in ^3%d^7 seconds...", 1, 10);
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
if not(self.flags & FL_GODMODE)
AnnounceTo(self, "10");
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
precache_sound("weapons/neximpact.wav");
}
else if (req == WR_SUICIDEMESSAGE)
- w_deathtypestring = _("%s did the impossible");
+ w_deathtypestring = _("%s is now thinking with portals");
else if (req == WR_KILLMESSAGE)
w_deathtypestring = _("%s has been vaporized by %s");
return TRUE;
mydmg *= charge;
myforce *= charge;
- W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", CHAN_WEAPON, mydmg);
+ W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", CH_WEAPON_A, mydmg);
if(charge > autocvar_g_balance_nex_charge_animlimit && autocvar_g_balance_nex_charge_animlimit) // if the Nex is overcharged, we play an extra sound
{
- sound (self, CHAN_WEAPON2, "weapons/nexcharge.wav", VOL_BASE * (charge - 0.5 * autocvar_g_balance_nex_charge_animlimit) / (1 - 0.5 * autocvar_g_balance_nex_charge_animlimit), ATTN_NORM);
+ sound (self, CH_WEAPON_B, "weapons/nexcharge.wav", VOL_BASE * (charge - 0.5 * autocvar_g_balance_nex_charge_animlimit) / (1 - 0.5 * autocvar_g_balance_nex_charge_animlimit), ATTN_NORM);
}
yoda = 0;
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
precache_sound("weapons/neximpact.wav");
}
else if (req == WR_SUICIDEMESSAGE)
- w_deathtypestring = _("%s did the impossible");
+ w_deathtypestring = _("%s is now thinking with portals");
else if (req == WR_KILLMESSAGE)
w_deathtypestring = _("%s has been vaporized by %s");
return TRUE;
void W_Porto_Success (void)
{
- if(self.owner == world)
+ if(self.realowner == world)
{
objerror("Cannot succeed successfully: no owner\n");
return;
}
- self.owner.porto_current = world;
+ self.realowner.porto_current = world;
remove(self);
}
string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo);
void W_Porto_Fail (float failhard)
{
- if(self.owner == world)
+ if(self.realowner == world)
{
objerror("Cannot fail successfully: no owner\n");
return;
}
// no portals here!
- Portal_ClearWithID(self.owner, self.portal_id);
- self.owner.porto_current = world;
+ Portal_ClearWithID(self.realowner, self.portal_id);
+ self.realowner.porto_current = world;
- if(!failhard && self.owner.playerid == self.playerid && self.owner.deadflag == DEAD_NO && !(self.owner.weapons & WEPBIT_PORTO))
+ if(!failhard && self.realowner.playerid == self.playerid && self.realowner.deadflag == DEAD_NO && !(self.realowner.weapons & WEPBIT_PORTO))
{
setsize (self, '-16 -16 0', '16 16 32');
setorigin(self, self.origin + trace_plane_normal);
if(move_out_of_solid(self))
{
self.flags = FL_ITEM;
- self.velocity = trigger_push_calculatevelocity(self.origin, self.owner, 128);
+ self.velocity = trigger_push_calculatevelocity(self.origin, self.realowner, 128);
tracetoss(self, self);
- if(vlen(trace_endpos - self.owner.origin) < 128)
+ if(vlen(trace_endpos - self.realowner.origin) < 128)
{
- W_ThrowNewWeapon(self.owner, WEP_PORTO, 0, self.origin, self.velocity);
- centerprint(self.owner, "^1Portal deployment failed.\n\n^2Catch it to try again!");
+ W_ThrowNewWeapon(self.realowner, WEP_PORTO, 0, self.origin, self.velocity);
+ centerprint(self.realowner, "^1Portal deployment failed.\n\n^2Catch it to try again!");
}
}
}
void W_Porto_Think (void)
{
trace_plane_normal = '0 0 0';
- if(self.owner.playerid != self.playerid)
+ if(self.realowner.playerid != self.playerid)
remove(self);
else
W_Porto_Fail(0);
return;
}
- if(self.owner.playerid != self.playerid)
+ if(self.realowner.playerid != self.playerid)
{
- sound(self, CHAN_PROJECTILE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
remove(self);
}
else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
{
- spamsound(self, CHAN_PROJECTILE, "porto/bounce.wav", VOL_BASE, ATTN_NORM);
+ spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTN_NORM);
// just reflect
self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
}
else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
{
- sound(self, CHAN_PROJECTILE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
W_Porto_Fail(0);
}
else if(self.effects & EF_RED)
{
self.effects += EF_BLUE - EF_RED;
- if(Portal_SpawnInPortalAtTrace(self.owner, self.right_vector, self.portal_id))
+ if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
{
- sound(self, CHAN_PROJECTILE, "porto/create.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
trace_plane_normal = norm;
- centerprint(self.owner, "^1In^7-portal created.");
+ centerprint(self.realowner, "^1In^7-portal created.");
self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm);
self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * norm));
CSQCProjectile(self, TRUE, PROJECTILE_PORTO_BLUE, TRUE); // change type
}
else
{
- sound(self, CHAN_PROJECTILE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
trace_plane_normal = norm;
W_Porto_Fail(0);
}
}
else
{
- if(self.owner.portal_in.portal_id == self.portal_id)
+ if(self.realowner.portal_in.portal_id == self.portal_id)
{
- if(Portal_SpawnOutPortalAtTrace(self.owner, self.right_vector, self.portal_id))
+ if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
{
- sound(self, CHAN_PROJECTILE, "porto/create.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
trace_plane_normal = norm;
- centerprint(self.owner, "^4Out^7-portal created.");
+ centerprint(self.realowner, "^4Out^7-portal created.");
W_Porto_Success();
}
else
{
- sound(self, CHAN_PROJECTILE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
W_Porto_Fail(0);
}
}
else
{
- sound(self, CHAN_PROJECTILE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
W_Porto_Fail(0);
}
}
if not(self.items & IT_UNLIMITED_SUPERWEAPONS)
self.weapons = self.weapons - (self.weapons & WEPBIT_PORTO);
- W_SetupShot (self, FALSE, 4, "porto/fire.wav", CHAN_WEAPON, 0);
+ W_SetupShot (self, FALSE, 4, "porto/fire.wav", CH_WEAPON_A, 0);
// always shoot from the eye
w_shotdir = v_forward;
w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward;
//pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
gren = spawn ();
- gren.owner = self;
+ gren.owner = gren.realowner = self;
gren.playerid = self.playerid;
gren.classname = "porto";
gren.bot_dodge = TRUE;
--- /dev/null
+#ifdef REGISTER_WEAPON
+REGISTER_WEAPON(RIFLE, w_rifle, IT_NAILS, 7, WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID, "campingrifle", "rifle", _("Rifle"))
+#else
+#ifdef SVQC
+
+.float rifle_accumulator;
+
+void W_Rifle_FireBullet(float pSpread, float pDamage, float pHeadshotAddedDamage, float pForce, float pSpeed, float pLifetime, float pAmmo, float deathtype, float pBulletConstant, float pTracer, float pShots, string pSound)
+{
+ float i;
+
+ W_DecreaseAmmo(ammo_nails, pAmmo, autocvar_g_balance_rifle_reload_ammo);
+
+ W_SetupShot (self, autocvar_g_antilag_bullets && pSpeed >= autocvar_g_antilag_bullets, 2, pSound, CH_WEAPON_A, (pDamage + pHeadshotAddedDamage) * pShots);
+
+ pointparticles(particleeffectnum("rifle_muzzleflash"), w_shotorg, w_shotdir * 2000, 1);
+
+ if(self.BUTTON_ZOOM | self.BUTTON_ZOOMSCRIPT) // if zoomed, shoot from the eye
+ {
+ w_shotdir = v_forward;
+ w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward;
+ }
+
+ for(i = 0; i < pShots; ++i)
+ fireBallisticBullet(w_shotorg, w_shotdir, pSpread, pSpeed, pLifetime, pDamage, pHeadshotAddedDamage / pDamage, pForce, deathtype, (pTracer ? EF_RED : EF_BLUE), 1, pBulletConstant);
+ endFireBallisticBullet();
+
+ if (autocvar_g_casings >= 2)
+ SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
+}
+
+void W_Rifle_Attack()
+{
+ W_Rifle_FireBullet(autocvar_g_balance_rifle_primary_spread, autocvar_g_balance_rifle_primary_damage, autocvar_g_balance_rifle_primary_headshotaddeddamage, autocvar_g_balance_rifle_primary_force, autocvar_g_balance_rifle_primary_speed, autocvar_g_balance_rifle_primary_lifetime, autocvar_g_balance_rifle_primary_ammo, WEP_RIFLE, autocvar_g_balance_rifle_primary_bulletconstant, autocvar_g_balance_rifle_primary_tracer, autocvar_g_balance_rifle_primary_shots, "weapons/campingrifle_fire.wav");
+}
+
+void W_Rifle_Attack2()
+{
+ W_Rifle_FireBullet(autocvar_g_balance_rifle_secondary_spread, autocvar_g_balance_rifle_secondary_damage, autocvar_g_balance_rifle_secondary_headshotaddeddamage, autocvar_g_balance_rifle_secondary_force, autocvar_g_balance_rifle_secondary_speed, autocvar_g_balance_rifle_secondary_lifetime, autocvar_g_balance_rifle_secondary_ammo, WEP_RIFLE | HITTYPE_SECONDARY, autocvar_g_balance_rifle_secondary_bulletconstant, autocvar_g_balance_rifle_secondary_tracer, autocvar_g_balance_rifle_secondary_shots, "weapons/campingrifle_fire2.wav");
+}
+
+void spawnfunc_weapon_rifle (void)
+{
+ weapon_defaultspawnfunc(WEP_RIFLE);
+}
+
+// compatibility alias
+void spawnfunc_weapon_campingrifle (void)
+{
+ spawnfunc_weapon_rifle();
+}
+void spawnfunc_weapon_sniperrifle (void)
+{
+ spawnfunc_weapon_rifle();
+}
+
+.void(void) rifle_bullethail_attackfunc;
+.float rifle_bullethail_frame;
+.float rifle_bullethail_animtime;
+.float rifle_bullethail_refire;
+void W_Rifle_BulletHail_Continue()
+{
+ float r, sw, af;
+
+ sw = self.switchweapon; // make it not detect weapon changes as reason to abort firing
+ af = ATTACK_FINISHED(self);
+ self.switchweapon = self.weapon;
+ ATTACK_FINISHED(self) = time;
+ print(ftos(self.ammo_nails), "\n");
+ r = weapon_prepareattack(self.rifle_bullethail_frame == WFRAME_FIRE2, self.rifle_bullethail_refire);
+ if(self.switchweapon == self.weapon)
+ self.switchweapon = sw;
+ if(r)
+ {
+ self.rifle_bullethail_attackfunc();
+ weapon_thinkf(self.rifle_bullethail_frame, self.rifle_bullethail_animtime, W_Rifle_BulletHail_Continue);
+ print("thinkf set\n");
+ }
+ else
+ {
+ ATTACK_FINISHED(self) = af; // reset attack_finished if we didn't fire, so the last shot enforces the refire time
+ print("out of ammo... ", ftos(self.weaponentity.state), "\n");
+ }
+}
+
+void W_Rifle_BulletHail(float mode, void(void) AttackFunc, float fr, float animtime, float refire)
+{
+ // if we get here, we have at least one bullet to fire
+ AttackFunc();
+ if(mode)
+ {
+ // continue hail
+ self.rifle_bullethail_attackfunc = AttackFunc;
+ self.rifle_bullethail_frame = fr;
+ self.rifle_bullethail_animtime = animtime;
+ self.rifle_bullethail_refire = refire;
+ weapon_thinkf(fr, animtime, W_Rifle_BulletHail_Continue);
+ }
+ else
+ {
+ // just one shot
+ weapon_thinkf(fr, animtime, w_ready);
+ }
+}
+
+.float bot_secondary_riflemooth;
+float w_rifle(float req)
+{
+ float ammo_amount;
+
+ if (req == WR_AIM)
+ {
+ self.BUTTON_ATCK=FALSE;
+ self.BUTTON_ATCK2=FALSE;
+ if(vlen(self.origin-self.enemy.origin) > 1000)
+ self.bot_secondary_riflemooth = 0;
+ if(self.bot_secondary_riflemooth == 0)
+ {
+ if(bot_aim(autocvar_g_balance_rifle_primary_speed, 0, autocvar_g_balance_rifle_primary_lifetime, FALSE))
+ {
+ self.BUTTON_ATCK = TRUE;
+ if(random() < 0.01) self.bot_secondary_riflemooth = 1;
+ }
+ }
+ else
+ {
+ if(bot_aim(autocvar_g_balance_rifle_secondary_speed, 0, autocvar_g_balance_rifle_secondary_lifetime, FALSE))
+ {
+ self.BUTTON_ATCK2 = TRUE;
+ if(random() < 0.03) self.bot_secondary_riflemooth = 0;
+ }
+ }
+ }
+ else if (req == WR_THINK)
+ {
+ if(autocvar_g_balance_rifle_reload_ammo && self.clip_load < min(autocvar_g_balance_rifle_primary_ammo, autocvar_g_balance_rifle_secondary_ammo)) // forced reload
+ weapon_action(self.weapon, WR_RELOAD);
+ else
+ {
+ self.rifle_accumulator = bound(time - autocvar_g_balance_rifle_bursttime, self.rifle_accumulator, time);
+ if (self.BUTTON_ATCK)
+ if (weapon_prepareattack_check(0, autocvar_g_balance_rifle_primary_refire))
+ if (time >= self.rifle_accumulator + autocvar_g_balance_rifle_primary_burstcost)
+ {
+ weapon_prepareattack_do(0, autocvar_g_balance_rifle_primary_refire);
+ W_Rifle_BulletHail(autocvar_g_balance_rifle_primary_bullethail, W_Rifle_Attack, WFRAME_FIRE1, autocvar_g_balance_rifle_primary_animtime, autocvar_g_balance_rifle_primary_refire);
+ self.rifle_accumulator += autocvar_g_balance_rifle_primary_burstcost;
+ }
+ if (self.BUTTON_ATCK2)
+ {
+ if (autocvar_g_balance_rifle_secondary)
+ {
+ if(autocvar_g_balance_rifle_secondary_reload)
+ weapon_action(self.weapon, WR_RELOAD);
+ else
+ {
+ if (weapon_prepareattack_check(1, autocvar_g_balance_rifle_secondary_refire))
+ if (time >= self.rifle_accumulator + autocvar_g_balance_rifle_secondary_burstcost)
+ {
+ weapon_prepareattack_do(1, autocvar_g_balance_rifle_secondary_refire);
+ W_Rifle_BulletHail(autocvar_g_balance_rifle_secondary_bullethail, W_Rifle_Attack2, WFRAME_FIRE2, autocvar_g_balance_rifle_secondary_animtime, autocvar_g_balance_rifle_primary_refire);
+ self.rifle_accumulator += autocvar_g_balance_rifle_secondary_burstcost;
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (req == WR_PRECACHE)
+ {
+ precache_model ("models/weapons/g_campingrifle.md3");
+ precache_model ("models/weapons/v_campingrifle.md3");
+ precache_model ("models/weapons/h_campingrifle.iqm");
+ precache_sound ("weapons/campingrifle_fire.wav");
+ precache_sound ("weapons/campingrifle_fire2.wav");
+ //precache_sound ("weapons/reload.wav"); // until weapons have individual reload sounds, precache the reload sound somewhere else
+ }
+ else if (req == WR_SETUP)
+ {
+ weapon_setup(WEP_RIFLE);
+ self.current_ammo = ammo_nails;
+ }
+ else if (req == WR_CHECKAMMO1)
+ {
+ ammo_amount = self.ammo_nails >= autocvar_g_balance_rifle_primary_ammo;
+ ammo_amount += self.weapon_load[WEP_RIFLE] >= autocvar_g_balance_rifle_primary_ammo;
+ return ammo_amount;
+ }
+ else if (req == WR_CHECKAMMO2)
+ {
+ ammo_amount = self.ammo_nails >= autocvar_g_balance_rifle_secondary_ammo;
+ ammo_amount += self.weapon_load[WEP_RIFLE] >= autocvar_g_balance_rifle_secondary_ammo;
+ return ammo_amount;
+ }
+ else if (req == WR_RESETPLAYER)
+ {
+ self.rifle_accumulator = time - autocvar_g_balance_rifle_bursttime;
+ }
+ else if (req == WR_RELOAD)
+ {
+ W_Reload(min(autocvar_g_balance_rifle_primary_ammo, autocvar_g_balance_rifle_secondary_ammo), autocvar_g_balance_rifle_reload_ammo, autocvar_g_balance_rifle_reload_time, "weapons/reload.wav");
+ }
+ return TRUE;
+};
+#endif
+#ifdef CSQC
+float w_rifle(float req)
+{
+ if(req == WR_IMPACTEFFECT)
+ {
+ vector org2;
+ org2 = w_org + w_backoff * 2;
+ pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1);
+ if(!w_issilent)
+ {
+ if(w_random < 0.2)
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ else if(w_random < 0.4)
+ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ else if(w_random < 0.5)
+ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ }
+ }
+ else if(req == WR_PRECACHE)
+ {
+ precache_sound("weapons/ric1.wav");
+ precache_sound("weapons/ric2.wav");
+ precache_sound("weapons/ric3.wav");
+ }
+ else if (req == WR_SUICIDEMESSAGE)
+ {
+ if(w_deathtype & HITTYPE_SECONDARY)
+ w_deathtypestring = _("%s shot themself automatically");
+ else
+ w_deathtypestring = _("%s sniped themself somehow");
+ }
+ else if (req == WR_KILLMESSAGE)
+ {
+ if(w_deathtype & HITTYPE_SECONDARY)
+ {
+ if(w_deathtype & HITTYPE_BOUNCE)
+ w_deathtypestring = _("%s failed to hide from %s's bullet hail");
+ else
+ w_deathtypestring = _("%s died in %s's bullet hail");
+ }
+ else
+ {
+ if(w_deathtype & HITTYPE_BOUNCE)
+ {
+ // TODO special headshot message here too?
+ w_deathtypestring = _("%s failed to hide from %s's rifle");
+ }
+ else
+ {
+ if(w_deathtype & HITTYPE_HEADSHOT)
+ w_deathtypestring = _("%s got hit in the head by %s");
+ else
+ w_deathtypestring = _("%s was sniped by %s");
+ }
+ }
+ }
+ return TRUE;
+}
+#endif
+#endif
void W_Rocket_Unregister()
{
- if(self.owner && self.owner.lastrocket == self)
+ if(self.realowner && self.realowner.lastrocket == self)
{
- self.owner.lastrocket = world;
- // self.owner.rl_release = 1;
+ self.realowner.lastrocket = world;
+ // self.realowner.rl_release = 1;
}
}
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
- if(IsDifferentTeam(self.owner, other))
- if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ if(IsDifferentTeam(self.realowner, other))
+ if(other.deadflag == DEAD_NO)
+ if(IsFlying(other))
+ AnnounceTo(self.realowner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
- RadiusDamage (self, self.owner, autocvar_g_balance_rocketlauncher_damage, autocvar_g_balance_rocketlauncher_edgedamage, autocvar_g_balance_rocketlauncher_radius, world, autocvar_g_balance_rocketlauncher_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_rocketlauncher_damage, autocvar_g_balance_rocketlauncher_edgedamage, autocvar_g_balance_rocketlauncher_radius, world, autocvar_g_balance_rocketlauncher_force, self.projectiledeathtype, other);
- if (self.owner.weapon == WEP_ROCKET_LAUNCHER)
+ if (self.realowner.weapon == WEP_ROCKET_LAUNCHER)
{
- if(self.owner.ammo_rockets < autocvar_g_balance_rocketlauncher_ammo)
+ if(self.realowner.ammo_rockets < autocvar_g_balance_rocketlauncher_ammo)
{
- self.owner.cnt = WEP_ROCKET_LAUNCHER;
- ATTACK_FINISHED(self.owner) = time;
- self.owner.switchweapon = w_getbestweapon(self.owner);
+ self.realowner.cnt = WEP_ROCKET_LAUNCHER;
+ ATTACK_FINISHED(self.realowner) = time;
+ self.realowner.switchweapon = w_getbestweapon(self.realowner);
}
}
remove (self);
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
- RadiusDamage (self, self.owner, autocvar_g_balance_rocketlauncher_remote_damage, autocvar_g_balance_rocketlauncher_remote_edgedamage, autocvar_g_balance_rocketlauncher_remote_radius, world, autocvar_g_balance_rocketlauncher_remote_force, self.projectiledeathtype | HITTYPE_BOUNCE, world);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_rocketlauncher_remote_damage, autocvar_g_balance_rocketlauncher_remote_edgedamage, autocvar_g_balance_rocketlauncher_remote_radius, world, autocvar_g_balance_rocketlauncher_remote_force, self.projectiledeathtype | HITTYPE_BOUNCE, world);
- if (self.owner.weapon == WEP_ROCKET_LAUNCHER)
+ if (self.realowner.weapon == WEP_ROCKET_LAUNCHER)
{
- if(self.owner.ammo_rockets < autocvar_g_balance_rocketlauncher_ammo)
+ if(self.realowner.ammo_rockets < autocvar_g_balance_rocketlauncher_ammo)
{
- self.owner.cnt = WEP_ROCKET_LAUNCHER;
- ATTACK_FINISHED(self.owner) = time;
- self.owner.switchweapon = w_getbestweapon(self.owner);
+ self.realowner.cnt = WEP_ROCKET_LAUNCHER;
+ ATTACK_FINISHED(self.realowner) = time;
+ self.realowner.switchweapon = w_getbestweapon(self.realowner);
}
}
remove (self);
head = find(head, classname, "laser_target");
}
- //bprint(selected.owner.netname);
+ //bprint(selected.realowner.netname);
//bprint("\n");
return selected;
}
void W_Rocket_RemoteExplode()
{
- if(self.owner.deadflag == DEAD_NO)
- if(self.owner.lastrocket)
+ if(self.realowner.deadflag == DEAD_NO)
+ if(self.realowner.lastrocket)
{
if((self.spawnshieldtime >= 0)
? (time >= self.spawnshieldtime) // timer
- : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > autocvar_g_balance_rocketlauncher_remote_radius) // safety device
+ : (vlen(NearestPointOnBox(self.realowner, self.origin) - self.origin) > autocvar_g_balance_rocketlauncher_remote_radius) // safety device
)
{
W_Rocket_DoRemoteExplode();
self.velocity = self.velocity + v_forward * min(autocvar_g_balance_rocketlauncher_speedaccel * g_weaponspeedfactor * frametime, velspeed);
// laser guided, or remote detonation
- if (self.owner.weapon == WEP_ROCKET_LAUNCHER)
+ if (self.realowner.weapon == WEP_ROCKET_LAUNCHER)
{
- if(self == self.owner.lastrocket)
- if not(self.owner.rl_release)
+ if(self == self.realowner.lastrocket)
+ if not(self.realowner.rl_release)
if not(self.BUTTON_ATCK2)
if(autocvar_g_balance_rocketlauncher_guiderate)
if(time > self.pushltime)
- if(self.owner.deadflag == DEAD_NO)
+ if(self.realowner.deadflag == DEAD_NO)
{
f = autocvar_g_balance_rocketlauncher_guideratedelay;
if(f)
velspeed = vlen(self.velocity);
- makevectors(self.owner.v_angle);
- desireddir = WarpZone_RefSys_TransformVelocity(self.owner, self, v_forward);
- desiredorigin = WarpZone_RefSys_TransformOrigin(self.owner, self, self.owner.origin + self.owner.view_ofs);
+ makevectors(self.realowner.v_angle);
+ desireddir = WarpZone_RefSys_TransformVelocity(self.realowner, self, v_forward);
+ desiredorigin = WarpZone_RefSys_TransformOrigin(self.realowner, self, self.realowner.origin + self.realowner.view_ofs);
olddir = normalize(self.velocity);
// now it gets tricky... we want to move like some curve to approximate the target direction
{
pointparticles(particleeffectnum("rocket_guide"), self.origin, self.velocity, 1);
// TODO add a better sound here
- sound (self.owner, CHAN_WEAPON2, "weapons/rocket_mode.wav", VOL_BASE, ATTN_NORM);
+ sound (self.realowner, CH_WEAPON_B, "weapons/rocket_mode.wav", VOL_BASE, ATTN_NORM);
self.count = 1;
}
}
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_rocketlauncher_ammo, autocvar_g_balance_rocketlauncher_reload_ammo);
- W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 5, "weapons/rocket_fire.wav", CHAN_WEAPON, autocvar_g_balance_rocketlauncher_damage);
+ W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', FALSE, 5, "weapons/rocket_fire.wav", CH_WEAPON_A, autocvar_g_balance_rocketlauncher_damage);
pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
missile = WarpZone_RefSys_SpawnSameRefSys(self);
- missile.owner = self;
+ missile.owner = missile.realowner = self;
self.lastrocket = missile;
if(autocvar_g_balance_rocketlauncher_detonatedelay >= 0)
missile.spawnshieldtime = time + autocvar_g_balance_rocketlauncher_detonatedelay;
missile = find(world, classname, "rocket");
while (missile)
{
- if (missile.owner != self)
+ if (missile.realowner != self)
{
missile = find(missile, classname, "rocket");
continue;
// count potential damage according to type of target
if (targ == self)
selfdamage = selfdamage + d;
- else if (targ.team == self.team && teams_matter)
+ else if (targ.team == self.team && teamplay)
teamdamage = teamdamage + d;
else if (bot_shouldattack(targ))
enemydamage = enemydamage + d;
desirabledamage = enemydamage;
if (time > self.invincible_finished && time > self.spawnshieldtime)
desirabledamage = desirabledamage - selfdamage * autocvar_g_balance_selfdamagepercent;
- if (teams_matter && self.team)
+ if (teamplay && self.team)
desirabledamage = desirabledamage - teamdamage;
missile = find(world, classname, "rocket");
while (missile)
{
- if (missile.owner != self)
+ if (missile.realowner != self)
{
missile = find(missile, classname, "rocket");
continue;
if (self.BUTTON_ATCK2)
{
rockfound = 0;
- for(rock = world; (rock = find(rock, classname, "rocket")); ) if(rock.owner == self)
+ for(rock = world; (rock = find(rock, classname, "rocket")); ) if(rock.realowner == self)
{
if(!rock.rl_detonate_later)
{
}
}
if(rockfound)
- sound (self, CHAN_WEAPON2, "weapons/rocket_det.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_B, "weapons/rocket_det.wav", VOL_BASE, ATTN_NORM);
}
}
}
org2 = w_org + w_backoff * 12;
pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
void Seeker_Missile_Explode ()
{
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, autocvar_g_balance_seeker_missile_damage, autocvar_g_balance_seeker_missile_edgedamage, autocvar_g_balance_seeker_missile_radius, world, autocvar_g_balance_seeker_missile_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_seeker_missile_damage, autocvar_g_balance_seeker_missile_edgedamage, autocvar_g_balance_seeker_missile_radius, world, autocvar_g_balance_seeker_missile_force, self.projectiledeathtype, other);
remove (self);
}
if (self.health <= 0)
return;
- if (self.owner == attacker)
+ if (self.realowner == attacker)
self.health = self.health - (damage * 0.25);
else
self.health = self.health - damage;
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_seeker_missile_ammo, autocvar_g_balance_seeker_reload_ammo);
makevectors(self.v_angle);
- W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/seeker_fire.wav", CHAN_WEAPON, 0);
+ W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/seeker_fire.wav", CH_WEAPON_A, 0);
w_shotorg += f_diff;
pointparticles(particleeffectnum("seeker_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
//self.detornator = FALSE;
missile = spawn();
- missile.owner = self;
+ missile.owner = missile.realowner = self;
missile.classname = "seeker_missile";
missile.bot_dodge = TRUE;
missile.bot_dodgerating = autocvar_g_balance_seeker_missile_damage;
{
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, autocvar_g_balance_seeker_flac_damage, autocvar_g_balance_seeker_flac_edgedamage, autocvar_g_balance_seeker_flac_radius, world, autocvar_g_balance_seeker_flac_force, self.projectiledeathtype, other);
+ RadiusDamage (self, self.realowner, autocvar_g_balance_seeker_flac_damage, autocvar_g_balance_seeker_flac_edgedamage, autocvar_g_balance_seeker_flac_radius, world, autocvar_g_balance_seeker_flac_force, self.projectiledeathtype, other);
remove (self);
}
f_diff = '+1.25 +3.75 0';
break;
}
- W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/flac_fire.wav", CHAN_WEAPON, autocvar_g_balance_seeker_flac_damage);
+ W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/flac_fire.wav", CH_WEAPON_A, autocvar_g_balance_seeker_flac_damage);
w_shotorg += f_diff;
pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
{
entity tag;
for(tag = world; (tag = find(tag, classname, "tag_tracker")); )
- if ((tag.owner == isowner) && (tag.tag_target == istarget))
+ if ((tag.realowner == isowner) && (tag.tag_target == istarget))
return tag;
return world;
{
entity tracker, closest_target;
- for(tracker = world; (tracker = find(tracker, classname, "tag_tracker")); ) if (tracker.owner == self)
+ for(tracker = world; (tracker = find(tracker, classname, "tag_tracker")); ) if (tracker.realowner == self)
{
if (closest_target)
{
entity oldself,oldenemy;
self.cnt = self.cnt - 1;
- if((!(self.owner.items & IT_UNLIMITED_AMMO) && self.owner.ammo_rockets < autocvar_g_balance_seeker_missile_ammo) || (self.cnt <= -1) || (self.owner.deadflag != DEAD_NO) || (self.owner.switchweapon != WEP_SEEKER))
+ if((!(self.realowner.items & IT_UNLIMITED_AMMO) && self.realowner.ammo_rockets < autocvar_g_balance_seeker_missile_ammo) || (self.cnt <= -1) || (self.realowner.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER))
{
remove(self);
return;
self.nextthink = time + autocvar_g_balance_seeker_missile_delay;
oldself = self;
- self = self.owner;
+ self = self.realowner;
oldenemy = self.enemy;
self.enemy = oldself.enemy;
void Seeker_Tracker_Think()
{
// commit suicide if: You die OR target dies OR you switch away from the seeker OR commit suicide if lifetime is up
- if ((self.owner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.owner.switchweapon != WEP_SEEKER)
+ if ((self.realowner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER)
|| (time > self.tag_time + autocvar_g_balance_seeker_tag_tracker_lifetime))
{
if (self)
// ============================
void Seeker_Tag_Explode ()
{
- //if(other==self.owner)
+ //if(other==self.realowner)
// return;
Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE, self);
vector org2;
entity e;
- dir = normalize (self.owner.origin - self.origin);
+ dir = normalize (self.realowner.origin - self.origin);
org2 = findbetterlocation (self.origin, 8);
te_knightspike(org2);
if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
{
// check to see if this person is already tagged by me
- entity tag = Seeker_Tagged_Info(self.owner, other);
+ entity tag = Seeker_Tagged_Info(self.realowner, other);
if (tag != world)
{
}
else
{
- //sprint(self.owner, strcat("You just tagged ^2", other.netname, "^7 with a tracking device!\n"));
+ //sprint(self.realowner, strcat("You just tagged ^2", other.netname, "^7 with a tracking device!\n"));
e = spawn();
e.cnt = autocvar_g_balance_seeker_missile_count;
e.classname = "tag_tracker";
e.owner = self.owner;
+ e.realowner = self.realowner;
if (autocvar_g_balance_seeker_type == 1)
{
if (autocvar_g_balance_seeker_type == 1)
{
- WaypointSprite_Spawn("tagged-target", autocvar_g_balance_seeker_tag_tracker_lifetime, 0, other, '0 0 64', self.owner, 0, other, wps_tag_tracker, TRUE);
+ WaypointSprite_Spawn("tagged-target", autocvar_g_balance_seeker_tag_tracker_lifetime, 0, other, '0 0 64', self.realowner, 0, other, wps_tag_tracker, TRUE, RADARICON_TAGGED, '0.5 1 0');
WaypointSprite_UpdateRule(other.wps_tag_tracker, 0, SPRITERULE_DEFAULT);
}
}
local entity missile;
W_DecreaseAmmo(ammo_rockets, autocvar_g_balance_seeker_tag_ammo, autocvar_g_balance_seeker_reload_ammo);
- W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/tag_fire.wav", CHAN_WEAPON, autocvar_g_balance_seeker_missile_damage * autocvar_g_balance_seeker_missile_count);
+ W_SetupShot_ProjectileSize (self, '-2 -2 -2', '2 2 2', FALSE, 2, "weapons/tag_fire.wav", CH_WEAPON_A, autocvar_g_balance_seeker_missile_damage * autocvar_g_balance_seeker_missile_count);
missile = spawn();
- missile.owner = self;
+ missile.owner = missile.realowner = self;
missile.classname = "seeker_tag";
missile.bot_dodge = TRUE;
missile.bot_dodgerating = 50;
missile.nextthink = time + autocvar_g_balance_seeker_tag_lifetime;
missile.movetype = MOVETYPE_FLY;
missile.solid = SOLID_BBOX;
- missile.owner = self;
missile.takedamage = DAMAGE_YES;
missile.event_damage = Seeker_Tag_Explode;
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tagexp1.wav", 1, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tagexp2.wav", 1, ATTN_NORM);
else
- sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tagexp3.wav", 1, ATTN_NORM);
}
}
else if(w_deathtype & HITTYPE_HEADSHOT)
{
if(!w_issilent)
- sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tag_impact.wav", 1, ATTN_NORM);
}
else
{
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/seekerexp1.wav", 1, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/seekerexp2.wav", 1, ATTN_NORM);
else
- sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/seekerexp3.wav", 1, ATTN_NORM);
}
}
}
W_DecreaseAmmo(ammo_shells, ammoamount, autocvar_g_balance_shotgun_reload_ammo);
- W_SetupShot (self, autocvar_g_antilag_bullets && bulletspeed >= autocvar_g_antilag_bullets, 5, "weapons/shotgun_fire.wav", CHAN_WEAPON, d * bullets);
+ W_SetupShot (self, autocvar_g_antilag_bullets && bulletspeed >= autocvar_g_antilag_bullets, 5, "weapons/shotgun_fire.wav", CH_WEAPON_A, d * bullets);
for (sc = 0;sc < bullets;sc = sc + 1)
fireBallisticBullet(w_shotorg, w_shotdir, spread, bulletspeed, 5, d, 0, f, WEP_SHOTGUN, 0, 1, bulletconstant);
endFireBallisticBullet();
W_AttachToShotorg(flash, '5 0 0');
}
+entity lgbeam_owner_ent;
void shotgun_meleethink (void)
{
// store time when we started swinging down inside self.cnt
if(!self.cnt)
self.cnt = time;
- makevectors(self.owner.v_angle);
+ makevectors(self.realowner.v_angle);
vector angle;
angle = v_forward;
float f;
f = (self.cnt + meleetime - time) / meleetime * 2 - 1;
vector targpos;
- targpos = self.owner.origin + self.owner.view_ofs + angle * autocvar_g_balance_shotgun_secondary_melee_range + v_right * f * autocvar_g_balance_shotgun_secondary_melee_swing + v_up * f * autocvar_g_balance_shotgun_secondary_melee_swing;
+ targpos = self.realowner.origin + self.realowner.view_ofs + angle * autocvar_g_balance_shotgun_secondary_melee_range + v_right * f * autocvar_g_balance_shotgun_secondary_melee_swing + v_up * f * autocvar_g_balance_shotgun_secondary_melee_swing;
- WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, targpos, FALSE, self.owner, ANTILAG_LATENCY(self.owner));
+ if(!lgbeam_owner_ent)
+ {
+ lgbeam_owner_ent = spawn();
+ lgbeam_owner_ent.classname = "lgbeam_owner_ent";
+ }
+ WarpZone_traceline_antilag(lgbeam_owner_ent, self.realowner.origin + self.realowner.view_ofs, targpos, FALSE, lgbeam_owner_ent, ANTILAG_LATENCY(self.realowner));
// apply the damage, also remove self
if(trace_fraction < 1 && trace_ent.takedamage == DAMAGE_AIM && (trace_ent.classname == "player" || trace_ent.classname == "body"))
{
vector force;
force = angle * autocvar_g_balance_shotgun_secondary_force;
- if(accuracy_isgooddamage(self.owner, trace_ent))
- accuracy_add(self.owner, WEP_SHOTGUN, 0, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1));
- Damage (trace_ent, self.owner, self.owner, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1), WEP_SHOTGUN | HITTYPE_SECONDARY , self.owner.origin + self.owner.view_ofs, force);
+ if(accuracy_isgooddamage(self.realowner, trace_ent))
+ accuracy_add(self.realowner, WEP_SHOTGUN, 0, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1));
+ Damage (trace_ent, self.realowner, self.realowner, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1), WEP_SHOTGUN | HITTYPE_SECONDARY , self.realowner.origin + self.realowner.view_ofs, force);
remove(self);
}
- else if(time >= self.cnt + meleetime || (self.owner.deadflag != DEAD_NO && autocvar_g_balance_shotgun_secondary_melee_no_doubleslap)) // missed or owner died, remove ent
+ else if(time >= self.cnt + meleetime || (self.realowner.deadflag != DEAD_NO && autocvar_g_balance_shotgun_secondary_melee_no_doubleslap)) // missed or owner died, remove ent
remove(self);
else // continue swinging the weapon in hope of hitting someone :)
self.nextthink = time;
void W_Shotgun_Attack2 (void)
{
- sound (self, CHAN_PROJECTILE, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM);
weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_shotgun_secondary_animtime, w_ready);
entity meleetemp;
meleetemp = spawn();
- meleetemp.owner = self;
+ meleetemp.owner = meleetemp.realowner = self;
meleetemp.think = shotgun_meleethink;
meleetemp.nextthink = time + autocvar_g_balance_shotgun_secondary_melee_delay;
W_SetupShot_Range(self, TRUE, 0, "", 0, autocvar_g_balance_shotgun_secondary_damage, autocvar_g_balance_shotgun_secondary_melee_range);
if(vlen(self.origin-self.enemy.origin) <= autocvar_g_balance_shotgun_secondary_melee_range)
self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE);
else
- self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
+ {
+ if(autocvar_g_antilag_bullets)
+ self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
+ else
+ self.BUTTON_ATCK = bot_aim(autocvar_g_balance_shotgun_primary_speed, 0, 0.001, FALSE);
+ }
+
else if (req == WR_THINK)
{
if(autocvar_g_balance_shotgun_reload_ammo && self.clip_load < autocvar_g_balance_shotgun_primary_ammo) // forced reload
if(!w_issilent && time - self.prevric > 0.25)
{
if(w_random < 0.0165)
- sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.033)
- sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.05)
- sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
self.prevric = time;
}
}
precache_sound("weapons/ric3.wav");
}
else if (req == WR_SUICIDEMESSAGE)
- w_deathtypestring = _("%s did the impossible");
+ w_deathtypestring = _("%s is now thinking with portals");
else if (req == WR_KILLMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
+++ /dev/null
-#ifdef REGISTER_WEAPON
-REGISTER_WEAPON(SNIPERRIFLE, w_sniperrifle, IT_NAILS, 7, WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID, "campingrifle", "sniperrifle", _("Sniper Rifle"))
-#else
-#ifdef SVQC
-
-.float sniperrifle_accumulator;
-
-void W_SniperRifle_FireBullet(float pSpread, float pDamage, float pHeadshotAddedDamage, float pForce, float pSpeed, float pLifetime, float pAmmo, float deathtype, float pBulletConstant, float pTracer, float pShots, string pSound)
-{
- float i;
-
- W_DecreaseAmmo(ammo_nails, pAmmo, autocvar_g_balance_sniperrifle_reload_ammo);
-
- W_SetupShot (self, autocvar_g_antilag_bullets && pSpeed >= autocvar_g_antilag_bullets, 2, pSound, CHAN_WEAPON, (pDamage + pHeadshotAddedDamage) * pShots);
-
- pointparticles(particleeffectnum("sniperrifle_muzzleflash"), w_shotorg, w_shotdir * 2000, 1);
-
- if(self.BUTTON_ZOOM | self.BUTTON_ZOOMSCRIPT) // if zoomed, shoot from the eye
- {
- w_shotdir = v_forward;
- w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward;
- }
-
- for(i = 0; i < pShots; ++i)
- fireBallisticBullet(w_shotorg, w_shotdir, pSpread, pSpeed, pLifetime, pDamage, pHeadshotAddedDamage / pDamage, pForce, deathtype, (pTracer ? EF_RED : EF_BLUE), 1, pBulletConstant);
- endFireBallisticBullet();
-
- if (autocvar_g_casings >= 2)
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
-}
-
-void W_SniperRifle_Attack()
-{
- W_SniperRifle_FireBullet(autocvar_g_balance_sniperrifle_primary_spread, autocvar_g_balance_sniperrifle_primary_damage, autocvar_g_balance_sniperrifle_primary_headshotaddeddamage, autocvar_g_balance_sniperrifle_primary_force, autocvar_g_balance_sniperrifle_primary_speed, autocvar_g_balance_sniperrifle_primary_lifetime, autocvar_g_balance_sniperrifle_primary_ammo, WEP_SNIPERRIFLE, autocvar_g_balance_sniperrifle_primary_bulletconstant, autocvar_g_balance_sniperrifle_primary_tracer, autocvar_g_balance_sniperrifle_primary_shots, "weapons/campingrifle_fire.wav");
-}
-
-void W_SniperRifle_Attack2()
-{
- W_SniperRifle_FireBullet(autocvar_g_balance_sniperrifle_secondary_spread, autocvar_g_balance_sniperrifle_secondary_damage, autocvar_g_balance_sniperrifle_secondary_headshotaddeddamage, autocvar_g_balance_sniperrifle_secondary_force, autocvar_g_balance_sniperrifle_secondary_speed, autocvar_g_balance_sniperrifle_secondary_lifetime, autocvar_g_balance_sniperrifle_secondary_ammo, WEP_SNIPERRIFLE | HITTYPE_SECONDARY, autocvar_g_balance_sniperrifle_secondary_bulletconstant, autocvar_g_balance_sniperrifle_secondary_tracer, autocvar_g_balance_sniperrifle_secondary_shots, "weapons/campingrifle_fire2.wav");
-}
-
-void spawnfunc_weapon_sniperrifle (void)
-{
- weapon_defaultspawnfunc(WEP_SNIPERRIFLE);
-}
-
-// compatibility alias
-void spawnfunc_weapon_campingrifle (void)
-{
- spawnfunc_weapon_sniperrifle();
-}
-
-.void(void) sniperrifle_bullethail_attackfunc;
-.float sniperrifle_bullethail_frame;
-.float sniperrifle_bullethail_animtime;
-.float sniperrifle_bullethail_refire;
-void W_SniperRifle_BulletHail_Continue()
-{
- float r, sw, af;
-
- sw = self.switchweapon; // make it not detect weapon changes as reason to abort firing
- af = ATTACK_FINISHED(self);
- self.switchweapon = self.weapon;
- ATTACK_FINISHED(self) = time;
- print(ftos(self.ammo_nails), "\n");
- r = weapon_prepareattack(self.sniperrifle_bullethail_frame == WFRAME_FIRE2, self.sniperrifle_bullethail_refire);
- if(self.switchweapon == self.weapon)
- self.switchweapon = sw;
- if(r)
- {
- self.sniperrifle_bullethail_attackfunc();
- weapon_thinkf(self.sniperrifle_bullethail_frame, self.sniperrifle_bullethail_animtime, W_SniperRifle_BulletHail_Continue);
- print("thinkf set\n");
- }
- else
- {
- ATTACK_FINISHED(self) = af; // reset attack_finished if we didn't fire, so the last shot enforces the refire time
- print("out of ammo... ", ftos(self.weaponentity.state), "\n");
- }
-}
-
-void W_SniperRifle_BulletHail(float mode, void(void) AttackFunc, float fr, float animtime, float refire)
-{
- // if we get here, we have at least one bullet to fire
- AttackFunc();
- if(mode)
- {
- // continue hail
- self.sniperrifle_bullethail_attackfunc = AttackFunc;
- self.sniperrifle_bullethail_frame = fr;
- self.sniperrifle_bullethail_animtime = animtime;
- self.sniperrifle_bullethail_refire = refire;
- weapon_thinkf(fr, animtime, W_SniperRifle_BulletHail_Continue);
- }
- else
- {
- // just one shot
- weapon_thinkf(fr, animtime, w_ready);
- }
-}
-
-.float bot_secondary_sniperriflemooth;
-float w_sniperrifle(float req)
-{
- float ammo_amount;
-
- if (req == WR_AIM)
- {
- self.BUTTON_ATCK=FALSE;
- self.BUTTON_ATCK2=FALSE;
- if(vlen(self.origin-self.enemy.origin) > 1000)
- self.bot_secondary_sniperriflemooth = 0;
- if(self.bot_secondary_sniperriflemooth == 0)
- {
- if(bot_aim(autocvar_g_balance_sniperrifle_primary_speed, 0, autocvar_g_balance_sniperrifle_primary_lifetime, TRUE))
- {
- self.BUTTON_ATCK = TRUE;
- if(random() < 0.01) self.bot_secondary_sniperriflemooth = 1;
- }
- }
- else
- {
- if(bot_aim(autocvar_g_balance_sniperrifle_secondary_speed, 0, autocvar_g_balance_sniperrifle_secondary_lifetime, TRUE))
- {
- self.BUTTON_ATCK2 = TRUE;
- if(random() < 0.03) self.bot_secondary_sniperriflemooth = 0;
- }
- }
- }
- else if (req == WR_THINK)
- {
- if(autocvar_g_balance_sniperrifle_reload_ammo && self.clip_load < min(autocvar_g_balance_sniperrifle_primary_ammo, autocvar_g_balance_sniperrifle_secondary_ammo)) // forced reload
- weapon_action(self.weapon, WR_RELOAD);
- else
- {
- self.sniperrifle_accumulator = bound(time - autocvar_g_balance_sniperrifle_bursttime, self.sniperrifle_accumulator, time);
- if (self.BUTTON_ATCK)
- if (weapon_prepareattack_check(0, autocvar_g_balance_sniperrifle_primary_refire))
- if (time >= self.sniperrifle_accumulator + autocvar_g_balance_sniperrifle_primary_burstcost)
- {
- weapon_prepareattack_do(0, autocvar_g_balance_sniperrifle_primary_refire);
- W_SniperRifle_BulletHail(autocvar_g_balance_sniperrifle_primary_bullethail, W_SniperRifle_Attack, WFRAME_FIRE1, autocvar_g_balance_sniperrifle_primary_animtime, autocvar_g_balance_sniperrifle_primary_refire);
- self.sniperrifle_accumulator += autocvar_g_balance_sniperrifle_primary_burstcost;
- }
- if (self.BUTTON_ATCK2)
- {
- if (autocvar_g_balance_sniperrifle_secondary)
- {
- if(autocvar_g_balance_sniperrifle_secondary_reload)
- weapon_action(self.weapon, WR_RELOAD);
- else
- {
- if (weapon_prepareattack_check(1, autocvar_g_balance_sniperrifle_secondary_refire))
- if (time >= self.sniperrifle_accumulator + autocvar_g_balance_sniperrifle_secondary_burstcost)
- {
- weapon_prepareattack_do(1, autocvar_g_balance_sniperrifle_secondary_refire);
- W_SniperRifle_BulletHail(autocvar_g_balance_sniperrifle_secondary_bullethail, W_SniperRifle_Attack2, WFRAME_FIRE2, autocvar_g_balance_sniperrifle_secondary_animtime, autocvar_g_balance_sniperrifle_primary_refire);
- self.sniperrifle_accumulator += autocvar_g_balance_sniperrifle_secondary_burstcost;
- }
- }
- }
- }
- }
- }
- else if (req == WR_PRECACHE)
- {
- precache_model ("models/weapons/g_campingrifle.md3");
- precache_model ("models/weapons/v_campingrifle.md3");
- precache_model ("models/weapons/h_campingrifle.iqm");
- precache_sound ("weapons/campingrifle_fire.wav");
- precache_sound ("weapons/campingrifle_fire2.wav");
- //precache_sound ("weapons/reload.wav"); // until weapons have individual reload sounds, precache the reload sound somewhere else
- }
- else if (req == WR_SETUP)
- {
- weapon_setup(WEP_SNIPERRIFLE);
- self.current_ammo = ammo_nails;
- }
- else if (req == WR_CHECKAMMO1)
- {
- ammo_amount = self.ammo_nails >= autocvar_g_balance_sniperrifle_primary_ammo;
- ammo_amount += self.weapon_load[WEP_SNIPERRIFLE] >= autocvar_g_balance_sniperrifle_primary_ammo;
- return ammo_amount;
- }
- else if (req == WR_CHECKAMMO2)
- {
- ammo_amount = self.ammo_nails >= autocvar_g_balance_sniperrifle_secondary_ammo;
- ammo_amount += self.weapon_load[WEP_SNIPERRIFLE] >= autocvar_g_balance_sniperrifle_secondary_ammo;
- return ammo_amount;
- }
- else if (req == WR_RESETPLAYER)
- {
- self.sniperrifle_accumulator = time - autocvar_g_balance_sniperrifle_bursttime;
- }
- else if (req == WR_RELOAD)
- {
- W_Reload(min(autocvar_g_balance_sniperrifle_primary_ammo, autocvar_g_balance_sniperrifle_secondary_ammo), autocvar_g_balance_sniperrifle_reload_ammo, autocvar_g_balance_sniperrifle_reload_time, "weapons/reload.wav");
- }
- return TRUE;
-};
-#endif
-#ifdef CSQC
-float w_sniperrifle(float req)
-{
- if(req == WR_IMPACTEFFECT)
- {
- vector org2;
- org2 = w_org + w_backoff * 2;
- pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1);
- if(!w_issilent)
- {
- if(w_random < 0.2)
- sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
- else if(w_random < 0.4)
- sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
- else if(w_random < 0.5)
- sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
- }
- }
- else if(req == WR_PRECACHE)
- {
- precache_sound("weapons/ric1.wav");
- precache_sound("weapons/ric2.wav");
- precache_sound("weapons/ric3.wav");
- }
- else if (req == WR_SUICIDEMESSAGE)
- {
- if(w_deathtype & HITTYPE_SECONDARY)
- w_deathtypestring = _("%s shot themself automatically");
- else
- w_deathtypestring = _("%s sniped themself somehow");
- }
- else if (req == WR_KILLMESSAGE)
- {
- if(w_deathtype & HITTYPE_SECONDARY)
- {
- if(w_deathtype & HITTYPE_BOUNCE)
- w_deathtypestring = _("%s failed to hide from %s's bullet hail");
- else
- w_deathtypestring = _("%s died in %s's bullet hail");
- }
- else
- {
- if(w_deathtype & HITTYPE_BOUNCE)
- {
- // TODO special headshot message here too?
- w_deathtypestring = _("%s failed to hide from %s's rifle");
- }
- else
- {
- if(w_deathtype & HITTYPE_HEADSHOT)
- w_deathtypestring = _("%s got hit in the head by %s");
- else
- w_deathtypestring = _("%s was sniped by %s");
- }
- }
- }
- return TRUE;
-}
-#endif
-#endif
#else
#ifdef SVQC
//#define TUBA_NOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav")
-.float tuba_notecount;
.entity tuba_note;
.float tuba_smoketime;
// kind of tuba currently is player slot number, or team number if in
// teamplay
// that way, holes in the range of notes are "plugged"
- if(teams_matter)
+ if(teamplay)
{
if(pl.team == COLOR_TEAM2 || pl.team == COLOR_TEAM4)
note += 3;
WriteCoord(MSG_ENTITY, self.origin_x);
WriteCoord(MSG_ENTITY, self.origin_y);
WriteCoord(MSG_ENTITY, self.origin_z);
- WriteByte(MSG_ENTITY, self.owner != to);
+ WriteByte(MSG_ENTITY, self.realowner != to);
}
return TRUE;
}
entity e;
if(time > self.teleport_time)
{
- self.owner.tuba_note = world;
+ self.realowner.tuba_note = world;
remove(self);
return;
}
self.nextthink = time;
dist_mult = autocvar_g_balance_tuba_attenuation / autocvar_snd_soundradius;
FOR_EACH_REALCLIENT(e)
- if(e != self.owner)
+ if(e != self.realowner)
{
v = self.origin - (e.origin + e.view_ofs);
vol0 = max(0, 1 - vlen(v) * dist_mult);
dir0 = normalize(v);
- v = self.owner.origin - (e.origin + e.view_ofs);
+ v = self.realowner.origin - (e.origin + e.view_ofs);
vol1 = max(0, 1 - vlen(v) * dist_mult);
dir1 = normalize(v);
if(fabs(vol0 - vol1) > 0.005) // 0.5 percent change in volume
{
- setorigin(self, self.owner.origin);
+ setorigin(self, self.realowner.origin);
self.SendFlags |= 1;
break;
}
if(dir0 * dir1 < 0.9994) // 2 degrees change in angle
{
- setorigin(self, self.owner.origin);
+ setorigin(self, self.realowner.origin);
self.SendFlags |= 1;
break;
}
void W_Tuba_Attack(float hittype)
{
vector o;
- float c, n;
+ float n;
W_SetupShot(self, FALSE, 2, "", 0, autocvar_g_balance_tuba_damage);
- if(self.tuba_notecount)
- {
- self.tuba_notecount = FALSE;
- c = CHAN_WEAPON;
- }
- else
- {
- self.tuba_notecount = TRUE;
- c = CHAN_WEAPON2;
- }
n = Tuba_GetNote(self, hittype);
if not(self.tuba_note)
{
self.tuba_note = spawn();
- self.tuba_note.owner = self;
+ self.tuba_note.owner = self.tuba_note.realowner = self;
self.tuba_note.cnt = n;
self.tuba_note.think = W_Tuba_NoteThink;
self.tuba_note.nextthink = time;
{
self.think = SUB_Remove;
self.nextthink = time;
- self.owner.muzzle_flash = world;
+ self.realowner.muzzle_flash = world;
return;
}
self.muzzle_flash.alpha = 0.75;
self.muzzle_flash.angles_z = random() * 180;
self.muzzle_flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
- self.muzzle_flash.owner = self;
+ self.muzzle_flash.owner = self.muzzle_flash.realowner = self;
}
void W_UZI_Attack (float deathtype)
{
- W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CHAN_WEAPON, ((self.misc_bulletcounter == 1) ? autocvar_g_balance_uzi_first_damage : autocvar_g_balance_uzi_sustained_damage));
+ W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? autocvar_g_balance_uzi_first_damage : autocvar_g_balance_uzi_sustained_damage));
if (!g_norecoil)
{
self.punchangle_x = random () - 0.5;
return;
}
- W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CHAN_WEAPON, autocvar_g_balance_uzi_sustained_damage);
+ W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
if (!g_norecoil)
{
self.punchangle_x = random () - 0.5;
void uzi_mode1_fire_burst()
{
- W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CHAN_WEAPON, autocvar_g_balance_uzi_sustained_damage);
+ W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
if (!g_norecoil)
{
self.punchangle_x = random () - 0.5;
pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1);
if(!w_issilent)
if(w_random < 0.05)
- sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.1)
- sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.2)
- sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
precache_sound("weapons/ric3.wav");
}
else if (req == WR_SUICIDEMESSAGE)
- w_deathtypestring = _("%s did the impossible");
+ w_deathtypestring = _("%s is now thinking with portals");
else if (req == WR_KILLMESSAGE)
{
if(w_deathtype & HITTYPE_SECONDARY)
}
.float waypointsprite_pingtime;
+.float waypointsprite_helpmetime;
void WaypointSprite_Ping(entity e)
{
// anti spam
e.SendFlags |= 32;
}
+float waypointsprite_limitedrange, waypointsprite_deployed_lifetime, waypointsprite_deadlifetime;
+
+void WaypointSprite_HelpMePing(entity e)
+{
+ WaypointSprite_Ping(e);
+ e.waypointsprite_helpmetime = time + waypointsprite_deployed_lifetime;
+ e.SendFlags |= 32;
+}
+
void WaypointSprite_FadeOutIn(entity e, float t)
{
if(!e.fade_time)
e.SendFlags |= 16;
}
-float waypointsprite_limitedrange, waypointsprite_deployed_lifetime, waypointsprite_deadlifetime;
void WaypointSprite_Init()
{
waypointsprite_limitedrange = autocvar_g_waypointsprite_limitedrange;
if(e.classname == "spectator")
e = e.enemy;
+ // as a GENERAL rule:
+ // if you have the invisibility powerup, sprites ALWAYS are restricted to your team
+ // but only apply this to real players, not to spectators
+ if(g_minstagib && (self.owner.items & IT_STRENGTH) && (e == other))
+ {
+ if(teamplay)
+ {
+ if(self.owner.team != e.team)
+ return FALSE;
+ }
+ else
+ {
+ if(self.owner != e)
+ return FALSE;
+ }
+ }
+
return self.waypointsprite_visible_for_player(e);
}
WriteByte(MSG_ENTITY, self.colormod_x * 255.0);
WriteByte(MSG_ENTITY, self.colormod_y * 255.0);
WriteByte(MSG_ENTITY, self.colormod_z * 255.0);
+
+ dt = (self.waypointsprite_helpmetime - time) / 0.1;
+ if(dt < 0)
+ dt = 0;
+ if(dt > 255)
+ dt = 255;
+ WriteByte(MSG_ENTITY, dt);
}
return TRUE;
entity ref, vector ofs, // position
entity showto, float t, // show to whom? Use a flag to indicate a team
entity own, .entity ownfield, // remove when own gets killed
- float hideable // true when it should be controlled by cl_hidewaypoints
+ float hideable, // true when it should be controlled by cl_hidewaypoints
+ float icon, vector rgb // initial icon and color
)
{
entity wp;
wp.customizeentityforclient = WaypointSprite_Customize;
wp.waypointsprite_visible_for_player = WaypointSprite_visible_for_player;
wp.reset2 = WaypointSprite_Reset;
+ wp.cnt = icon;
+ wp.colormod = rgb;
Net_LinkEntity(wp, FALSE, 0, WaypointSprite_SendEntity);
return wp;
}
string spr,
vector ofs,
entity own,
- .entity ownfield
+ .entity ownfield,
+ float icon, vector rgb // initial icon and color
)
{
- return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, own, ownfield, TRUE);
+ return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, own, ownfield, TRUE, icon, rgb);
}
.entity waypointsprite_deployed_fixed;
entity WaypointSprite_DeployFixed(
string spr,
float limited_range,
- vector ofs
+ vector ofs,
+ float icon, vector rgb // initial icon and color
)
{
float t, maxdistance;
- if(teams_matter)
+ if(teamplay)
t = self.team;
else
t = 0;
maxdistance = waypointsprite_limitedrange;
else
maxdistance = 0;
- return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, world, ofs, world, t, self, waypointsprite_deployed_fixed, FALSE);
+ return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, world, ofs, world, t, self, waypointsprite_deployed_fixed, FALSE, icon, rgb);
}
.entity waypointsprite_deployed_personal;
entity WaypointSprite_DeployPersonal(
string spr,
- vector ofs
+ vector ofs,
+ float icon, vector rgb // initial icon and color
)
{
- return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, self, waypointsprite_deployed_personal, FALSE);
+ return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, self, waypointsprite_deployed_personal, FALSE, icon, rgb);
}
.entity waypointsprite_attached;
.entity waypointsprite_attachedforcarrier;
entity WaypointSprite_Attach(
string spr,
- float limited_range
+ float limited_range,
+ float icon, vector rgb // initial icon and color
)
{
float t, maxdistance;
if(self.waypointsprite_attachedforcarrier)
return world; // can't attach to FC
- if(teams_matter)
+ if(teamplay)
t = self.team;
else
t = 0;
maxdistance = waypointsprite_limitedrange;
else
maxdistance = 0;
- return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, self, '0 0 64', world, t, self, waypointsprite_attached, FALSE);
+ return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, self, '0 0 64', world, t, self, waypointsprite_attached, FALSE, icon, rgb);
}
entity WaypointSprite_AttachCarrier(
string spr,
- entity carrier
+ entity carrier,
+ float icon, vector rgb // initial icon and color
)
{
entity e;
WaypointSprite_Kill(carrier.waypointsprite_attached); // FC overrides attached
- e = WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE);
+ e = WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE, icon, rgb);
if(e)
{
WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2);
return transform;
}
-vector AnglesTransform_Divide(vector to_transform, vector from_transform)
+vector AnglesTransform_RightDivide(vector to_transform, vector from_transform)
{
return AnglesTransform_Multiply(to_transform, AnglesTransform_Invert(from_transform));
}
+vector AnglesTransform_LeftDivide(vector from_transform, vector to_transform)
+{
+ return AnglesTransform_Multiply(AnglesTransform_Invert(from_transform), to_transform);
+}
+
vector AnglesTransform_Normalize(vector t, float minimize_roll)
{
float need_flip;
#endif
vector AnglesTransform_Apply(vector transform, vector v);
-vector AnglesTransform_Multiply(vector t1, vector t2);
+vector AnglesTransform_Multiply(vector t1, vector t2); // A B
vector AnglesTransform_Invert(vector transform);
vector AnglesTransform_TurnDirectionFU(vector transform);
vector AnglesTransform_TurnDirectionFR(vector transform);
-vector AnglesTransform_Divide(vector to_transform, vector from_transform);
+vector AnglesTransform_RightDivide(vector to_transform, vector from_transform); // A B^-1
+vector AnglesTransform_LeftDivide(vector from_transform, vector to_transform); // A^-1 B
vector AnglesTransform_Normalize(vector t, float minimize_roll); // makes sure all angles are in their range: yaw in -180..180, pitch in -90..90, roll in -180..180 (or if minimize_roll is set, pitch in -180..180, roll in -90..90)
void WarpZone_Fade_PreDraw()
{
if(self.warpzone_fadestart)
- self.alpha = bound(0, (self.warpzone_fadeend - vlen(view_origin - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1);
+ {
+ vector org;
+ org = R_SetView3fv(VF_ORIGIN);
+ self.alpha = bound(0, (self.warpzone_fadeend - vlen(org - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1);
+ }
else
self.alpha = 1;
//print(sprintf("%v <-> %v\n", view_origin, self.origin + 0.5 * (self.mins + self.maxs)));
float warpzone_fixingview;
float warpzone_fixingview_drawexteriormodel;
-//float warpzone_fixingview_sidespeed;
-//float warpzone_fixingview_forwardspeed;
-void WarpZone_Inside()
-{
- if(warpzone_fixingview)
- return;
- warpzone_fixingview = 1;
- warpzone_fixingview_drawexteriormodel = cvar("r_drawexteriormodel");
- //warpzone_fixingview_sidespeed = cvar("cl_sidespeed");
- //warpzone_fixingview_forwardspeed = cvar("cl_forwardspeed");
- cvar_set("r_drawexteriormodel", "0");
- //cvar_set("cl_sidespeed", ftos(warpzone_fixingview_sidespeed / 100)); // just keep a bit of it in case player gets stuck
- //cvar_set("cl_forwardspeed", ftos(warpzone_fixingview_forwardspeed / 100)); // just keep a bit of it in case player gets stuck
-}
+float autocvar_chase_active;
-void WarpZone_Outside()
+void WarpZone_View_Outside()
{
if(!warpzone_fixingview)
return;
warpzone_fixingview = 0;
cvar_set("r_drawexteriormodel", ftos(warpzone_fixingview_drawexteriormodel));
- //cvar_set("cl_sidespeed", ftos(warpzone_fixingview_sidespeed));
- //cvar_set("cl_forwardspeed", ftos(warpzone_fixingview_forwardspeed));
+}
+
+void WarpZone_View_Inside()
+{
+ if(autocvar_chase_active)
+ {
+ WarpZone_View_Outside();
+ return;
+ }
+ if(warpzone_fixingview)
+ return;
+ warpzone_fixingview = 1;
+ warpzone_fixingview_drawexteriormodel = cvar("r_drawexteriormodel");
+ cvar_set("r_drawexteriormodel", "0");
}
vector WarpZone_FixNearClip(vector o, vector c0, vector c1, vector c2, vector c3)
return '0 0 0';
}
-float warpzone_saved;
-vector warpzone_saved_origin;
-vector warpzone_saved_angles;
-vector warpzone_saved_cl_viewangles;
+void WarpZone_FixPMove()
+{
+ entity e;
+ e = WarpZone_Find(pmove_org, pmove_org);
+ if(e)
+ {
+ pmove_org = WarpZone_TransformOrigin(e, pmove_org);
+ input_angles = WarpZone_TransformVAngles(e, input_angles);
+ }
+}
+
#ifndef KEEP_ROLL
var float autocvar_cl_rollkillspeed = 10;
#endif
void WarpZone_FixView()
{
- float f;
- vector o;
entity e;
- vector corner0, corner1, corner2, corner3, nearclip;
-
- warpzone_saved = 0;
- warpzone_saved_origin = warpzone_fixview_origin;
- warpzone_saved_angles = warpzone_fixview_angles;
- warpzone_saved_cl_viewangles = warpzone_fixview_cl_viewangles;
-
- nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125);
- corner0 = cs_unproject('0 0 0' + nearclip);
- corner1 = cs_unproject('1 0 0' * cvar("vid_conwidth") + nearclip);
- corner2 = cs_unproject('0 1 0' * cvar("vid_conheight") + nearclip);
- corner3 = cs_unproject('1 0 0' * cvar("vid_conwidth") + '0 1 0' * cvar("vid_conheight") + nearclip);
+ vector org, ang, nearclip, corner0, corner1, corner2, corner3, o;
+ float f;
-#ifndef KEEP_ROLL
- if(warpzone_fixview_angles_z != 0 || warpzone_fixview_cl_viewangles_z != 0)
- {
- if(autocvar_cl_rollkillspeed)
- f = max(0, (1 - frametime * autocvar_cl_rollkillspeed));
- else
- f = 0;
- warpzone_fixview_angles_z *= f;
- warpzone_fixview_cl_viewangles_z *= f;
- warpzone_saved_angles_z *= f; // PERMANENTLY apply that change!
- warpzone_saved_cl_viewangles_z *= f; // PERMANENTLY apply that change!
- warpzone_saved = 2;
- R_SetView(VF_CL_VIEWANGLES_Z, warpzone_fixview_angles_z);
- }
+ org = R_SetView3fv(VF_ORIGIN);
+ ang = R_SetView3fv(VF_ANGLES);
+#ifdef WORKAROUND_XON010
+ float dirty;
+ dirty = checkextension("DP_CSQC_ROTATEMOVES");
#endif
- e = WarpZone_Find(warpzone_fixview_origin, warpzone_fixview_origin);
+ e = WarpZone_Find(org, org);
if(e)
{
- warpzone_saved = 1;
- warpzone_fixview_origin = WarpZone_TransformOrigin(e, warpzone_fixview_origin);
- corner0 = WarpZone_TransformOrigin(e, corner0);
- corner1 = WarpZone_TransformOrigin(e, corner1);
- corner2 = WarpZone_TransformOrigin(e, corner2);
- corner3 = WarpZone_TransformOrigin(e, corner3);
- warpzone_fixview_angles = WarpZone_TransformVAngles(e, warpzone_fixview_angles);
- warpzone_fixview_cl_viewangles = WarpZone_TransformVAngles(e, warpzone_fixview_cl_viewangles);
- WarpZone_Inside();
+ org = WarpZone_TransformOrigin(e, org);
+ ang = WarpZone_TransformVAngles(e, ang);
+#ifdef WORKAROUND_XON010
+ dirty = 1;
+#endif
+ WarpZone_View_Inside();
}
else
- WarpZone_Outside();
+ WarpZone_View_Outside();
- // if we are near any warpzone planes - MOVE AWAY (work around nearclip)
- o = WarpZone_FixNearClip(warpzone_fixview_origin, corner0, corner1, corner2, corner3);
- if(o != '0 0 0')
- {
- warpzone_saved = 1;
- warpzone_fixview_origin += o;
- }
+#ifndef KEEP_ROLL
+ float rick;
+ if(autocvar_cl_rollkillspeed)
+ f = max(0, (1 - frametime * autocvar_cl_rollkillspeed));
+ else
+ f = 0;
- if(warpzone_saved == 1)
- {
- R_SetView(VF_ORIGIN, warpzone_fixview_origin);
- R_SetView(VF_ANGLES, warpzone_fixview_cl_viewangles);
- }
-}
-void WarpZone_UnFixView()
-{
- if(warpzone_saved)
+ rick = R_SetView(VF_CL_VIEWANGLES_Z);
+ rick *= f;
+ R_SetView(VF_CL_VIEWANGLES_Z, rick);
+
+#ifdef WORKAROUND_XON010
+ if(ang_z > 1 || ang_z < -1)
+ dirty = 1;
+#endif
+ ang_z *= f;
+#endif
+
+#ifdef WORKAROUND_XON010
+ if(dirty)
{
- warpzone_fixview_origin = warpzone_saved_origin;
- warpzone_fixview_angles = warpzone_saved_angles;
- warpzone_fixview_cl_viewangles = warpzone_saved_cl_viewangles;
- R_SetView(VF_ORIGIN, warpzone_fixview_origin);
- R_SetView(VF_ANGLES, warpzone_fixview_angles);
- R_SetView(VF_CL_VIEWANGLES, warpzone_fixview_cl_viewangles);
+#endif
+ R_SetView(VF_ORIGIN, org);
+ R_SetView(VF_ANGLES, ang);
+#ifdef WORKAROUND_XON010
}
+#endif
+
+ nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125);
+ corner0 = cs_unproject('0 0 0' + nearclip);
+ corner1 = cs_unproject('1 0 0' * cvar("vid_conwidth") + nearclip);
+ corner2 = cs_unproject('0 1 0' * cvar("vid_conheight") + nearclip);
+ corner3 = cs_unproject('1 0 0' * cvar("vid_conwidth") + '0 1 0' * cvar("vid_conheight") + nearclip);
+ o = WarpZone_FixNearClip(org, corner0, corner1, corner2, corner3);
+ if(o != '0 0 0')
+ R_SetView(VF_ORIGIN, org + o);
}
void WarpZone_Init()
void WarpZone_Shutdown()
{
- WarpZone_Outside();
+ WarpZone_View_Outside();
}
void WarpZone_Camera_Read(float bIsNewEntity);
void WarpZone_Teleported_Read(float bIsNewEntity);
-vector warpzone_fixview_origin;
-vector warpzone_fixview_angles;
-vector warpzone_fixview_cl_viewangles;
-void WarpZone_FixView(); // this saves the previous values
-void WarpZone_UnFixView(); // and restores them
+void WarpZone_FixPMove();
+void WarpZone_FixView();
void WarpZone_Init();
void WarpZone_Shutdown();
void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, vector other_ang)
{
- e.warpzone_transform = AnglesTransform_Divide(other_ang, AnglesTransform_TurnDirectionFR(my_ang));
+ e.warpzone_transform = AnglesTransform_RightDivide(other_ang, AnglesTransform_TurnDirectionFR(my_ang));
e.warpzone_shift = AnglesTransform_PrePostShift_GetPostShift(my_org, e.warpzone_transform, other_org);
e.warpzone_origin = my_org;
e.warpzone_targetorigin = other_org;
break;
}
if((contentshack = (forent.dphitcontentsmask && !(forent.dphitcontentsmask & DPCONTENTS_SOLID))))
- forent.dphitcontentsmask |= DPCONTENTS_SOLID;
+ BITSET_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID);
// if starting in warpzone, first transform
wz = WarpZone_Find(org + mi, org + ma);
// we hit a warpzone... so, let's perform the trace after the warp again
org = WarpZone_TransformOrigin(wz, trace_endpos);
end = WarpZone_TransformOrigin(wz, end);
+
+ // we got warped, so let's step back a bit
+ tracebox(org, mi, ma, org + normalize(org - end) * 32, nomonsters_adjusted, forent);
+ org = trace_endpos;
}
WarpZone_MakeAllOther();
:fail
if(contentshack)
- forent.dphitcontentsmask &~= DPCONTENTS_SOLID;
+ BITCLR_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID);
trace_startsolid = sol;
v_forward = vf;
v_right = vr;
tracetoss(e, forent);
if(cb)
cb(e.origin, trace_endpos, trace_endpos);
- e.origin = trace_endpos;
- dt = vlen(e.origin - o0) / vlen(e.velocity);
+ dt = vlen(trace_endpos - e.origin) / vlen(e.velocity);
WarpZone_tracetoss_time += dt;
+ e.origin = trace_endpos;
e.velocity_z -= dt * g;
if(trace_fraction >= 1)
break;
// we hit a warpzone... so, let's perform the trace after the warp again
e.origin = WarpZone_TransformOrigin(wz, e.origin);
e.velocity = WarpZone_TransformVelocity(wz, e.velocity);
+
+ // we got warped, so let's step back a bit
+ e.velocity = -e.velocity;
+ tracetoss(e, forent);
+ dt = vlen(trace_endpos - e.origin) / vlen(e.velocity);
+ WarpZone_tracetoss_time -= dt;
+ e.origin = trace_endpos;
+ e.velocity = -e.velocity;
}
WarpZone_MakeAllOther();
:fail
t = AnglesTransform_Invert(me.WarpZone_refsys_incremental_transform);
s = AnglesTransform_PrePostShift_GetPostShift(me.WarpZone_refsys_incremental_shift, t, '0 0 0');
WarpZone_Accumulator_AddTransform(me.WarpZone_refsys, t, s);
- WarpZone_Accumulator_Add(me.WarpZone_refsys, ref);
+ WarpZone_Accumulator_Add(me.WarpZone_refsys, ref.WarpZone_refsys);
me.WarpZone_refsys_incremental_shift = ref.WarpZone_refsys.warpzone_shift;
me.WarpZone_refsys_incremental_transform = ref.WarpZone_refsys.warpzone_transform;
}
float warpzone_warpzones_exist;
float warpzone_cameras_exist;
-const void func_null(void); // never assign to this one please
-
.float warpzone_isboxy;
.vector warpzone_shift;
.vector warpzone_origin;
vector WarpZone_RefSys_TransformAngles(entity from, entity to, vector ang);
vector WarpZone_RefSys_TransformVAngles(entity from, entity to, vector ang);
entity WarpZone_RefSys_SpawnSameRefSys(entity me);
+
+#ifndef BITCLR
+# define BITCLR(a,b) ((a) - ((a) & (b)))
+#endif
+#ifndef BITSET
+# define BITSET(a,b) ((a) | (b))
+#endif
+#ifndef BITXOR
+# define BITXOR(a,b) (((a) | (b)) - ((a) & (b)))
+#endif
+#ifndef BITCLR_ASSIGN
+# define BITCLR_ASSIGN(a,b) ((a) = (a) - ((a) & (b)))
+#endif
+#ifndef BITSET_ASSIGN
+# define BITSET_ASSIGN(a,b) ((a) |= (b))
+#endif
+#ifndef BITXOR_ASSIGN
+# define BITXOR_ASSIGN(a,b) ((a) = ((a) | (b)) - ((a) & (b)))
+#endif
+// for think function
+.vector warpzone_save_origin;
+.vector warpzone_save_angles;
+.vector warpzone_save_eorigin;
+.vector warpzone_save_eangles;
+
+// for all entities
.vector warpzone_oldorigin, warpzone_oldvelocity, warpzone_oldangles;
.float warpzone_teleport_time;
+.float warpzone_teleport_finishtime;
.entity warpzone_teleport_zone;
void WarpZone_StoreProjectileData(entity e)
void WarpZone_TeleportPlayer(entity teleporter, entity player, vector to, vector to_angles, vector to_velocity)
{
- vector from;
-
- makevectors (to_angles);
-
- from = player.origin;
setorigin (player, to);
player.oldorigin = to; // for DP's unsticking
player.angles = to_angles;
player.fixangle = TRUE;
player.velocity = to_velocity;
- if(player.effects & EF_TELEPORT_BIT)
- player.effects &~= EF_TELEPORT_BIT;
- else
- player.effects |= EF_TELEPORT_BIT;
+ BITXOR_ASSIGN(player.effects, EF_TELEPORT_BIT);
if(player.classname == "player")
- player.flags &~= FL_ONGROUND;
+ BITCLR_ASSIGN(player.flags, FL_ONGROUND);
WarpZone_PostTeleportPlayer_Callback(player);
}
return TRUE;
}
-float WarpZone_Teleport(entity player)
+#define WARPZONE_TELEPORT_FIXSOLID(ret) \
+ do \
+ { \
+ setorigin(player, o1 - player.view_ofs); \
+ if(WarpZoneLib_MoveOutOfSolid(player)) \
+ { \
+ o1 = player.origin + player.view_ofs; \
+ setorigin(player, o0 - player.view_ofs); \
+ } \
+ else \
+ { \
+ print("would have to put player in solid, won't do that\n"); \
+ setorigin(player, o0 - player.view_ofs); \
+ return (ret); \
+ } \
+ } \
+ while(0)
+#define WARPZONE_TELEPORT_DOTELEPORT() \
+ do \
+ { \
+ WarpZone_RefSys_Add(player, wz); \
+ WarpZone_TeleportPlayer(wz, player, o1 - player.view_ofs, a1, v1); \
+ WarpZone_StoreProjectileData(player); \
+ player.warpzone_teleport_time = time; \
+ player.warpzone_teleport_finishtime = time; \
+ player.warpzone_teleport_zone = wz; \
+ } \
+ while(0)
+
+float WarpZone_Teleport(entity wz, entity player, float f0, float f1)
{
- vector o0, a0, v0, o1, a1, v1;
+ vector o0, a0, v0, o1, a1, v1, o10;
o0 = player.origin + player.view_ofs;
v0 = player.velocity;
a0 = player.angles;
- if(WarpZone_PlaneDist(self, o0) >= 0) // wrong side of the trigger_warpzone
- return 2;
- // no failure, we simply don't want to teleport yet; TODO in
- // this situation we may want to create a temporary clone
- // entity of the player to fix graphics glitch
-
- o1 = WarpZone_TransformOrigin(self, o0);
- v1 = WarpZone_TransformVelocity(self, v0);
+ o10 = o1 = WarpZone_TransformOrigin(wz, o0);
+ v1 = WarpZone_TransformVelocity(wz, v0);
if(clienttype(player) != CLIENTTYPE_NOTACLIENT)
- a1 = WarpZone_TransformVAngles(self, player.v_angle);
+ a1 = WarpZone_TransformVAngles(wz, player.v_angle);
else
- a1 = WarpZone_TransformAngles(self, a0);
+ a1 = WarpZone_TransformAngles(wz, a0);
- // put him inside solid
- tracebox(o1 - player.view_ofs, player.mins, player.maxs, o1 - player.view_ofs, MOVE_NOMONSTERS, player);
- if(trace_startsolid)
+ if(f0 != 0 || f1 != 0)
{
- vector mi, ma;
- mi = player.mins;
- ma = player.maxs;
- setsize(player, mi - player.view_ofs, ma - player.view_ofs);
- setorigin(player, o1);
- if(WarpZoneLib_MoveOutOfSolid(player))
- {
- o1 = player.origin;
- setsize(player, mi, ma);
- setorigin(player, o0);
- }
- else
+ // retry last move but behind the warpzone!
+ // we must first go back as far as we can, then forward again, to not cause double touch events!
+
+ tracebox(o1 - player.view_ofs + v1 * frametime * f1, player.mins, player.maxs, o1 - player.view_ofs + v1 * frametime * f0, MOVE_WORLDONLY, player);
{
- print("would have to put player in solid, won't do that\n");
- setsize(player, mi, ma);
- setorigin(player, o0 - player.view_ofs);
- return 0; // cannot fix
+ entity own;
+ own = player.owner;
+ player.owner = world;
+ tracebox(trace_endpos, player.mins, player.maxs, o1 - player.view_ofs + v1 * frametime * f1, MOVE_NORMAL, player); // this should get us through the warpzone
+ player.owner = own;
}
+ o1 = trace_endpos + player.view_ofs;
+
+ float d, dv, md;
+ md = max(vlen(player.mins), vlen(player.maxs));
+ d = WarpZone_TargetPlaneDist(wz, o1);
+ dv = WarpZone_TargetPlaneDist(wz, v1);
+ if(d < 0)
+ o1 = o1 - v1 * (d / dv);
}
- if(WarpZone_TargetPlaneDist(self, o1) <= 0)
- {
- print("inconsistent warp zones or evil roundoff error\n");
- return 0;
- }
+ // put him inside solid
+ tracebox(o1 - player.view_ofs, player.mins, player.maxs, o1 - player.view_ofs, MOVE_NOMONSTERS, player);
+ if(trace_startsolid)
+ WARPZONE_TELEPORT_FIXSOLID(0);
+
+ WARPZONE_TELEPORT_DOTELEPORT();
- //print(sprintf("warpzone: %f %f %f -> %f %f %f\n", o0_x, o0_y, o0_z, o1_x, o1_y, o1_z));
+ // prevent further teleports back
+ float dt = (o1 - o10) * v1 * (1 / (v1 * v1));
+ if(dt < sys_frametime)
+ player.warpzone_teleport_finishtime += sys_frametime - dt;
- //o1 = trace_endpos;
- WarpZone_RefSys_Add(player, self);
- WarpZone_TeleportPlayer(self, player, o1 - player.view_ofs, a1, v1);
- WarpZone_StoreProjectileData(player);
- player.warpzone_teleport_time = time;
- player.warpzone_teleport_zone = self;
#ifndef WARPZONE_USE_FIXANGLE
- // instead of fixangle, send the transform to the client for smoother operation
- player.fixangle = FALSE;
-
- entity ts = spawn();
- setmodel(ts, "null");
- ts.SendEntity = WarpZone_Teleported_Send;
- ts.SendFlags = 0xFFFFFF;
- ts.drawonlytoclient = player;
- ts.think = SUB_Remove;
- ts.nextthink = time + 1;
- ts.owner = player;
- ts.enemy = self;
- ts.effects = EF_NODEPTHTEST;
- ts.classname = "warpzone_teleported";
- ts.angles = self.warpzone_transform;
+ if(player.classname == "player")
+ {
+ // instead of fixangle, send the transform to the client for smoother operation
+ player.fixangle = FALSE;
+
+ entity ts = spawn();
+ setmodel(ts, "null");
+ ts.SendEntity = WarpZone_Teleported_Send;
+ ts.SendFlags = 0xFFFFFF;
+ ts.drawonlytoclient = player;
+ ts.think = SUB_Remove;
+ ts.nextthink = time + 1;
+ ts.owner = player;
+ ts.enemy = wz;
+ ts.effects = EF_NODEPTHTEST;
+ ts.classname = "warpzone_teleported";
+ ts.angles = wz.warpzone_transform;
+ }
#endif
return 1;
void WarpZone_Touch (void)
{
- entity oldself, e;
+ entity oldself;
if(other.classname == "trigger_warpzone")
return;
+ if(time <= other.warpzone_teleport_finishtime) // already teleported this frame
+ return;
+
// FIXME needs a better check to know what is safe to teleport and what not
- if(other.movetype == MOVETYPE_NONE)
+ if(other.movetype == MOVETYPE_NONE || other.movetype == MOVETYPE_FOLLOW || other.tag_entity)
return;
if(WarpZoneLib_ExactTrigger_Touch())
return;
- e = self.enemy;
- if(WarpZone_Teleport(other))
+ if(WarpZone_PlaneDist(self, other.origin + other.view_ofs) >= 0) // wrong side of the trigger_warpzone (don't teleport yet)
+ return;
+
+ float f;
+ // number of frames we need to go back:
+ // dist = 16*sqrt(2) qu
+ // dist ~ 24 qu
+ // 24 qu = v*t
+ // 24 qu = v*frametime*n
+ // n = 24 qu/(v*frametime)
+ // for clients go only one frame though, may be too irritating otherwise
+ // but max 0.25 sec = 0.25/frametime frames
+ // 24/(0.25/frametime)
+ // 96*frametime
+ float d;
+ d = 24 + max(vlen(other.mins), vlen(other.maxs));
+ if(clienttype(other) == CLIENTTYPE_NOTACLIENT)
+ f = -d / bound(frametime * d * 1, frametime * vlen(other.velocity), d);
+ else
+ f = -1;
+ if(WarpZone_Teleport(self, other, f, 0))
{
string save1, save2;
activator = other;
// we must send this flag for clientside to match properly too
f = 0;
if(self.warpzone_isboxy)
- f |= 1;
+ BITSET_ASSIGN(f, 1);
if(self.warpzone_fadestart)
- f |= 2;
+ BITSET_ASSIGN(f, 2);
if(self.origin != '0 0 0')
- f |= 4;
+ BITSET_ASSIGN(f, 4);
WriteByte(MSG_ENTITY, f);
// we need THESE to render the warpzone (and cull properly)...
WriteByte(MSG_ENTITY, ENT_CLIENT_WARPZONE_CAMERA);
if(self.warpzone_fadestart)
- f |= 2;
+ BITSET_ASSIGN(f, 2);
if(self.origin != '0 0 0')
- f |= 4;
+ BITSET_ASSIGN(f, 4);
WriteByte(MSG_ENTITY, f);
// we need THESE to render the warpzone (and cull properly)...
return TRUE;
}
-float WarpZone_CheckProjectileImpact()
+float WarpZone_CheckProjectileImpact(entity player)
{
- // if self hit a warpzone, abort
- vector o0, v0, a0;
- float mpd, pd, dpd;
+ vector o0, v0;
+
+ o0 = player.origin + player.view_ofs;
+ v0 = player.velocity;
+
+ // if we teleported shortly before, abort
+ if(time <= player.warpzone_teleport_finishtime + 0.1)
+ return 0;
+
+ // if player hit a warpzone, abort
entity wz;
- wz = WarpZone_Find(self.origin + self.mins, self.origin + self.maxs);
+ wz = WarpZone_Find(o0 + player.mins, o0 + player.maxs);
if(!wz)
return 0;
- if(self.warpzone_teleport_time == time)
+
+ print("impactfilter found something - and it even gets handled correctly - please tell divVerent that this code apparently gets triggered again\n");
+
+ // retry previous move
+ setorigin(player, player.warpzone_oldorigin);
+ player.velocity = player.warpzone_oldvelocity;
+ if(WarpZone_Teleport(wz, player, 0, 1))
{
- // just ignore if we got teleported this frame already and now hit a wall and are in a warpzone again (this will cause a detonation)
- // print("2 warps 1 frame\n");
- return -1;
- }
- o0 = self.origin;
- v0 = self.velocity;
- a0 = self.angles;
-
- // this approach transports the projectile at its full speed, but does
- // not properly retain the projectile trail (but we can't retain it
- // easily anyway without delaying the projectile by two frames, so who
- // cares)
- WarpZone_TraceBox_ThroughZone(self.warpzone_oldorigin, self.mins, self.maxs, self.warpzone_oldorigin + self.warpzone_oldvelocity * frametime, MOVE_NORMAL, self, wz, WarpZone_trace_callback_t_null); // this will get us through the warpzone
- setorigin(self, trace_endpos);
- self.angles = WarpZone_TransformAngles(WarpZone_trace_transform, self.angles);
- self.velocity = WarpZone_TransformVelocity(WarpZone_trace_transform, self.warpzone_oldvelocity);
-
- // in case we are in our warp zone post-teleport, shift the projectile forward a bit
- mpd = max(vlen(self.mins), vlen(self.maxs));
- pd = WarpZone_TargetPlaneDist(wz, self.origin);
- if(pd < mpd)
+ entity oldself;
+ string save1, save2;
+
+ oldself = self;
+ self = wz;
+ other = player;
+ activator = player;
+
+ save1 = self.target; self.target = string_null;
+ save2 = self.target3; self.target3 = string_null;
+ SUB_UseTargets();
+ if not(self.target) self.target = save1;
+ if not(self.target3) self.target3 = save2;
+
+ self = self.enemy;
+ save1 = self.target; self.target = string_null;
+ save2 = self.target2; self.target2 = string_null;
+ SUB_UseTargets();
+ if not(self.target) self.target = save1;
+ if not(self.target2) self.target2 = save2;
+ self = oldself;
+ }
+ else
{
- dpd = normalize(self.velocity) * wz.warpzone_targetforward;
- setorigin(self, self.origin + normalize(self.velocity) * ((mpd - pd) / dpd));
- if(!WarpZoneLib_MoveOutOfSolid(self))
- {
- setorigin(self, o0);
- self.angles = a0;
- self.velocity = v0;
- return 0;
- }
+ setorigin(player, o0 - player.view_ofs);
+ player.velocity = v0;
}
- WarpZone_RefSys_Add(self, wz);
- WarpZone_StoreProjectileData(self);
- self.warpzone_teleport_time = time;
return +1;
}
float f;
if(other.classname == "trigger_warpzone")
return TRUE;
- if(WarpZone_Projectile_Touch_ImpactFilter_Callback())
+
+ // no further impacts if we teleported this frame!
+ if(time == self.warpzone_teleport_time)
return TRUE;
- if((f = WarpZone_CheckProjectileImpact()) != 0)
- return (f > 0);
- if(self.warpzone_teleport_time == time)
+
+ // this SEEMS to not happen at the moment, but if it did, it would be more reliable
{
- // sequence: hit warpzone, get teleported, hit wall
- // print("2 hits 1 frame\n");
- setorigin(self, self.warpzone_oldorigin);
- self.velocity = self.warpzone_oldvelocity;
- self.angles = self.warpzone_oldangles;
- return TRUE;
+ float save_dpstartcontents;
+ float save_dphitcontents;
+ float save_dphitq3surfaceflags;
+ string save_dphittexturename;
+ float save_allsolid;
+ float save_startsolid;
+ float save_fraction;
+ vector save_endpos;
+ vector save_plane_normal;
+ float save_plane_dist;
+ entity save_ent;
+ float save_inopen;
+ float save_inwater;
+ save_dpstartcontents = trace_dpstartcontents;
+ save_dphitcontents = trace_dphitcontents;
+ save_dphitq3surfaceflags = trace_dphitq3surfaceflags;
+ save_dphittexturename = trace_dphittexturename;
+ save_allsolid = trace_allsolid;
+ save_startsolid = trace_startsolid;
+ save_fraction = trace_fraction;
+ save_endpos = trace_endpos;
+ save_plane_normal = trace_plane_normal;
+ save_plane_dist = trace_plane_dist;
+ save_ent = trace_ent;
+ save_inopen = trace_inopen;
+ save_inwater = trace_inwater;
+ if((f = WarpZone_CheckProjectileImpact(self)) != 0)
+ return (f > 0);
+ trace_dpstartcontents = save_dpstartcontents;
+ trace_dphitcontents = save_dphitcontents;
+ trace_dphitq3surfaceflags = save_dphitq3surfaceflags;
+ trace_dphittexturename = save_dphittexturename;
+ trace_allsolid = save_allsolid;
+ trace_startsolid = save_startsolid;
+ trace_fraction = save_fraction;
+ trace_endpos = save_endpos;
+ trace_plane_normal = save_plane_normal;
+ trace_plane_dist = save_plane_dist;
+ trace_ent = save_ent;
+ trace_inopen = save_inopen;
+ trace_inwater = save_inwater;
}
+
+ if(WarpZone_Projectile_Touch_ImpactFilter_Callback())
+ return TRUE;
+
return FALSE;
}
self.enemy.aiment = self;
}
+void WarpZoneCamera_Think(void)
+{
+ if(self.warpzone_save_origin != self.origin
+ || self.warpzone_save_angles != self.angles
+ || self.warpzone_save_eorigin != self.enemy.origin
+ || self.warpzone_save_eangles != self.enemy.angles)
+ {
+ WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles);
+ self.warpzone_save_origin = self.origin;
+ self.warpzone_save_angles = self.angles;
+ self.warpzone_save_eorigin = self.enemy.origin;
+ self.warpzone_save_eangles = self.enemy.angles;
+ }
+ self.nextthink = time;
+}
+
void WarpZoneCamera_InitStep_FindTarget()
{
entity e;
warpzone_cameras_exist = 1;
WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles);
self.SendFlags = 0xFFFFFF;
+ if(self.spawnflags & 1)
+ {
+ self.think = WarpZoneCamera_Think;
+ self.nextthink = time;
+ }
+ else
+ self.nextthink = 0;
}
void WarpZone_InitStep_UpdateTransform()
tex = getsurfacetexture(self, i_s);
if not(tex)
break; // this is beyond the last one
- if(tex == "textures/common/trigger")
+ if(tex == "textures/common/trigger" || tex == "trigger")
continue;
n_t = getsurfacenumtriangles(self, i_s);
for(i_t = 0; i_t < n_t; ++i_t)
}
}
+void WarpZone_Think();
void WarpZone_InitStep_FinalizeTransform()
{
if(!self.enemy || self.enemy.enemy != self)
WarpZone_SetUp(self, self.warpzone_origin, self.warpzone_angles, self.enemy.warpzone_origin, self.enemy.warpzone_angles);
self.touch = WarpZone_Touch;
self.SendFlags = 0xFFFFFF;
+ if(self.spawnflags & 1)
+ {
+ self.think = WarpZone_Think;
+ self.nextthink = time;
+ }
+ else
+ self.nextthink = 0;
}
float warpzone_initialized;
// the map, with another killtarget to designate its
// orientation
+#ifndef WARPZONE_USE_FIXANGLE
+ // used when teleporting
+ precache_model("null");
+#endif
+
if(!self.scale)
self.scale = self.modelscale;
if(!self.scale)
setsize(self, self.mins, self.maxs);
self.SendEntity = WarpZone_Send;
self.SendFlags = 0xFFFFFF;
- self.effects |= EF_NODEPTHTEST;
+ BITSET_ASSIGN(self.effects, EF_NODEPTHTEST);
self.warpzone_next = warpzone_first;
warpzone_first = self;
}
self = e;
}
+void WarpZone_Think()
+{
+ if(self.warpzone_save_origin != self.origin
+ || self.warpzone_save_angles != self.angles
+ || self.warpzone_save_eorigin != self.enemy.origin
+ || self.warpzone_save_eangles != self.enemy.angles)
+ {
+ entity oldself;
+ oldself = self;
+ WarpZone_InitStep_UpdateTransform();
+ self = self.enemy;
+ WarpZone_InitStep_UpdateTransform();
+ self = oldself;
+ WarpZone_InitStep_FinalizeTransform();
+ self = self.enemy;
+ WarpZone_InitStep_FinalizeTransform();
+ self = oldself;
+ self.warpzone_save_origin = self.origin;
+ self.warpzone_save_angles = self.angles;
+ self.warpzone_save_eorigin = self.enemy.origin;
+ self.warpzone_save_eangles = self.enemy.angles;
+ }
+ self.nextthink = time;
+}
+
void WarpZone_StartFrame()
{
entity e;
WarpZone_InitStep_UpdateTransform();
self = e;
WarpZones_Reconnect();
+ WarpZone_PostInitialize_Callback();
}
- if(warpzone_warpzones_exist)
+ entity oldself, oldother;
+ oldself = self;
+ oldother = other;
+ for(e = world; (e = nextent(e)); )
{
- entity oldself, oldother;
- oldself = self;
- oldother = other;
- for(e = world; (e = nextent(e)); )
+ if(warpzone_warpzones_exist) { WarpZone_StoreProjectileData(e); }
+
+ float f = clienttype(e);
+ if(f == CLIENTTYPE_REAL)
{
- WarpZone_StoreProjectileData(e);
- float f;
- f = clienttype(e);
- if(f == CLIENTTYPE_REAL)
+ if(e.solid == SOLID_NOT) // not spectating?
+ if(e.movetype == MOVETYPE_NOCLIP || e.movetype == MOVETYPE_FLY || e.movetype == MOVETYPE_FLY_WORLDONLY) // not spectating? (this is to catch observers)
{
- if(e.solid != SOLID_NOT) // not spectating?
- continue;
- if(e.movetype != MOVETYPE_NOCLIP && e.movetype != MOVETYPE_FLY) // not spectating? (this is to catch observers)
- continue;
- self = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs);
- if(!self)
- continue;
- other = e;
- if(WarpZoneLib_ExactTrigger_Touch())
- continue;
- WarpZone_Teleport(e); // NOT triggering targets by this!
+ other = e; // player
+
+ // warpzones
+ if(warpzone_warpzones_exist) {
+ self = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs);
+ if(self)
+ if(!WarpZoneLib_ExactTrigger_Touch())
+ if(WarpZone_PlaneDist(self, e.origin + e.view_ofs) <= 0)
+ WarpZone_Teleport(self, e, -1, 0); } // NOT triggering targets by this!
+
+ // teleporters
+ self = Teleport_Find(e.origin + e.mins, e.origin + e.maxs);
+ if(self)
+ if(!WarpZoneLib_ExactTrigger_Touch())
+ Simple_TeleportPlayer(self, other); // NOT triggering targets by this!
}
- if(f == CLIENTTYPE_NOTACLIENT)
- {
+ }
+
+ if(f == CLIENTTYPE_NOTACLIENT)
+ {
+ if(warpzone_warpzones_exist)
for(; (e = nextent(e)); )
WarpZone_StoreProjectileData(e);
- break;
- }
+ break;
}
- self = oldself;
- other = oldother;
}
+ self = oldself;
+ other = oldother;
}
.float warpzone_reconnecting;
const float ENT_CLIENT_WARPZONE_CAMERA;
void WarpZone_PlayerPhysics_FixVAngle(void);
+
+void WarpZone_PostInitialize_Callback(void);
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_workspace_file>
- <Workspace title="Xonotic Gamecode">
- <Project filename="qc-server.cbp" active="1" />
- <Project filename="qc-client.cbp" />
- <Project filename="qc-common.cbp" />
- </Workspace>
-</CodeBlocks_workspace_file>
exec data/campaign.cfg
exec config_update.cfg
exec font-xolonium.cfg
+exec autoexec/*.cfg
exec autoexec.cfg
stuffcmds
//startdemos demos/demo1 demos/demo2 demos/demo3
--- /dev/null
+spiderbot
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map textures/spiderbot.tga
+ rgbgen lightingDiffuse
+ }
+}
+wakazachi
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map textures/wakazachi.tga
+ rgbgen lightingDiffuse
+ }
+}
+cockpit
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map textures/cockpit.tga
+ rgbgen lightingDiffuse
+ }
+}
+vehicles/tracercore
+{
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ deformVertexes autosprite
+ {
+ map models/vehicles/tracercore.tga
+ blendfunc add
+ rgbGen lightingDiffuse
+ }
+ }
+vehicles/tracertrail
+{
+ surfaceparm nonsolid
+ surfaceparm nolightmap
+ cull none
+ deformVertexes autosprite2
+ {
+ map models/vehicles/tracertrail.tga
+ blendfunc add
+ rgbGen lightingDiffuse
+ }
+}
+
\ No newline at end of file
--- /dev/null
+models/vehicles/rockets
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map models/vehicles/rockets.tga
+ rgbgen lightingDiffuse
+ }
+}
+rockets
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map models/vehicles/rockets.tga
+ rgbgen lightingDiffuse
+ }
+}
\ No newline at end of file
-//affirmative sound/player/torus/coms/affirmative 0
-attack sound/player/torus/coms/attack 0
-//attacking sound/player/torus/coms/attacking 0
-attackinfive sound/player/torus/coms/letsgo 0
-coverme sound/player/torus/coms/coverme 0
-//defend sound/player/torus/coms/defend 1
-//defending sound/player/torus/coms/defending 0
-//droppedflag sound/player/torus/coms/droppedflag 0
-//flagcarriertakingdamage sound/player/torus/coms/flagcarriertakingdamage 0
-//freelance sound/player/torus/coms/freelance 1
-//getflag sound/player/torus/coms/getflag 0
-incoming sound/player/torus/coms/incoming 0
-meet sound/player/torus/coms/waypoint 0
-needhelp sound/player/torus/coms/needhelp 0
-//negative sound/player/torus/coms/negative 0
-//onmyway sound/player/torus/coms/onmyway 0
-//roaming sound/player/torus/coms/roaming 0
-//seenenemy sound/player/torus/coms/seenenemy 0
-seenflag sound/player/torus/coms/seenflag 0
-taunt sound/player/torus/coms/taunt 2
-teamshoot sound/player/torus/coms/teamshoot 0
-death sound/player/torus/player/death 0
-drown sound/player/torus/player/drown 0
-//fall sound/player/torus/player/fall 0
-//falling sound/debug/v_falling 0
-gasp sound/player/torus/player/gasp 0
-jump sound/player/torus/player/fall 0
-pain25 sound/player/torus/player/pain25 0
-pain50 sound/player/torus/player/pain50 0
-pain75 sound/player/torus/player/pain75 0
-pain100 sound/player/torus/player/pain100 0
+affirmative sound/player/espeak/coms/affirmative 0
+attack sound/player/espeak/coms/attack 0
+attacking sound/player/espeak/coms/attacking 0
+attackinfive sound/player/espeak/coms/attackinfive 0
+coverme sound/player/espeak/coms/coverme 0
+defend sound/player/espeak/coms/defend 0
+defending sound/player/espeak/coms/defending 0
+droppedflag sound/player/espeak/coms/droppedflag 0
+flagcarriertakingdamage sound/player/espeak/coms/flagcarriertakingdamage 0
+freelance sound/player/espeak/coms/freelance 0
+getflag sound/player/espeak/coms/getflag 0
+incoming sound/player/espeak/coms/incoming 0
+meet sound/player/espeak/coms/meet 0
+needhelp sound/player/espeak/coms/needhelp 0
+negative sound/player/espeak/coms/negative 0
+onmyway sound/player/espeak/coms/onmyway 0
+roaming sound/player/espeak/coms/roaming 0
+seenenemy sound/player/espeak/coms/seenenemy 0
+seenflag sound/player/espeak/coms/seenflag 0
+taunt sound/player/espeak/coms/taunt 0
+teamshoot sound/player/espeak/coms/teamshoot 0
+death sound/player/espeak/player/death 0
+drown sound/player/espeak/player/drown 0
+fall sound/player/espeak/player/fall 0
+falling sound/player/espeak/player/falling 0
+gasp sound/player/espeak/player/gasp 0
+jump sound/player/espeak/player/jump 0
+pain25 sound/player/espeak/player/pain25 0
+pain50 sound/player/espeak/player/pain50 0
+pain75 sound/player/espeak/player/pain75 0
+pain100 sound/player/espeak/player/pain100 0
--- /dev/null
+v()
+{
+ espeak -w "$1.wav" "$2"
+ normalize "$1.wav"
+ oggenc -q1 "$1.wav" -o "$1.ogg"
+ rm -f "$1.wav"
+}
+
+v player/death "Mine Leyben!"
+v player/fall "Ooh!"
+v player/drown "Gloog gloog gloog!"
+v player/gasp "Ha!"
+v player/jump "Hem!"
+v player/pain25 "Owowowow!"
+v player/pain50 "Owow!"
+v player/pain75 "Ouuu!"
+v player/pain100 "Ouch!"
+v player/fall "Arh!"
+v player/falling "Aaaaaaaaaaaaaaaaaaaaa!"
+v coms/attack "Attack!"
+v coms/attackinfive "Attack in 5! In 4! In 3! In 2! In 1! Attack NOW!"
+v coms/meet "Let's meet at the waypoint."
+v coms/seenflag "I've seen the flag!"
+v coms/taunt "Double facepalm!"
+v coms/teamshoot "I'm on your team!"
+v coms/incoming "Incoming!"
+v coms/coverme "Cover me!"
+v coms/needhelp "I need help!"
+v coms/defend "Defend the base!"
+v coms/freelance "Do whatever you want."
+v coms/flagcarriertakingdamage "Our flag carrier is taking damage!"
+v coms/getflag "Somebody get our flag back!"
+v coms/affirmative "Affirmative."
+v coms/attacking "I'm attacking."
+v coms/defending "I'm defending."
+v coms/roaming "I'm roaming around."
+v coms/onmyway "I'm on my way."
+v coms/droppedflag "I dropped the flag!"
+v coms/negative "Negative."
+v coms/seenenemy "I've seen an enemy."
\menu_slist_showempty\Show empty servers
\menu_slist_showfull\Show full servers that have no slots available
\net_slist_pause\Pause updating the server list to prevent servers from "jumping around"
-\XonoticMultiplayerDialog/Info\Show more information about the currently highlighted server
+\XonoticMultiplayerDialog/Info...\Show more information about the currently highlighted server
\XonoticMultiplayerDialog/Bookmark\Bookmark the currently highlighted server so that it's faster to find in the future
-\XonoticMultiplayerDialog/Havoc\Change to Havoc mode which has some modifications to the gameplay
\XonoticMultiplayerDialog/Create\Host your own game
\XonoticMultiplayerDialog/Demos\Browse and view demos
\XonoticMultiplayerDialog/Player Setup\Customize your player settings
\g_minstagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
\g_nix_with_laser\Always carry the laser as an additional weapon in Nix
-\XonoticMultiplayerDialog/All\Select all maps
-\XonoticMultiplayerDialog/None\Unselect all maps
+\XonoticMultiplayerDialog/Select all\Select all maps
+\XonoticMultiplayerDialog/Select none\Unselect all maps
\XonoticMultiplayerDialog/Timedemo\Benchmark how fast your computer can run the highlighted demo
\crosshair_alpha\Adjust the opacity of the crosshair
\crosshair_color\Adjust the crosshair color
\sbar_hudselector\Use the old HUD layout
-\XonoticMultiplayerDialog/Radar, HUD & Waypoints...\Adjust the radar, HUD and waypoints
+\XonoticMultiplayerDialog/Waypoints setup...\-
\_cl_name\Name under which you will appear in the game
\XonoticSettingsDialog\Change the game settings
\r_damageblur\Amount of motion blur when hurt - 0.4 recommended
\XonoticSettingsDialog/Audio\Audio settings
+\mastervolume\-
\bgmvolume\-
-\volume\-
\snd_staticvolume\-
-\snd_worldchannel0volume\-
-\snd_entchannel3volume\-
-\snd_playerchannel6volume\-
-\snd_playerchannel7volume\-
-\snd_entchannel4volume\-
-\snd_playerchannel2volume\-
-\snd_playerchannel1volume\-
+\snd_channel0volume\-
+\snd_channel3volume\-
+\snd_channel6volume\-
+\snd_channel7volume\-
+\snd_channel4volume\-
+\snd_channel2volume\-
+\snd_channel1volume\-
\snd_speed\Sound output frequency
\snd_channels\Number of channels for the sound output
\snd_swapstereo\Swap left/right channels
\menu_slist_showempty\Aktiviere die Anzeige von leeren Servern
\menu_slist_showfull\Aktiviere die Anzeige von vollen Servern, die keinen freien Platz mehr haben
\net_slist_pause\Unterbreche die automatische Aktualisierung der Serverliste um ein "Herumspringen" zu verhindern
-\XonoticMultiplayerDialog/Info\Lass dir mehr Informationen über den markierten Server anzeigen
-\XonoticMultiplayerDialog/Bookmark\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden
-\XonoticMultiplayerDialog/Havoc\Wechsel in den Havoc Modus, welcher zu Änderungen des Spielverhaltens führt
+\XonoticMultiplayerDialog/Info...\Lass dir mehr Informationen über den markierten Server anzeigen
+\XonoticMultiplayerDialog/Speichern\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden
\XonoticMultiplayerDialog/Starten\Hoste dein eigenes Spiel
\XonoticMultiplayerDialog/Demos\Gucke dir Demos an
\XonoticMultiplayerDialog/Spieler-Einstellungen\Ändere deine Spieler-Einstellungen
\g_minstagib\Alle Spieler starten mit der Minstanex, eine elektromagnetische Schienenkanone mit unendlich viel Schaden. Wenn ein Spieler keine Munition mehr hat, bleiben ihm 10 Sekunden um neue zu finden, ansonsten stirbt er. Der 2. Feuermodus ist Laser, welcher keinen Schaden hinzufügen kann. Dieser eignet sich gut für Tricksprünge.
\g_nix\Es gibt keine aufzusammelnden Gegenstände in Xonotic - Anstelle der Möglichkeit Waffen aufzusammeln, spielen alle mit der gleichen Waffe. Nach einiger Zeit startet ein Countdown, danach wechseln alle Spieler zu einer neuen gleichen Waffe.
\g_nix_with_laser\In Nix ist als zweite Waffe der Laser vorhanden.
-\XonoticMultiplayerDialog/All\Wähle alle Maps.
-\XonoticMultiplayerDialog/None\Wähle alle Maps ab.
+\XonoticMultiplayerDialog/Select all\Wähle alle Maps.
+\XonoticMultiplayerDialog/Select none\Wähle alle Maps ab.
\XonoticMultiplayerDialog/Timedemo\Mache einen Benchmark-Test der markierten Demo. Die Demo wird in Zeitraffer, -lupe abgespielt. Das Ergebnis wird in "gamedir/data/benchmark.log" gespeichert.
\crosshair_color_green\Grüner Farbanteil des Fadenkreuzes.
\crosshair_color_blue\Blauer Farbanteil des Fadenkreuzes.
\sbar_hudselector\Verwende das alte HUD Layout.
-\XonoticMultiplayerDialog/Radar, HUD & Waypoints...\Stelle Radar, HUD & Wegpunkte ein.
+\XonoticMultiplayerDialog/Waypoints setup...\Stelle Radar, HUD & Wegpunkte ein.
\_cl_name\Lege deinen Namen im Spiel fest.
\XonoticSettingsDialog\Ändere die Spiel-Einstellungen
\r_motionblur\Wert für die Bewegungsunschärfe - 0.5 empfohlen
\r_damageblur\Wert für die Unschärfe bei einer Verletzung - 0.4 empfohlen
-\XonoticSettingsDialog/Audio\Audio-Einstellungen
+\XonoticSettingsDialog/Ton\Audio-Einstellungen
+\mastervolume\-
\bgmvolume\-
-\volume\-
\snd_staticvolume\-
-\snd_worldchannel0volume\-
-\snd_entchannel3volume\-
-\snd_playerchannel6volume\-
-\snd_playerchannel7volume\-
-\snd_entchannel4volume\-
-\snd_playerchannel2volume\-
-\snd_playerchannel1volume\-
+\snd_channel0volume\-
+\snd_channel3volume\-
+\snd_channel6volume\-
+\snd_channel7volume\-
+\snd_channel4volume\-
+\snd_channel2volume\-
+\snd_channel1volume\-
\snd_speed\Ausgangsfrequenz des Tons
\snd_channels\Anzahl der Kanäle für die Audiowiedergabe
\snd_swapstereo\Linken und rechten Kanal der Stereowiedergabe tauschen
\XonoticMultiplayerDialog\Juega online, contra tus amigos en LAN, ver demos o cambia la configuración del jugador
-\XonoticMultiplayerDialog/Servers\Encuentra servidores para jugar
+\XonoticMultiplayerDialog/Servidores\Encuentra servidores para jugar
\menu_slist_showempty\Mostrar servidores vacíos
\menu_slist_showfull\Mostrar los servidores que no tienen espacio disponible
\net_slist_pause\Pausa la actualización de la lista de servidores para evitar que salteen
-\XonoticMultiplayerDialog/Info\Mostrar mas información sobre el actual servidor resaltado
-\XonoticMultiplayerDialog/Bookmark\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro
-\XonoticMultiplayerDialog/Havoc\Cambiar a Havoc modo, el cual tiene algunas modificaciones en el juego
-\XonoticMultiplayerDialog/Create\Crear tu propio juego
+\XonoticMultiplayerDialog/Info...\Mostrar mas información sobre el actual servidor resaltado
+\XonoticMultiplayerDialog/Marcador\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro
+\XonoticMultiplayerDialog/Crear\Crear tu propio juego
\XonoticMultiplayerDialog/Demos\Navegar y ver demos
\XonoticMultiplayerDialog/Player Setup\Configuración de jugador
\XonoticTeamSelectDialog/Unirse al'mejor' equipo (seleccion automática)\Auto seleccionar equipo (recomendado)
-\XonoticTeamSelectDialog/red\Unirse al equipo rojo
-\XonoticTeamSelectDialog/blue\Unirse al equipo azul
-\XonoticTeamSelectDialog/yellow\Unirse al equipo amarillo
-\XonoticTeamSelectDialog/pink\Unirse al equipo rosa
+\XonoticTeamSelectDialog/rojo\Unirse al equipo rojo
+\XonoticTeamSelectDialog/azul\Unirse al equipo azul
+\XonoticTeamSelectDialog/amarillo\Unirse al equipo amarillo
+\XonoticTeamSelectDialog/rosa\Unirse al equipo rosa
\timelimit_override\Límite de tiempo en minutos que cuando pase, terminara el combate
\fraglimit_override\Cantidad de puntos necesarios antes de que termine el combate
\g_minstagib\Los jugadores tendran Minstanex, el cual es un railgun con daño infinito. Si el jugador queda sin munición, tendra 10 segundos para buscar mas o morira. El modo de disparo secundario es un laser que no inflige daño y es bueno para hacer bromas.
\g_nix\Xonotic sin items - en vez de recoger items, todos juegan con la misma arma. Despues de algún tiempo, comienza una cuenta regresiva, despues del cual todos juegan con otra arma.
\g_nix_with_laser\Siempre lleva el láser como arma adicional en Nix
-\XonoticMultiplayerDialog/All\Seleccionar todos los mapas
-\XonoticMultiplayerDialog/None\Deseleccionar todos los mapas
+\XonoticMultiplayerDialog/Select all\Seleccionar todos los mapas
+\XonoticMultiplayerDialog/Select none\Deseleccionar todos los mapas
-\XonoticMultiplayerDialog/Timedemo\Prueba cuan rápido tu computadora puede correr la demo seleccionada
+\XonoticMultiplayerDialog/Demo temporizado\Prueba cuan rápido tu computadora puede correr la demo seleccionada
\fov\Campo de visión en grados de 60 a 130, 90 es el default
\cl_bobcycle\Frecuencia de balanceo de la vista
\cl_weaponpriority_useforcycling\Haz uso de la lista de abajo when cambia de arma con la rueda del raton
\cl_autoswitch\Cambia automáticamente al arma recogida si es mejor que la que esta llevando
\r_drawviewmodel\Muestra el modelo de arma
-\cl_gunalign\Posición del modelo de arma; requiere conección
+\cl_gunalign\Posición del modelo de arma; requiere conexión
\crosshair_per_weapon\Configura diferentes miras para cada arma, esto ayuda si estas jugando sin un modelo de arma
\crosshair_color_override\Tambien configura el color del punto de mira dependiendo del arma que uses actualmente
\crosshair_color_green\Componente verde del color del punto de mira
\crosshair_color_blue\Componente azul del color del punto de mira
\sbar_hudselector\Usar el viejo diseño de HUD
-\XonoticMultiplayerDialog/Radar, HUD & puntos de referencia...\Ajustar el radar, el HUD y los puntos de referencia
+\XonoticMultiplayerDialog/Waypoints setup...\Ajustar el radar, el HUD y los puntos de referencia
\_cl_name\Nombre con el cual aparecerás en el juego
\XonoticSettingsDialog\Cambiar la configuración del juego
\XonoticCvarsDialog\-
\XonoticQuitDialog\Salir del juego
-\XonoticQuitDialog/Yes\Volver al trabajo...
+\XonoticQuitDialog/Si\Volver al trabajo...
\XonoticQuitDialog/No\Tengo algunos puntos más por hacer!
-\XonoticSettingsDialog/Input\configuración de entrada
+\XonoticSettingsDialog/Entrada\configuración de entrada
\sensitivity\Multiplicador de velocidad del ratón
\menu_mouse_speed\Multiplicador de velocidad del raton en el menu, esto no afecta al apuntar en el juego
\m_filter\Suaviza el movimiento del raton, pero hace menos sensible al apuntar al objetivo
\vid_samples\activar antialiasing, el cual suaviza los bordes en geometrias en 3D. Note que esto puede disminuir bastante el rendimiento (por defecto: desactivado)
\v_flipped\Invertir la imagen horizontalmente (por defecto: desactivado)
-\XonoticSettingsDialog/Effects\configuración de efectos.
+\XonoticSettingsDialog/Efectos\configuración de efectos.
\r_subdivisions_tolerance\Cambiar la suavidad de las curvas en el mapa (por defecto: normal)
\gl_picmip\Cambiar la dureza de las texturas. Bajándolo efectivamente reducira el uso de la memoria de la textura, pero hará que las texturas aparezcan muy borrosas. (por defecto: bueno)
\r_picmipworld\Si se activa, solo reduce la calidad de texturas de los modelos (activado por defecto)
\r_coronas_occlusionquery\Coronas apagadas acorde a la visibilidad (activado por defecto)
\r_bloom\Activar efecto bloom, que ilumina los píxeles vecinos de píxeles muy brillantes.Tiene un gran impacto en el rendimiento. (desactivado por defecto)
\r_hdr\Versión de gran calidad de bloom, que tiene un gran impacto en el rendimiento. (desactivado por defecto)
-\r_motionblur\Nivel de desenfoque de movimiento - 0.5 recomendado
-\r_damageblur\Cantidad de desenfoque de movimiento en presencia de daños - 0.4 recomendado
+\r_motionblur\Nivel de difuminado de movimiento - 0.5 recomendado
+\r_damageblur\Cantidad de difuminado de movimiento en presencia de daños - 0.4 recomendado
-\XonoticSettingsDialog/Audio\configuración de audio
+\XonoticSettingsDialog/Sonido\configuración de audio
+\mastervolume\-
\bgmvolume\-
-\volume\-
\snd_staticvolume\-
-\snd_worldchannel0volume\-
-\snd_entchannel3volume\-
-\snd_playerchannel6volume\-
-\snd_playerchannel7volume\-
-\snd_entchannel4volume\-
-\snd_playerchannel2volume\-
-\snd_playerchannel1volume\-
+\snd_channel0volume\-
+\snd_channel3volume\-
+\snd_channel6volume\-
+\snd_channel7volume\-
+\snd_channel4volume\-
+\snd_channel2volume\-
+\snd_channel1volume\-
\snd_speed\Frecuencia de salida del sonido
\snd_channels\Número de canales para la salida del sonido
\snd_swapstereo\Invertir canales izquierda o derecha
\cl_hitsound\Reproduce un sonido indicador de anotacion cuando disparas a un enemigo
\menu_sounds\Reproduce sonidos cuando se clickea o se posiciona sobre un item del menú
-\XonoticSettingsDialog/Network\configuración de la red
+\XonoticSettingsDialog/Red\configuración de la red
\cl_movement\Activar predicción de movimiento del lado del cliente
\cl_nolerp\Activar actualización suave en la red
\shownetgraph\Activar un gráfico de tamaño de paquetes y otra información
\XonoticMultiplayerDialog\Jouer en ligne avec des amis en réseau local ou sur Internet
-\XonoticMultiplayerDialog/Servers\Trouver des serveurs pour y jouer dessus
+\XonoticMultiplayerDialog/Serveurs\Trouver des serveurs pour y jouer dessus
\menu_slist_showempty\Montrer les serveurs vides
\menu_slist_showfull\Montrer les serveurs où toutes les places sont prises
\net_slist_pause\Ne met pas à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur
-\XonoticMultiplayerDialog/Info\Montrer plus d'information sur le serveur séléctionné
-\XonoticMultiplayerDialog/Bookmark\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard
-\XonoticMultiplayerDialog/Havoc\Changer au mode Havoc qui comporte des modifications sur le jeu
-\XonoticMultiplayerDialog/Create\Héberger votre propre partie
-\XonoticMultiplayerDialog/Demos\Regarder des Vidéos pré-enregistrées
+\XonoticMultiplayerDialog/Info...\Montrer plus d'information sur le serveur séléctionné
+\XonoticMultiplayerDialog/Marque-page\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard
+\XonoticMultiplayerDialog/Créer\Héberger votre propre partie
+\XonoticMultiplayerDialog/Vidéos\Regarder des Vidéos pré-enregistrées
\XonoticMultiplayerDialog/Player Setup\Personaliser vos paramètres
\XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe qui a le plus besoin de vous (recommandé)
-\XonoticTeamSelectDialog/red\Joindre l'équipe rouge
-\XonoticTeamSelectDialog/blue\Joindre l'équipe bleue
-\XonoticTeamSelectDialog/yellow\Joindre l'équipe jaune
-\XonoticTeamSelectDialog/pink\Joindre l'équipe rose
+\XonoticTeamSelectDialog/rouge\Joindre l'équipe rouge
+\XonoticTeamSelectDialog/bleu\Joindre l'équipe bleue
+\XonoticTeamSelectDialog/jaune\Joindre l'équipe jaune
+\XonoticTeamSelectDialog/rose\Joindre l'équipe rose
\timelimit_override\Limite de temps au match, le match se finit quand elle est atteinte
\fraglimit_override\Limite de tués pour le match, le match se finit quand elle est atteinte
\g_minstagib\Tous les joueurs reçoivent un MinstaNex, qui est un sniper hyperpuissant qui tue d'un coup. Si vous n'avez plus de munitions, vous mourez progressivement.
\g_nix\No Items Xonotic; tous les joueurs ont la même arme en même temps, et on change d'arme régulièrement
\g_nix_with_laser\Porter le laser avec l'arme du No Items Xonotic
-\XonoticMultiplayerDialog/All\Séléctionner toutes les cartes
-\XonoticMultiplayerDialog/None\Déséléctionner toutes les cartes
+\XonoticMultiplayerDialog/Select all\Séléctionner toutes les cartes
+\XonoticMultiplayerDialog/Select none\Déséléctionner toutes les cartes
-\XonoticMultiplayerDialog/Timedemo\Faire un test de performance en utilisant la vidéo choisie
+\XonoticMultiplayerDialog/Test Performance\Faire un test de performance en utilisant la vidéo choisie
\fov\Champ de vision en degrés, par défaut 90, certains joueurs préfèrent entre 110 et 130
\cl_bobcycle\Effet de "tremblement" de la caméra en courant
\crosshair_color_green\Couleur: intensité du vert dans le viseur
\crosshair_color_blue\Couleur: intensité du bleu dans le viseur
\sbar_hudselector\Utiliser l'ancienne interface HUD
-\XonoticMultiplayerDialog/Radar, HUD & Waypoints...\Ajuster les paramètres de l'interface, de la mini-carte et des Waypoints
+\XonoticMultiplayerDialog/Waypoints setup...\Ajuster les paramètres de l'interface, de la mini-carte et des Waypoints
\_cl_name\Pseudonyme utilisé pour vous reconnaître dans le jeu
\XonoticSettingsDialog\Changer les paramètres du jeu
\XonoticCvarsDialog\-
\XonoticQuitDialog\Quitter Xonotic
-\XonoticQuitDialog/Yes\Retour au boulot...
-\XonoticQuitDialog/No\'Faut que je fragge plus de monde!
+\XonoticQuitDialog/Oui\Retour au boulot...
+\XonoticQuitDialog/Non\'Faut que je fragge plus de monde!
-\XonoticSettingsDialog/Input\Paramètres contrôle souris/clavier
+\XonoticSettingsDialog/Contrôles\Paramètres contrôle souris/clavier
\sensitivity\Sensitivité de la souris
\menu_mouse_speed\Sensitivité de la souris dans les menus, n'affecte pas le jeu
\m_filter\Adoucit le mouvement de souris, mais crée une légère latence de souris
\sbar_showbinds\Afficher les actions possibles avec des touches/commandes
\cl_showpressedkeys\Afficher les touches qu'un joueur est en train d'appuyer
-\XonoticSettingsDialog/Video\Video settings
+\XonoticSettingsDialog/Vidéo\Video settings
\vid_width\Résolution de l'écran
\vid_bitsperpixel\Profondeur des couleurs: 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé)
\vid_fullscreen\Activer le mode plein écran (par défaut: activé)
\vid_samples\Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources
\v_flipped\Mode mirroir (par défaut: désactivé)
-\XonoticSettingsDialog/Effects\Paramètres des effets graphiques
+\XonoticSettingsDialog/Graphiques\Paramètres des effets graphiques
\r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de carte (courbes, tuyaux) (par défaut: normal)
\gl_picmip\Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut: normal)
\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
\r_damageblur\Intensité du flou en recevant des dégâts - 0.4 est recommandé
\XonoticSettingsDialog/Audio\Audio settings
+\mastervolume\-
\bgmvolume\-
-\volume\-
\snd_staticvolume\-
-\snd_worldchannel0volume\-
-\snd_entchannel3volume\-
-\snd_playerchannel6volume\-
-\snd_playerchannel7volume\-
-\snd_entchannel4volume\-
-\snd_playerchannel2volume\-
-\snd_playerchannel1volume\-
+\snd_channel0volume\-
+\snd_channel3volume\-
+\snd_channel6volume\-
+\snd_channel7volume\-
+\snd_channel4volume\-
+\snd_channel2volume\-
+\snd_channel1volume\-
\snd_speed\Fréquence de la sortie audio
\snd_channels\Nombre de canaux pour la sortie audio
\snd_swapstereo\Échanger les canneaux stéréo gauche/droite
\cl_hitsound\Jouer un son quand vous touchez un enemi
\menu_sounds\Jouer des sons en cliquant ou en passant la souris sur des options
-\XonoticSettingsDialog/Network\Paramètres du jeu en réseau
+\XonoticSettingsDialog/Réseau\Paramètres du jeu en réseau
\cl_movement\Activer la prédiction des mouvements du joueur pour éviter les saccades lors de parties en réseau
\cl_nolerp\Algorithme pour éviter les saccades lors de parties en réseau
\shownetgraph\Show a
\cl_curl_maxspeed\Vitesse maximum de téléchargement
\cl_port\Forcer le client à passer par le port défini (UDP) s'il n'est pas 0
-\XonoticSettingsDialog/Misc\Autres paramètres
+\XonoticSettingsDialog/Autres\Autres paramètres
\showtime\Montrer l'heure, utile pour les captures d'écran
\showdate\Montrer la date, utile pour les captures d'écran
\showfps\Montrer le nombre d'Images Par Seconde rendues (Frames Per Second = FPS)
--- /dev/null
+0
+\XonoticSingleplayerDialog\Gioca la campagna in giocatore singolo o una partita istantanea contro dei bot
+
+
+\XonoticMultiplayerDialog\Gioca online, contro i tuoi amici in LAN, guarda demo o cambia le impostazioni del giocatore
+\XonoticMultiplayerDialog/Server\Cerca dei server dove giocare
+\menu_slist_showempty\Mostra server vuoti
+\menu_slist_showfull\Mostra server pieni che non hanno slot disponibili
+\net_slist_pause\Ferma l'aggiornamento della lista server per prevenire il continuo spostamento di posizione dei server
+\XonoticMultiplayerDialog/Info...\Mostra maggiori informazioni riguardo il server attualmente selezionato
+\XonoticMultiplayerDialog/Aggiungi tra i preferiti\Aggiungi nel segnalibri il server attualmente selezionato in modo che sia più veloce da trovare in futuro
+\XonoticMultiplayerDialog/Crea\Ospita la tua partita
+\XonoticMultiplayerDialog/Demo\Naviga e vedi le demo
+\XonoticMultiplayerDialog/Setup giocatore\Personalizza le tue impostazioni del giocatore
+
+\XonoticTeamSelectDialog/entra nel 'miglior' team (auto-selezione)\Autoseleziona team (raccomandato)
+\XonoticTeamSelectDialog/rosso\Entra nel team rosso
+\XonoticTeamSelectDialog/blu\Entra nel team blu
+\XonoticTeamSelectDialog/giallo\Entra nel team giallo
+\XonoticTeamSelectDialog/rosa\Entra nel team rosa
+
+\timelimit_override\Tempo limite in minuti che appena raggiunto terminerà la partita
+\fraglimit_override\Il numero di frag necessari prima che la partita finisca
+\menu_maxplayers\Il massimo numero di giocatori o bot che possono essere connessi al tuo server alla volta
+\bot_number\Numero di bot nel tuo server
+\skill\Specifica quanto i bot saranno esperti
+\g_maplist_votable\Numero di mappe che sono mostrate nel voto delle mappe alla fine di una partita
+\sv_vote_simple_majority_factor\La semplice maggioranza vince il voto
+\XonoticMultiplayerDialog/Impostazioni avanzate...\Impostazioni avanzate del server
+\XonoticMultiplayerDialog/Mutatori...\Mutatori e arene dedicate ad armi
+\g_dodging\Abilita schivamento
+\g_cloaked\Tutti i giocatori sono quasi invisibili
+\g_footsteps\Abilita suoni dei passi
+\g_midair\È possibile infliggere danni al tuo nemico solo quando è per aria
+\g_vampire\Il danno causato al tuo nemico aumenta la tua vita
+\g_bloodloss\L'ammontare di vita sotto la quale il tuo giocatore viene stordito per la perdita di sangue
+\sv_gravity\Rendi la caduta degli oggetti più lenta, valori inferiori significano minor gravità
+\g_grappling_hook\I giocatori nascono con il grappling hook
+\g_jetpack\I giocatori nascono col jetpack
+\g_pinata\I giocatori rilasceranno tutte le armi che possedevano appena vengono uccisi
+\g_weapon_stay\Le armi rimangono dopo che vengono raccolte
+\g_weaponarena\Selezionando un'arena dedicata ad un'arma si darà a tutti i giocatori quell'arma con munizioni infinite, e disabiliterà tutti gli altri raccoglimenti delle armi.
+\menu_weaponarena_with_laser\Abilita anche il laser nelle arene dedicate ad un'arma
+\g_minstagib\Ai giocatori sarà dato il Minstanex, che è un railgun con danni illimitati. Se il giocatore rimane senza munizioni, avrà 10 secondi per trovarne alcune, altrimenti morirà. Il fuoco secondario è un laser che non infligge nessun danno ed è buono per effettuare vari trickjump.
+\g_nix\"No items Xonotic" - invece di raccogliere oggetti, ognuno giocherà con la stessa arma. Dopo un pò di tempo, un conto alla rovescia inizierà, dopo il quale ognuno passerà ad un'altra arma.
+\g_nix_with_laser\Porta sempre il laser come arma aggiuntiva nella modalità "No items Xonotic"
+\XonoticMultiplayerDialog/Seleziona tutto\Seleziona tutte le mappe
+\XonoticMultiplayerDialog/Deseleziona tutto\Deseleziona tutte le mappe
+
+
+\XonoticMultiplayerDialog/Timedemo\Testa quanto velocemente il tuo computer fa girare il demo selezionato
+
+\fov\Il campo di vista da 60 a 130 gradi, di default è a 90 gradi
+\cl_bobcycle\Frequenza dell'ondeggiamento della visuale, disabilita per nessun ondeggiamento
+\cl_zoomfactor\Quanto grande è il fattore zoom quando il tasto per lo zoom viene premuto
+\cl_zoomsensitivity\Come lo zoom fa variare la sensibilità del mouse, da 0 (sensibilità più bassa) a 1 (nessun cambio di sensibilità)
+\cl_zoomspeed\Quando velocemente la vista viene zoomata, disabilitalo per lo zoom istantaneo
+\XonoticMultiplayerDialog/Impostazioni arma...\Imposta le tue armi preferite, i cambi automatici e le impostazioni dei modelli delle armi
+
+\cl_weaponpriority_useforcycling\Usa la lista qui sotto per definire le armi usando la rotellina del mouse
+\cl_autoswitch\Automaticamente passa all'arma appena raccolta se è migliore di quella che stavi già usando
+\r_drawviewmodel\Mostra il modello dell'arma
+\cl_gunalign\Posizione del modello dell'arma; richiede riconnessione
+
+\crosshair_per_weapon\Imposta un differente mirino per ogni arma, buono se giochi senza i modelli delle armi
+\crosshair_color_per_weapon\Imposta il colore del mirino dipendente dall'arma che stai correntemente usando
+\crosshair_size\Imposta la dimensione del mirino
+\crosshair_alpha\Imposta l'opacità del mirino
+\crosshair_color\Imposta il colore del mirino
+\sbar_hudselector\Usa il tema del vecchio HUD
+\XonoticMultiplayerDialog/Waypoints setup...\Imposta il radar, l'HUD e i waypoint
+\_cl_name\Nome col quale apparirai nel gioco
+
+\XonoticSettingsDialog\Cambia le impostazioni del gioco
+\XonoticCreditsDialog\I crediti di Xonotic
+\XonoticTeamSelectDialog\-
+\XonoticMutatorsDialog\-
+\XonoticMapInfoDialog\-
+\XonoticUserbindEditDialog\-
+\XonoticWinnerDialog\-
+\XonoticWeaponsDialog\-
+\XonoticRadarDialog\-
+\XonoticServerInfoDialog\-
+\XonoticCvarsDialog\-
+
+\XonoticQuitDialog\Esci dal gioco
+\XonoticQuitDialog/Sì\Devo tornare a lavorare...
+\XonoticQuitDialog/No\Ho ancora un pò di frag da fare!
+
+\XonoticSettingsDialog/Comandi\Impostazioni input
+\sensitivity\Moltiplicatore velocità del mouse
+\menu_mouse_speed\Velocità mouse nel menu, non riguarda il puntamento nel gioco
+\m_filter\Rendi più morbido il movimento del mouse, però rende la sua risposta leggermente più lenta
+\m_pitch\Inverti il movimento del mouse nell'asse Y
+\vid_dgamouse\Fai uso dell'input DGA del mouse
+\con_closeontoggleconsole\Rendi il tasto di chiusura console uguale a quella di apertura
+
+\XonoticSettingsDialog/Video\Impostazioni video
+\vid_width\Risoluzione schermo
+\vid_bitsperpixel\Bit per pixel (BPP) per il rendering, 32 è raccomandato
+\vid_fullscreen\Abilita modalità a tutto schermo (predefinito: abilitato)
+\vid_vsync\Abilita la sincronizzazione verticale per prevenire la lacrimazione (tearing), imposta il limite massimo di fps alla velocità di aggiornamento dello schermo (predefinito: disabilitato)
+\r_glsl\Abilita i pixel shader OpenGL 2.0 per l'illuminazione (predefinito: abilitato)
+\gl_vbo\Fai uso dei Vertex Buffer Objects per salvare nella memoria grafica la geometria statica per un rendering più veloce (predefinito: Vertici e Triangoli)
+\r_depthfirst\Elimina eccesso di disegno (overdraw) eseguendo il rendering della sola profondità della scena prima di iniziare il rendering "standard" (predefinito: disabilitato)
+\gl_texturecompression\Comprimi le texture per le schede video con poca memoria grafica disponibile (predefinito: Nessuna)
+\gl_finish\Fa in modo che la CPU attenda che la GPU finisca di elaborare ogni frame, può aiutare con alcuni strani input o in presenza di video lag in alcune macchine (predefinito: disabilitato)
+\v_brightness\Luminosità del nero (predefinito: 0)
+\v_contrast\Luminosità del bianco (predefinito: 1)
+\v_gamma\Valore della correzione gamma inversa, un effetto di luminosità che non tocca il bianco o il nero (predefinito: 1.125)
+\v_contrastboost\Di quanto viene moltiplicato il contrasto nelle aree oscure (predefinito: 1)
+\r_glsl_saturation\Adattamento saturazione (0 = scala di grigi, 1 = normale, 2 = sovra-saturo), richiede il GLSL color control (predefinito: 1)
+\v_glslgamma\Abilita l'uso delle GLSL per applicare la correzione gamma, nota che le performance potrebbero decrementare di tanto (predefinito: disabilitato)
+\r_ambient\Luminosità dell'ambiente, se è impostato ad un valore troppo alto tende a rendere la luce delle mappe opaca e piatta (predefinito: 4)
+\r_hdr_scenebrightness\Luminosità del rendering globale (predefinito: 1)
+\vid_samples\Abilita l'antialiasing, che smussa i bordi dei modelli in 3D. Nota che le performance potrebbero decrementare di un bel pò (predefinito: disabilitato)
+\v_flipped\Modalità mancino (Predefinito: off)
+
+\XonoticSettingsDialog/Effetti\Impostazioni effetti
+\r_subdivisions_tolerance\Cambia lo smussamento delle curve della mappa (predefinito: normali)
+\gl_picmip\Cambia la nitidezza delle textures. Valori più bassi riducono l'uso della memoria per le texture, però faranno apparire quest'ultime molto sfuocate. (predefinito: buona)
+\r_picmipworld\Se impostato, riduce solo la qualità delle texture dei modelli (predefinito: abilitato)
+\mod_q3bsp_nolightmaps\Usa le mappe di luce ad alta risoluzione, che appaiono più gradite alla vista, però sfruttano più memoria video (predefinito: abilitato)
+\cl_particles_quality\Moltiplicatore del numero di particelle. Valori inferiori significano meno particelle, che di conseguenza incrementano le performance (predefinito: 0.5)
+\r_drawparticles_drawdistance\Distanza per cui le particelle non vengono mostrate (predefinito: 1000)
+\cl_decals\Abilita i decal (buchi dei proiettili e sangue) (predefinito: abilitati)
+\r_drawdecals_drawdistance\I decal più lontano di questa distanza non vengono mostrati (predefinito: 300)
+\cl_decals_time\Tempo in secondi passato il quale i decal sfumano (predefinito: 2)
+\cl_gentle\Sostituisci il sangue e i gib con contenuti che non hanno alcun effetto di sangue (predefinito: disabilitato)
+\cl_nogibs\Riduci il numero di gib o rimuovili completamente (predefinito: parecchi)
+\v_kicktime\Quanto dura un colpo alla visuale per il danno (predefinito: 0)
+\gl_texture_anisotropy\Qualità del filtro anisotropico (predefinito: 1x)
+\r_glsl_deluxemapping\Usa gli effetti di illuminazione pixel per pixel (predefinito: abilitati)
+\r_shadow_gloss\Abilita l'uso della lucentezza delle mappe sulle texture che la supportano (predefinito: abilitati)
+\gl_flashblend\Abilita luci dinamiche più veloci ma meno gradevoli tramite il rendering di corone luminose invece di luci dinamiche reali (predefinito: disabilitato)
+\r_shadow_realtime_dlight\Abilita il rendering delle luci dinamiche come esplosioni e lancio di razzi (predefinito: abilitato)
+\r_shadow_realtime_dlight_shadows\Abilita il rendering di ombre dalle luci dinamiche (predefinito: abilitato)
+\r_shadow_realtime_world\Abilita il rendering delle luci dell'ambiente in tempo reale in mappe che le supportano. Nota che questo potrebbe avere un grande impatto sulle performance. (predefinito: disabilitato)
+\r_shadow_realtime_world_shadows\Abilita il rendering di ombre dalle luci dell'ambiente in tempo reale (predefinito: disabilitato)
+\r_shadow_usenormalmap\Abilita l'uso di ombre direzionali sulle texture (predefinito: abilitato)
+\r_showsurfaces\Disabilita completamente le texture per hardware molto lento. Questo dà un enorme boost alle performance, però appare molto poco gradevole. (predefinito: disabilitato)
+\r_glsl_offsetmapping\Effetto del mappaggio in offset che fa sembrare che le texture con bumpmaps "saltino fuori" dalle piane superfici in 2D (predefinito: disabilitato)
+\r_glsl_offsetmapping_reliefmapping\Mappaggio dell'offset di maggior qualità, che ha anche un enorme impatto sulle performance (predefinito: disabilitato)
+\r_water\Qualità dei riflessi e delle rifrazioni, ha un enorme impatto sulle performance nelle mappe superfici riflettenti (predefinito: disabilitato)
+\r_water_resolutionmultiplier\Risoluzione dei riflessi/rifrazioni (predefinito: buona)
+\r_coronas\Abilita i bagliori corona attorno a determinate luci (predefinito: abilitati)
+\r_coronas_occlusionquery\Dissolvi corone rispetto a visibilità (predefinito: abilitato)
+\r_bloom\Abilita effetti bloom, che illuminano i pixel più vicini a pixel molto luminosi. Hanno un grosso impatto sulle performance. (predefinito: disabilitato)
+\r_hdr\Versione a più alta qualità dei bloom, che hanno un enorme impatto sulle performance. (predefinito: disabilitato)
+\r_motionblur\Forza della sfocatura da movimento - raccomandato a 0.5
+\r_damageblur\Ammontare della sfocatura da movimento quando si è colpiti - raccomandato a 0.4
+
+\XonoticSettingsDialog/Audio\Impostazioni audio
+\mastervolume\-
+\bgmvolume\-
+\snd_staticvolume\-
+\snd_channel0volume\-
+\snd_channel3volume\-
+\snd_channel6volume\-
+\snd_channel7volume\-
+\snd_channel4volume\-
+\snd_channel2volume\-
+\snd_channel1volume\-
+\snd_speed\Frequenza di campionamento in uscita
+\snd_channels\Numero di canali in uscita
+\snd_swapstereo\Inverti canali sinistro/destro
+\snd_spatialization_control\Abilita spazialità (mischia leggermente i canali destro e sinistro per decrementare di un pò la separazione stereo per le cuffie)
+\cl_voice_directional\Abilita voci direzionali
+\cl_voice_directional_taunt_attenuation\Distanza dalla quale gli insulti possono essere uditi
+\cl_autotaunt\Automaticamente insulta i nemici quando gli fragghi
+\cl_sound_maptime_warning\Un annuncio ti avverte dei minuti rimanenti alla fine della partita
+\cl_hitsound\Riproduci un suono quando il tuo sparo colpisce un nemico
+\menu_sounds\Riproduci suoni quando clicchi o navighi su oggetti del menu
+
+\XonoticSettingsDialog/Rete\Impostazioni di rete
+\cl_movement\Abilita predizione del movimento lato client
+\cl_nolerp\Abilita aggiornamento da rete spianato
+\shownetgraph\Mostra un grafico delle dimensioni dei pacchetti e di altre informazioni
+\_cl_rate\Specifica la velocità della tua rete con questa barra
+\cl_netfps\Quanti pacchetti in ingresso inviare al server ogni secondo
+\cl_curl_maxdownloads\Massimo numero di download HTTP/FTP contemporanei
+\cl_curl_maxspeed\Velocità massima di download
+\cl_port\Forza il client a usare la porta selezionata a meno che non è impostata a 0
+
+\XonoticSettingsDialog/Altro\Impostazioni varie
+\showtime\Mostra l'orario corrente, utile negli screenshot
+\showdate\Mostra la data corrente, utile negli screenshot
+\showfps\Mostra i fotogrammi al secondo
+
+\XonoticSettingsDialog/Impostazioni avanzate...\Impostazioni avanzate dove puoi mettere mano ad ogni singola variabile del gioco
+\g_friendlyfire\Percentuale di danno inflitto ai compagni di squadra
+\g_mirrordamage\Percentuale di danno inflitto ai compagni di squadra che viene riversato su di te
+\g_tdm_teams_override\Non tenere conto del numero predefinito di squadre nei giochi di squadra
+
+\viewsize\Abilita/disabilita lo sfondo dell'HUD
+\cl_hidewaypoints\Mostra vari waypoint specifici di certi tipi di gioco
+\g_waypointsprite_scale\Scala moltiplicatore dei waypoint
+\g_waypointsprite_alpha\Controlla la trasparenza dei waypoint
+\cl_shownames\Mostra il nome del giocatore a cui stai mirando
+
+\crosshair_hittest\Nessuno: non fare il test di colpire per il mirino; TrueAim: sfoca il mirino quando non colpiresti il muro; Nemici: allarga anche il mirino quando colpiresti un nemico
\XonoticMultiplayerDialog\Играть по сети, просмотреть демо или изменить настройки игрока
-\XonoticMultiplayerDialog/Servers\Поиск игровых серверов
+\XonoticMultiplayerDialog/Серверы\Поиск игровых серверов
\menu_slist_showempty\Показывать пустые сервера
\menu_slist_showfull\Показывать полные сервера, не имеющие свободных мест
\net_slist_pause\Приостановить обновление списка серверов для предотвращения их скакания
\XonoticMultiplayerDialog/Info\Показать больше сведений о выбранном сервере
-\XonoticMultiplayerDialog/Bookmark\Добавить выбранный сервер в закладки, так найти его будет быстрее
+\XonoticMultiplayerDialog/В закладки\Добавить выбранный сервер в закладки, так найти его будет быстрее
\XonoticMultiplayerDialog/Havoc\Change to Havoc mode which has some modifications to the gameplay
-\XonoticMultiplayerDialog/Create\Запустить собственную игру
-\XonoticMultiplayerDialog/Demos\Список демо для просмотра
+\XonoticMultiplayerDialog/Создать\Запустить собственную игру
+\XonoticMultiplayerDialog/Демо\Список демо для просмотра
\XonoticMultiplayerDialog/Player Setup\Изменить настройки игрока
\XonoticTeamSelectDialog/join 'best' team (auto-select)\Автовыбор команды (советуется)
-\XonoticTeamSelectDialog/red\Присоединиться к красной команде
-\XonoticTeamSelectDialog/blue\Присоединиться к синей команде
-\XonoticTeamSelectDialog/yellow\Присоединиться к жёлтой команде
-\XonoticTeamSelectDialog/pink\Присоединиться к розовой команде
+\XonoticTeamSelectDialog/красная\Присоединиться к красной команде
+\XonoticTeamSelectDialog/синяя\Присоединиться к синей команде
+\XonoticTeamSelectDialog/жёлтая\Присоединиться к жёлтой команде
+\XonoticTeamSelectDialog/розовая\Присоединиться к розовой команде
\timelimit_override\Ограничение времени в минутах, состязание закончится при его достижении
\fraglimit_override\Количество очков, необходимых для завершения состязания
\XonoticMultiplayerDialog/None\Снять выделение со всех карт
-\XonoticMultiplayerDialog/Timedemo\Замерить, насколько быстро компьютер способен играть выбранное демо
+\XonoticMultiplayerDialog/Проверка производительности\Замерить, насколько быстро компьютер способен играть выбранное демо
\fov\Угол обзора в градусах, допустимы значения от 60 то 130, по умолчанию 90
\cl_bobcycle\Частота качания вида
\XonoticCvarsDialog\-
\XonoticQuitDialog\Выйти из игры
-\XonoticQuitDialog/Yes\Пора саночки возить...
-\XonoticQuitDialog/No\Остались здесь ещё дела!
+\XonoticQuitDialog/Да\Пора саночки возить...
+\XonoticQuitDialog/Нет\Остались здесь ещё дела!
-\XonoticSettingsDialog/Input\Настройки устройств ввода
+\XonoticSettingsDialog/Ввод\Настройки устройств ввода
\sensitivity\Множитель скорости мыши
\menu_mouse_speed\Множитель скорости мыши в меню, не влияет на прицеливание в игре
\m_filter\Сглаживает движения мыши, но значительно ухудшает отзывчивость прицеливания
\sbar_showbinds\Отображать действия / привязанные клавиши в строках, показываемых во время игры
\cl_showpressedkeys\Показывать, какие кнопки движений нажимает игрок
-\XonoticSettingsDialog/Video\Настройки изображения
+\XonoticSettingsDialog/Изображение\Настройки изображения
\vid_width\Разрешение экрана
\vid_bitsperpixel\Сколько бит на точку использовать для вывода, советуется 32
\vid_fullscreen\Включить полноэкранный режим (по умолчанию: включено)
\vid_samples\Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)
\v_flipped\Poor man's left handed mode (default: off)
-\XonoticSettingsDialog/Effects\Настройки эффектов
+\XonoticSettingsDialog/Эффекты\Настройки эффектов
\r_subdivisions_tolerance\Change the smoothness of the curves on the map (default: normal)
\gl_picmip\Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)
\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
\r_motionblur\Motion blur strength - 0.5 recommended
\r_damageblur\Amount of motion blur when hurt - 0.4 recommended
-\XonoticSettingsDialog/Audio\Настройки звука
+\XonoticSettingsDialog/Звук\Настройки звука
\bgmvolume\-
\volume\-
\snd_staticvolume\-
\cl_hitsound\Играть звук оповещения, когда выстрел достигает противника
\menu_sounds\Играть звуки при взаимодействии с меню
-\XonoticSettingsDialog/Network\Настройки сети
+\XonoticSettingsDialog/Сеть\Настройки сети
\cl_movement\Включить предсказание движения на стороне клиента
\cl_nolerp\Enable network update smoothing
\shownetgraph\Показывать график размеров пакетов и других сведений
\cl_curl_maxspeed\Предел скорости скачивания
\cl_port\Force client to use chosen port unless it is set to 0
-\XonoticSettingsDialog/Misc\Разные настройки
+\XonoticSettingsDialog/Разное\Разные настройки
\showtime\Показывать текущее время, полезно на снимках экранов
\showdate\Показывать текущую дату, полезно на снимках экранов
\showfps\Show your rendered frames per second
set g_turrets_unit_walker_speed_jump 800
set g_turrets_unit_walker_speed_stop 90
+set g_turrets_unit_walker_turn 20
+set g_turrets_unit_walker_turn_walk 15
+set g_turrets_unit_walker_turn_run 7
+set g_turrets_unit_walker_turn_swim 10
+set g_turrets_unit_walker_turn_strafe 5
+
// Main machineguns prop's
set g_turrets_unit_walker_std_shot_dmg 5
set g_turrets_unit_walker_std_shot_refire 0.05
set g_turrets_unit_walker_std_rockets_range 4000
set g_turrets_unit_walker_std_rockets_range_min 500
set g_turrets_unit_walker_std_rocket_refire 10
-set g_turrets_unit_walker_std_rocket_dmg 50
+set g_turrets_unit_walker_std_rocket_dmg 45
set g_turrets_unit_walker_std_rocket_radius 150
set g_turrets_unit_walker_std_rocket_force 150
-set g_turrets_unit_walker_std_rocket_turnrate 0.4
-set g_turrets_unit_walker_std_rocket_speed 900
+set g_turrets_unit_walker_std_rocket_turnrate 0.05
+set g_turrets_unit_walker_std_rocket_speed 1000
// Meele attack. Only happens when theres a target directly in front
set g_turrets_unit_walker_std_meele_range 100
--- /dev/null
+set g_vehicle_bumblebee_speed_forward 400
+set g_vehicle_bumblebee_speed_strafe 200
+set g_vehicle_bumblebee_speed_up 200
+set g_vehicle_bumblebee_speed_down 200
+set g_vehicle_bumblebee_turnspeed 72
+set g_vehicle_bumblebee_pitchspeed 36
+set g_vehicle_bumblebee_pitchlimit 15
+set g_vehicle_bumblebee_friction 0.75
+
+set g_vehicle_bumblebee_energy 500
+set g_vehicle_bumblebee_energy_regen 50
+set g_vehicle_bumblebee_energy_regen_pause 1
+
+set g_vehicle_bumblebee_health 750
+set g_vehicle_bumblebee_health_regen 25
+set g_vehicle_bumblebee_health_regen_pause 5
+
+set g_vehicle_bumblebee_shield 250
+set g_vehicle_bumblebee_shield_regen 100
+set g_vehicle_bumblebee_shield_regen_pause 2
+
+set g_vehicle_bumblebee_cannon_cost 10
+set g_vehicle_bumblebee_cannon_damage 75
+set g_vehicle_bumblebee_cannon_radius 150
+set g_vehicle_bumblebee_cannon_refire 1.5
+set g_vehicle_bumblebee_cannon_speed 5000
+set g_vehicle_bumblebee_cannon_spread 0.0125
+set g_vehicle_bumblebee_cannon_force 400
+set g_vehicle_bumblebee_cannon_turnspeed 90
+set g_vehicle_bumblebee_cannon_pitchlimit_down 60
+set g_vehicle_bumblebee_cannon_pitchlimit_up 60
+set g_vehicle_bumblebee_cannon_turnlimit_in 5
+set g_vehicle_bumblebee_cannon_turnlimit_out 45
+
+set g_vehicle_bumblebee_respawntime 10
+
+set g_vehicle_bumblebee_blowup_radius 500
+set g_vehicle_bumblebee_blowup_coredamage 500
+set g_vehicle_bumblebee_blowup_edgedamage 100
+set g_vehicle_bumblebee_blowup_forceintensity 600
\ No newline at end of file
-set g_vehicle_racer_reload 1
+set g_vehicle_racer_respawntime 25
-set g_vehicle_racer_respawntime 10
-set g_vehicle_racer_health 250
+set g_vehicle_racer_health 190
+set g_vehicle_racer_health_regen 0
+set g_vehicle_racer_health_regen_pause 0
-set g_vehicle_racer_shield 100
-set g_vehicle_racer_shield_block 1
-set g_vehicle_racer_shield_regen 50
-set g_vehicle_racer_shield_regen_dmgpause 0.25
-set g_vehicle_racer_shield_regen_energyrate 2
+set g_vehicle_racer_shield 75
+set g_vehicle_racer_shield_regen 25
+set g_vehicle_racer_shield_regen_pause 1
-set g_vehicle_racer_energy 150
-set g_vehicle_racer_energy_regen 50
-set g_vehicle_racer_energy_usepause 1
+set g_vehicle_racer_energy 125
+set g_vehicle_racer_energy_regen 40
+set g_vehicle_racer_energy_regen_pause 1
-set g_vehicle_racer_speed_stop 2000
-set g_vehicle_racer_speed_forward 1600
-set g_vehicle_racer_speed_strafe 750
+set g_vehicle_racer_speed_stop 2000
+set g_vehicle_racer_speed_forward 800
+set g_vehicle_racer_speed_strafe 500
+set g_vehicle_racer_speed_afterburn 2000
+set g_vehicle_racer_friction 0.4
+set g_vehicle_racer_afterburn_cost 60 // energy consumed per second
-set g_vehicle_racer_speed_afterburn 3500
-set g_vehicle_racer_speed_afterburn_emin 25
-set g_vehicle_racer_speed_afterburn_cost 50
+set g_vehicle_racer_hovertype 0 // 0 = hover, != 0 = maglev
+set g_vehicle_racer_hoverpower 5000 // NOTE!! x 4 (4 engines)
+set g_vehicle_racer_upforcedamper 10
-set g_vehicle_racer_power_min 0
-set g_vehicle_racer_power_air 0
-set g_vehicle_racer_power_solid 8000
+set g_vehicle_racer_downforce 0.01
+set g_vehicle_racer_springlength 65
+set g_vehicle_racer_collision_multiplier 0.05
+set g_vehicle_racer_anglestabilizer 1.75
-set g_vehicle_racer_drag 0.25
-set g_vehicle_racer_dragexp 0.9
-
-set g_vehicle_racer_downforce 0.01
+set g_vehicle_racer_turnspeed 200
+set g_vehicle_racer_pitchspeed 100
+set g_vehicle_racer_maxpitch 25
+set g_vehicle_racer_turnroll 32
-set g_vehicle_racer_springlength 125
-set g_vehicle_racer_anglestabilizer 18
+set g_vehicle_racer_cannon_speed 9000
+set g_vehicle_racer_cannon_damage 20
+set g_vehicle_racer_cannon_radius 100
+set g_vehicle_racer_cannon_refire 0.1
+set g_vehicle_racer_cannon_cost 4
+set g_vehicle_racer_cannon_spread 0.0125
+set g_vehicle_racer_cannon_force 50
-set g_vehicle_racer_turnspeed 180
-set g_vehicle_racer_pitchspeed 360
-set g_vehicle_racer_maxpitch 25
-set g_vehicle_racer_turnroll 0.3
-
-set g_vehicle_racer_laser_speed 18000
-set g_vehicle_racer_laser_damage 20
-set g_vehicle_racer_laser_radius 100
-set g_vehicle_racer_laser_refire 0.05
-set g_vehicle_racer_laser_cost 2
-
-set g_vehicle_racer_rocket_speed 1500
-set g_vehicle_racer_rocket_accel 1500
-set g_vehicle_racer_rocket_turnrate 0.5
-set g_vehicle_racer_rocket_damage 200
-set g_vehicle_racer_rocket_radius 100
-set g_vehicle_racer_rocket_refire 5
+set g_vehicle_racer_rocket_speed 1000
+set g_vehicle_racer_rocket_accel 1400
+set g_vehicle_racer_rocket_turnrate 0.17
+set g_vehicle_racer_rocket_damage 160
+set g_vehicle_racer_rocket_force 350
+set g_vehicle_racer_rocket_radius 125
+set g_vehicle_racer_rocket_refire 6
set g_vehicle_racer_rocket_cost 0
+set g_vehicle_racer_rocket_locktarget 1
+set g_vehicle_racer_rocket_locking_time 0.4
+set g_vehicle_racer_rocket_locking_releasetime 1.6
+set g_vehicle_racer_rocket_locked_time 5
+set g_vehicle_racer_rocket_locked_maxangle 1.46
+
+set g_vehicle_racer_blowup_radius 250
+set g_vehicle_racer_blowup_coredamage 250
+set g_vehicle_racer_blowup_edgedamage 15
+set g_vehicle_racer_blowup_forceintensity 250
+
+set g_vehicle_racer_mass 900
-set g_vehicle_raptor_reload 1
+set g_vehicle_raptor_respawntime 35
+// 0: go where player aims, +forward etc relative to aim angles
+// 1: ignore aim for up/down movement. +forward always moved forward, +jump always moves up
set g_vehicle_raptor_movestyle 1
-set g_vehicle_raptor_turnspeed 90
+
set g_vehicle_raptor_turnroll 0.1
-set g_vehicle_raptor_pitchspeed 45
-set g_vehicle_raptor_speed_forward 1500
-set g_vehicle_raptor_speed_strafe 1500
-set g_vehicle_raptor_speed_up 1250
-set g_vehicle_raptor_speed_down 1400
-
-set g_vehicle_raptor_bomblet_waves 2
-set g_vehicle_raptor_bomblet_wavefirst 0.5
-set g_vehicle_raptor_bomblet_wavenext 0.3
-set g_vehicle_raptor_bomblet_wawespread 0.3
-set g_vehicle_raptor_bomblets 3
-set g_vehicle_raptor_bomblet_damage 90
-set g_vehicle_raptor_bomblet_edgedamage 40
-set g_vehicle_raptor_bomblet_radius 250
-set g_vehicle_raptor_bomblet_force 300
-set g_vehicle_raptor_bombs_refire 1
-
-set g_vehicle_raptor_beam_dps 200
-set g_vehicle_raptor_beam_fops 150
-set g_vehicle_raptor_beam_aps 100
-set g_vehicle_raptor_beam_size 8
-set g_vehicle_raptor_beam_leangth 1
-set g_vehicle_raptor_beam_refire 2
-
-set g_vehicle_raptor_shield 250
-set g_vehicle_raptor_shield_regen 50
-
-set g_vehicle_raptor_health 250
-set g_vehicle_raptor_health_regen 10
-
-set g_vehicle_raptor_energy 300
-set g_vehicle_raptor_energy_regen 50
\ No newline at end of file
+
+set g_vehicle_raptor_turnspeed 80
+set g_vehicle_raptor_pitchspeed 40
+set g_vehicle_raptor_pitchlimit 35
+
+set g_vehicle_raptor_speed_forward 900
+set g_vehicle_raptor_speed_strafe 700
+set g_vehicle_raptor_speed_up 500
+set g_vehicle_raptor_speed_down 800
+set g_vehicle_raptor_friction 0.7
+
+set g_vehicle_raptor_bomblets 8
+set g_vehicle_raptor_bomblet_alt 750
+set g_vehicle_raptor_bomblet_time 0.5
+set g_vehicle_raptor_bomblet_spread 0.4
+set g_vehicle_raptor_bomblet_damage 50
+set g_vehicle_raptor_bomblet_edgedamage 20
+set g_vehicle_raptor_bomblet_radius 310
+set g_vehicle_raptor_bomblet_force 150
+set g_vehicle_raptor_bomblet_explode_delay 0.4
+set g_vehicle_raptor_bombs_refire 5
+
+set g_vehicle_raptor_cannon_turnspeed 90
+set g_vehicle_raptor_cannon_turnlimit 20
+set g_vehicle_raptor_cannon_pitchlimit_up 12
+set g_vehicle_raptor_cannon_pitchlimit_down 32
+
+set g_vehicle_raptor_cannon_locktarget 1
+set g_vehicle_raptor_cannon_locking_time 0.4
+set g_vehicle_raptor_cannon_locking_releasetime 1.6
+set g_vehicle_raptor_cannon_locked_time 5
+set g_vehicle_raptor_cannon_predicttarget 1
+
+set g_vehicle_raptor_cannon_cost 1
+set g_vehicle_raptor_cannon_damage 25
+set g_vehicle_raptor_cannon_radius 60
+set g_vehicle_raptor_cannon_refire 0.05
+set g_vehicle_raptor_cannon_speed 12000
+set g_vehicle_raptor_cannon_spread 0.01
+set g_vehicle_raptor_cannon_force 50
+
+set g_vehicle_raptor_energy 30
+set g_vehicle_raptor_energy_regen 15
+set g_vehicle_raptor_energy_regen_pause 0.8
+
+set g_vehicle_raptor_health 150
+set g_vehicle_raptor_health_regen 0
+set g_vehicle_raptor_health_regen_pause 0
+
+set g_vehicle_raptor_shield 120
+set g_vehicle_raptor_shield_regen 25
+set g_vehicle_raptor_shield_regen_pause 1.5
+
+set g_vehicle_raptor_mass 2200
-set g_vehicle_spiderbot_respawntime 30
-set g_vehicle_spiderbot_health 875
-set g_vehicle_spiderbot_health_regen 10
-set g_vehicle_spiderbot_health_regen_dmgpause 10
+set g_vehicle_spiderbot_respawntime 45
-set g_vehicle_spiderbot_shield 125
+set g_vehicle_spiderbot_health 850
+set g_vehicle_spiderbot_health_regen 15
+set g_vehicle_spiderbot_health_regen_pause 10
+
+set g_vehicle_spiderbot_shield 150
set g_vehicle_spiderbot_shield_block 1
set g_vehicle_spiderbot_shield_regen 25
-set g_vehicle_spiderbot_shield_regen_dmgpause 0.25
+set g_vehicle_spiderbot_shield_regen_pause 0.2
+
+set g_vehicle_spiderbot_energy 0
+set g_vehicle_spiderbot_energy_regen 0
+set g_vehicle_spiderbot_energy_regen_pause 0
-set g_vehicle_spiderbot_turnspeed 90
+set g_vehicle_spiderbot_turnspeed 180
set g_vehicle_spiderbot_head_turnspeed 120
set g_vehicle_spiderbot_head_turnlimit 120
-set g_vehicle_spiderbot_head_pitchspeed 60
-set g_vehicle_spiderbot_head_pitchlimit_up 8
-set g_vehicle_spiderbot_head_pitchlimit_down -24
+set g_vehicle_spiderbot_head_pitchspeed 70
+set g_vehicle_spiderbot_head_pitchlimit_up 24
+set g_vehicle_spiderbot_head_pitchlimit_down -16
set g_vehicle_spiderbot_speed_stop 50
set g_vehicle_spiderbot_speed_walk 400
set g_vehicle_spiderbot_speed_strafe 300
set g_vehicle_spiderbot_movement_inertia 0.25
-set g_vehicle_spiderbot_minigun_damage 25
+set g_vehicle_spiderbot_minigun_damage 16
set g_vehicle_spiderbot_minigun_spread 0.015
set g_vehicle_spiderbot_minigun_speed 50000
set g_vehicle_spiderbot_minigun_refire 0.05
+set g_vehicle_spiderbot_minigun_ammo_cost 1
+set g_vehicle_spiderbot_minigun_ammo_max 200
+set g_vehicle_spiderbot_minigun_ammo_regen 15
+set g_vehicle_spiderbot_minigun_ammo_regen_pause 1
-set g_vehicle_spiderbot_minigun_heat 10
-set g_vehicle_spiderbot_minigun_cooldown 10
+set g_vehicle_spiderbot_springlength 150
+set g_vehicle_spiderbot_springup 5
+set g_vehicle_spiderbot_springblend 0.15
set g_vehicle_spiderbot_rocket_health 100
set g_vehicle_spiderbot_rocket_damage 75
set g_vehicle_spiderbot_rocket_edgedamage 15
set g_vehicle_spiderbot_rocket_force 150
set g_vehicle_spiderbot_rocket_radius 150
-set g_vehicle_spiderbot_rocket_reload 2.5
-set g_vehicle_spiderbot_rocket_refire 0.15
-set g_vehicle_spiderbot_rocket_speed 900
-set g_vehicle_spiderbot_rocket_turnrate 0.25
-set g_vehicle_spiderbot_rocket_noise 0.25
+set g_vehicle_spiderbot_rocket_reload 4
+set g_vehicle_spiderbot_rocket_refire 0.2
+set g_vehicle_spiderbot_rocket_speed 1750
+set g_vehicle_spiderbot_rocket_turnrate 0.2
+set g_vehicle_spiderbot_rocket_noise 0.3
set g_vehicle_spiderbot_rocket_lifetime 30
set g_vehicle_spiderbot_crush_dmg 50
set g_vehicle_spiderbot_crush_force 50
+set g_vehicle_spiderbot_mass 5000
+
+
set cl_vehicle_spiderbot_cross_alpha 0.4
set cl_vehicle_spiderbot_cross_size 1
--- /dev/null
+set g_vehicles 1
+
+exec vehicle_racer.cfg
+exec vehicle_raptor.cfg
+exec vehicle_spiderbot.cfg
+exec vehicle_bumblebee.cfg
+
+//set g_vehicle_racer_respawntime 10
+//set g_vehicle_spiderbot_respawntime 10
+//set g_vehicle_raptor_respawntime 10
+
+set g_vehicles_crush_dmg 70
+set g_vehicles_crush_force 50
+
+set cl_vehicles_hudscale 0.5way
+
+set g_vehicles_delayspawn 1
+set g_vehicles_delayspawn_jitter 10
+set g_vehicles_allow_flagcarry 1
*French
Calinou
+Taximus
+
+*Italian
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
*Portuguese
Ricardo "Hellgardia" Silva
Lord Canistra
Nikoli
-**Active Contributors
+**Other Active Contributors
+Akari
+Ant "Antibody" Zucaro
Antonio "terencehill" Piu
Ben "MooKow" Banker
+blkrbt
Calinou
chooksta
Cuinn "Cuinnton" Herrick
+Florian Paul "lda17h" Schmidt
Kristian "morfar" Johansson
kojn
Maik "SavageX" Merten
+Mick Rippon
MrBougo
+Przemysław "atheros" Grzywacz
Ruszkai "C.Brutail" Ákos
Samual Lenks
Severin "sev" Meyer
Stephan "esteel" Stahl
+The player with the unnecessarily long name
Wolfgang "Blub\0" Bumiller
SoulKeeper_p
+** TODO to be verified and sorted into the categories
+atheros - CA fixes
+cortez - map changes
+Florian Paul Schmidt - g_dodging
+parasti - various fixes
+magorian - a menu text overlap issue fix
+Paul Scott - keepaway bot AI
+PlasmaSheep - worked on player voices
+Sc0rp - some of our music
+Rodrigo Mouton Laudin <ratogenesis> - Spanish translation
+xaN1C4n3 - Hungarian translation
+PinkRobot and freefang - Dutch translation
+marcus256 - Swedish translation
+
**Past Contributors
Alexander "motorsep" Zubov
Amos "torus" Dudley
Andreas "Black" Kirsch
Attila "WW3" Houtkooper
BigMac
-blkrbt
Braden "meoblast001" Walters
Brain Younds
Chris "amethyst7" Matz
Steve Vermeulen
Supajoe
Tei
-terencehill
Tomaz
Ulrich Galbraith
Vortex
*Français
Calinou
+*Italien
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
*Portugais
Ricardo "Hellgardia" Silva
--- /dev/null
+**Sviluppatori principali
+
+Rudolf "divVerent" Polzer
+Tyler "-z-" Mulligan
+Merlijn Hofstra
+morphed
+mand1nga
+Jakob "tZork" Markström Gröhn
+
+**Coordinatori
+
+*Parte artistica
+Sahil "DiaboliK" Singhal
+
+*Texture / Web
+Tyler "-z-" Mulligan (web / game)
+FruitieX (game / web)
+
+*Modellazione 3D
+morphed
+
+*Concept Art
+LJFHutch
+Pearce "theShadow" Michal
+
+*Animazioni
+Sahil "DiaboliK" Singhal
+nifrek
+
+*Design dei livelli
+FruitieX
+MirceaKitsune
+Jakob "tZork" Markström Gröhn
+
+*Musiche / Effetti sonori
+mand1nga
+Merlijn Hofstra
+remaxim
+Stephan
+
+*Aggiunte al codice del motore e QA
+Rudolf "divVerent" Polzer
+
+*Codice del gioco
+Rudolf "divVerent" Polzer
+FruitieX
+Jakob "tZork" Markström Gröhn
+
+*Marketing / Pubbliche Relazioni
+Tyler "-z-" Mulligan
+mand1nga
+
+*Aspetti legali
+Rudolf "divVerent" Polzer
+Merlijn Hofstra
+
+**Motore del gioco
+DarkPlaces
+by Forest "LordHavoc" Hale
+
+**Traduttori
+
+*Tedesco
+Rudolf "divVerent" Polzer
+
+*Finlandese
+Henry "Exitium" Sanmark
+
+*Francese
+Calinou
+
+*Italiano
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
+*Portoghese
+Ricardo "Hellgardia" Silva
+
+*Rumeno
+MirceaKitsune
+
+*Russo
+Lord Canistra
+Nikoli
+
+**Contributori attivi
+Ant "Antibody" Zucaro
+Antonio "terencehill" Piu
+Ben "MooKow" Banker
+blkrbt
+Calinou
+chooksta
+Cuinn "Cuinnton" Herrick
+Florian Paul "lda17h" Schmidt
+Kristian "morfar" Johansson
+kojn
+Maik "SavageX" Merten
+MrBougo
+Przemysław "atheros" Grzywacz
+Ruszkai "C.Brutail" Ákos
+Samual Lenks
+Severin "sev" Meyer
+Stephan "esteel" Stahl
+Wolfgang "Blub\0" Bumiller
+SoulKeeper_p
+
+**Contributori passati
+Alexander "motorsep" Zubov
+Amos "torus" Dudley
+Andreas "Black" Kirsch
+Attila "WW3" Houtkooper
+BigMac
+Braden "meoblast001" Walters
+Brain Younds
+Chris "amethyst7" Matz
+Christian Ice
+Clinton "Kaziganthe" Freeman
+Dan "Digger" Korostelev
+Dan "Wazat" Hale
+Donkey
+dstrek
+Dustin Geeraert
+Edgenetwork
+Edward "Ed" Holness
+Eric "Munyul Verminard" Sambach
+Fabien "H. Reaper" Tschirhart
+FrikaC
+Garth "Zombie" Hendy
+Gerd "Elysis" Raudenbusch
+Gottfried "Toddd" Hofmann
+Henning "Tymo" Janssen
+"Innovati"
+Jitspoe
+Jody Gallagher
+Juergen "LowDragon" Timm
+KadaverJack
+Kevin "Tyrann" Shanahan
+Kurt Dereli
+lcatlnx
+Lee David Ash
+Lee Vermeulen
+leileilol
+Marius "GreEn`mArine" Shekow
+Marko "Urre" Permanto
+Mathieu "Elric" Olivier
+Mattrew "Tronyn" Rye
+MauveBib
+Mephisto
+michaelb
+Michael "Tenshihan" Quinn
+Munyul
+Netzwerg
+NoelCower
+Parapraxis
+Paul "Strahlemann" Evers
+Petithomme
+Q1 Retexturing Project
+Qantourisc
+Rick "Rat" Kelley
+Robert "ai" Kuroto
+Ronan
+Sajt
+Shaggy
+Shank
+Simon O'Callaghan
+SomeGuy
+Spike
+Spirit
+Steve Vermeulen
+Supajoe
+Tei
+Tomaz
+Ulrich Galbraith
+Vortex
+William Libert
+William "Willis" Weilep
+Yves "EviLair" Allaire
+Zenex