set g_balance_hagar_secondary_load_max 4
set g_balance_hagar_secondary_load_hold 4
set g_balance_hagar_secondary_load_releasedeath 0
-set g_balance_hagar_secondary_load_abort 1
+set g_balance_hagar_secondary_load_abort 0
set g_balance_hagar_secondary_load_linkexplode 0
set g_balance_hagar_secondary_load_animtime 0.2
set g_balance_hagar_secondary_damage 40
#
msgid ""
msgstr ""
-"Project-Id-Version: 0.1preview\n"
+"Project-Id-Version: 0.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-26 12:24+0100\n"
-"PO-Revision-Date: 2011-09-04 01:40+0100\n"
+"PO-Revision-Date: 2011-02-26 20:40+0100\n"
"Last-Translator: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"
"Language-Team: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"
"Language: it\n"
#: qcsrc/client/announcer.qc:31
msgid "^1Begin!"
-msgstr "^1Inizia!"
+msgstr "^1Via!"
#: qcsrc/client/announcer.qc:41
#, c-format
#: qcsrc/client/scoreboard.qc:21
msgid "SCO^caps"
-msgstr "SCO^catture"
+msgstr "catture"
#: qcsrc/client/scoreboard.qc:22
msgid "SCO^deaths"
-msgstr "SCO^morti"
+msgstr "morti"
#: qcsrc/client/scoreboard.qc:23
msgid "SCO^destroyed"
-msgstr "SCO^distrutte"
+msgstr "distrutte"
#: qcsrc/client/scoreboard.qc:24
msgid "SCO^drops"
-msgstr "SCO^cadute"
+msgstr "cadute"
#: qcsrc/client/scoreboard.qc:25
msgid "SCO^faults"
-msgstr "SCO^falli"
+msgstr "falli"
#: qcsrc/client/scoreboard.qc:26
msgid "SCO^fckills"
#: qcsrc/client/scoreboard.qc:27
msgid "SCO^goals"
-msgstr "SCO^gol"
+msgstr "gol"
#: qcsrc/client/scoreboard.qc:28
msgid "SCO^kckills"
#: qcsrc/client/scoreboard.qc:33
msgid "SCO^kills"
-msgstr "SCO^uccisioni"
+msgstr "uccisioni"
#: qcsrc/client/scoreboard.qc:34
msgid "SCO^laps"
-msgstr "SCO^giri"
+msgstr "giri"
#: qcsrc/client/scoreboard.qc:35
msgid "SCO^lives"
-msgstr "SCO^vite"
+msgstr "vite"
#: qcsrc/client/scoreboard.qc:36
msgid "SCO^losses"
-msgstr "SCO^perdute"
+msgstr "perdute"
#: qcsrc/client/scoreboard.qc:37
msgid "SCO^name"
-msgstr "SCO^nome"
+msgstr "nome"
#: qcsrc/client/scoreboard.qc:38
msgid "SCO^nick"
-msgstr "SCO^nick"
+msgstr "nick"
#: qcsrc/client/scoreboard.qc:39
msgid "SCO^objectives"
#: qcsrc/client/scoreboard.qc:40
msgid "SCO^pickups"
-msgstr "SCO^raccolte"
+msgstr "raccolte"
#: qcsrc/client/scoreboard.qc:41
msgid "SCO^ping"
-msgstr "SCO^ping"
+msgstr "ping"
#: qcsrc/client/scoreboard.qc:42
msgid "SCO^pl"
-msgstr "SCO^pl"
+msgstr "pl"
#: qcsrc/client/scoreboard.qc:43
msgid "SCO^pushes"
-msgstr "SCO^spinte"
+msgstr "spinte"
#: qcsrc/client/scoreboard.qc:44
msgid "SCO^rank"
-msgstr "SCO^posizione"
+msgstr "posizione"
#: qcsrc/client/scoreboard.qc:45
msgid "SCO^returns"
-msgstr "SCO^ritorni"
+msgstr "ritorni"
#: qcsrc/client/scoreboard.qc:46
msgid "SCO^revivals"
#: qcsrc/client/scoreboard.qc:47
msgid "SCO^score"
-msgstr "SCO^punti"
+msgstr "punti"
#: qcsrc/client/scoreboard.qc:48
msgid "SCO^suicides"
-msgstr "SCO^suicidi"
+msgstr "suicidi"
#: qcsrc/client/scoreboard.qc:49
msgid "SCO^takes"
-msgstr "SCO^presi"
+msgstr "presi"
#: qcsrc/client/scoreboard.qc:50
msgid "SCO^ticks"
-msgstr "SCO^tick"
+msgstr "tick"
#: qcsrc/client/scoreboard.qc:239
msgid ""
#: qcsrc/client/scoreboard.qc:515 qcsrc/client/scoreboard.qc:522
msgid "N/A"
-msgstr "N/D"
+msgstr "N.D."
#: qcsrc/client/scoreboard.qc:950
#, c-format
#: qcsrc/client/scoreboard.qc:1331 qcsrc/client/scoreboard.qc:1338
#: qcsrc/client/scoreboard.qc:1350 qcsrc/client/scoreboard.qc:1357
msgid "SCO^points"
-msgstr "SCO^punti"
+msgstr "punti"
#: qcsrc/client/scoreboard.qc:1332 qcsrc/client/scoreboard.qc:1339
#: qcsrc/client/scoreboard.qc:1351 qcsrc/client/scoreboard.qc:1358
msgid "SCO^is beaten"
-msgstr "SCO^è battuto"
+msgstr "è battuto"
#: qcsrc/client/scoreboard.qc:1349 qcsrc/client/scoreboard.qc:1356
#, c-format
#: qcsrc/client/waypointsprites.qc:260
msgid "Dropped flag"
-msgstr "Bandiera rilasciata"
+msgstr "Bandiera persa"
#: qcsrc/client/waypointsprites.qc:261
msgid "Help me!"
#: qcsrc/server/w_rifle.qc:255
#, c-format
msgid "%s was sniped with a rifle by %s"
-msgstr "%s è stato fucilato con un rifle da %s"
+msgstr "%s è stato cecchinato con un rifle da %s"
#: qcsrc/server/w_rocketlauncher.qc:466
#, c-format
#: qcsrc/server/w_uzi.qc:322
#, c-format
msgid "%s was sniped by %s's machine gun"
-msgstr "%s è stato fucilato dalla machine gun di %s"
+msgstr "%s è stato cecchinato dalla machine gun di %s"
#: qcsrc/server/w_uzi.qc:324
#, c-format
seta g_race_laps_limit -1 "Race laps limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta g_nexball_goallimit -1 "Nexball goal limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
seta g_nexball_goalleadlimit -1 "Nexball goal lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
+seta g_nexball_safepass_maxdist 5000 // Max distance to allow save fassping (0 to turn off safe passing)
+seta g_nexball_safepass_turnrate 0.1 // How fast the safe-pass ball can habge direction
+seta g_nexball_safepass_holdtime 0.75 // How long to remeber last teammate you pointed at
+seta g_nexball_viewmodel_scale 0.25 // How large the ball for the carrier
+seta g_nexball_viewmodel_offset "8 8 0" // Where the ball is located on carrier "forward right up"
+seta g_nexball_tackling 1 // Allow ball theft?
+
seta g_ctf_ignore_frags 0 "1: regular frags give no points"
set g_tdm_respawn_delay 0
set g_tdm_respawn_waves 0
set g_tdm_weapon_stay 0
+set g_ka_respawn_delay 0
+set g_ka_respawn_waves 0
+set g_ka_weapon_stay 0
set g_kh_respawn_delay 0
set g_kh_respawn_waves 0
set g_kh_weapon_stay 0
set g_ca_weapon_stay 0
set g_ca_damage2score_multiplier 0.01
set g_ca_round_timelimit 180
-set g_nexball_respawn_delay 0
-set g_nexball_respawn_waves 0
-set g_nexball_weapon_stay 0
+set g_nb_respawn_delay 0
+set g_nb_respawn_waves 0
+set g_nb_weapon_stay 0
set g_as_respawn_delay 0
set g_as_respawn_waves 0
set g_as_weapon_stay 0
set g_cts_selfdamage 1 "0 = disable all selfdamage and falldamage in cts"
set g_cts_finish_kill_delay 10 "prevent cheating by running back to the start line, and starting out with more speed than otherwise possible"
set g_cts_weapon_stay 2
-set g_freezetag_respawn_waves 0
-set g_freezetag_respawn_delay 0
-set g_freezetag_weapon_stay 0
-set g_keepaway_respawn_delay 0
-set g_keepaway_respawn_waves 0
-set g_keepaway_weapon_stay 0
+set g_ft_respawn_waves 0
+set g_ft_respawn_delay 0
+set g_ft_weapon_stay 0
// overtime
seta timelimit_overtime 2 "duration in minutes of one added overtime, added to the timelimit"
set bot_navigation_ignoreplayers 0 // FIXME remove this once the issue is solved
set bot_sound_monopoly 0 "when enabled, only bots can make any noise"
-set sv_loddistance1 1024
-set sv_loddistance2 4096
-seta cl_playerdetailreduction 0 "the higher, the less detailed player models are displayed (LOD)"
+set cl_loddistance1 1024
+set cl_loddistance2 3072
+seta cl_playerdetailreduction 1 "the higher, the less detailed player models are displayed (LOD)"
+seta cl_modeldetailreduction 1 "the higher, the less detailed certain map models are displayed (LOD)"
set g_mapinfo_settemp_acl "+*" "ACL for mapinfo setting cvars"
cl_decals_time 4
cl_particles_quality 1
cl_damageeffect 1
+cl_playerdetailreduction 0.5
gl_flashblend 0
gl_picmip -1
mod_q3bsp_nolightmaps 0
cl_decals_time 2
cl_particles_quality 0.4
cl_damageeffect 0
+cl_playerdetailreduction 2
gl_flashblend 1
gl_picmip 1
mod_q3bsp_nolightmaps 1
cl_decals_time 2
cl_particles_quality 1
cl_damageeffect 0
+cl_playerdetailreduction 1
gl_flashblend 0
gl_picmip 0
mod_q3bsp_nolightmaps 0
cl_decals_time 2
cl_particles_quality 1
cl_damageeffect 1
+cl_playerdetailreduction 1
gl_flashblend 0
gl_picmip 0
mod_q3bsp_nolightmaps 0
cl_decals_time 2
cl_particles_quality 0.4
cl_damageeffect 0
+cl_playerdetailreduction 4
gl_flashblend 1
gl_picmip 1337
mod_q3bsp_nolightmaps 1
cl_decals_time 10
cl_particles_quality 1
cl_damageeffect 2
+cl_playerdetailreduction 0
gl_flashblend 0
gl_picmip -1
mod_q3bsp_nolightmaps 0
cl_decals_time 10
cl_particles_quality 1
cl_damageeffect 1
+cl_playerdetailreduction 0
gl_flashblend 0
gl_picmip -1
mod_q3bsp_nolightmaps 0
"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 / 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 / Rifle"
+"weapon_group_8" "Hagar / Seeker"
+"weapon_group_9" "Rocket Launcher / Fireball"
+"weapon_group_0" "Port-O-Launch / Hook"
"" ""
"" "View"
"+zoom" "hold zoom"
"weaplast" "zuletzt benutzte"
"weapbest" "beste"
"reload" "nachladen"
-"impulse 1" "Laser"
-"impulse 2" "Schrotgewehr"
-"impulse 3" "Maschinengewehr"
-"impulse 4" "Mortar / Mine Layer"
-"impulse 5" "Electro"
-"impulse 6" "Crylink / HLAC"
-"impulse 7" "Nex / MinstaNex / Gewehr"
-"impulse 8" "Hagar / Seeker"
-"impulse 9" "Rocket Launcher / Fireball"
-"impulse 14" "Port-O-Launch / Enterhaken"
+"weapon_group_1" "Laser"
+"weapon_group_2" "Schrotgewehr"
+"weapon_group_3" "Maschinengewehr"
+"weapon_group_4" "Mortar / Mine Layer"
+"weapon_group_5" "Electro"
+"weapon_group_6" "Crylink / HLAC"
+"weapon_group_7" "Nex / MinstaNex / Gewehr"
+"weapon_group_8" "Hagar / Seeker"
+"weapon_group_9" "Rocket Launcher / Fireball"
+"weapon_group_0" "Port-O-Launch / Enterhaken"
"" ""
"" "Anzeige"
"+zoom" "Vergrößern (festhalten)"
"weaplast" "anteriormente usado"
"weapbest" "mejor"
"reload" "recargar"
-"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"
"" ""
"" "Vista"
"+zoom" "mantener zoom"
"togglezoom" "cambiar zoom"
"+showscores" "mostrar puntaje"
"screenshot" "captura de pantalla"
+"+hud_panel_radar_maximized" "maximize radar (FIXME)"
"" ""
"" "Communicación"
"messagemode" "chat público"
"messagemode2" "chat de equipo"
"team_auto" "unirse al equipo automáticamente"
"menu_showteamselect" "menu de equipo"
+"menu_showsandboxtools" "sandbox menu (FIXME)"
"spec" "entrar al modo espectador"
"dropweapon" "soltar arma"
"+use" "soltar llave / soltar bandera"
+"+button8" "drag object (FIXME)"
"" ""
"" "Definido por el usuario"
"+userbind 1" "$userbind1"
"weaplast" "dernière utilisée"
"weapbest" "meilleure arme"
"reload" "recharger"
-"impulse 1" "laser"
-"impulse 2" "shotgun"
-"impulse 3" "machine gun / rifle"
-"impulse 4" "mortar"
-"impulse 5" "electro"
-"impulse 6" "crylink / hlac"
-"impulse 7" "nex / minstanex"
-"impulse 8" "hagar"
-"impulse 9" "rocket launcher / fireball"
-"impulse 14" "porto / hook"
+"weapon_group_1" "laser"
+"weapon_group_2" "shotgun"
+"weapon_group_3" "machine gun / rifle"
+"weapon_group_4" "mortar"
+"weapon_group_5" "electro"
+"weapon_group_6" "crylink / hlac"
+"weapon_group_7" "nex / minstanex"
+"weapon_group_8" "hagar"
+"weapon_group_9" "rocket launcher / fireball"
+"weapon_group_0" "porto / hook"
"" ""
"" "Vue"
"+zoom" "zoom clic enfoncé"
"togglezoom" "zoom 2 clics"
"+showscores" "montrer les scores (enfoncé)"
"screenshot" "capture d'écran"
+"+hud_panel_radar_maximized" "maximize radar (FIXME)"
"" ""
"" "Communiquer"
"messagemode" "chat public"
"messagemode2" "chat d'équipe"
"team_auto" "auto-joindre une équipe"
"menu_showteamselect" "séléction d'équipe"
+"menu_showsandboxtools" "sandbox menu (FIXME)"
"spec" "mode spectateur"
"dropweapon" "lâcher l'arme"
"+use" "lâcher la clé / lâcher le drapeau"
+"+button8" "drag object (FIXME)"
"" ""
"" "Utilisateur"
"+userbind 1" "$userbind1"
"togglezoom" "nagyítás váltás"
"+showscores" "pontszámok"
"screenshot" "kép mentés"
+"+hud_panel_radar_maximized" "maximize radar (FIXME)"
"" ""
"" "Kommunikáció"
"messagemode" "nyilvános beszélgetés"
"messagemode2" "csapat beszélgetés"
"team_auto" "automatikus csapatválasztás"
"menu_showteamselect" "csapat menü"
+"menu_showsandboxtools" "sandbox menu (FIXME)"
"spec" "néző módba váltás"
"dropweapon" "fegyver eldobás"
"+use" "zászló eldobás, kiszállás"
+"+button8" "drag object"
"" ""
"" "Felhasználói hozzárendelések"
"+userbind 1" "$userbind1"
"+back" "indietro"
"+moveleft" "a sinistra"
"+moveright" "a destra"
-"+jump" "salta / nuota"
-"+crouch" "accovacciarsi / abbassarsi"
-"+hook" "uncino / jet pack"
+"+jump" "salta / risalire in acqua"
+"+crouch" "abbassarsi / scendere in acqua"
+"+hook" "off-hand hook / 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"
+"weapprev" "precedente"
+"weapnext" "successiva"
+"weaplast" "ultima usata"
+"weapbest" "migliore"
"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"
+"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 / Rifle"
+"weapon_group_8" "Hagar / Seeker"
+"weapon_group_9" "Rocket Launcher / Fireball"
+"weapon_group_0" "Port-O-Launch / Hook"
"" ""
"" "Vista"
"+zoom" "tieni zoom"
"togglezoom" "attiva/disattiva zoom"
-"+showscores" "mostra punteggio"
+"+showscores" "mostra punteggi"
"screenshot" "cattura schermata"
+"+hud_panel_radar_maximized" "massimizza radar"
"" ""
"" "Comunicazione"
"messagemode" "chat pubblica"
"disconnect" "disconnetti"
"menu_showquitdialog" "esci"
"" ""
-"" "Teamplay"
+"" "Gioco a squadre"
"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"
+"team_auto" "auto-scegli squadra"
+"menu_showteamselect" "menu scelta squadra"
+"menu_showsandboxtools" "menu sandbox"
+"spec" "modalità spettatore"
+"dropweapon" "abbandona arma"
+"+use" "abbandona chiave / bandiera"
+"+button8" "trascina oggetto"
"" ""
"" "Definiti dall'utente"
"+userbind 1" "$userbind1"
"weaplast" "ранее использованное"
"weapbest" "лучшее"
"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 / Rifle"
+"weapon_group_8" "Hagar / Seeker"
+"weapon_group_9" "Rocket Launcher / Fireball"
+"weapon_group_0" "Port-O-Launch / Hook"
"" ""
"" "Вид"
"+zoom" "увеличение"
"togglezoom" "переключить увеличение"
"+showscores" "показать очки"
"screenshot" "снимок экрана"
+"+hud_panel_radar_maximized" "maximize radar (FIXME)"
"" ""
"" "Общение"
"messagemode" "общий чат"
"messagemode2" "чат команды"
"team_auto" "авто-выбор команды"
"menu_showteamselect" "меню команды"
+"menu_showsandboxtools" "sandbox menu (FIXME)"
"spec" "стать наблюдателем"
"dropweapon" "бросить оружие"
"+use" "бросить ключ или флаг"
+"+button8" "drag object"
"" ""
"" "Определенно пользователем"
"+userbind 1" "$userbind1"
"togglezoom" "увімк / вимк зум"
"+showscores" "показати рахунок"
"screenshot" "скриншот"
+"+hud_panel_radar_maximized" "maximize radar (FIXME)"
"" ""
"" "Спілкування"
"messagemode" "публічний чат"
"messagemode2" "командний чат"
"team_auto" "автовибір команди"
"menu_showteamselect" "командне меню"
+"menu_showsandboxtools" "sandbox menu (FIXME)"
"spec" "увійти в режим спостерігача"
"dropweapon" "викинути зброю"
"+use" "викинути ключ / прапор"
+"+button8" "drag object"
"" ""
"" "Визначені користувачем"
"+userbind 1" "$userbind1"
de German "Deutsch"
-el Greek "Ελληνική" // bad
+el Greek "Ελληνική (INCOMPLETE)"
en English "English"
-es Spanish "Español" // bad
+es Spanish "Español (INCOMPLETE)"
fr French "Français"
it Italian "Italiano"
hu Hungarian "Magyar"
nl Dutch "Nederlands"
pt Portuguese "Português"
ro Romanian "Romana"
-ru Russian "Русский" // bad
-fi Finnish "Suomi" // bad
+ru Russian "Русский (INCOMPLETE)"
+fi Finnish "Suomi"
uk Ukrainian "Українська"
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-02 07:51+0200\n"
+"POT-Creation-Date: 2012-01-26 12:24+0100\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"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: qcsrc/common/mapinfo.qc:1092 qcsrc/menu/xonotic/skinlist.c:163
+#: qcsrc/common/mapinfo.qc:665
+#, c-format
+msgid "@!#%'n Tuba Throwing"
+msgstr "@!#% tuubanheitto!"
+
+#: qcsrc/common/mapinfo.qc:1057 qcsrc/menu/xonotic/skinlist.c:166
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
-#: qcsrc/menu/gamecommand.qc:47
+#: qcsrc/common/mapinfo.qh:36
+msgid "Deathmatch"
+msgstr "Mättö (Deathmatch)"
+
+#: qcsrc/common/mapinfo.qh:39
+msgid "Last Man Standing"
+msgstr "Viimeiseen mieheen (Last Man Standing)"
+
+#: qcsrc/common/mapinfo.qh:42
+msgid "Arena"
+msgstr "Areena (Arena)"
+
+#: qcsrc/common/mapinfo.qh:45
+msgid "Runematch"
+msgstr "Riimu-ottelu (Runematch)"
+
+#: qcsrc/common/mapinfo.qh:48
+msgid "Race"
+msgstr "Kilpailu (RACE)"
+
+#: qcsrc/common/mapinfo.qh:51
+msgid "Race CTS"
+msgstr "Kilpailu CTS (RACE CTS)"
+
+#: qcsrc/common/mapinfo.qh:54
+msgid "Team Deathmatch"
+msgstr "Joukkuemättö (Team Deatchmatch)"
+
+#: qcsrc/common/mapinfo.qh:57
+msgid "Capture the Flag"
+msgstr "Lipunryöstö (CTF)"
+
+#: qcsrc/common/mapinfo.qh:60
+msgid "Clan Arena"
+msgstr "Klaaniareena (Clan Arena)"
+
+#: qcsrc/common/mapinfo.qh:63
+msgid "Domination"
+msgstr "Hallinta (Domination)"
+
+#: qcsrc/common/mapinfo.qh:66
+msgid "Key Hunt"
+msgstr "Avaimenetsintä (Key Hunt)"
+
+#: qcsrc/common/mapinfo.qh:69
+msgid "Assault"
+msgstr "Rynnäkkö (Assault)"
+
+#: qcsrc/common/mapinfo.qh:72
+msgid "Onslaught"
+msgstr "Suurtaistelu (Onslaught)"
+
+#: qcsrc/common/mapinfo.qh:75
+msgid "Nexball"
+msgstr "Nexpallo (Nexball)"
+
+#: qcsrc/common/mapinfo.qh:78
+msgid "Freeze Tag"
+msgstr "Pakkashippa (Freeze Tag)"
+
+#: qcsrc/common/mapinfo.qh:81
+msgid "Keepaway"
+msgstr "Pakomatka (Keepaway)"
+
+#: qcsrc/menu/command/menu_cmd.qc:41
#, c-format
msgid "error: status is %d\n"
msgstr "virhe: %d\n"
-#: qcsrc/menu/gamecommand.qc:65
+#: qcsrc/menu/command/menu_cmd.qc:64
msgid "Usage: menu_cmd command..., where possible commands are:\n"
msgstr "Käyttö: menu_cmd_command..., missä mahdollisia komentoja ovat:\n"
-#: qcsrc/menu/gamecommand.qc:66
+#: qcsrc/menu/command/menu_cmd.qc:65
msgid " sync - reloads all cvars on the current menu page\n"
msgstr " sync - uudelleenlataa kaikki cvar-muuttujat nykyiseen valikkoon"
-#: qcsrc/menu/gamecommand.qc:67
+#: qcsrc/menu/command/menu_cmd.qc:66
msgid " directmenu ITEM - select a menu item as main item\n"
msgstr " directmenu ITMEM - valitse valikon kohta pääkohdaksi\n"
-#: qcsrc/menu/gamecommand.qc:193
+#: qcsrc/menu/command/menu_cmd.qc:179
msgid "error creating curl handle\n"
msgstr "virhe luodessa curl handlea\n"
-#: qcsrc/menu/gamecommand.qc:239
+#: qcsrc/menu/command/menu_cmd.qc:186
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
"Komentoa ei löydy. Saadaksesi listan kaikista tuetuista komennoista, kokeile "
msgid "custom"
msgstr "omavalintainen"
-#: qcsrc/menu/menu.qc:29
+#: qcsrc/menu/menu.qc:37
#, c-format
msgid "^4MQC Build information: ^1%s\n"
msgstr "^4MQC Version tiedot: ^1%s\n"
-#: qcsrc/menu/xonotic/campaign.c:284
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:134
+#: qcsrc/menu/xonotic/campaign.c:288
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:123
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/campaign.c:285
+#: qcsrc/menu/xonotic/campaign.c:289
#, c-format
msgid "Level %d: %s"
msgstr "Taso %d: %s"
#: 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:57
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:61
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:277
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:91
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:96
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:113
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:73
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
msgid "OK"
msgstr "OK"
msgid "Welcome"
msgstr "Tervetuloa"
-#: qcsrc/menu/xonotic/dialog_firstrun.c:33
+#: qcsrc/menu/xonotic/dialog_firstrun.c:40
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 "
"Tervetuloa pelaamaan Xonoticcia! Valitse haluamasi kieli ja pelaajanimesi "
"aloittaaksesi. Voit vaihtaa näitä asetuksia jälkikäteen pelin asetuksista."
-#: qcsrc/menu/xonotic/dialog_firstrun.c:38
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
-msgid "Text language:"
-msgstr "Tekstin kieli:"
-
-#: qcsrc/menu/xonotic/dialog_firstrun.c:47
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40
+#: qcsrc/menu/xonotic/dialog_firstrun.c:46
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:37
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39
msgid "Name:"
msgstr "Nimi:"
-#: qcsrc/menu/xonotic/dialog_firstrun.c:69
+#: qcsrc/menu/xonotic/dialog_firstrun.c:68
+#: qcsrc/menu/xonotic/dialog_settings_user.c:65
+msgid "Text language:"
+msgstr "Tekstin kieli:"
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:77
+msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
+msgstr "Salli pelinimesi käyttö pelaajatilastosivulla stats.xonotic.org?"
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:81
+msgid "ALWU2N^Yes"
+msgstr "ALWU2N^Kyllä"
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:82
+msgid "ALWU2N^No"
+msgstr "ALWU2N^Ei"
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:83
+msgid "ALWU2N^Undecided"
+msgstr "ALWU2N^En osaa päättää"
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:87
msgid "Save settings"
msgstr "Tallenna asetukset"
msgstr "Tekstin kohdistus:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
msgid "Center"
msgstr "Keskus"
msgstr "Tilapalkki"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
msgid "Left align"
msgstr "Vasen tasaus"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
msgid "Right align"
msgstr "Oikea tasaus"
msgstr "Vaihda nopeuden/kiihtyvyyden paikkaa"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:29
msgid "Speed:"
msgstr "Nopeus:"
#: 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:600
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:66
+#: qcsrc/menu/xonotic/util.qc:655
msgid "Alpha:"
msgstr "Alpha:"
msgstr "Pohjoinen"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:61
msgid "Scale:"
msgstr "Skaala:"
msgstr "Himmennä jälkikäteen:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:36
msgid "Never"
msgstr "Ei ikinä"
msgstr "Aseiden kuvakkeet:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+msgid "Show only owned weapons"
+msgstr "Näytä vain omistuksessa olevat aseet"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
msgid "Show weapon ID as:"
msgstr "Näytä aseen tunniste:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
msgid "SHOWAS^None"
msgstr "SHOWAS^Ei mitään."
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:47
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
msgid "Number"
msgstr "Numero"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
msgid "Bind"
msgstr "Näppäin"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
msgid "Show Accuracy"
msgstr "Näytä tarkkuus"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
msgid "Show Ammo"
msgstr "Näytä panokset"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
msgid "Ammo bar color:"
msgstr "Ammuskotelon väri"
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
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
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:630
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:578
-#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:633
+#: qcsrc/menu/xonotic/util.qc:649 qcsrc/menu/xonotic/util.qc:666
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:583
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:638
msgid "Color:"
msgstr "Väri:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:646
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:617
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:672
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:620
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:675
msgid "Padding:"
msgstr "Pehmustus:"
msgid "Game type:"
msgstr "Pelityyppi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
-msgid "Match settings:"
-msgstr "Ottelun asetukset"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:48
msgid "Time limit:"
msgstr "Aikaraja"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:52
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:60
msgid "Use map specified default"
msgstr "Käytä kartan omaa oletusarvoa"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:55
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
#: 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:160
#: 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 "Pisteraja:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:63
msgid "Player slots:"
msgstr "Pelaajamäärä:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:66
msgid "Number of bots:"
msgstr "Bottien lukumäärä:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:69
msgid "Bot skill:"
msgstr "Bottien taitotaso:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
msgid "Botlike"
msgstr "Typerä kone"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:73
msgid "Beginner"
msgstr "Aloittelija"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
msgid "You will win"
msgstr "Helppo voitto"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
msgid "You can win"
msgstr "Helpohko"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
msgid "You might win"
msgstr "Keskitaso"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
msgid "Advanced"
msgstr "Kehittynyt"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
msgid "Expert"
msgstr "Ekspertti"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
msgid "Pro"
msgstr "Mestari"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
msgid "Assassin"
msgstr "Murhaaja"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
msgid "Unhuman"
msgstr "Epäinhimillinen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
msgid "Godlike"
msgstr "Jumalainen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:87
msgid "Mutators..."
msgstr "Muokkaukset..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:96
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:145
msgid "Advanced settings..."
msgstr "Edistyneet asetukset..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:103
msgid "Map list:"
msgstr "Karttalista"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:109
msgid "Select all"
msgstr "Valitse kaikki"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:112
msgid "Select none"
msgstr "Poista kaikki valinnat"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:118
msgid "Start Multiplayer!"
msgstr "Aloita moninpeli!"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:153
msgid "Capture limit:"
msgstr "Lipunryöstöraja"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
msgid "Lives:"
msgstr "Elämät:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
msgid "Laps:"
msgstr "Kierrokset:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
msgid "Goals:"
msgstr "Maalit:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
msgid "Frag limit:"
msgstr "Tapporaja:"
msgid "MinstaGib only"
msgstr "Vain MinstaGib"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
msgstr "Otsikko:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:87
msgid "Author:"
msgstr "Tekijä:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:93
msgid "Features:"
msgstr "Ominaisuudet:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:98
msgid "Game types:"
msgstr "Pelityypit:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:118
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:314
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:335
msgid "Close"
msgstr "Sulje"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:124
msgid "MAP^Play"
msgstr "Pelaa"
msgstr "%s taistelukenttä"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173
msgid "Dodging"
msgstr "Väistely"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:258
msgid "MinstaGib"
msgstr "MinstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:261
msgid "NIX"
msgstr "NIX"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:213
msgid "Rocket Flying"
msgstr "Rakettilentely"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:210
+msgid "Invincible Projectiles"
+msgstr "Kuolemattomat Projektiilit"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:272
msgid "No start weapons"
msgstr "Ei aloitusasetta"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:195
msgid "Low gravity"
msgstr "Vajaa painovoima"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176
msgid "Cloaked"
msgstr "Näkymätön"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
msgid "Hook"
msgstr "Köysi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:179
msgid "Midair"
msgstr "Jalat irti maasta"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:182
msgid "Vampire"
msgstr "Vampyyri"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:216
msgid "Piñata"
msgstr "Piñata"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:219
msgid "Weapons stay"
msgstr "Aseet jäävät"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:186
msgid "Blood loss"
msgstr "Verenvuodatus"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:207
msgid "Jet pack"
msgstr "Rakettireppu"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:100
+msgid "No powerups"
+msgstr "Ei tehonlisäyksiä"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:102
+msgid "Powerups"
+msgstr "Tehonlisäykset"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:104
msgid "MUT^None"
msgstr "MUT^Ei mitään"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170
msgid "Gameplay mutators:"
msgstr "Pelityylin muokkaukset:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:201
msgid "Weapon & item mutators:"
msgstr "Aseiden ja esineiden muokkaukset:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:204
msgid "Grappling hook"
msgstr "Köysi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:223
msgid "Weapon arenas:"
msgstr "Tietyn aseen taistelukenttä"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:226
msgid "Regular (no arena)"
msgstr "Perinteinen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264
msgid "with laser"
msgstr "laserilla"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:255
msgid "Special arenas:"
msgstr "Erikoistaistelukentät:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:268
msgid "Most weapons"
msgstr "Suurin osa aseista"
msgstr "Demo"
#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28
-msgid "Record demos while playing"
+msgid "Automatically record demos while playing"
msgstr "Tallenna demoja pelin aikana"
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:31
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28
msgid "Filter:"
msgstr "Suodatin:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32
#: 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
+#: qcsrc/menu/xonotic/dialog_settings_input.c:40
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:32
msgid "Clear"
msgstr "Tyhjennä"
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:45
msgid "Timedemo"
msgstr "Aikademo"
-#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:48
msgid "DEMO^Play"
msgstr "Pelaa"
msgstr "Keskeytä"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:262
msgid "Address:"
msgstr "Osoite:"
msgstr "Tietoa..."
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:72
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:317
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:342
msgid "Join!"
msgstr "Liity!"
msgid "Server Information"
msgstr "Palvelimen tiedot"
-#: 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
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:132
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:133
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:242
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:247
msgid "N/A"
msgstr "N/A"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:179
#, c-format
-msgid "%d/%d, %d free player slots"
-msgstr "%d/%d, %d vapaata pelaajapaikkaa"
+msgid "%d/%d"
+msgstr "%d/%d"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193
+#: qcsrc/menu/xonotic/util.qc:632 qcsrc/menu/xonotic/util.qc:648
+#: qcsrc/menu/xonotic/util.qc:657 qcsrc/menu/xonotic/util.qc:665
+#: qcsrc/menu/xonotic/util.qc:677
+msgid "Default"
+msgstr "Perusasetus"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:200
#, c-format
-msgid "%d modified settings"
+msgid "%d modified"
msgstr "%d muokattua asetusta"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:172
-msgid "Official settings"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:200
+msgid "Official"
msgstr "Viralliset asetukset"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:197
-msgid "N/A (can't connect)"
-msgstr "N/A (ei voida yhdistää)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:208
+msgid "N/A (auth library missing, can't connect)"
+msgstr "Ei saatavilla (valtuutuskirjastot puuttuvat, ei voida yhdistää)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205
-msgid "not supported (can't connect)"
-msgstr "ei tuettu (ei voida yhdistää)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:210
+msgid "N/A (auth library missing)"
+msgstr "Ei saatavilla (valtuutuskirjastot puuttuvat)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207
-msgid "not supported (won't encrypt)"
-msgstr "ei tuettu (salaus ei onnistu)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:216
+msgid "Not supported (can't connect)"
+msgstr "Ei tuettu (ei voida yhdistää)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211
-msgid "supported (will encrypt)"
-msgstr "tuettu (salaus onnistuu)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:218
+msgid "Not supported (won't encrypt)"
+msgstr "Ei tuettu (salaus ei onnistu)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213
-msgid "supported (won't encrypt)"
-msgstr "tuettu (salaus ei onnistu)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:222
+msgid "Supported (will encrypt)"
+msgstr "Tuettu (salaus onnistuu)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217
-msgid "requested (will encrypt)"
-msgstr "pyydetty (salaus onnistuu)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:224
+msgid "Supported (won't encrypt)"
+msgstr "Tuettu (salaus ei onnistu)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219
-msgid "requested (won't encrypt)"
-msgstr "pyydetty (salaus ei onnistu)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:228
+msgid "Requested (will encrypt)"
+msgstr "Pyydetty (salaus onnistuu)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:223
-msgid "required (can't connect)"
-msgstr "vaadittu (ei voida yhdistää)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:230
+msgid "Requested (won't encrypt)"
+msgstr "Pyydetty (salaus ei onnistu)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:225
-msgid "required (will encrypt)"
-msgstr "vaadittu (salaus onnistuu)"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:234
+msgid "Required (can't connect)"
+msgstr "Vaadittu (ei voida yhdistää)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:246
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:269
-msgid "Players:"
-msgstr "Pelaajat:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:236
+msgid "Required (will encrypt)"
+msgstr "Vaadittu (salaus onnistuu)"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:254
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38
-msgid "Type:"
-msgstr "Tyyppi:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:256
+msgid "Hostname:"
+msgstr "Palvelimen nimi"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:270
+msgid "Gametype:"
+msgstr "Pelityyppi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:259
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:275
msgid "Map:"
msgstr "Kartta:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:264
-msgid "Gameplay:"
-msgstr "Pelitila:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:274
-msgid "Bots:"
-msgstr "Botit:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:279
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:280
msgid "Mod:"
msgstr "Modi:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:284
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:285
msgid "Version:"
msgstr "Versio:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289
-msgid "Ping:"
-msgstr "Viive:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:290
+msgid "Settings:"
+msgstr "Asetukset"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295
-msgid "CA:"
-msgstr "CA:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:297
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:329
+msgid "Players:"
+msgstr "Pelaajat:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301
-msgid "Key:"
-msgstr "Avain:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:302
+msgid "Bots:"
+msgstr "Botit:"
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:307
+msgid "Free slots:"
+msgstr "Vapaat paikat:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:313
msgid "Encryption:"
msgstr "Salaus:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:318
+msgid "ID:"
+msgstr "Tunnus:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:323
+msgid "Key:"
+msgstr "Avain:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
msgid "Model:"
msgstr "Hahmo:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88
-msgid "Field of view:"
-msgstr "Näkökenttä:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92
-msgid "View bobbing:"
-msgstr "Näytä huojunta:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96
-msgid "Zoom factor:"
-msgstr "Tarkennuskerroin:"
+msgid "No crosshair"
+msgstr "Ei tähtäintä:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100
-msgid "Zoom speed:"
-msgstr "Tarkennuksen nopeus:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:90
+msgid "Per weapon crosshair"
+msgstr "Asekohtainen tähtäin"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103
-msgid "Weapon settings..."
-msgstr "Aseiden asetukset..."
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:93
+msgid "Custom crosshair"
+msgstr "Muokattu tähtäin:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110
-msgid "Crosshair:"
-msgstr "Tähtäin:"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:139
-msgid "Per weapon"
-msgstr "Asekohtainen"
-
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:112
msgid "Crosshair size:"
msgstr "Tähtäimen suuruus:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:117
msgid "Crosshair alpha:"
msgstr "Tähtäimen alpha:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:123
msgid "Crosshair color:"
msgstr "Tähtäimen väri:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:140
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:125
+msgid "Per weapon"
+msgstr "Asekohtainen"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:127
msgid "By health"
msgstr "Elämän mukaan"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:131
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:47
msgid "Custom"
msgstr "Omavalintainen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148
-msgid "Enable center dot"
-msgstr "Ota tähtäin käyttöön"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:139
+msgid "Other crosshair settings"
+msgstr "Muut tähtäimen asetukset"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151
-msgid "Size:"
-msgstr "Koko:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:147
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:6
+msgid "Model settings"
+msgstr "Hahmon asetukset"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158
-msgid "Hit test:"
-msgstr "Osumatesti:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:153
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:6
+msgid "View settings"
+msgstr "Näkymän asetukset"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:159
-msgid "HTST^None"
-msgstr "HTST^Ei mitään."
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
+msgid "Weapon settings"
+msgstr "Aseiden asetukset"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:169
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:6
+msgid "HUD settings"
+msgstr "Käyttöliittymän asetukset"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:203
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:185
+#: qcsrc/menu/xonotic/dialog_settings_input.c:89
+#: qcsrc/menu/xonotic/dialog_settings_user.c:88
+#: qcsrc/menu/xonotic/dialog_settings_video.c:142
+msgid "Apply immediately"
+msgstr "Ota heti käyttöön"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:160
-msgid "TrueAim"
-msgstr "TrueAim"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:6
+msgid "Crosshair settings"
+msgstr "Tähtäimen asetukset:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161
-msgid "Enemies"
-msgstr "Viholliset"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:28
+msgid "Enable center crosshair dot"
+msgstr "Käytä keskitettyä pistettä tähtäimessä"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:164
-msgid "Waypoints setup..."
-msgstr "Välimatkojen asetukset..."
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:31
+msgid "Dot size:"
+msgstr "Pisteen koko:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:169
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:36
+msgid "Dot alpha:"
+msgstr "Pisteen läpinäkyvyys:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:41
+msgid "Dot color:"
+msgstr "Pisteen väri:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:43
+msgid "Use normal crosshair color"
+msgstr "Käytä normaalin tähtäimen väriä:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:54
+msgid "Crosshair animations:"
+msgstr "Tähtäimen animaatiot:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:57
+msgid "Smooth effects of crosshairs"
+msgstr "Pehmennä tähtäimen efektejä"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:61
+msgid "Use rings to indicate weapon status"
+msgstr "Ympyrät näyttävät aseen tila"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:67
+msgid "Hit testing:"
+msgstr "Osumatesti:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:69
+msgid "HTTST^Disabled"
+msgstr "HTTST^Pois päältä"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:70
+msgid "HTTST^TrueAim"
+msgstr "HTTST^TrueAim"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:71
+msgid "HTTST^Enemies"
+msgstr "HTTST^Viholliset"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:76
+msgid "Blur crosshair if the shot is obstructed"
+msgstr "Sumenna tähtäin jos aseen ja kohteen välissä on este"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:81
+msgid "Animate when hitting an enemy"
+msgstr "Animoi osutessa viholliseen"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:85
+msgid "Animate when picking up an item"
+msgstr "Animoi poimitessa esineen"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:40
+msgid "Damage:"
+msgstr "Veriroiskeet:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:43
+msgid "Overlay:"
+msgstr "Päällys:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:47
+msgid "Factor:"
+msgstr "Tarkennuskerroin:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:52
+msgid "Fade rate:"
+msgstr "Sisääntulon häivennyksen kesto"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:58
+msgid "Waypoints"
+msgstr "Välietapit"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:71
+msgid "Edge offset:"
+msgstr "Tönäisy reunasta:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:80
+msgid "Show names above players"
+msgstr "Näytä pelaajanimet hahmojen yläpuolella"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:83
+msgid "Only when near crosshair"
+msgstr "Vain lähellä tähtäintä"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:86
+msgid "Display health and armor"
+msgstr "Näytä elämän ja panssarin arvot"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:90
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:4
msgid "Enter HUD editor"
msgstr "Muokkaa näkymää"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174
-msgid "Force models:"
-msgstr "Pakota hahmojen ulkomuoto samanlaiseksi:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:28
+msgid "In order for the HUD editor to show, you must first be in game."
+msgstr "Jotta käyttöliittymän editori toimisi, täytyy sinun olla pelissä."
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175
-msgid "MDL^None"
-msgstr "MDL^Ei mitään."
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:30
+msgid "Do you wish to start a local game to set up the HUD?"
+msgstr ""
+"Haluatko aloittaa paikallisen pelin (LAN) muokatakseesi käyttöliittymää?"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176
-msgid "MDL^Custom"
-msgstr "MDL^Omavalintainen"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:33
+msgid "HDCNFRM^Yes"
+msgstr "HDCNFRM^Kyllä"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177
-msgid "MDL^All"
-msgstr "MDL^Kaikki"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:36
+msgid "HDCNFRM^No"
+msgstr "HDCNFRM^Ei"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:180
-msgid "Disable gore effects"
-msgstr "Ota ylimitoitettu raakuus pois päältä"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:28
+msgid "Body fading:"
+msgstr "Ruumiin häivytys:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:182
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:31
msgid "Gibs:"
msgstr "Raajat:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:33
msgid "GIBS^None"
msgstr "GIBS^Ei mitään"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:34
msgid "GIBS^Few"
msgstr "GIBS^Vähän"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:35
msgid "GIBS^Many"
msgstr "GIBS^Paljon"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:187
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:36
msgid "GIBS^Lots"
msgstr "GIBS^Runsaasti"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:191
-msgid "Damage splash:"
-msgstr "Veriroiskeet"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:40
+msgid "Playermodel LOD:"
+msgstr "Pelaajahahmon LOD:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: 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:109
-msgid "Apply immediately"
-msgstr "Ota heti käyttöön"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:44
+msgid "Force models:"
+msgstr "Pakota hahmojen ulkomuoto samanlaiseksi:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5
-msgid "Waypoints"
-msgstr "Välietapit"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:45
+msgid "MDL^None"
+msgstr "MDL^Ei mitään."
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23
-msgid "Show base waypoints"
-msgstr "Näytä tukikohtien välimatkat"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:46
+msgid "MDL^Custom"
+msgstr "MDL^Omavalintainen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:25
-msgid "Waypoint scale:"
-msgstr "Välietappien skaala:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:47
+msgid "MDL^All"
+msgstr "MDL^Kaikki"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29
-msgid "Waypoint alpha:"
-msgstr "Välietappien alpha:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:50
+msgid "Force player models to mine"
+msgstr "Pakota hahmojen ulkomuoto samanlaiseksi:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34
-msgid "Show names:"
-msgstr "Näytä nimet:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:52
+msgid "Force player colors to mine"
+msgstr "Pakota pelaajat samanvärisiksi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:37
-msgid "Teammates"
-msgstr "Oma joukkue"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:28
+msgid "Field of view:"
+msgstr "Näkökenttä:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:38
-msgid "All players"
-msgstr "Kaikki pelaajat"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:31
+msgid "Zoom:"
+msgstr "Tarkennus:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
-msgid "Weapon settings"
-msgstr "Aseiden asetukset"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:33
+msgid "RETICLE^Fullscreen"
+msgstr "RETICLE^Kokoruutu"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
-msgid "Weapon priority list:"
-msgstr "Aseiden prioriteetti:"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:34
+msgid "RETICLE^With reticle"
+msgstr "RETICLE^Ristikolla"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34
-msgid "Up"
-msgstr "Ylös"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:38
+msgid "ZOOM^Factor:"
+msgstr "ZOOM^Kerroin:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37
-msgid "Down"
-msgstr "Alas"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:42
+msgid "ZOOM^Speed:"
+msgstr "ZOOM^Nopeus:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
-msgid "Use priority list for weapon cycling"
-msgstr "Käytä prioriteettiä aseiden vaihdossa"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:52
+msgid "ZOOM^Instant"
+msgstr "ZOOM^Heti"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
-msgid "Auto switch weapons on pickup"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:56
+msgid "ZOOM^Sensitivity:"
+msgstr "ZOOM^Herkkyys:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:59
+msgid "Velocity zoom:"
+msgstr "Vauhtitarkennus:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:61
+msgid "VZOOM^Disabled"
+msgstr "VZOOM^Pois"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:62
+msgid "VZOOM^Forward only"
+msgstr "VZOOM^Vain eteenpäin"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:63
+msgid "VZOOM^All directions"
+msgstr "VZOOM^Kaikkiin suuntiin"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:67
+msgid "VZOOM^Speed"
+msgstr "VZOOM^Vauhti"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:72
+msgid "Allow passing through walls while spectating"
+msgstr "Salli lentäminen seinien läpi katsojana"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:75
+msgid "1st person perspective"
+msgstr "Ensimmäisen persoonan näkymä"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:79
+msgid "Smooth the view when landing from a jump"
+msgstr "Pehmennä näkymää laskeuduttaessa"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:83
+msgid "Smooth the view while crouching"
+msgstr "Pehmennä näkymää kun menet kyykkyyn"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:87
+msgid "View waving while idle"
+msgstr "Heiluta näkymää joutilaana"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:91
+msgid "View bobbing while walking around"
+msgstr "Heiluta näkymää kun kävelet"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:96
+msgid "3rd person perspective"
+msgstr "Kolmannen persoonan näkymä"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:100
+msgid "Back distance"
+msgstr "Etäisyys taakse:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:106
+msgid "Up distance"
+msgstr "Etäisyys ylös:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
+msgid "Weapon priority list:"
+msgstr "Aseiden prioriteetti:"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:33
+msgid "Up"
+msgstr "Ylös"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:36
+msgid "Down"
+msgstr "Alas"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
+msgid "Use priority list for weapon cycling"
+msgstr "Käytä prioriteettiä aseiden vaihdossa"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
+msgid "Auto switch weapons on pickup"
msgstr "Vaihda ase automaattisesti poimimisen jälkeen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:46
msgid "Draw 1st person weapon model"
msgstr "Piirrä ensimmäisen persoonan asemalli"
-#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
-msgid "Flip view horizontally"
-msgstr "Käännä näkymä horisontaalisesti"
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:58
+msgid "Gun model swaying"
+msgstr "Aseen huojunta"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:63
+msgid "Gun model bobbing"
+msgstr "Aseen heilunta"
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:68
+msgid "VWMDL^Scale"
+msgstr "VWMDL^Skaala"
#: qcsrc/menu/xonotic/dialog_news.c:4
msgid "News"
msgid "Quit"
msgstr "Lopeta"
-#: qcsrc/menu/xonotic/dialog_quit.c:17
+#: qcsrc/menu/xonotic/dialog_quit.c:18
msgid "Are you sure you want to quit?"
msgstr "Haluatko aivan varmasti lopettaa pelin?"
-#: qcsrc/menu/xonotic/dialog_quit.c:20
+#: qcsrc/menu/xonotic/dialog_quit.c:21
msgid "Yes"
msgstr "Kyllä"
-#: qcsrc/menu/xonotic/dialog_quit.c:21
+#: qcsrc/menu/xonotic/dialog_quit.c:22
msgid "No"
msgstr "Ei"
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:4
+msgid "Sandbox Tools"
+msgstr "Hiekkalaatikon työkalut"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+msgid "Spawn"
+msgstr "Luo"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+msgid "Remove *"
+msgstr "Poista *"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+msgid "Copy *"
+msgstr "Kopioi *"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+msgid "Paste"
+msgstr "Liitä:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+msgid "Bone:"
+msgstr "Luu:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+msgid "Set * as child"
+msgstr "Aseta * lapseksi"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+msgid "Attach to *"
+msgstr "Liitä *:n"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+msgid "Detach from *"
+msgstr "Irrota *:stä"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+msgid "Visual object properties for *:"
+msgstr "Esineen *:n visuaaliset ominaisuudet:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+msgid "Set skin:"
+msgstr "Aseta iho:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+msgid "Set alpha:"
+msgstr "Aseta läpinäkyvyys:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+msgid "Set color main:"
+msgstr "Aseta pääväri:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+msgid "Set color glow:"
+msgstr "Aseta hehkumisväri:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+msgid "Set frame:"
+msgstr "Aseta kuvaruutu"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+msgid "Physical object properties for *:"
+msgstr "Esineen *:n fysikaaliset ominaisuudet:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+msgid "Set material:"
+msgstr "Aseta materiaali"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+msgid "Set solidity:"
+msgstr "Aseta kiinteyys:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+msgid "Non-solid"
+msgstr "Ei-kiinteä"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+msgid "Solid"
+msgstr "Kiinteä"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+msgid "Set physics:"
+msgstr "Aseta fysiikka:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+msgid "Static"
+msgstr "Staattinen"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+msgid "Movable"
+msgstr "Siirrettävä"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+msgid "Physical"
+msgstr "Fyysinen"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+msgid "Set scale:"
+msgstr "Aseta skaala:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+msgid "Set force:"
+msgstr "Aseta voima:"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+msgid "Claim *"
+msgstr "Valtaa *"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+msgid "* object info"
+msgstr "* esineen info"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+msgid "* mesh info"
+msgstr "* mesh info"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+msgid "* attachment info"
+msgstr "* liitosinfo"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+msgid "Show help"
+msgstr "Näytä apu"
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+msgid "* is the object you are facing"
+msgstr "* on esine jota katsot"
+
#: qcsrc/menu/xonotic/dialog_settings.c:4
msgid "Settings"
msgstr "Asetukset"
msgstr "Ääni"
#: qcsrc/menu/xonotic/dialog_settings.c:22
-#: qcsrc/menu/xonotic/dialog_settings_network.c:4
-msgid "Network"
-msgstr "Verkko"
+#: qcsrc/menu/xonotic/dialog_settings_user.c:4
+msgid "User"
+msgstr "Käyttäjä"
#: qcsrc/menu/xonotic/dialog_settings.c:23
#: qcsrc/menu/xonotic/dialog_settings_misc.c:4
msgid "Master:"
msgstr "Pääkanava:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:33
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:35
msgid "Music:"
msgstr "Musiikki:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:45
msgid "VOL^Ambient:"
msgstr "VOL^Ympäristö:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:48
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:54
msgid "Info:"
msgstr "Tiedoitukset:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:63
msgid "Items:"
msgstr "Esineet:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:72
msgid "Pain:"
msgstr "Kipu:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
msgid "Player:"
msgstr "Pelaaja:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:90
msgid "Shots:"
msgstr "Laukaukset:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:99
msgid "Voice:"
msgstr "Puhe:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
msgid "Weapons:"
msgstr "Aseet:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+msgid "New style sound attenuation"
+msgstr "Uusi äänenvaimennustapa"
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+msgid "Mute sounds when not active"
+msgstr "Mykistä äänet ikkunan ollessa passiivinen"
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:194
msgid "Frequency:"
msgstr "Taajuus:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:125
msgid "11.025 kHz"
msgstr "11.025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:126
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "22.05 kHz"
msgstr "22.05 Khz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:129
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:130
msgid "44.1 kHz"
msgstr "44.1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "Channels:"
msgstr "Kanavat:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Stereo"
msgstr "Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
msgid "Swap Stereo"
msgstr "Vaihda stereoäänilähteiden paikkaa"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
msgid "Headphone friendly mode"
msgstr "Kuulokeystävällinen tila"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
-msgid "Spatial voices:"
-msgstr "Tilanneäänet:"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
-msgid "VOCS^None"
-msgstr "VOCS^Ei mitään"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
-msgid "VOCS^Taunts"
-msgstr "VOCS^Huudahdukset"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
-msgid "VOCS^All"
-msgstr "VOCS^Kaikki"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
-msgid "Taunt range:"
-msgstr "Huudahduksen kantama"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
-msgid "RNG^Very short"
-msgstr "RNG^Hyvin lyhyt"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
-msgid "RNG^Short"
-msgstr "RNG^Lyhyt"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
-msgid "RNG^Normal"
-msgstr "RNG^Normaali"
-
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
-msgid "RNG^Long"
-msgstr "RNG^Pitkä"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+msgid "Hit indication sound"
+msgstr "Osumailmaisimen ääni"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
-msgid "RNG^Full"
-msgstr "RNG^Täysi"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:172
+msgid "Chat message sound"
+msgstr "Keskustelun piippausääni"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
-msgid "Automatic taunts"
-msgstr "Automaattiset huudahdukset"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:174
+msgid "Menu sounds"
+msgstr "Valikon äänet"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
-msgid "Time warning:"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:177
+msgid "Time announcer:"
msgstr "Aikavaroitus:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
-msgid "WRN^None"
-msgstr "WRN^Ei mitään"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:179
+msgid "WRN^Disabled"
+msgstr "WRN^Pois päältä"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:180
msgid "1 minute"
msgstr "1 minuutti"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:181
msgid "5 minutes"
msgstr "5 minuuttia"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:182
msgid "WRN^Both"
msgstr "WRN^Molemmat"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
-msgid "Hit indicator"
-msgstr "Osumailmaisin"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:189
+msgid "Automatic taunts"
+msgstr "Automaattiset huudahdukset"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
-msgid "Menu sounds"
-msgstr "Valikon äänet"
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:199
+msgid "Debug info about sounds"
+msgstr "Äänten debug info"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:38
msgid "Quality preset:"
msgstr "DET^Sekopäinen"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:62
-msgid "Antialiasing:"
-msgstr "Reunojenpehmennys (Antialiasing):"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:64
-msgid "AA^Disabled"
-msgstr "AA^Pois päältä"
-
-#: 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 "Tekstuurien tarkkuus:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:73
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:65
msgid "RES^Leet"
msgstr "RES^Leet"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:74
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:66
msgid "RES^Lowest"
msgstr "RES^Matalin"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:75
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:67
+msgid "RES^Very low"
+msgstr "RES^Hyvin matala"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:68
msgid "RES^Low"
msgstr "RES^Matala"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:76
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:69
msgid "RES^Normal"
msgstr "RES^Normaali"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:77
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:70
msgid "RES^Good"
msgstr "RES^Hyvä"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:78
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:71
msgid "RES^Best"
msgstr "RES^Paras"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:91
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:94
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:84
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:87
msgid "Avoid lossy texture compression"
msgstr "Vältä häviöllistä tekstuurien pakkaamista"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:100
-msgid "Anisotropy:"
-msgstr "Anisotropia:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:93
+msgid "Use lightmaps"
+msgstr "Käytä valaistuksia"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:102
-msgid "ANISO^Disabled"
-msgstr "ANISO^Pois päältä"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:94
+msgid "Deluxe mapping"
+msgstr "Pikselikohtainen valaistus"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:105
-msgid "8x"
-msgstr "8x"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:96
+msgid "Gloss"
+msgstr "Kiilto"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:100
+msgid "Particles quality:"
+msgstr "Partikkeleiden laatu:"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:103
+msgid "Particles distance:"
+msgstr "Partikkeleiden etäisyys:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:106
-msgid "16x"
-msgstr "16x"
+msgid "Damage effects:"
+msgstr "Vahinkoefektit:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:110
-msgid "Particle quality:"
-msgstr "Kappaleiden laatu:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:108
+msgid "DMGPRTCLS^Disabled"
+msgstr "DMGPRTCLS^Pois"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:109
+msgid "DMGPRTCLS^Skeletal"
+msgstr "DMGPRTCLS^Luusto"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:113
-msgid "Particle distance:"
-msgstr "Kappaleiden etäisyys:"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:110
+msgid "DMGPRTCLS^All"
+msgstr "DMGPRTCLS^Kaikki"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:117
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:114
msgid "Decals"
msgstr "Siirtokuvat"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:115
msgid "Decals on models"
msgstr "Hahmojen siirtokuvat"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:119
msgid "Distance:"
msgstr "Etäisyys:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:125
msgid "Time:"
msgstr "Kesto:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
-msgid "Use lightmaps"
-msgstr "Käytä valaistuksia"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
-msgid "Deluxe mapping"
-msgstr "Pikselikohtainen valaistus"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
-msgid "Gloss"
-msgstr "Kiilto"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
-msgid "Offset mapping"
-msgstr "Korosta tekstuurien kuhmuja"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
-msgid "Relief mapping"
-msgstr "Tehokas tekstuurien kuhmujen korostus"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
-msgid "Reflections:"
-msgstr "Heijastukset:"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
-msgid "Blurred"
-msgstr "Sumea"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
-msgid "REFL^Good"
-msgstr "REFL^Hyvä"
-
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
-msgid "Sharp"
-msgstr "Terävä"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:131
+msgid "Coronas"
+msgstr "Valokehät"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
-msgid "Show surfaces"
-msgstr "Näytä pinnat"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+msgid "Use Occlusion Queries"
+msgstr "Käytä Occlusion Queryä"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "No dynamic lighting"
msgstr "Ei dynaamista valaistusta"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
-msgid "Flash blend approximation"
-msgstr "Yksinkertaiset valot"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:136
+msgid "Fake corona lighting"
+msgstr "Valaistuksen valokehä"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
msgid "Realtime dynamic lighting"
msgstr "Reaaliaikainen dynaaminen valaitus"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:139
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
msgid "Shadows"
msgstr "Varjot"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Realtime world lighting"
msgstr "Reaaliaikainen ympäristön valaistus"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
msgid "Use normal maps"
msgstr "Käytä tekstuurien suunnattua varjostamista"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "Soft shadows"
msgstr "Pehmeät varjot"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
-msgid "Coronas"
-msgstr "Valokehät"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+msgid "Show surfaces"
+msgstr "Näytä pinnat"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
-msgid "Use Occlusion Queries"
-msgstr "Käytä Occlusion Queryä"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+msgid "Offset mapping"
+msgstr "Korosta tekstuurien kuhmuja"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+msgid "Relief mapping"
+msgstr "Tehokas tekstuurien kuhmujen korostus"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+msgid "LOD"
+msgstr "Yksityiskohtaisuus"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
msgid "Bloom"
msgstr "Hehku"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
-msgid "High Dynamic Range (HDR)"
-msgstr "HDR"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+msgid "Reflections:"
+msgstr "Heijastukset:"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:167
+msgid "Blurred"
+msgstr "Sumea"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+msgid "REFL^Good"
+msgstr "REFL^Hyvä"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:169
+msgid "Sharp"
+msgstr "Terävä"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
msgid "Motion blur:"
msgstr "Liikesumeus:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
-msgid "Blur and sharpen postprocessing"
-msgstr "Sumenna ja terävöitä jälkikäsittelyä"
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:179
+msgid "Extra postprocessing effects"
+msgstr "Ylimääräiset jälkikäsittelyefektit"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgstr "Näppäimet:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:31
+#: qcsrc/menu/xonotic/dialog_settings_input.c:30
msgid "Change key..."
msgstr "Vaihda näppäin..."
-#: qcsrc/menu/xonotic/dialog_settings_input.c:35
+#: qcsrc/menu/xonotic/dialog_settings_input.c:34
msgid "Edit..."
msgstr "Muokkaa..."
-#: qcsrc/menu/xonotic/dialog_settings_input.c:46
-msgid "Sensitivity:"
-msgstr "Herkkyys:"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:45
+msgid "Pressing \"enter console\" key also closes it"
+msgstr "\"avaa komentorivi\" myös sulkee komentorivin"
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:47
+msgid "Automatically repeat jumping if holding jump"
+msgstr "Hyppää automaattisesti uudestaan pitämällä hyppynappi painettuna"
#: 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:53
+#: qcsrc/menu/xonotic/dialog_settings_input.c:56
+msgid "Use joystick input"
+msgstr "Käytä peliohjainta"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:55
-msgid "Mouse filter"
-msgstr "Hiiren suodatin"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:61
+msgid "Mouse:"
+msgstr "Hiiri:"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:57
-msgid "Invert mouse"
-msgstr "Käännä hiiren suunta"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:64
+msgid "Sensitivity:"
+msgstr "Herkkyys:"
-#: 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:68
+msgid "Smooth aiming"
+msgstr "Tähtäyksen pehmennys"
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:71
+msgid "Invert aiming"
+msgstr "Käännä hiiren suunta"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:65
-#: qcsrc/menu/xonotic/dialog_settings_input.c:67
-msgid "Turn off OS mouse acceleration"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:75
+#: qcsrc/menu/xonotic/dialog_settings_input.c:77
+#: qcsrc/menu/xonotic/dialog_settings_input.c:80
+msgid "Disable system mouse acceleration"
msgstr "Laita käyttöjärjestelmän hiiren kiihtyvyys pois päältä"
-#: qcsrc/menu/xonotic/dialog_settings_input.c:69
-msgid "\"enter console\" also closes"
-msgstr "\"avaa komentorivi\" myös sulkee komentorivin"
+#: qcsrc/menu/xonotic/dialog_settings_input.c:85
+msgid "Enable built in mouse acceleration"
+msgstr "Laita käyttöjärjestelmän hiiren kiihtyvyys päälle"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5
msgid "User defined key bind"
msgstr "Peruuta"
#: qcsrc/menu/xonotic/dialog_settings_misc.c:26
-msgid "Menu skins:"
-msgstr "Päävalikon ulkoasu:"
+msgid "Network:"
+msgstr "Verkko:"
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:47
-msgid "Show current time"
-msgstr "Näytä nykyinen kellonaika"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:31
+msgid "56k"
+msgstr "56k"
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:49
-msgid "Show current date"
-msgstr "Näytä nykyinen päivämäärä"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:32
+msgid "ISDN"
+msgstr "ISDN"
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:51
-msgid "Show frames per second"
-msgstr "Näytä ruudunpäivitysnopeus (FPS)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:33
+msgid "Slow ADSL"
+msgstr "Hidas ASL"
-#: qcsrc/menu/xonotic/dialog_settings_misc.c:53
-msgid "Minimize input latency"
-msgstr "Minimoi syötteen viive"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:34
+msgid "Fast ADSL"
+msgstr "Nopea ADSL"
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
-msgid "Advanced settings"
-msgstr "Edistyneet asetukset"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
+msgid "Broadband"
+msgstr "Laajakaista"
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23
-msgid "Cvar filter:"
-msgstr "Cvar suodatin"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:39
+msgid "Input packets/s:"
+msgstr "Vastaanottopaketit /s:"
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34
-msgid "Setting:"
-msgstr "Asetus:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:45
+msgid "Local latency:"
+msgstr "Paikallinen viive"
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42
-msgid "Value:"
-msgstr "Arvo:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:50
+msgid "Client UDP port:"
+msgstr "Asiakkaan UDP portti"
-#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:56
-msgid "Description:"
-msgstr "Kuvaus:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:55
+msgid "Show netgraph"
+msgstr "Näytä verkkograafi"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:26
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:59
msgid "Client-side movement prediction"
msgstr "Asiakasohjelman liikkeen ennustus"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:30
-msgid "Show netgraph"
-msgstr "Näytä verkkograafi"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:62
+msgid "Movement error compensation"
+msgstr "Liikkeen virhekompensaatio"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:33
-msgid "Network speed:"
-msgstr "Verkon nopeus:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:66
+msgid "Downloads:"
+msgstr "Lataukset:"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:35
-msgid "56k"
-msgstr "56k"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:69
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:81
+msgid "Maximum:"
+msgstr "Maksimi:"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:36
-msgid "ISDN"
-msgstr "ISDN"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:73
+msgid "Speed (kB/s):"
+msgstr "Nopeus (kb/s)"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:37
-msgid "Slow ADSL"
-msgstr "Hidas ASL"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:78
+msgid "Framerate:"
+msgstr "Ruudunpäivitysnopeus:"
-#: qcsrc/menu/xonotic/dialog_settings_network.c:38
-msgid "Fast ADSL"
-msgstr "Nopea ADSL"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:83
+msgid "MAXFPS^5 fps"
+msgstr "MAXFPS^5 fps "
-#: qcsrc/menu/xonotic/dialog_settings_network.c:39
-msgid "Broadband"
-msgstr "Laajakaista"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+msgid "MAXFPS^10 fps"
+msgstr "MAXFPS^10 fps "
-#: qcsrc/menu/xonotic/dialog_settings_network.c:42
-msgid "Input packets/s:"
-msgstr "Vastaanottopaketit /s:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:85
+msgid "MAXFPS^20 fps"
+msgstr "MAXFPS^20 fps "
-#: qcsrc/menu/xonotic/dialog_settings_network.c:46
-msgid "HTTP downloads:"
-msgstr "HTTP lataukset:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:86
+msgid "MAXFPS^30 fps"
+msgstr "MAXFPS^30 fps "
-#: qcsrc/menu/xonotic/dialog_settings_network.c:49
-msgid "Downloads:"
-msgstr "Lataukset:"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:87
+msgid "MAXFPS^40 fps"
+msgstr "MAXFPS^40 fps "
-#: qcsrc/menu/xonotic/dialog_settings_network.c:53
-msgid "Speed (kB/s):"
-msgstr "Nopeus (kb/s)"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:88
+msgid "MAXFPS^50 fps"
+msgstr "MAXFPS^50 fps "
-#: qcsrc/menu/xonotic/dialog_settings_network.c:57
-msgid "Client UDP port:"
-msgstr "Asiakkaan UDP portti"
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:89
+msgid "MAXFPS^60 fps"
+msgstr "MAXFPS^60 fps "
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:90
+msgid "MAXFPS^70 fps"
+msgstr "MAXFPS^70 fps "
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:91
+msgid "MAXFPS^100 fps"
+msgstr "MAXFPS^100 fps "
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:92
+msgid "MAXFPS^125 fps"
+msgstr "MAXFPS^125 fps "
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:93
+msgid "MAXFPS^200 fps"
+msgstr "MAXFPS^200 fps "
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:94
+msgid "MAXFPS^Unlimited"
+msgstr "MAXFPS^Rajaton "
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:98
+msgid "Target:"
+msgstr "Kohde:"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:100
+msgid "TRGT^Disabled"
+msgstr "TRGT^Pois päältä"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:101
+msgid "TRGT^30 fps"
+msgstr "TRGT^30 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:102
+msgid "TRGT^40 fps"
+msgstr "TRGT^40 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:103
+msgid "TRGT^50 fps"
+msgstr "TRGT^50 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:104
+msgid "TRGT^60 fps"
+msgstr "TRGT^60 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:105
+msgid "TRGT^100 fps"
+msgstr "TRGT^100 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:106
+msgid "TRGT^125 fps"
+msgstr "TRGT^125 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:107
+msgid "TRGT^200 fps"
+msgstr "TRGT^200 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:111
+msgid "Idle limit:"
+msgstr "Aikaraja"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:113
+msgid "IDLFPS^10 fps"
+msgstr "IDLFPS^10 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:114
+msgid "IDLFPS^20 fps"
+msgstr "IDLFPS^20 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:115
+msgid "IDLFPS^30 fps"
+msgstr "IDLFPS^30 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:116
+msgid "IDLFPS^60 fps"
+msgstr "IDLFPS^60 fps"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:117
+msgid "IDLFPS^Unlimited"
+msgstr "IDLFPS^Rajaton"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:122
+msgid "Show frames per second"
+msgstr "Näytä ruudunpäivitysnopeus (FPS)"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:125
+msgid "Save processing time for other apps"
+msgstr "Jätä laskenta-aikaa muille sovelluksille"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:129
+msgid "Menu tooltips:"
+msgstr "Päävalikon työkaluvihjeet:"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:131
+msgid "TLTIP^Disabled"
+msgstr "TLTIP^Pois päältä"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:132
+msgid "TLTIP^Standard"
+msgstr "TLTIP^Vakio"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:133
+msgid "TLTIP^Advanced"
+msgstr "TLTIP^Kehittynyt"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:137
+msgid "Show current time"
+msgstr "Näytä nykyinen kellonaika"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:139
+msgid "Show current date"
+msgstr "Näytä nykyinen päivämäärä"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:141
+msgid "Enable developer mode"
+msgstr "Ota kehittäjätila käyttöön"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
+msgid "Advanced settings"
+msgstr "Edistyneet asetukset"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:31
+msgid "Cvar filter:"
+msgstr "Cvar suodatin"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:44
+msgid "Setting:"
+msgstr "Asetus:"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:48
+msgid "Type:"
+msgstr "Tyyppi:"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:52
+msgid "Value:"
+msgstr "Arvo:"
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:68
+msgid "Description:"
+msgstr "Kuvaus:"
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:27
+msgid "Menu skins:"
+msgstr "Päävalikon ulkoasu:"
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:31
+msgid "Set skin"
+msgstr "Aseta ulkoasu:"
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:74
+msgid "Set language"
+msgstr "Tekstin kieli:"
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:79
+msgid "Disable gore effects and harsh language"
+msgstr "Ota ylimitoitettu raakuus ja karski kieli pois käytöstä"
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:82
+msgid "Allow player statistics to track your client"
+msgstr "Salli pelaajatilastojen seuraavan peliasennustasi"
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:84
+msgid "Allow player statistics to use your nickname"
+msgstr "Salli pelaajatilastojen käyttävän pelinimeäsi"
#: qcsrc/menu/xonotic/dialog_settings_video.c:26
msgid "Resolution:"
msgid "Color depth:"
msgstr "Värisävy:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:44
+msgid "16bit"
+msgstr "16 bittinen"
+
#: qcsrc/menu/xonotic/dialog_settings_video.c:45
+msgid "32bit"
+msgstr "32 bittinen"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:48
msgid "Full screen"
msgstr "Kokoruutu"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:46
+#: qcsrc/menu/xonotic/dialog_settings_video.c:49
msgid "Vertical Synchronization"
msgstr "Pystytahdistus (VSYNC)"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:49
-msgid "Use OpenGL 2.0 shaders (GLSL)"
-msgstr "Käytä OpenGL 2.0 shaders-varjostuksia (GLSL)"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:53
+msgid "Anisotropy:"
+msgstr "Anisotropia:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:52
-msgid "Use GLSL to handle color control"
-msgstr "Käytä GLSL:ää värien hallinnassa"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:55
+msgid "ANISO^Disabled"
+msgstr "ANISO^Pois päältä"
#: qcsrc/menu/xonotic/dialog_settings_video.c:56
-msgid "Vertex Buffer Objects (VBOs)"
-msgstr "Vertex Buffer Object (VBO)"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:66
+msgid "2x"
+msgstr "2x"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:57
+#: qcsrc/menu/xonotic/dialog_settings_video.c:67
+msgid "4x"
+msgstr "4x"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:58
+msgid "8x"
+msgstr "8x"
#: qcsrc/menu/xonotic/dialog_settings_video.c:59
-msgid "VBO^Off"
-msgstr "VBO^Pois"
+msgid "16x"
+msgstr "16x"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:60
-msgid "Vertices, some Tris (compatible)"
-msgstr "Verteksit, vähän kolmioita (yhteensopivin)"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:62
+msgid "Antialiasing:"
+msgstr "Reunojenpehmennys (Antialiasing):"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:63
-msgid "Vertices"
-msgstr "Verteksit"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:65
+msgid "AA^Disabled"
+msgstr "AA^Pois päältä"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:64
-msgid "Vertices and Triangles"
-msgstr "Verteksit ja kolmiot"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:71
+msgid "High-quality frame buffer"
+msgstr "Korkeanlaatuinen kehyspuskuri"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:67
+#: qcsrc/menu/xonotic/dialog_settings_video.c:76
msgid "Depth first:"
msgstr "Syvyyssuuntainen renderöinti:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:69
+#: qcsrc/menu/xonotic/dialog_settings_video.c:78
msgid "DF^Disabled"
msgstr "DF^Pois"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:70
+#: qcsrc/menu/xonotic/dialog_settings_video.c:79
msgid "DF^World"
msgstr "DF^Maailma"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:71
+#: qcsrc/menu/xonotic/dialog_settings_video.c:80
msgid "DF^All"
msgstr "DF^Kaikki"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:75
-msgid "Disable multithreaded OpenGL"
-msgstr "Ota monisäkeinen OpenGL pois päältä"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:83
+msgid "Vertex Buffer Objects (VBOs)"
+msgstr "Vertex Buffer Object (VBO)"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:77
-msgid "Wait for GPU to finish each frame"
-msgstr "Anna näytönohjaimen viimeistellä jokainen ruutu"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:86
+msgid "VBO^Off"
+msgstr "VBO^Pois"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:80
+#: qcsrc/menu/xonotic/dialog_settings_video.c:87
+msgid "Vertices, some Tris (compatible)"
+msgstr "Verteksit, vähän kolmioita (yhteensopivin)"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:90
+msgid "Vertices"
+msgstr "Verteksit"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
+msgid "Vertices and Triangles"
+msgstr "Verteksit ja kolmiot"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:94
msgid "Brightness:"
msgstr "Kirkkaus:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:83
+#: qcsrc/menu/xonotic/dialog_settings_video.c:97
msgid "Contrast:"
msgstr "Kontrasti:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:86
+#: qcsrc/menu/xonotic/dialog_settings_video.c:100
msgid "Gamma:"
msgstr "Gamma:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:91
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
msgid "Contrast boost:"
msgstr "Kontrastin lisäys:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:96
+#: qcsrc/menu/xonotic/dialog_settings_video.c:110
msgid "Saturation:"
msgstr "Kylläisyys:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:102
+#: qcsrc/menu/xonotic/dialog_settings_video.c:116
msgid "LIT^Ambient:"
msgstr "LIT^Ympäristö:"
-#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+#: qcsrc/menu/xonotic/dialog_settings_video.c:119
msgid "Intensity:"
msgstr "Intensiivisyys:"
+#: qcsrc/menu/xonotic/dialog_settings_video.c:123
+msgid "Use OpenGL 2.0 shaders (GLSL)"
+msgstr "Käytä OpenGL 2.0 shaders-varjostuksia (GLSL)"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:125
+msgid "Use GLSL to handle color control"
+msgstr "Käytä GLSL:ää värien hallinnassa"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:128
+msgid "Wait for GPU to finish each frame"
+msgstr "Anna näytönohjaimen viimeistellä jokainen ruutu"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:132
+msgid "Psycho coloring (easter egg)"
+msgstr "Psyko-väritys (easter egg)"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:135
+msgid "Trippy vertices (easter egg)"
+msgstr "Oudot kärjet (easter egg)"
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:138
+msgid "Flip view horizontally"
+msgstr "Käännä näkymä horisontaalisesti"
+
#: qcsrc/menu/xonotic/dialog_singleplayer.c:4
msgid "Singleplayer"
msgstr "Yksinpeli"
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:127
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:116
msgid "Instant action! (random map with bots)"
msgstr "Suoraan taisteluun! (satunnainen kartta bottien kera)"
-#: qcsrc/menu/xonotic/dialog_singleplayer.c:148
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:137
+msgid "Campaign Difficulty:"
+msgstr "Kampanjan Vaikeusaste:"
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:138
+msgid "CSKL^Easy"
+msgstr "CSKL^Helppo"
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:139
+msgid "CSKL^Medium"
+msgstr "CSKL^Keskikokoinen"
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:140
+msgid "CSKL^Hard"
+msgstr "CSKL^Vaikea"
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:142
msgid "Start Singleplayer!"
msgstr "Aloita yksinpeli!"
msgid "spectate"
msgstr "seuraa sivusta"
-#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38
+#: qcsrc/menu/xonotic/mainwindow.c:39 qcsrc/menu/xonotic/mainwindow.c:42
msgid "Do not press this button again!"
msgstr "Älä paina enää näppäintä!"
-#: qcsrc/menu/xonotic/maplist.c:278
+#: qcsrc/menu/xonotic/maplist.c:282
msgid ""
"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
msgstr ""
"Höh? Tätä ei voida pelata (m on NULL). Uudelleensuodatetaan jottei vastaava "
"enää toistuisi, anteeksi häiriö.\n"
-#: qcsrc/menu/xonotic/maplist.c:286
+#: qcsrc/menu/xonotic/maplist.c:290
#, c-format
msgid "%s's Xonotic Server"
msgstr "%s Xonotic-palvelin"
-#: qcsrc/menu/xonotic/maplist.c:291
+#: qcsrc/menu/xonotic/maplist.c:295
msgid ""
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again.\n"
"Höh? Tätä ei voida pelata (epäkelpo pelityyppi). Uudelleensuodatetaan jottei "
"vastaava enää toistuisi.\n"
-#: qcsrc/menu/xonotic/playermodel.c:174
+#: qcsrc/menu/xonotic/playerlist.c:118 qcsrc/menu/xonotic/playerlist.c:128
+msgid "spectator"
+msgstr "katsoja"
+
+#: qcsrc/menu/xonotic/playermodel.c:177
msgid "<no model found>"
msgstr "<mallia ei löytynyt>"
msgid "Bookmark"
msgstr "Kirjanmerkki"
-#: qcsrc/menu/xonotic/serverlist.c:527
+#: qcsrc/menu/xonotic/serverlist.c:548
msgid "Ping"
msgstr "Viive"
-#: qcsrc/menu/xonotic/serverlist.c:528
+#: qcsrc/menu/xonotic/serverlist.c:549
msgid "Host name"
msgstr "Palvelimen nimi"
-#: qcsrc/menu/xonotic/serverlist.c:529
+#: qcsrc/menu/xonotic/serverlist.c:550
msgid "Map"
msgstr "Kartta"
-#: qcsrc/menu/xonotic/serverlist.c:530
+#: qcsrc/menu/xonotic/serverlist.c:551
msgid "Type"
msgstr "Tyyppi"
-#: qcsrc/menu/xonotic/serverlist.c:531
+#: qcsrc/menu/xonotic/serverlist.c:552
msgid "Players"
msgstr "Pelaajat"
msgid "%dx%d"
msgstr "%dx%d"
-#: qcsrc/menu/xonotic/util.qc:270
+#: qcsrc/menu/xonotic/util.qc:276
#, c-format
msgid "Received HTTP request data for an invalid id %d.\n"
msgstr "Vastaanotettiin epäkelpo HTTP datapyyntö: %d.\n"
-#: qcsrc/menu/xonotic/util.qc:285
+#: qcsrc/menu/xonotic/util.qc:291
#, c-format
msgid "error receiving update notification: status is %d\n"
msgstr "virhe vastaanottaessa päivitystiedotetta: tilanne %d\n"
-#: qcsrc/menu/xonotic/util.qc:290
+#: qcsrc/menu/xonotic/util.qc:296
msgid "error: received HTML instead of an update notification\n"
msgstr "virhe: vastaanotettiin HTML päivitystiedotteen asemesta\n"
-#: qcsrc/menu/xonotic/util.qc:295
+#: qcsrc/menu/xonotic/util.qc:301
msgid "error: received carriage returns from update notification server\n"
msgstr "virhe: vastaanotettiin tyhjää dataa päivitystiedotepalvelimelta\n"
-#: qcsrc/menu/xonotic/util.qc:316
+#: qcsrc/menu/xonotic/util.qc:322
#, c-format
msgid ""
"Update can be downloaded at:\n"
"Päivitys on ladattavissa:\n"
"%s\n"
-#: qcsrc/menu/xonotic/util.qc:337
+#: qcsrc/menu/xonotic/util.qc:351
msgid "Autogenerating mapinfo for newly added maps..."
msgstr ""
"Luodaan automaattisesti karttatietoja vastikään lisätyille kartoille..."
-#: qcsrc/menu/xonotic/util.qc:367
+#: qcsrc/menu/xonotic/util.qc:381
#, c-format
msgid "^1%s TEST BUILD"
msgstr "^1%s TESTIVERSIO"
-#: qcsrc/menu/xonotic/util.qc:432
+#: qcsrc/menu/xonotic/util.qc:439
#, c-format
msgid "Update to %s now!"
msgstr "Päivitä versioon %s nyt!"
-#: qcsrc/menu/xonotic/util.qc:501
+#: qcsrc/menu/xonotic/util.qc:524
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:523
-msgid "Arena"
-msgstr "Areena (Arena)"
+#: qcsrc/menu/xonotic/util.qc:643
+msgid "Use default"
+msgstr "Käytä perusasetusta"
-#: qcsrc/menu/xonotic/util.qc:524
-msgid "Assault"
-msgstr "Rynnäkkö (Assault)"
+#: qcsrc/menu/xonotic/util.qc:663
+msgid "Team Color:"
+msgstr "Joukkueen väri"
-#: qcsrc/menu/xonotic/util.qc:525
-msgid "Capture The Flag"
-msgstr "Lipunryöstö (CTF)"
+#: qcsrc/menu/xonotic/util.qh:50
+msgid "Enable panel"
+msgstr "Ota paneeli käyttöön"
-#: qcsrc/menu/xonotic/util.qc:526
-msgid "Clan Arena"
-msgstr "Klaaniareena (Clan Arena)"
+#: weapons.qc.tmp:1
+msgid "Rifle"
+msgstr "Rifle"
-#: qcsrc/menu/xonotic/util.qc:527
-msgid "Deathmatch"
-msgstr "Mättö (Deathmatch)"
+#: weapons.qc.tmp:2
+msgid "Machine Gun"
+msgstr "Machine Gun"
-#: qcsrc/menu/xonotic/util.qc:528
-msgid "Domination"
-msgstr "Hallinta (Domination)"
+#: weapons.qc.tmp:3
+msgid "Rocket Launcher"
+msgstr "Rocket Launcher"
-#: qcsrc/menu/xonotic/util.qc:529
-msgid "Freeze Tag"
-msgstr "Pakkashippa (Freeze Tag)"
+#: weapons.qc.tmp:4
+msgid "Port-O-Launch"
+msgstr "Port-O-Launch"
-#: qcsrc/menu/xonotic/util.qc:530
-msgid "Keepaway"
-msgstr "Pakomatka (Keepaway)"
+#: weapons.qc.tmp:5
+msgid "Grappling Hook"
+msgstr "Grabbling Hook"
-#: qcsrc/menu/xonotic/util.qc:531
-msgid "Key Hunt"
-msgstr "Avaimenetsintä (Key Hunt)"
+#: weapons.qc.tmp:6
+msgid "Electro"
+msgstr "Electro"
-#: qcsrc/menu/xonotic/util.qc:532
-msgid "Last Man Standing"
-msgstr "Viimeiseen mieheen (Last Man Standing)"
+#: weapons.qc.tmp:7
+msgid "Laser"
+msgstr "Laser"
-#: qcsrc/menu/xonotic/util.qc:533
-msgid "Nexball"
-msgstr "Nexpallo (Nexball)"
+#: weapons.qc.tmp:8
+msgid "Shotgun"
+msgstr "Shotgun"
-#: qcsrc/menu/xonotic/util.qc:534
-msgid "Onslaught"
-msgstr "Suurtaistelu (Onslaught)"
+#: weapons.qc.tmp:9
+#, c-format
+msgid "@!#%'n Tuba"
+msgstr "@!#% tuuba"
-#: qcsrc/menu/xonotic/util.qc:535
-msgid "Race"
-msgstr "Kilpailu (RACE)"
+#: weapons.qc.tmp:10
+msgid "MinstaNex"
+msgstr "MinstaNex"
-#: qcsrc/menu/xonotic/util.qc:536
-msgid "Race CTS"
-msgstr "Kilpailu CTS (RACE CTS)"
+#: weapons.qc.tmp:11
+msgid "Crylink"
+msgstr "Crylink"
-#: qcsrc/menu/xonotic/util.qc:537
-msgid "Runematch"
-msgstr "Riimu-ottelu (Runematch)"
+#: weapons.qc.tmp:12
+msgid "Heavy Laser Assault Cannon"
+msgstr "HLAC"
-#: qcsrc/menu/xonotic/util.qc:538
-msgid "Team Deathmatch"
-msgstr "Joukkuemättö (Team Deatchmatch)"
+#: weapons.qc.tmp:13
+msgid "Mortar"
+msgstr "Mortar"
-#: qcsrc/menu/xonotic/util.qc:557
-#, c-format
-msgid "@!#%'n Tuba Throwing"
-msgstr "@!#% tuubanheitto!"
+#: weapons.qc.tmp:14
+msgid "Hagar"
+msgstr "Hagar"
-#: 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"
+#: weapons.qc.tmp:15
+msgid "T.A.G. Seeker"
+msgstr "T.A.G. Seeker"
-#: qcsrc/menu/xonotic/util.qc:588
-msgid "Use default"
-msgstr "Käytä perusasetusta"
+#: weapons.qc.tmp:16
+msgid "Fireball"
+msgstr "Fireball"
-#: qcsrc/menu/xonotic/util.qc:608
-msgid "Team Color:"
-msgstr "Joukkueen väri"
+#: weapons.qc.tmp:17
+msgid "Mine Layer"
+msgstr "Mine Layer"
-#: qcsrc/menu/xonotic/util.qh:47
-msgid "Enable panel"
-msgstr "Ota paneeli käyttöön"
+#: weapons.qc.tmp:18
+msgid "Nex"
+msgstr "Nex"
-#: qcsrc/server/w_crylink.qc:2
-msgid "Crylink"
-msgstr "Crylink"
+#~ msgid "%d/%d, %d free player slots"
+#~ msgstr "%d/%d, %d vapaata pelaajapaikkaa"
-#: qcsrc/server/w_crylink.qc:666
-#, c-format
-msgid "%s succeeded at self-destructing themself with the Crylink"
-msgstr "%s hautoi itsetuhoisia ajatuksia Crylink kädessä"
+#~ msgid "Gameplay:"
+#~ msgstr "Pelitila:"
-#: qcsrc/server/w_crylink.qc:671
-#, c-format
-msgid "%s could not hide from %s's Crylink"
-msgstr "%s ei kyennyt pakenemaan pelaajan %s Crylinkkiä"
+#~ msgid "Ping:"
+#~ msgstr "Viive:"
-#: qcsrc/server/w_crylink.qc:673
-#, c-format
-msgid "%s was too close to %s's Crylink"
-msgstr "%s oli liian lähellä pelaajan %s ampumarataa"
+#~ msgid "CA:"
+#~ msgstr "CA:"
-#: qcsrc/server/w_crylink.qc:675
-#, c-format
-msgid "%s took a close look at %s's Crylink"
-msgstr "%s pääsi tutustumaan lähemmin pelaajan %s kauniiseen Crylinkkiin"
+#~ msgid "View bobbing:"
+#~ msgstr "Näytä huojunta:"
-#: qcsrc/server/w_electro.qc:2
-msgid "Electro"
-msgstr "Electro"
+#~ msgid "Zoom speed:"
+#~ msgstr "Tarkennuksen nopeus:"
-#: qcsrc/server/w_electro.qc:574
-#, c-format
-msgid "%s could not remember where they put plasma"
-msgstr "%s ei sattunut muistamaan minne se plasma oikein kuuluikaan"
+#~ msgid "Weapon settings..."
+#~ msgstr "Aseiden asetukset..."
-#: qcsrc/server/w_electro.qc:576
-#, c-format
-msgid "%s played with plasma"
-msgstr "%s leikki plasmalla, ei hyvä"
+#~ msgid "Size:"
+#~ msgstr "Koko:"
-#: qcsrc/server/w_electro.qc:583
-#, c-format
-msgid "%s just noticed %s's blue ball"
-msgstr "%s näki pelaajan %s sinisen pallon"
+#~ msgid "HTST^None"
+#~ msgstr "HTST^Ei mitään."
-#: qcsrc/server/w_electro.qc:585
-#, c-format
-msgid "%s got in touch with %s's blue ball"
-msgstr "%s pääsi tutustumaan pelaajan %s siniseen palloon"
+#~ msgid "Waypoints setup..."
+#~ msgstr "Välimatkojen asetukset..."
-#: qcsrc/server/w_electro.qc:590
-#, c-format
-msgid "%s felt the electrifying air of %s's combo"
-msgstr "%s tunsi sähköä ilmassa pelaajan %s tulituksen jälkeen"
+#~ msgid "Waypoint scale:"
+#~ msgstr "Välietappien skaala:"
-#: qcsrc/server/w_electro.qc:592
-#, c-format
-msgid "%s got too close to %s's blue beam"
-msgstr "%s joutui liian lähelle pelaajan %s sinistä sädettä"
+#~ msgid "Show names:"
+#~ msgstr "Näytä nimet:"
-#: qcsrc/server/w_electro.qc:594
-#, c-format
-msgid "%s was blasted by %s's blue beam"
-msgstr "%s posahti pelaajan %s siniseen säteeseen"
+#~ msgid "Teammates"
+#~ msgstr "Oma joukkue"
-#: qcsrc/server/w_fireball.qc:2
-msgid "Fireball"
-msgstr "Fireball"
+#~ msgid "All players"
+#~ msgstr "Kaikki pelaajat"
-#: qcsrc/server/w_fireball.qc:417
-#, c-format
-msgid "%s forgot about some firemine"
-msgstr "%s unohti tulimiinansa"
+#~ msgid "Spatial voices:"
+#~ msgstr "Tilanneäänet:"
-#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240
-#, c-format
-msgid "%s should have used a smaller gun"
-msgstr "%s olisi pitänyt käyttää pienempää asetta"
+#~ msgid "VOCS^None"
+#~ msgstr "VOCS^Ei mitään"
-#: qcsrc/server/w_fireball.qc:426
-#, c-format
-msgid "%s tried to catch %s's firemine"
-msgstr "%s koetti napata pelaajan %s tulimiinan"
+#~ msgid "VOCS^Taunts"
+#~ msgstr "VOCS^Huudahdukset"
-#: qcsrc/server/w_fireball.qc:428
-#, c-format
-msgid "%s fatefully ignored %s's firemine"
-msgstr "%s kohtalokkaasti tutustui pelaajan %s tulimiinaan"
+#~ msgid "VOCS^All"
+#~ msgstr "VOCS^Kaikki"
-#: qcsrc/server/w_fireball.qc:435
-#, c-format
-msgid "%s could not hide from %s's fireball"
-msgstr "%s ei kyennyt pakenemaan pelaajan %s tulipalloa"
+#~ msgid "Taunt range:"
+#~ msgstr "Huudahduksen kantama"
-#: qcsrc/server/w_fireball.qc:437
-#, c-format
-msgid "%s saw the pretty lights of %s's fireball"
-msgstr "&s näki kauniita valoja pelaajan %s tulipallosta"
+#~ msgid "RNG^Very short"
+#~ msgstr "RNG^Hyvin lyhyt"
-#: qcsrc/server/w_fireball.qc:440
-#, c-format
-msgid "%s got too close to %s's fireball"
-msgstr "%s joutui turhan lähelle pelaajan %s tulipalloa"
+#~ msgid "RNG^Short"
+#~ msgstr "RNG^Lyhyt"
-#: qcsrc/server/w_fireball.qc:442
-#, c-format
-msgid "%s tasted %s's fireball"
-msgstr "%s maistoi pelaajan %s tulipalloa"
+#~ msgid "RNG^Normal"
+#~ msgstr "RNG^Normaali"
-#: qcsrc/server/w_grenadelauncher.qc:2
-msgid "Mortar"
-msgstr "Mortar"
+#~ msgid "RNG^Long"
+#~ msgstr "RNG^Pitkä"
-#: qcsrc/server/w_grenadelauncher.qc:383
-#, c-format
-msgid "%s tried out his own grenade"
-msgstr "%s testasi räjähtääkö oma kranaatti"
+#~ msgid "RNG^Full"
+#~ msgstr "RNG^Täysi"
-#: qcsrc/server/w_grenadelauncher.qc:385
-#, c-format
-msgid "%s detonated"
-msgstr "%s pössähti"
+#~ msgid "WRN^None"
+#~ msgstr "WRN^Ei mitään"
-#: qcsrc/server/w_grenadelauncher.qc:391
-#, c-format
-msgid "%s didn't see %s's grenade"
-msgstr "%s ei nähnyt pelaajan %s kranaattia"
+#~ msgid "Flash blend approximation"
+#~ msgstr "Yksinkertaiset valot"
-#: qcsrc/server/w_grenadelauncher.qc:393
-#, c-format
-msgid "%s almost dodged %s's grenade"
-msgstr "%s väisti melkein pelaajan %s kranaatin"
+#~ msgid "High Dynamic Range (HDR)"
+#~ msgstr "HDR"
-#: qcsrc/server/w_grenadelauncher.qc:395
-#, c-format
-msgid "%s ate %s's grenade"
-msgstr "%s söi pelaajan %s kranaatin"
+#~ msgid "Blur and sharpen postprocessing"
+#~ msgstr "Sumenna ja terävöitä jälkikäsittelyä"
-#: qcsrc/server/w_hagar.qc:2
-msgid "Hagar"
-msgstr "Hagar"
+#~ msgid "UI mouse speed:"
+#~ msgstr "Käyttöliittymän hiiren nopeus:"
-#: qcsrc/server/w_hagar.qc:395 qcsrc/server/w_seeker.qc:655
-#, c-format
-msgid "%s played with tiny rockets"
-msgstr "%s leikki pienien rakettien kanssa"
+#~ msgid "Mouse filter"
+#~ msgstr "Hiiren suodatin"
-#: qcsrc/server/w_hagar.qc:399
-#, c-format
-msgid "%s hoped %s's missiles wouldn't bounce"
-msgstr "%s toivoi ettei pelaajan %s raketit olisi kimmonneet"
+#~ msgid "Minimize input latency"
+#~ msgstr "Minimoi syötteen viive"
-#: qcsrc/server/w_hagar.qc:401 qcsrc/server/w_seeker.qc:661
-#, c-format
-msgid "%s was pummeled by %s"
-msgstr "%s joutui pelaajan %s nuijimaksi"
+#~ msgid "Network speed:"
+#~ msgstr "Verkon nopeus:"
-#: qcsrc/server/w_hlac.qc:2
-msgid "Heavy Laser Assault Cannon"
-msgstr "HLAC"
+#~ msgid "HTTP downloads:"
+#~ msgstr "HTTP lataukset:"
-#: qcsrc/server/w_hlac.qc:242
-#, c-format
-msgid "%s was cut down by %s"
-msgstr "%s joutui pelaajan %s niittämäksi"
+#~ msgid "Disable multithreaded OpenGL"
+#~ msgstr "Ota monisäkeinen OpenGL pois päältä"
-#: qcsrc/server/w_hook.qc:2
-msgid "Grappling Hook"
-msgstr "Grabbling Hook"
+#~ msgid "%s succeeded at self-destructing themself with the Crylink"
+#~ msgstr "%s hautoi itsetuhoisia ajatuksia Crylink kädessä"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
-#, c-format
-msgid "%s did the impossible"
-msgstr "%s teki mahdottomat"
+#~ msgid "%s could not hide from %s's Crylink"
+#~ msgstr "%s ei kyennyt pakenemaan pelaajan %s Crylinkkiä"
-#: qcsrc/server/w_hook.qc:268
-#, c-format
-msgid "%s has run into %s's gravity bomb"
-msgstr "%s juoksi pelaajan %s pommiin"
+#~ msgid "%s was too close to %s's Crylink"
+#~ msgstr "%s oli liian lähellä pelaajan %s ampumarataa"
-#: qcsrc/server/w_laser.qc:2
-msgid "Laser"
-msgstr "Laser"
+#~ msgid "%s took a close look at %s's Crylink"
+#~ msgstr "%s pääsi tutustumaan lähemmin pelaajan %s kauniiseen Crylinkkiin"
-#: qcsrc/server/w_laser.qc:311
-#, c-format
-msgid "%s lasered themself to hell"
-msgstr "%s lähetti itsensä laserilla helvettiin"
+#~ msgid "%s could not remember where they put plasma"
+#~ msgstr "%s ei sattunut muistamaan minne se plasma oikein kuuluikaan"
-#: qcsrc/server/w_laser.qc:315
-#, c-format
-msgid "%s was cut in half by %s's gauntlet"
-msgstr "%s leikkaantui kahtia pelaajan %s taisteluhansikkaaseen"
+#~ msgid "%s played with plasma"
+#~ msgstr "%s leikki plasmalla, ei hyvä"
-#: qcsrc/server/w_laser.qc:317
-#, c-format
-msgid "%s was lasered to death by %s"
-msgstr "%s kuoli pelaajan %s laseriin"
+#~ msgid "%s just noticed %s's blue ball"
+#~ msgstr "%s näki pelaajan %s sinisen pallon"
-#: qcsrc/server/w_minelayer.qc:2
-msgid "Mine Layer"
-msgstr "Mine Layer"
+#~ msgid "%s got in touch with %s's blue ball"
+#~ msgstr "%s pääsi tutustumaan pelaajan %s siniseen palloon"
-#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
-#, c-format
-msgid "%s exploded"
-msgstr "%s räjähti"
+#~ msgid "%s felt the electrifying air of %s's combo"
+#~ msgstr "%s tunsi sähköä ilmassa pelaajan %s tulituksen jälkeen"
-#: qcsrc/server/w_minelayer.qc:527
-#, c-format
-msgid "%s got too close to %s's mine"
-msgstr "%s joutui liian lähelle pelaajan %s miinaa"
+#~ msgid "%s got too close to %s's blue beam"
+#~ msgstr "%s joutui liian lähelle pelaajan %s sinistä sädettä"
-#: qcsrc/server/w_minelayer.qc:529
-#, c-format
-msgid "%s almost dodged %s's mine"
-msgstr "%s miltein väisti pelaajan %s miinan"
+#~ msgid "%s was blasted by %s's blue beam"
+#~ msgstr "%s posahti pelaajan %s siniseen säteeseen"
-#: qcsrc/server/w_minelayer.qc:531
-#, c-format
-msgid "%s stepped on %s's mine"
-msgstr "%s astui pelaajan %s miinaan"
+#~ msgid "%s forgot about some firemine"
+#~ msgstr "%s unohti tulimiinansa"
-#: qcsrc/server/w_minstanex.qc:2
-msgid "MinstaNex"
-msgstr "MinstaNex"
+#~ msgid "%s should have used a smaller gun"
+#~ msgstr "%s olisi pitänyt käyttää pienempää asetta"
-#: 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 kokee portaalit"
+#~ msgid "%s tried to catch %s's firemine"
+#~ msgstr "%s koetti napata pelaajan %s tulimiinan"
-#: qcsrc/server/w_minstanex.qc:295 qcsrc/server/w_nex.qc:255
-#, c-format
-msgid "%s has been vaporized by %s"
-msgstr "%s höyrystyi pelaajan %s toimesta"
+#~ msgid "%s fatefully ignored %s's firemine"
+#~ msgstr "%s kohtalokkaasti tutustui pelaajan %s tulimiinaan"
-#: qcsrc/server/w_nex.qc:2
-msgid "Nex"
-msgstr "Nex"
+#~ msgid "%s could not hide from %s's fireball"
+#~ msgstr "%s ei kyennyt pakenemaan pelaajan %s tulipalloa"
-#: qcsrc/server/w_porto.qc:2
-msgid "Port-O-Launch"
-msgstr "Port-O-Launch"
+#~ msgid "%s saw the pretty lights of %s's fireball"
+#~ msgstr "&s näki kauniita valoja pelaajan %s tulipallosta"
-#: qcsrc/server/w_porto.qc:298
-#, c-format
-msgid "%s felt %s doing the impossible to him"
-msgstr "%s tunsi kuinka pelaaja %s teki hänelle mahdottoman tempun"
+#~ msgid "%s got too close to %s's fireball"
+#~ msgstr "%s joutui turhan lähelle pelaajan %s tulipalloa"
-#: qcsrc/server/w_rifle.qc:2
-msgid "Rifle"
-msgstr "Rifle"
+#~ msgid "%s tasted %s's fireball"
+#~ msgstr "%s maistoi pelaajan %s tulipalloa"
-#: qcsrc/server/w_rifle.qc:233
-#, c-format
-msgid "%s shot themself automatically"
-msgstr "%s ampui itsensä täysin omatoimisesti"
+#~ msgid "%s tried out his own grenade"
+#~ msgstr "%s testasi räjähtääkö oma kranaatti"
-#: qcsrc/server/w_rifle.qc:235
-#, c-format
-msgid "%s sniped themself somehow"
-msgstr "%s onnistui jotenkin ampumaan omaan jalkaansa"
+#~ msgid "%s detonated"
+#~ msgstr "%s pössähti"
-#: qcsrc/server/w_rifle.qc:242
-#, c-format
-msgid "%s failed to hide from %s's bullet hail"
-msgstr "%s ei kyennyt pakenemaan pelaajan %s luotisadetta"
+#~ msgid "%s didn't see %s's grenade"
+#~ msgstr "%s ei nähnyt pelaajan %s kranaattia"
-#: qcsrc/server/w_rifle.qc:244
-#, c-format
-msgid "%s died in %s's bullet hail"
-msgstr "%s kuoli pelaajan %s luotisateeseen"
+#~ msgid "%s almost dodged %s's grenade"
+#~ msgstr "%s väisti melkein pelaajan %s kranaatin"
-#: qcsrc/server/w_rifle.qc:251
-#, c-format
-msgid "%s failed to hide from %s's rifle"
-msgstr "%s ei kyennyt piiloutumaan pelaajan %s kivääriä"
+#~ msgid "%s ate %s's grenade"
+#~ msgstr "%s söi pelaajan %s kranaatin"
-#: qcsrc/server/w_rifle.qc:256
-#, c-format
-msgid "%s got hit in the head by %s"
-msgstr "%s sai päähänsä reiän pelaajan %s toimesta"
+#~ msgid "%s played with tiny rockets"
+#~ msgstr "%s leikki pienien rakettien kanssa"
-#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
-#, c-format
-msgid "%s was sniped by %s"
-msgstr "%s ammuttiin alas, kuolonlaukauksen tarjosi %s"
+#~ msgid "%s hoped %s's missiles wouldn't bounce"
+#~ msgstr "%s toivoi ettei pelaajan %s raketit olisi kimmonneet"
-#: qcsrc/server/w_rocketlauncher.qc:2
-msgid "Rocket Launcher"
-msgstr "Rocket Launcher"
+#~ msgid "%s was pummeled by %s"
+#~ msgstr "%s joutui pelaajan %s nuijimaksi"
-#: qcsrc/server/w_rocketlauncher.qc:505
-#, c-format
-msgid "%s got too close to %s's rocket"
-msgstr "%s joutui liian lähelle pelaajan %s rakettia"
+#~ msgid "%s was cut down by %s"
+#~ msgstr "%s joutui pelaajan %s niittämäksi"
-#: qcsrc/server/w_rocketlauncher.qc:507
-#, c-format
-msgid "%s almost dodged %s's rocket"
-msgstr "%s miltein väisti pelaajan %s raketin"
+#~ msgid "%s did the impossible"
+#~ msgstr "%s teki mahdottomat"
-#: qcsrc/server/w_rocketlauncher.qc:509
-#, c-format
-msgid "%s ate %s's rocket"
-msgstr "%s söi pelaajan %s raketin"
+#~ msgid "%s has run into %s's gravity bomb"
+#~ msgstr "%s juoksi pelaajan %s pommiin"
-#: qcsrc/server/w_seeker.qc:2
-msgid "T.A.G. Seeker"
-msgstr "T.A.G. Seeker"
+#~ msgid "%s lasered themself to hell"
+#~ msgstr "%s lähetti itsensä laserilla helvettiin"
-#: qcsrc/server/w_seeker.qc:659
-#, c-format
-msgid "%s was tagged by %s"
-msgstr "%s joutui pelaajan %s leimaamaksi ja tuhoamaksi"
+#~ msgid "%s was cut in half by %s's gauntlet"
+#~ msgstr "%s leikkaantui kahtia pelaajan %s taisteluhansikkaaseen"
-#: qcsrc/server/w_shotgun.qc:2
-msgid "Shotgun"
-msgstr "Shotgun"
+#~ msgid "%s was lasered to death by %s"
+#~ msgstr "%s kuoli pelaajan %s laseriin"
-#: qcsrc/server/w_shotgun.qc:219
-#, c-format
-msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
-msgstr "%2$s ^7murjoi pelaajaa %1$s ^2haulikon tylpällä päällä"
+#~ msgid "%s exploded"
+#~ msgstr "%s räjähti"
-#: qcsrc/server/w_shotgun.qc:221
-#, c-format
-msgid "%s was gunned by %s"
-msgstr "%s ammuttiin alas pelaajan %s toimesta"
+#~ msgid "%s got too close to %s's mine"
+#~ msgstr "%s joutui liian lähelle pelaajan %s miinaa"
-#: qcsrc/server/w_tuba.qc:2
-#, c-format
-msgid "@!#%'n Tuba"
-msgstr "@!#% tuuba"
+#~ msgid "%s almost dodged %s's mine"
+#~ msgstr "%s miltein väisti pelaajan %s miinan"
-#: qcsrc/server/w_tuba.qc:252
-#, c-format
-msgid "%s hurt his own ears with the @!#%%'n Tuba"
-msgstr "%s tärykalvot räjähti, kun hän soitteli @!#%% tuubaa"
+#~ msgid "%s stepped on %s's mine"
+#~ msgstr "%s astui pelaajan %s miinaan"
-#: qcsrc/server/w_tuba.qc:256
-#, c-format
-msgid "%s died of %s's great playing on the @!#%%'n Tuba"
-msgstr ""
-"%s kuoli ihastuksesta kuullessaan pelaajan %s kaunista @!#%% tuubansoittoa"
+#~ msgid "%s is now thinking with portals"
+#~ msgstr "%s kokee portaalit"
-#: qcsrc/server/w_uzi.qc:2
-msgid "Machine Gun"
-msgstr "Machine Gun"
+#~ msgid "%s has been vaporized by %s"
+#~ msgstr "%s höyrystyi pelaajan %s toimesta"
-#: qcsrc/server/w_uzi.qc:323
-#, c-format
-msgid "%s was riddled full of holes by %s"
-msgstr "%s sai muutaman uuden ilmanvaihtoreiän, kun %s tarjosi niitä"
+#~ msgid "%s felt %s doing the impossible to him"
+#~ msgstr "%s tunsi kuinka pelaaja %s teki hänelle mahdottoman tempun"
+
+#~ msgid "%s shot themself automatically"
+#~ msgstr "%s ampui itsensä täysin omatoimisesti"
+
+#~ msgid "%s sniped themself somehow"
+#~ msgstr "%s onnistui jotenkin ampumaan omaan jalkaansa"
+
+#~ msgid "%s failed to hide from %s's bullet hail"
+#~ msgstr "%s ei kyennyt pakenemaan pelaajan %s luotisadetta"
+
+#~ msgid "%s died in %s's bullet hail"
+#~ msgstr "%s kuoli pelaajan %s luotisateeseen"
+
+#~ msgid "%s failed to hide from %s's rifle"
+#~ msgstr "%s ei kyennyt piiloutumaan pelaajan %s kivääriä"
+
+#~ msgid "%s got hit in the head by %s"
+#~ msgstr "%s sai päähänsä reiän pelaajan %s toimesta"
+
+#~ msgid "%s was sniped by %s"
+#~ msgstr "%s ammuttiin alas, kuolonlaukauksen tarjosi %s"
+
+#~ msgid "%s got too close to %s's rocket"
+#~ msgstr "%s joutui liian lähelle pelaajan %s rakettia"
+
+#~ msgid "%s almost dodged %s's rocket"
+#~ msgstr "%s miltein väisti pelaajan %s raketin"
+
+#~ msgid "%s ate %s's rocket"
+#~ msgstr "%s söi pelaajan %s raketin"
+
+#~ msgid "%s was tagged by %s"
+#~ msgstr "%s joutui pelaajan %s leimaamaksi ja tuhoamaksi"
+
+#~ msgid "%2$s ^7slapped %1$s ^7around a bit with a large ^2shotgun"
+#~ msgstr "%2$s ^7murjoi pelaajaa %1$s ^2haulikon tylpällä päällä"
+
+#~ msgid "%s was gunned by %s"
+#~ msgstr "%s ammuttiin alas pelaajan %s toimesta"
+
+#~ msgid "%s hurt his own ears with the @!#%%'n Tuba"
+#~ msgstr "%s tärykalvot räjähti, kun hän soitteli @!#%% tuubaa"
+
+#~ msgid "%s died of %s's great playing on the @!#%%'n Tuba"
+#~ msgstr ""
+#~ "%s kuoli ihastuksesta kuullessaan pelaajan %s kaunista @!#%% tuubansoittoa"
+
+#~ msgid "%s was riddled full of holes by %s"
+#~ msgstr "%s sai muutaman uuden ilmanvaihtoreiän, kun %s tarjosi niitä"
# Copyright (C) 2011 Team Xonotic
# 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.
+# Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011,2012.
#
msgid ""
msgstr ""
-"Project-Id-Version: 0.1preview\n"
+"Project-Id-Version: 0.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-26 12:24+0100\n"
-"PO-Revision-Date: 2011-09-04 01:40+0100\n"
+"PO-Revision-Date: 2011-02-26 20:40+0100\n"
"Last-Translator: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"
"Language-Team: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"
"Language: it\n"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
msgid "EF^None"
-msgstr "EF^Nessuno"
+msgstr "Nessuno"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
msgid "Slide"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
msgid "EF^Both"
-msgstr "EF^Entrambi"
+msgstr "Entrambi"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
msgid "SHOWAS^None"
-msgstr "SHOWAS^Nessuno"
+msgstr "Nessuno"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
msgid "Number"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
msgid "DOCK^Disabled"
-msgstr "DOCK^Disabilitato"
+msgstr "Disabilitato"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
msgid "DOCK^Small"
-msgstr "DOCK^Piccolo"
+msgstr "Piccolo"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
msgid "DOCK^Medium"
-msgstr "DOCK^Medio"
+msgstr "Medio"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
msgid "DOCK^Large"
-msgstr "DOCK^Largo"
+msgstr "Largo"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
msgid "Grid settings:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:104
msgid "MUT^None"
-msgstr "MUT^Nessuno"
+msgstr "Nessuno"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170
msgid "Gameplay mutators:"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36
msgid "SRVS^Empty"
-msgstr "SRVS^Vuoti"
+msgstr "Vuoti"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40
msgid "SRVS^Full"
-msgstr "SRVS^Pieni"
+msgstr "Pieni"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44
msgid "Pause"
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:242
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:247
msgid "N/A"
-msgstr "N/D"
+msgstr "N.D."
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:179
#, c-format
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:33
msgid "GIBS^None"
-msgstr "GIBS^Nessuno"
+msgstr "Nessuno"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:34
msgid "GIBS^Few"
-msgstr "GIBS^Pochi"
+msgstr "Pochi"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:35
msgid "GIBS^Many"
-msgstr "GIBS^Molti"
+msgstr "Molti"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:36
msgid "GIBS^Lots"
-msgstr "GIBS^Parecchi"
+msgstr "Parecchi"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:40
msgid "Playermodel LOD:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:45
msgid "MDL^None"
-msgstr "MDL^Nessuno"
+msgstr "Nessuno"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:46
msgid "MDL^Custom"
-msgstr "MDL^Personalizzato"
+msgstr "Personalizzato"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:47
msgid "MDL^All"
-msgstr "MDL^Tutti"
+msgstr "Tutti"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:50
msgid "Force player models to mine"
#: qcsrc/menu/xonotic/dialog_settings_audio.c:45
msgid "VOL^Ambient:"
-msgstr "VOL^Ambiente:"
+msgstr "Ambiente:"
#: qcsrc/menu/xonotic/dialog_settings_audio.c:54
msgid "Info:"
#: qcsrc/menu/xonotic/dialog_settings_audio.c:182
msgid "WRN^Both"
-msgstr "WNR^Entrambi"
+msgstr "Entrambi"
#: qcsrc/menu/xonotic/dialog_settings_audio.c:189
msgid "Automatic taunts"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:41
msgid "PRE^OMG!"
-msgstr "PRE^Oh mio dio!"
+msgstr "Oh mio dio!"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:42
msgid "PRE^Low"
-msgstr "PRE^Bassa"
+msgstr "Bassa"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:43
msgid "PRE^Medium"
-msgstr "PRE^Media"
+msgstr "Media"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:44
msgid "PRE^Normal"
-msgstr "PRE^Normale"
+msgstr "Normale"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:45
msgid "PRE^High"
-msgstr "PRE^Alta"
+msgstr "Alta"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:46
msgid "PRE^Ultra"
-msgstr "PRE^Ultra"
+msgstr "Ultra"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:48
msgid "PRE^Ultimate"
-msgstr "PRE^Massima"
+msgstr "Massima"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:52
msgid "Geometry detail:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:54
msgid "DET^Lowest"
-msgstr "DET^Molto bassi"
+msgstr "Molto bassi"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:55
msgid "DET^Low"
-msgstr "DET^Bassi"
+msgstr "Bassi"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:56
msgid "DET^Normal"
-msgstr "DET^Normali"
+msgstr "Normali"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:57
msgid "DET^Good"
-msgstr "DET^Buoni"
+msgstr "Buoni"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:58
msgid "DET^Best"
-msgstr "DET^Ottimi"
+msgstr "Ottimi"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:59
msgid "DET^Insane"
-msgstr "DET^Bestiali"
+msgstr "Bestiali"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:62
msgid "Texture resolution:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:65
msgid "RES^Leet"
-msgstr "RES^Leet"
+msgstr "Leet"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:66
msgid "RES^Lowest"
-msgstr "RES^Molto bassa"
+msgstr "Molto bassa"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:67
msgid "RES^Very low"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:68
msgid "RES^Low"
-msgstr "RES^Bassa"
+msgstr "Bassa"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:69
msgid "RES^Normal"
-msgstr "RES^Normale"
+msgstr "Normale"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:70
msgid "RES^Good"
-msgstr "RES^Buona"
+msgstr "Buona"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:71
msgid "RES^Best"
-msgstr "RES^Ottima"
+msgstr "Ottima"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:84
#: qcsrc/menu/xonotic/dialog_settings_effects.c:87
#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
msgid "REFL^Good"
-msgstr "REFL^Buone"
+msgstr "Buone"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:169
msgid "Sharp"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:179
msgid "Extra postprocessing effects"
-msgstr "Effetti extra di postprocessing"
+msgstr "Effetti extra di postcalcolo"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
#: qcsrc/menu/xonotic/dialog_settings_video.c:31
msgid "SZ^Unreadable"
-msgstr "SZ^Illeggibile"
+msgstr "Illeggibile"
#: qcsrc/menu/xonotic/dialog_settings_video.c:32
msgid "SZ^Tiny"
-msgstr "SZ^Minuscolo"
+msgstr "Minuscolo"
#: qcsrc/menu/xonotic/dialog_settings_video.c:33
msgid "SZ^Little"
-msgstr "SZ^Molto piccolo"
+msgstr "Molto piccolo"
#: qcsrc/menu/xonotic/dialog_settings_video.c:34
msgid "SZ^Small"
-msgstr "SZ^Piccolo"
+msgstr "Piccolo"
#: qcsrc/menu/xonotic/dialog_settings_video.c:35
msgid "SZ^Medium"
-msgstr "SZ^Medio"
+msgstr "Medio"
#: qcsrc/menu/xonotic/dialog_settings_video.c:36
msgid "SZ^Large"
-msgstr "SZ^Largo"
+msgstr "Largo"
#: qcsrc/menu/xonotic/dialog_settings_video.c:37
msgid "SZ^Huge"
-msgstr "SZ^Enorme"
+msgstr "Enorme"
#: qcsrc/menu/xonotic/dialog_settings_video.c:38
msgid "SZ^Gigantic"
-msgstr "SZ^Gigante"
+msgstr "Gigante"
#: qcsrc/menu/xonotic/dialog_settings_video.c:39
msgid "SZ^Colossal"
-msgstr "SZ^Colossale"
+msgstr "Colossale"
#: qcsrc/menu/xonotic/dialog_settings_video.c:42
msgid "Color depth:"
#: qcsrc/menu/xonotic/dialog_settings_video.c:55
msgid "ANISO^Disabled"
-msgstr "ANISO^Disabilitato"
+msgstr "Disabilitata"
#: qcsrc/menu/xonotic/dialog_settings_video.c:56
#: qcsrc/menu/xonotic/dialog_settings_video.c:66
#: qcsrc/menu/xonotic/dialog_settings_video.c:65
msgid "AA^Disabled"
-msgstr "AA^Disabilitato"
+msgstr "Disabilitato"
#: qcsrc/menu/xonotic/dialog_settings_video.c:71
msgid "High-quality frame buffer"
#: qcsrc/menu/xonotic/dialog_settings_video.c:78
msgid "DF^Disabled"
-msgstr "DF^Disabilitata"
+msgstr "Disabilitato"
#: qcsrc/menu/xonotic/dialog_settings_video.c:79
msgid "DF^World"
-msgstr "DF^Globale"
+msgstr "Globale"
#: qcsrc/menu/xonotic/dialog_settings_video.c:80
msgid "DF^All"
-msgstr "DF^Tutto"
+msgstr "Tutto"
#: qcsrc/menu/xonotic/dialog_settings_video.c:83
msgid "Vertex Buffer Objects (VBOs)"
#: qcsrc/menu/xonotic/dialog_settings_video.c:86
msgid "VBO^Off"
-msgstr "VBO^Off"
+msgstr "Non attivo"
#: qcsrc/menu/xonotic/dialog_settings_video.c:87
msgid "Vertices, some Tris (compatible)"
#: qcsrc/menu/xonotic/dialog_settings_video.c:116
msgid "LIT^Ambient:"
-msgstr "LIT^Ambiente:"
+msgstr "Ambiente:"
#: qcsrc/menu/xonotic/dialog_settings_video.c:119
msgid "Intensity:"
#: qcsrc/menu/xonotic/slider_decibels.c:50
msgid "VOL^OFF"
-msgstr "VOL^OFF"
+msgstr "OFF"
#: qcsrc/menu/xonotic/slider_decibels.c:52
msgid "VOL^MAX"
-msgstr "VOL^MAX"
+msgstr "MAX"
#: qcsrc/menu/xonotic/slider_decibels.c:53
#, c-format
#: weapons.qc.tmp:1
msgid "Rifle"
-msgstr "Fucile"
+msgstr "Rifle"
#: weapons.qc.tmp:2
msgid "Machine Gun"
--- /dev/null
+/*
+Generated framegroups file for okmale1
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okmale1 die1
+42 56 30 0 // okmale1 die2
+98 11 15 1 // okmale1 draw
+109 6 10 1 // okmale1 duck
+115 17 15 1 // okmale1 duckwalk
+132 31 40 0 // okmale1 duckjump
+163 17 10 1 // okmale1 duckidle
+180 101 15 1 // okmale1 idle
+281 17 20 1 // okmale1 jump
+298 6 10 0 // okmale1 pain1
+304 6 10 0 // okmale1 pain2
+310 6 30 0 // okmale1 shoot
+316 17 15 1 // okmale1 taunt
+333 17 30 1 // okmale1 run
+350 17 30 1 // okmale1 runbackwards
+367 17 30 1 // okmale1 strafeleft
+384 17 30 1 // okmale1 straferight
+401 3 10 0 // okmale1 dead1
+404 3 10 0 // okmale1 dead2
+407 17 30 1 // okmale1 forwardright
+424 17 30 1 // okmale1 forwardleft
+441 17 30 1 // okmale1 backright
+458 17 30 1 // okmale1 backleft
+475 21 15 1 // okmale1 melee
--- /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 overkillmale1
+species human
+sex Male
+weight 105
+age 26
+
+overkill solider
--- /dev/null
+/*
+Generated framegroups file for okmale2
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okmale2 die1
+42 56 30 0 // okmale2 die2
+98 11 15 1 // okmale2 draw
+109 6 10 1 // okmale2 duck
+115 17 15 1 // okmale2 duckwalk
+132 31 40 0 // okmale2 duckjump
+163 17 10 1 // okmale2 duckidle
+180 101 15 1 // okmale2 idle
+281 17 20 1 // okmale2 jump
+298 6 10 0 // okmale2 pain1
+304 6 10 0 // okmale2 pain2
+310 6 30 0 // okmale2 shoot
+316 17 15 1 // okmale2 taunt
+333 17 30 1 // okmale2 run
+350 17 30 1 // okmale2 runbackwards
+367 17 30 1 // okmale2 strafeleft
+384 17 30 1 // okmale2 straferight
+401 3 10 0 // okmale2 dead1
+404 3 10 0 // okmale2 dead2
+407 17 30 1 // okmale2 forwardright
+424 17 30 1 // okmale2 forwardleft
+441 17 30 1 // okmale2 backright
+458 17 30 1 // okmale2 backleft
+475 21 15 1 // okmale2 melee
--- /dev/null
+//TAG: insurrectionist
+//affirmative sound/player/insurrectionist/player/affirmative 0
+attack sound/player/insurrectionist/coms/attack 0
+//attacking sound/player/insurrectionist/player/attacking 0
+attackinfive sound/player/insurrectionist/coms/attackinfive 0
+coverme sound/player/insurrectionist/coms/coverme 0
+defend sound/player/insurrectionist/coms/defend 0
+//defending sound/player/insurrectionist/player/defending 0
+//droppedflag sound/player/insurrectionist/player/droppedflag 0
+flagcarriertakingdamage sound/player/insurrectionist/coms/flagcarriertakingdamage 0
+freelance sound/player/insurrectionist/coms/freelance 2
+getflag sound/player/insurrectionist/coms/getflag 0
+incoming sound/player/insurrectionist/coms/incoming 0
+meet sound/player/insurrectionist/coms/meet 0
+needhelp sound/player/insurrectionist/coms/needhelp 2
+//negative sound/player/insurrectionist/player/negative 0
+//onmyway sound/player/insurrectionist/player/onmyway 0
+//roaming sound/player/insurrectionist/player/roaming 0
+//seenenemy sound/player/insurrectionist/player/seenenemy 0
+seenflag sound/player/insurrectionist/coms/seenflag 0
+taunt sound/player/insurrectionist/coms/taunt 3
+teamshoot sound/player/insurrectionist/coms/teamshoot 3
+death sound/player/insurrectionist/player/death 3
+drown sound/player/insurrectionist/player/drown 0
+fall sound/player/insurrectionist/player/fall 0
+falling sound/player/insurrectionist/player/falling 0
+gasp sound/player/insurrectionist/player/gasp 0
+jump sound/player/insurrectionist/player/jump 0
+pain25 sound/player/insurrectionist/player/pain25 0
+pain50 sound/player/insurrectionist/player/pain50 0
+pain75 sound/player/insurrectionist/player/pain75 0
+pain100 sound/player/insurrectionist/player/pain100 0
--- /dev/null
+name overkillmale1
+species human
+sex Male
+weight 105
+age 26
+
+overkill officer
\ No newline at end of file
--- /dev/null
+/*
+Generated framegroups file for okmale3
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okmale3 die1
+42 56 30 0 // okmale3 die2
+98 11 15 1 // okmale3 draw
+109 6 10 1 // okmale3 duck
+115 17 15 1 // okmale3 duckwalk
+132 31 40 0 // okmale3 duckjump
+163 17 10 1 // okmale3 duckidle
+180 101 15 1 // okmale3 idle
+281 17 20 1 // okmale3 jump
+298 6 10 0 // okmale3 pain1
+304 6 10 0 // okmale3 pain2
+310 6 30 0 // okmale3 shoot
+316 17 15 1 // okmale3 taunt
+333 17 30 1 // okmale3 run
+350 17 30 1 // okmale3 runbackwards
+367 17 30 1 // okmale3 strafeleft
+384 17 30 1 // okmale3 straferight
+401 3 10 0 // okmale3 dead1
+404 3 10 0 // okmale3 dead2
+407 17 30 1 // okmale3 forwardright
+424 17 30 1 // okmale3 forwardleft
+441 17 30 1 // okmale3 backright
+458 17 30 1 // okmale3 backleft
+475 21 15 1 // okmale3 melee
--- /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 overkillmale3
+species human
+sex Male
+weight 105
+age 28
+
+overkill solider
--- /dev/null
+/*
+Generated framegroups file for okmale4
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okmale4 die1
+42 56 30 0 // okmale4 die2
+98 11 15 1 // okmale4 draw
+109 6 10 1 // okmale4 duck
+115 17 15 1 // okmale4 duckwalk
+132 31 40 0 // okmale4 duckjump
+163 17 10 1 // okmale4 duckidle
+180 101 15 1 // okmale4 idle
+281 17 20 1 // okmale4 jump
+298 6 10 0 // okmale4 pain1
+304 6 10 0 // okmale4 pain2
+310 6 30 0 // okmale4 shoot
+316 17 15 1 // okmale4 taunt
+333 17 30 1 // okmale4 run
+350 17 30 1 // okmale4 runbackwards
+367 17 30 1 // okmale4 strafeleft
+384 17 30 1 // okmale4 straferight
+401 3 10 0 // okmale4 dead1
+404 3 10 0 // okmale4 dead2
+407 17 30 1 // okmale4 forwardright
+424 17 30 1 // okmale4 forwardleft
+441 17 30 1 // okmale4 backright
+458 17 30 1 // okmale4 backleft
+475 21 15 1 // okmale4 melee
--- /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 overkillmale3
+species human
+sex Male
+weight 105
+age 28
+
+overkill solider
--- /dev/null
+/*
+Generated framegroups file for okrobot1
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okrobot1 die1
+67 56 30 0 // okrobot1 die2
+133 11 15 1 // okrobot1 draw
+144 6 10 1 // okrobot1 duck
+150 17 15 1 // okrobot1 duckwalk
+167 31 40 0 // okrobot1 duckjump
+198 1 10 1 // okrobot1 duckidle
+199 101 15 1 // okrobot1 idle
+300 17 20 1 // okrobot1 jump
+317 6 10 0 // okrobot1 pain1
+323 6 10 0 // okrobot1 pain2
+329 6 30 0 // okrobot1 shoot
+335 17 15 1 // okrobot1 taunt
+352 17 30 1 // okrobot1 run
+369 17 30 1 // okrobot1 runbackwards
+386 17 30 1 // okrobot1 strafeleft
+403 17 30 1 // okrobot1 straferight
+41 1 10 0 // okrobot4 dead1
+122 1 10 0 // okrobot4 dead2
+424 17 30 1 // okrobot1 forwardright
+441 17 30 1 // okrobot1 forwardleft
+458 17 30 1 // okrobot1 backright
+475 17 30 1 // okrobot1 backleft
+492 21 15 1 // okrobot1 melee
--- /dev/null
+//TAG: robot_shiny
+//affirmative sound/player/robot/player/affirmative 0
+attack sound/player/robot/coms/attack 0
+//attacking sound/player/robot/player/attacking 0
+attackinfive sound/player/robot/coms/attackinfive 0
+coverme sound/player/robot/coms/coverme 0
+defend sound/player/robot/coms/defend 0
+//defending sound/player/robot/player/defending 0
+//droppedflag sound/player/robot/player/droppedflag 0
+//flagcarriertakingdamage sound/player/robot/player/flagcarriertakingdamage 0
+freelance sound/player/robot/coms/freelance 2
+//getflag sound/player/soldier/player/getflag 0
+incoming sound/player/robot/coms/incoming 0
+meet sound/player/robot/coms/meet 0
+needhelp sound/player/robot/coms/needhelp 2
+//negative sound/player/robot/player/negative 0
+//onmyway sound/player/robot/player/onmyway 0
+//roaming sound/player/robot/player/roaming 0
+//seenenemy sound/player/robot/player/seenenemy 0
+seenflag sound/player/robot/coms/seenflag 0
+taunt sound/player/robot/coms/taunt 3
+teamshoot sound/player/robot/coms/teamshoot 3
+death sound/player/robot/player/death 3
+drown sound/player/robot/player/drown 0
+fall sound/player/robot/player/fall 0
+falling sound/player/robot/player/falling 0
+gasp sound/player/robot/player/gasp 0
+jump sound/player/robot/player/jump 0
+pain25 sound/player/robot/player/pain25 0
+pain50 sound/player/robot/player/pain50 0
+pain75 sound/player/robot/player/pain75 0
+pain100 sound/player/robot/player/pain100 0
--- /dev/null
+name overkill robot1
+species robot_solid
+sex None
+weight 200
+age 1
+
+Overkill robot
--- /dev/null
+/*
+Generated framegroups file for okrobot2
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okrobot2 die1
+67 56 30 0 // okrobot2 die2
+133 11 15 1 // okrobot2 draw
+144 6 10 1 // okrobot2 duck
+150 17 15 1 // okrobot2 duckwalk
+167 31 40 0 // okrobot2 duckjump
+198 1 10 1 // okrobot2 duckidle
+199 101 15 1 // okrobot2 idle
+300 17 20 1 // okrobot2 jump
+317 6 10 0 // okrobot2 pain1
+323 6 10 0 // okrobot2 pain2
+329 6 30 0 // okrobot2 shoot
+335 17 15 1 // okrobot2 taunt
+352 17 30 1 // okrobot2 run
+369 17 30 1 // okrobot2 runbackwards
+386 17 30 1 // okrobot2 strafeleft
+403 17 30 1 // okrobot2 straferight
+41 1 10 0 // okrobot4 dead1
+122 1 10 0 // okrobot4 dead2
+424 17 30 1 // okrobot2 forwardright
+441 17 30 1 // okrobot2 forwardleft
+458 17 30 1 // okrobot2 backright
+475 17 30 1 // okrobot2 backleft
+492 21 15 1 // okrobot2 melee
--- /dev/null
+//TAG: robot_shiny
+//affirmative sound/player/robot/player/affirmative 0
+attack sound/player/robot/coms/attack 0
+//attacking sound/player/robot/player/attacking 0
+attackinfive sound/player/robot/coms/attackinfive 0
+coverme sound/player/robot/coms/coverme 0
+defend sound/player/robot/coms/defend 0
+//defending sound/player/robot/player/defending 0
+//droppedflag sound/player/robot/player/droppedflag 0
+//flagcarriertakingdamage sound/player/robot/player/flagcarriertakingdamage 0
+freelance sound/player/robot/coms/freelance 2
+//getflag sound/player/soldier/player/getflag 0
+incoming sound/player/robot/coms/incoming 0
+meet sound/player/robot/coms/meet 0
+needhelp sound/player/robot/coms/needhelp 2
+//negative sound/player/robot/player/negative 0
+//onmyway sound/player/robot/player/onmyway 0
+//roaming sound/player/robot/player/roaming 0
+//seenenemy sound/player/robot/player/seenenemy 0
+seenflag sound/player/robot/coms/seenflag 0
+taunt sound/player/robot/coms/taunt 3
+teamshoot sound/player/robot/coms/teamshoot 3
+death sound/player/robot/player/death 3
+drown sound/player/robot/player/drown 0
+fall sound/player/robot/player/fall 0
+falling sound/player/robot/player/falling 0
+gasp sound/player/robot/player/gasp 0
+jump sound/player/robot/player/jump 0
+pain25 sound/player/robot/player/pain25 0
+pain50 sound/player/robot/player/pain50 0
+pain75 sound/player/robot/player/pain75 0
+pain100 sound/player/robot/player/pain100 0
--- /dev/null
+name overkill robot1
+species robot_solid
+sex None
+weight 200
+age 1
+
+Overkill robot
--- /dev/null
+/*
+Generated framegroups file for okrobot3
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okrobot3 die1
+67 56 30 0 // okrobot3 die2
+133 11 15 1 // okrobot3 draw
+144 6 10 1 // okrobot3 duck
+150 17 15 1 // okrobot3 duckwalk
+167 31 40 0 // okrobot3 duckjump
+198 1 10 1 // okrobot3 duckidle
+199 101 15 1 // okrobot3 idle
+300 17 20 1 // okrobot3 jump
+317 6 10 0 // okrobot3 pain1
+323 6 10 0 // okrobot3 pain2
+329 6 30 0 // okrobot3 shoot
+335 17 15 1 // okrobot3 taunt
+352 17 30 1 // okrobot3 run
+369 17 30 1 // okrobot3 runbackwards
+386 17 30 1 // okrobot3 strafeleft
+403 17 30 1 // okrobot3 straferight
+41 1 10 0 // okrobot4 dead1
+122 1 10 0 // okrobot4 dead2
+424 17 30 1 // okrobot3 forwardright
+441 17 30 1 // okrobot3 forwardleft
+458 17 30 1 // okrobot3 backright
+475 17 30 1 // okrobot3 backleft
+492 21 15 1 // okrobot3 melee
--- /dev/null
+//TAG: robot_shiny
+//affirmative sound/player/robot/player/affirmative 0
+attack sound/player/robot/coms/attack 0
+//attacking sound/player/robot/player/attacking 0
+attackinfive sound/player/robot/coms/attackinfive 0
+coverme sound/player/robot/coms/coverme 0
+defend sound/player/robot/coms/defend 0
+//defending sound/player/robot/player/defending 0
+//droppedflag sound/player/robot/player/droppedflag 0
+//flagcarriertakingdamage sound/player/robot/player/flagcarriertakingdamage 0
+freelance sound/player/robot/coms/freelance 2
+//getflag sound/player/soldier/player/getflag 0
+incoming sound/player/robot/coms/incoming 0
+meet sound/player/robot/coms/meet 0
+needhelp sound/player/robot/coms/needhelp 2
+//negative sound/player/robot/player/negative 0
+//onmyway sound/player/robot/player/onmyway 0
+//roaming sound/player/robot/player/roaming 0
+//seenenemy sound/player/robot/player/seenenemy 0
+seenflag sound/player/robot/coms/seenflag 0
+taunt sound/player/robot/coms/taunt 3
+teamshoot sound/player/robot/coms/teamshoot 3
+death sound/player/robot/player/death 3
+drown sound/player/robot/player/drown 0
+fall sound/player/robot/player/fall 0
+falling sound/player/robot/player/falling 0
+gasp sound/player/robot/player/gasp 0
+jump sound/player/robot/player/jump 0
+pain25 sound/player/robot/player/pain25 0
+pain50 sound/player/robot/player/pain50 0
+pain75 sound/player/robot/player/pain75 0
+pain100 sound/player/robot/player/pain100 0
--- /dev/null
+name overkill robot3
+species robot_solid
+sex None
+weight 200
+age 1
+
+Overkill robot
--- /dev/null
+/*
+Generated framegroups file for okrobot4
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 41 30 0 // okrobot4 die1
+67 56 30 0 // okrobot4 die2
+133 11 15 1 // okrobot4 draw
+144 6 10 1 // okrobot4 duck
+150 17 15 1 // okrobot4 duckwalk
+167 31 40 0 // okrobot4 duckjump
+198 1 10 1 // okrobot4 duckidle
+199 101 15 1 // okrobot4 idle
+300 17 20 1 // okrobot4 jump
+317 6 10 0 // okrobot4 pain1
+323 6 10 0 // okrobot4 pain2
+329 6 30 0 // okrobot4 shoot
+335 17 15 1 // okrobot4 taunt
+352 17 30 1 // okrobot4 run
+369 17 30 1 // okrobot4 runbackwards
+386 17 30 1 // okrobot4 strafeleft
+403 17 30 1 // okrobot4 straferight
+41 1 10 0 // okrobot4 dead1
+122 1 10 0 // okrobot4 dead2
+424 17 30 1 // okrobot4 forwardright
+441 17 30 1 // okrobot4 forwardleft
+458 17 30 1 // okrobot4 backright
+475 17 30 1 // okrobot4 backleft
+492 21 15 1 // okrobot4 melee
--- /dev/null
+//TAG: robot_shiny
+//affirmative sound/player/robot/player/affirmative 0
+attack sound/player/robot/coms/attack 0
+//attacking sound/player/robot/player/attacking 0
+attackinfive sound/player/robot/coms/attackinfive 0
+coverme sound/player/robot/coms/coverme 0
+defend sound/player/robot/coms/defend 0
+//defending sound/player/robot/player/defending 0
+//droppedflag sound/player/robot/player/droppedflag 0
+//flagcarriertakingdamage sound/player/robot/player/flagcarriertakingdamage 0
+freelance sound/player/robot/coms/freelance 2
+//getflag sound/player/soldier/player/getflag 0
+incoming sound/player/robot/coms/incoming 0
+meet sound/player/robot/coms/meet 0
+needhelp sound/player/robot/coms/needhelp 2
+//negative sound/player/robot/player/negative 0
+//onmyway sound/player/robot/player/onmyway 0
+//roaming sound/player/robot/player/roaming 0
+//seenenemy sound/player/robot/player/seenenemy 0
+seenflag sound/player/robot/coms/seenflag 0
+taunt sound/player/robot/coms/taunt 3
+teamshoot sound/player/robot/coms/teamshoot 3
+death sound/player/robot/player/death 3
+drown sound/player/robot/player/drown 0
+fall sound/player/robot/player/fall 0
+falling sound/player/robot/player/falling 0
+gasp sound/player/robot/player/gasp 0
+jump sound/player/robot/player/jump 0
+pain25 sound/player/robot/player/pain25 0
+pain50 sound/player/robot/player/pain50 0
+pain75 sound/player/robot/player/pain75 0
+pain100 sound/player/robot/player/pain100 0
--- /dev/null
+name overkill robot3
+species robot_solid
+sex None
+weight 200
+age 1
+
+Overkill robot
-/*
-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
/*
-Generated framegroups file for h_uzi
+Generated framegroups file for h_minstanex
Used by DarkPlaces to simulate frame groups in DPM models.
*/
-1 16 30 0 // h_uzi mgafire
-17 16 30 0 // h_uzi mgafire2
-33 101 3 1 // h_uzi mgaidle
-134 61 30 0 // h_uzi mgareload
-195 16 30 0 // h_uzi mgafire
+1 21 20 0 // h_minstanex fire
+22 21 20 0 // h_minstanex fire
+43 101 6 1 // h_minstanex idle
+144 101 30 0 // h_minstanex reload
--- /dev/null
+/*
+Generated framegroups file for h_laser
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 51 50 0 // h_laser hgrenade_fire
+52 101 50 0 // h_laser hgrenade_idle
+153 101 5 1 // h_laser hgrenade_idle
+254 101 5 1 // h_laser hgrenade_idle
--- /dev/null
+/*
+Generated framegroups file for h_uzi
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 11 120 0 // h_uzi mgafire
+12 11 120 0 // h_uzi mgafire
+23 51 2 1 // h_uzi mgaidle
+74 11 30 0 // h_uzi mgafire
+85 11 30 0 // h_uzi mgafire
--- /dev/null
+/*
+Generated framegroups file for h_uzi
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 7 30 0 // h_uzi mgafire
+8 7 30 0 // h_uzi mgafire
+15 101 5 1 // h_uzi mgaidle
+116 61 40 1 // h_uzi mgareload
+177 61 15 1 // h_uzi mgareload
--- /dev/null
+/*
+Generated framegroups file for h_uzi
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 61 30 0 // h_uzi mgafire
+62 61 30 0 // h_uzi mgafire
+123 101 3 1 // h_uzi mgaidle
+224 61 30 0 // h_uzi mgafire
+285 61 30 0 // h_uzi mgafire
--- /dev/null
+/*
+Generated framegroups file for h_shotgun
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 22 30 0 // h_shotgun sghmesh_fire
+23 31 30 0 // h_shotgun sghmesh_fire2
+54 201 5 1 // h_shotgun sghmesh_idle
+255 61 30 1 // h_shotgun sghmesh_reload
--- /dev/null
+/*
+Generated framegroups file for h_minstanex
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 28 25 0 // h_minstanex h_minst_fire
+29 28 25 0 // h_minstanex h_minst_fire
+57 201 5 1 // h_minstanex h_minst_idle
+258 28 30 0 // h_minstanex h_minst_reload
float autocvar_hud_shownames_antioverlap_distance;
float autocvar_hud_shownames_offset;
string autocvar_hud_skin;
-float autocvar_loddebug;
float autocvar_menu_mouse_speed;
string autocvar_menu_skin;
float autocvar_r_fakelight;
float autocvar_cl_damageeffect_lifetime_min;
float autocvar_cl_damageeffect_lifetime_max;
float autocvar_cl_playerdetailreduction;
-float autocvar_cl_loddistance1 = 1024;
-float autocvar_cl_loddistance2 = 4096;
+float autocvar_cl_modeldetailreduction;
+float autocvar_cl_loddistance1 = 768;
+float autocvar_cl_loddistance2 = 2048;
float autocvar_cl_forceplayermodels;
float autocvar_cl_forceplayercolors;
string autocvar_cl_forcemyplayermodel;
}
else
{
- float distance = vlen(self.origin - other.origin);
- float f = (distance + 100.0) * autocvar_cl_playerdetailreduction;
+ float distance = vlen(self.origin - view_origin);
+ float f = (distance * current_viewzoom + 100.0) * autocvar_cl_playerdetailreduction;
f *= 1.0 / bound(0.01, view_quality, 1);
if(f > autocvar_cl_loddistance2)
self.modelindex = self.lodmodelindex2;
{
if(frameduration(self.modelindex, f) > 0)
return f; // goooooood
+ if(frameduration(self.modelindex, 1) <= 0)
+ return f; // this is a static model. We can't fix it if we wanted to
switch(f)
{
case 23: return 11; // anim_melee -> anim_shoot
{
// the best part is: IT EXISTS
if(substring(self.model, 0, 17) == "models/weapons/v_")
+ {
if(substring(self.tag_entity.model, 0, 17) == "models/weapons/h_")
{
self.tag_index = gettagindex(self.tag_entity, "weapon");
dprint("h_ model lacks weapon attachment, but v_ model is attached to it\n");
}
}
-
- if(substring(self.model, 0, 17) == "models/weapons/v_")
- if(substring(self.tag_entity.model, 0, 14) == "models/player/")
+ else
{
- self.tag_index = gettagindex(self.tag_entity, "tag_weapon");
+ self.tag_index = gettagindex(self.tag_entity, "weapon");
+ if(!self.tag_index)
+ self.tag_index = gettagindex(self.tag_entity, "tag_weapon");
if(!self.tag_index)
self.tag_index = gettagindex(self.tag_entity, "bip01 r hand");
}
+ }
if(substring(self.tag_entity.model, 0, 17) == "models/weapons/v_")
{
void Ent_DamageInfo(float isNew)
{
- float dmg, rad, edge, thisdmg, forcemul, species;
+ float dmg, rad, edge, thisdmg, forcemul, species, hitplayer;
vector force, thisforce;
entity oldself;
self.event_damage(thisdmg, w_deathtype, w_org, thisforce);
DamageEffect(w_org, thisdmg, w_deathtype, species);
+
+ if(self.isplayermodel)
+ hitplayer = TRUE; // this impact damaged a player
}
self = oldself;
// TODO spawn particle effects and sounds based on w_deathtype
if(!DEATH_ISSPECIAL(w_deathtype))
+ if not(hitplayer && !rad) // don't show ground impacts for hitscan weapons if a player was hit
{
float hitwep;
else if(argv(2) == "all")
{
string s;
- s = "ping pl color name |";
+ s = "ping pl name |";
for(i = 0; i < MAX_SCORE; ++i)
{
if(i != ps_primary)
void Ent_Wall_Draw()
{
float f;
- float d;
var .vector fld;
if(self.bgmscriptangular)
if(self.lodmodelindex1)
{
- d = autocvar_loddebug;
- if(d > 0)
+ if(autocvar_cl_modeldetailreduction <= 0)
{
- if(d == 1)
- self.modelindex = self.lodmodelindex0;
- else if(d == 2 || !self.lodmodelindex2)
- self.modelindex = self.lodmodelindex1;
- else // if(d == 3)
+ if(self.lodmodelindex2 && autocvar_cl_modeldetailreduction <= -2)
self.modelindex = self.lodmodelindex2;
+ else if(autocvar_cl_modeldetailreduction <= -1)
+ self.modelindex = self.lodmodelindex1;
+ else
+ self.modelindex = self.lodmodelindex0;
}
else
{
- d = vlen(NearestPointOnBox(self, view_origin) - view_origin);
- if(d < self.loddistance1)
- self.modelindex = self.lodmodelindex0;
- else if(!self.lodmodelindex2 || d < self.loddistance2)
+ float distance = vlen(NearestPointOnBox(self, view_origin) - view_origin);
+ f = (distance * current_viewzoom + 100.0) * autocvar_cl_modeldetailreduction;
+ f *= 1.0 / bound(0.01, view_quality, 1);
+ if(self.lodmodelindex2 && f > self.loddistance2)
+ self.modelindex = self.lodmodelindex2;
+ else if(f > self.loddistance1)
self.modelindex = self.lodmodelindex1;
else
- self.modelindex = self.lodmodelindex2;
+ self.modelindex = self.lodmodelindex0;
}
}
// works for up to 10 decimals!
string ftos_decimals(float number, float decimals)
{
+ // inhibit stupid negative zero
+ if(number == 0)
+ number = 0;
// we have sprintf...
return sprintf("%.*f", decimals, number);
}
{
float eps;
eps = (max(a, -a) + max(c, -c)) * 0.001;
+ if(a > c)
+ eps = -eps;
return b == median(a - eps, b, c + eps);
}
// item: nexposee
SKINVECTOR(ALPHAS_MAINMENU, '0.6 0.8 0.9');
+ SKINFLOAT(ALPHA_DIALOG_SANDBOXTOOLS, 0.6);
// item: player color button
SKINSTRING(GFX_COLORBUTTON, "colorbutton");
ATTRIB(XonoticModelDialog, title, string, _("Model settings"))
ATTRIB(XonoticModelDialog, color, vector, SKINCOLOR_DIALOG_MODEL)
ATTRIB(XonoticModelDialog, intendedWidth, float, 0.5)
- ATTRIB(XonoticModelDialog, rows, float, 8)
+ ATTRIB(XonoticModelDialog, rows, float, 7)
ATTRIB(XonoticModelDialog, columns, float, 3)
ENDCLASS(XonoticModelDialog)
#endif
e.addValue(e, ZCTX(_("GIBS^Lots")), "0");
e.configureXonoticTextSliderValues(e);
setDependent(e, "cl_gentle", 0, 0);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Playermodel LOD:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 10, 1, "cl_playerdetailreduction"));
me.TR(me);
#ifdef ALLOW_FORCEMODELS
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force models:")));
e.addValue(e, ZCTX(_("DET^Best")), "2");
e.addValue(e, ZCTX(_("DET^Insane")), "1");
e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Playermodel LOD:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(4, 0, -0.1, "cl_playerdetailreduction"));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
me.TD(me, 1, 2, e = makeXonoticPicmipSlider());
e.addValue(e, ZCTX(_("RES^Good")), "-1");
e.addValue(e, ZCTX(_("RES^Best")), "-2");
e.configureXonoticTextSliderValues(e);
- me.TR(me);
me.TR(me);
{
// detect texture compression method
// mutator dialogs
i = spawnXonoticSandboxToolsDialog();
i.configureDialog(i);
- me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z * SKINALPHA_DIALOG_SANDBOXTOOLS);
// miscellaneous dialogs
if(modname != "Xonotic")
if(modname != "MinstaGib")
if(modname != "CTS")
+ if(modname != "NewToys")
pure = 0;
if(gethostcachenumber(SLIST_FIELD_FREESLOTS, i) <= 0)
--- /dev/null
+//EF_BRIGHTFIELD|EF_BRIGHTLIGHT|EF_DIMLIGHT|EF_BLUE|EF_RED|EF_FLAME
+#define BALL_EFFECTMASK 1229
+#define BALL_MINS '-16 -16 -16' // The model is 24*24*24
+#define BALL_MAXS '16 16 16'
+#define BALL_ATTACHORG '3 0 16'
+#define BALL_SPRITECOLOR '.91 .85 .62'
+#define BALL_FOOT 1
+#define BALL_BASKET 2
+//spawnflags
+#define GOAL_TOUCHPLAYER 1
+//goal types
+#define GOAL_FAULT -1
+#define GOAL_OUT -2
+
+#define CVTOV(s) s = cvar( #s )
+
+float g_nexball_football_boost_forward;
+float g_nexball_football_boost_up;
+float g_nexball_football_physics;
+float g_nexball_delay_idle;
+float g_nexball_basketball_delay_hold;
+float g_nexball_basketball_delay_hold_forteam;
+float g_nexball_basketball_effects_default;
+float g_nexball_basketball_teamsteal;
+float balls;
+float ball_scale;
+float nb_teams;
+
+.float teamtime;
+
+void nb_delayedinit();
+void nb_init() // Called early (worldspawn stage)
+{
+ CVTOV(g_nexball_meter_period); //sent with the client init entity
+ if (g_nexball_meter_period <= 0)
+ g_nexball_meter_period = 2; // avoid division by zero etc. due to silly users
+ g_nexball_meter_period = rint(g_nexball_meter_period * 32) / 32; //Round to 1/32ths to send as a byte multiplied by 32
+ addstat(STAT_NB_METERSTART, AS_FLOAT, metertime);
+
+ // General settings
+ CVTOV(g_nexball_football_boost_forward); //100
+ CVTOV(g_nexball_football_boost_up); //200
+ CVTOV(g_nexball_delay_idle); //10
+ CVTOV(g_nexball_football_physics); //0
+
+ radar_showennemies = autocvar_g_nexball_radar_showallplayers;
+
+ InitializeEntity(world, nb_delayedinit, INITPRIO_GAMETYPE);
+}
+
+float OtherTeam(float t) //works only if there are two teams on the map!
+{
+ entity e;
+ e = find(world, classname, "nexball_team");
+ if (e.team == t)
+ e = find(e, classname, "nexball_team");
+ return e.team;
+}
+
+void ResetBall();
+
+void LogNB(string mode, entity actor)
+{
+ string s;
+ if(!autocvar_sv_eventlog)
+ return;
+ s = strcat(":nexball:", mode);
+ if(actor != world)
+ s = strcat(s, ":", ftos(actor.playerid));
+ GameLogEcho(s);
+}
+
+void ball_restart (void)
+{
+ if(self.owner)
+ DropBall(self, self.owner.origin, '0 0 0');
+ ResetBall();
+}
+
+void nexball_setstatus (void)
+{
+ entity oldself;
+ self.items &~= IT_KEY1;
+ if (self.ballcarried)
+ {
+ if (self.ballcarried.teamtime && (self.ballcarried.teamtime < time))
+ {
+ bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
+ oldself = self;
+ self = self.ballcarried;
+ DropBall(self, self.owner.origin, '0 0 0');
+ ResetBall();
+ self = oldself;
+ } else
+ self.items |= IT_KEY1;
+ }
+}
+
+void relocate_nexball (void)
+{
+ tracebox(self.origin, BALL_MINS, BALL_MAXS, self.origin, TRUE, self);
+ if (trace_startsolid)
+ {
+ vector o;
+ o = self.origin;
+ if(!move_out_of_solid(self))
+ objerror("could not get out of solid at all!");
+ print("^1NOTE: this map needs FIXING. ", self.classname, " at ", vtos(o - '0 0 1'));
+ print(" needs to be moved out of solid, e.g. by '", ftos(self.origin_x - o_x));
+ print(" ", ftos(self.origin_y - o_y));
+ print(" ", ftos(self.origin_z - o_z), "'\n");
+ self.origin = o;
+ }
+}
+
+void basketball_touch();
+void football_touch();
+
+void DropOwner (void)
+{
+ entity ownr;
+ ownr = self.owner;
+ DropBall(self, ownr.origin, ownr.velocity);
+ makevectors(ownr.v_angle_y * '0 1 0');
+ ownr.velocity += ('0 0 0.75' - v_forward) * 1000;
+ ownr.flags &~= FL_ONGROUND;
+}
+
+void GiveBall (entity plyr, entity ball)
+{
+ entity ownr;
+
+ if ((ownr = ball.owner))
+ {
+ ownr.effects &~= g_nexball_basketball_effects_default;
+ ownr.ballcarried = world;
+ if (ownr.metertime)
+ {
+ ownr.metertime = 0;
+ ownr.weaponentity.state = WS_READY;
+ }
+ WaypointSprite_Kill(ownr.waypointsprite_attachedforcarrier);
+ }
+ else
+ {
+ WaypointSprite_Kill(ball.waypointsprite_attachedforcarrier);
+ }
+
+ setattachment(ball, plyr, "");
+ setorigin(ball, BALL_ATTACHORG);
+
+ if (ball.team != plyr.team)
+ ball.teamtime = time + g_nexball_basketball_delay_hold_forteam;
+
+ ball.owner = ball.pusher = plyr; //"owner" is set to the player carrying, "pusher" to the last player who touched it
+ ball.team = plyr.team;
+ plyr.ballcarried = ball;
+ ball.dropperid = plyr.playerid;
+
+ plyr.effects |= g_nexball_basketball_effects_default;
+ ball.effects &~= g_nexball_basketball_effects_default;
+
+ ball.velocity = '0 0 0';
+ ball.movetype = MOVETYPE_NONE;
+ ball.touch = SUB_Null;
+ ball.effects |= EF_NOSHADOW;
+ ball.scale = 1; // scale down.
+
+ WaypointSprite_AttachCarrier("nb-ball", plyr, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
+ WaypointSprite_UpdateRule(plyr.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
+
+ if (g_nexball_basketball_delay_hold)
+ {
+ ball.think = DropOwner;
+ ball.nextthink = time + g_nexball_basketball_delay_hold;
+ }
+}
+
+void DropBall (entity ball, vector org, vector vel)
+{
+ ball.effects |= g_nexball_basketball_effects_default;
+ ball.effects &~= EF_NOSHADOW;
+ ball.owner.effects &~= g_nexball_basketball_effects_default;
+
+ setattachment(ball, world, "");
+ setorigin (ball, org);
+ ball.movetype = MOVETYPE_BOUNCE;
+ ball.flags &~= FL_ONGROUND;
+ ball.scale = ball_scale;
+ ball.velocity = vel;
+ ball.ctf_droptime = time;
+ ball.touch = basketball_touch;
+ ball.think = ResetBall;
+ ball.nextthink = min(time + g_nexball_delay_idle, ball.teamtime);
+
+ if (ball.owner.metertime)
+ {
+ ball.owner.metertime = 0;
+ ball.owner.weaponentity.state = WS_READY;
+ }
+
+ WaypointSprite_Kill(ball.owner.waypointsprite_attachedforcarrier);
+ 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);
+
+ ball.owner.ballcarried = world;
+ ball.owner = world;
+}
+
+void InitBall (void)
+{
+ if (gameover) return;
+ self.flags &~= FL_ONGROUND;
+ self.movetype = MOVETYPE_BOUNCE;
+ if (self.classname == "nexball_basketball")
+ self.touch = basketball_touch;
+ else if (self.classname == "nexball_football")
+ self.touch = football_touch;
+ self.cnt = 0;
+ self.think = ResetBall;
+ self.nextthink = time + g_nexball_delay_idle + 3;
+ self.teamtime = 0;
+ self.pusher = world;
+ self.team = FALSE;
+ sound (self, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
+ LogNB("init", world);
+}
+
+void ResetBall (void)
+{
+ if (self.cnt < 2) { // step 1
+ if (time == self.teamtime)
+ bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
+ self.touch = SUB_Null;
+ self.movetype = MOVETYPE_NOCLIP;
+ self.velocity = '0 0 0'; // just in case?
+ if(!self.cnt)
+ LogNB("resetidle", world);
+ self.cnt = 2;
+ self.nextthink = time;
+ } else if (self.cnt < 4) { // step 2 and 3
+// dprint("Step ", ftos(self.cnt), ": Calculated velocity: ", vtos(self.spawnorigin - self.origin), ", time: ", ftos(time), "\n");
+ self.velocity = (self.spawnorigin - self.origin) * (self.cnt - 1); // 1 or 0.5 second movement
+ self.nextthink = time + 0.5;
+ self.cnt += 1;
+ } else { // step 4
+// dprint("Step 4: time: ", ftos(time), "\n");
+ if (vlen(self.origin - self.spawnorigin) > 10) // should not happen anymore
+ dprint("The ball moved too far away from its spawn origin.\nOffset: ",
+ vtos(self.origin - self.spawnorigin), " Velocity: ", vtos(self.velocity), "\n");
+ self.velocity = '0 0 0';
+ setorigin(self, self.spawnorigin); // make sure it's positioned correctly anyway
+ self.movetype = MOVETYPE_NONE;
+ self.think = InitBall;
+ self.nextthink = max(time, game_starttime) + autocvar_g_nexball_delay_start;
+ }
+}
+
+void football_touch (void)
+{
+ if (other.solid == SOLID_BSP) {
+ if (time > self.lastground + 0.1)
+ {
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
+ self.lastground = time;
+ }
+ if (vlen(self.velocity) && !self.cnt)
+ self.nextthink = time + g_nexball_delay_idle;
+ return;
+ }
+ if (other.classname != "player")
+ return;
+ if (other.health < 1)
+ return;
+ if (!self.cnt)
+ self.nextthink = time + g_nexball_delay_idle;
+
+ self.pusher = other;
+ self.team = other.team;
+
+ if (g_nexball_football_physics == -1) { // MrBougo try 1, before decompiling Rev's original
+ if (vlen(other.velocity))
+ self.velocity = other.velocity * 1.5 + '0 0 1' * g_nexball_football_boost_up;
+ } else if (g_nexball_football_physics == 1) { // MrBougo's modded Rev style: partially independant of the height of the aiming point
+ makevectors(other.v_angle);
+ self.velocity = other.velocity + v_forward * g_nexball_football_boost_forward + '0 0 1' * g_nexball_football_boost_up;
+ } else if (g_nexball_football_physics == 2) { // 2nd mod try: totally independant. Really playable!
+ makevectors(other.v_angle_y * '0 1 0');
+ self.velocity = other.velocity + v_forward * g_nexball_football_boost_forward + v_up * g_nexball_football_boost_up;
+ } else { // Revenant's original style (from the original mod's disassembly, acknowledged by Revenant)
+ makevectors(other.v_angle);
+ self.velocity = other.velocity + v_forward * g_nexball_football_boost_forward + v_up * g_nexball_football_boost_up;
+ }
+ self.avelocity = -250 * v_forward; // maybe there is a way to make it look better?
+}
+
+void basketball_touch (void)
+{
+ if (other.ballcarried)
+ {
+ football_touch();
+ return;
+ }
+ if (!self.cnt && other.classname == "player" && (other.playerid != self.dropperid || time > self.ctf_droptime + autocvar_g_nexball_delay_collect)) {
+ if (other.health <= 0)
+ return;
+ LogNB("caught", other);
+ GiveBall(other, self);
+ } else if (other.solid == SOLID_BSP) {
+ 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);
+ }
+}
+
+void GoalTouch (void)
+{
+ entity ball;
+ float isclient, pscore, otherteam;
+ string pname;
+
+ if (gameover) return;
+ if ((self.spawnflags & GOAL_TOUCHPLAYER) && other.ballcarried)
+ ball = other.ballcarried;
+ else
+ ball = other;
+ if (ball.classname != "nexball_basketball")
+ if (ball.classname != "nexball_football")
+ return;
+ if ((!ball.pusher && self.team != GOAL_OUT) || ball.cnt)
+ return;
+ EXACTTRIGGER_TOUCH;
+
+
+ if(nb_teams == 2)
+ otherteam = OtherTeam(ball.team);
+
+ if((isclient = ball.pusher.flags & FL_CLIENT))
+ pname = ball.pusher.netname;
+ else
+ pname = "Someone (?)";
+
+ if (ball.team == self.team) //owngoal (regular goals)
+ {
+ LogNB("owngoal", ball.pusher);
+ bprint("Boo! ", pname, "^7 scored a goal against their own team!\n");
+ pscore = -1;
+ } else if (self.team == GOAL_FAULT) {
+ LogNB("fault", ball.pusher);
+ if (nb_teams == 2)
+ bprint(ColoredTeamName(otherteam), " gets a point due to ", pname, "^7's silliness.\n");
+ else
+ bprint(ColoredTeamName(ball.team), " loses a point due to ", pname, "^7's silliness.\n");
+ pscore = -1;
+ } else if (self.team == GOAL_OUT) {
+ LogNB("out", ball.pusher);
+ if ((self.spawnflags & GOAL_TOUCHPLAYER) && ball.owner)
+ bprint(pname, "^7 went out of bounds.\n");
+ else
+ bprint("The ball was returned.\n");
+ pscore = 0;
+ } else { //score
+ LogNB(strcat("goal:", ftos(self.team)), ball.pusher);
+ bprint("Goaaaaal! ", pname, "^7 scored a point for the ", ColoredTeamName(ball.team), ".\n");
+ pscore = 1;
+ }
+
+ sound (ball, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
+
+ if(ball.team && pscore)
+ {
+ if (nb_teams == 2 && pscore < 0)
+ TeamScore_AddToTeam(otherteam, ST_NEXBALL_GOALS, -pscore);
+ else
+ TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore);
+ }
+ if (isclient)
+ {
+ if (pscore > 0)
+ PlayerScore_Add(ball.pusher, SP_NEXBALL_GOALS, pscore);
+ else if (pscore < 0)
+ PlayerScore_Add(ball.pusher, SP_NEXBALL_FAULTS, -pscore);
+ }
+
+ if (ball.owner) // Happens on spawnflag GOAL_TOUCHPLAYER
+ DropBall(ball, ball.owner.origin, ball.owner.velocity);
+
+ WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier);
+
+ ball.cnt = 1;
+ ball.think = ResetBall;
+ if (ball.classname == "nexball_basketball")
+ ball.touch = football_touch; // better than SUB_Null: football control until the ball gets reset
+ ball.nextthink = time + autocvar_g_nexball_delay_goal * (self.team != GOAL_OUT);
+}
+
+//=======================//
+// team ents //
+//=======================//
+void spawnfunc_nexball_team (void)
+{
+ if(!g_nexball) { remove(self); return; }
+ self.team = self.cnt + 1;
+}
+
+void nb_spawnteam (string teamname, float teamcolor)
+{
+ dprint("^2spawned team ", teamname, "\n");
+ entity e;
+ e = spawn();
+ e.classname = "nexball_team";
+ e.netname = teamname;
+ e.cnt = teamcolor;
+ e.team = e.cnt + 1;
+ nb_teams += 1;
+}
+
+void nb_spawnteams (void)
+{
+ float t_r, t_b, t_y, t_p;
+ entity e;
+ for(e = world; (e = find(e, classname, "nexball_goal")); )
+ {
+ switch(e.team)
+ {
+ case COLOR_TEAM1: if(!t_r) { nb_spawnteam ("Red", e.team-1) ; t_r = 1; } break;
+ case COLOR_TEAM2: if(!t_b) { nb_spawnteam ("Blue", e.team-1) ; t_b = 1; } break;
+ case COLOR_TEAM3: if(!t_y) { nb_spawnteam ("Yellow", e.team-1); t_y = 1; } break;
+ case COLOR_TEAM4: if(!t_p) { nb_spawnteam ("Pink", e.team-1) ; t_p = 1; } break;
+ }
+ }
+}
+
+void nb_delayedinit (void)
+{
+ if (find(world, classname, "nexball_team") == world)
+ nb_spawnteams();
+ ScoreRules_nexball(nb_teams);
+}
+
+
+//=======================//
+// spawnfuncs //
+//=======================//
+
+void SpawnBall (void)
+{
+ if(!g_nexball) { remove(self); return; }
+
+// balls += 4; // using the remaining bits to count balls will leave more than the max edict count, so it's fine
+
+ if (!self.model) {
+ self.model = "models/nexball/ball.md3";
+ self.scale = 1.3;
+ }
+
+ precache_model (self.model);
+ setmodel (self, self.model);
+ setsize (self, BALL_MINS, BALL_MAXS);
+ ball_scale = self.scale;
+
+ relocate_nexball();
+ self.spawnorigin = self.origin;
+
+ self.effects = self.effects | EF_LOWPRECISION;
+
+ if (cvar(strcat("g_", self.classname, "_trail"))) //nexball_basketball :p
+ {
+ self.glow_color = autocvar_g_nexball_trail_color;
+ self.glow_trail = TRUE;
+ }
+
+ self.movetype = MOVETYPE_FLY;
+
+ if (!autocvar_g_nexball_sound_bounce)
+ self.noise = "";
+ else if (!self.noise)
+ self.noise = "sound/nexball/bounce.wav";
+ //bounce sound placeholder (FIXME)
+ if (!self.noise1)
+ self.noise1 = "sound/nexball/drop.wav";
+ //ball drop sound placeholder (FIXME)
+ if (!self.noise2)
+ self.noise2 = "sound/nexball/steal.wav";
+ //stealing sound placeholder (FIXME)
+ if (self.noise) precache_sound (self.noise);
+ precache_sound (self.noise1);
+ precache_sound (self.noise2);
+
+ 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;
+ self.nextthink = game_starttime + autocvar_g_nexball_delay_start;
+}
+
+void spawnfunc_nexball_basketball (void)
+{
+ self.classname = "nexball_basketball";
+ if not(balls & BALL_BASKET)
+ {
+ CVTOV(g_nexball_basketball_effects_default);
+ CVTOV(g_nexball_basketball_delay_hold);
+ CVTOV(g_nexball_basketball_delay_hold_forteam);
+ CVTOV(g_nexball_basketball_teamsteal);
+ g_nexball_basketball_effects_default = g_nexball_basketball_effects_default & BALL_EFFECTMASK;
+ }
+ if (!self.effects)
+ self.effects = g_nexball_basketball_effects_default;
+ self.solid = SOLID_TRIGGER;
+ balls |= BALL_BASKET;
+ self.bouncefactor = autocvar_g_nexball_basketball_bouncefactor;
+ self.bouncestop = autocvar_g_nexball_basketball_bouncestop;
+ SpawnBall();
+}
+
+void spawnfunc_nexball_football (void)
+{
+ self.classname = "nexball_football";
+ self.solid = SOLID_TRIGGER;
+ balls |= BALL_FOOT;
+ self.bouncefactor = autocvar_g_nexball_football_bouncefactor;
+ self.bouncestop = autocvar_g_nexball_football_bouncestop;
+ SpawnBall();
+}
+
+void SpawnGoal (void)
+{
+ if(!g_nexball) { remove(self); return; }
+ EXACTTRIGGER_INIT;
+ self.classname = "nexball_goal";
+ if (!self.noise)
+ self.noise = "ctf/respawn.wav";
+ precache_sound(self.noise);
+ self.touch = GoalTouch;
+}
+
+void spawnfunc_nexball_redgoal (void)
+{
+ self.team = COLOR_TEAM1;
+ SpawnGoal();
+}
+void spawnfunc_nexball_bluegoal (void)
+{
+ self.team = COLOR_TEAM2;
+ SpawnGoal();
+}
+void spawnfunc_nexball_yellowgoal (void)
+{
+ self.team = COLOR_TEAM3;
+ SpawnGoal();
+}
+void spawnfunc_nexball_pinkgoal (void)
+{
+ self.team = COLOR_TEAM4;
+ SpawnGoal();
+}
+
+void spawnfunc_nexball_fault (void)
+{
+ self.team = GOAL_FAULT;
+ if (!self.noise)
+ self.noise = "misc/typehit.wav";
+ SpawnGoal();
+}
+
+void spawnfunc_nexball_out (void)
+{
+ self.team = GOAL_OUT;
+ if (!self.noise)
+ self.noise = "misc/typehit.wav";
+ SpawnGoal();
+}
+
+//
+//Spawnfuncs preserved for compatibility
+//
+
+void spawnfunc_ball (void) { spawnfunc_nexball_football(); }
+void spawnfunc_ball_football (void) { spawnfunc_nexball_football(); }
+void spawnfunc_ball_basketball (void) { spawnfunc_nexball_basketball(); }
+// The "red goal" is defended by blue team. A ball in there counts as a point for red.
+void spawnfunc_ball_redgoal (void) { spawnfunc_nexball_bluegoal(); } // I blame Revenant
+void spawnfunc_ball_bluegoal (void) { spawnfunc_nexball_redgoal(); } // but he didn't mean to cause trouble :p
+void spawnfunc_ball_fault (void) { spawnfunc_nexball_fault(); }
+void spawnfunc_ball_bound (void) { spawnfunc_nexball_out(); }
+
+//=======================//
+// Weapon code //
+//=======================//
+
+void W_Nexball_Touch (void)
+{
+ entity ball, attacker;
+ attacker = self.owner;
+
+ PROJECTILE_TOUCH;
+ if(attacker.team != other.team || g_nexball_basketball_teamsteal)
+ 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, CH_TRIGGER, ball.noise2, VOL_BASE, ATTN_NORM);
+
+ if(attacker.team == other.team && time > attacker.teamkill_complain)
+ {
+ attacker.teamkill_complain = time + 5;
+ attacker.teamkill_soundtime = time + 0.4;
+ attacker.teamkill_soundsource = other;
+ }
+
+ GiveBall(attacker, other.ballcarried);
+ }
+ }
+ remove(self);
+}
+
+void W_Nexball_Attack (float t)
+{
+ entity ball;
+ float mul, mi, ma;
+ if (!(ball = self.ballcarried))
+ return;
+
+ 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)
+ {
+ if(self.metertime)
+ self.metertime = 0; // Shot failed, hide the power meter
+ return;
+ }
+
+ //Calculate multiplier
+ if (t < 0)
+ mul = 1;
+ else
+ {
+ mi = autocvar_g_nexball_basketball_meter_minpower;
+ ma = max(mi, autocvar_g_nexball_basketball_meter_maxpower); // avoid confusion
+ //One triangle wave period with 1 as max
+ mul = 2 * mod(t, g_nexball_meter_period) / g_nexball_meter_period;
+ if (mul > 1)
+ mul = 2 - mul;
+ mul = mi + (ma - mi) * mul; // range from the minimal power to the maximal power
+ }
+ DropBall (ball, w_shotorg, W_CalculateProjectileVelocity(self.velocity, w_shotdir * autocvar_g_balance_nexball_primary_speed * mul, FALSE));
+ //TODO: use the speed_up cvar too ??
+}
+
+void W_Nexball_Attack2 (void)
+{
+ entity missile;
+ if (!(balls & BALL_BASKET))
+ return;
+ W_SetupShot (self, FALSE, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0);
+// pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ missile = spawn ();
+
+ missile.owner = self;
+ missile.classname = "ballstealer";
+
+ missile.movetype = MOVETYPE_FLY;
+ PROJECTILE_MAKETRIGGER(missile);
+
+ setmodel (missile, "models/elaser.mdl"); // precision set below
+ setsize (missile, '0 0 0', '0 0 0');
+ setorigin (missile, w_shotorg);
+
+ W_SetupProjectileVelocity(missile, autocvar_g_balance_nexball_secondary_speed, 0);
+ missile.angles = vectoangles (missile.velocity);
+ missile.touch = W_Nexball_Touch;
+ missile.think = SUB_Remove;
+ missile.nextthink = time + autocvar_g_balance_nexball_secondary_lifetime; //FIXME: use a distance instead?
+
+ missile.effects = EF_BRIGHTFIELD | EF_LOWPRECISION;
+ missile.flags = FL_PROJECTILE;
+}
+
+float w_nexball_weapon(float req)
+{
+ if (req == WR_THINK)
+ {
+ if (self.BUTTON_ATCK)
+ if (weapon_prepareattack(0, autocvar_g_balance_nexball_primary_refire))
+ if (autocvar_g_nexball_basketball_meter)
+ {
+ if (self.ballcarried && !self.metertime)
+ self.metertime = time;
+ else
+ weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
+ }
+ else
+ {
+ W_Nexball_Attack(-1);
+ weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
+ }
+ if (self.BUTTON_ATCK2)
+ if (weapon_prepareattack(1, autocvar_g_balance_nexball_secondary_refire))
+ {
+ W_Nexball_Attack2();
+ weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_nexball_secondary_animtime, w_ready);
+ }
+
+ if (!self.BUTTON_ATCK && self.metertime && self.ballcarried)
+ {
+ W_Nexball_Attack(time - self.metertime);
+ // DropBall or stealing will set metertime back to 0
+ weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
+ }
+ }
+ else if (req == WR_PRECACHE)
+ {
+ precache_model ("models/weapons/g_porto.md3");
+ precache_model ("models/weapons/v_porto.md3");
+ precache_model ("models/weapons/h_porto.iqm");
+ precache_model ("models/elaser.mdl");
+ precache_sound ("nexball/shoot1.wav");
+ precache_sound ("nexball/shoot2.wav");
+ precache_sound ("misc/typehit.wav");
+ }
+ else if (req == WR_SETUP)
+ weapon_setup(WEP_PORTO);
+ else if (req == WR_SUICIDEMESSAGE)
+ {
+ w_deathtypestring = "is a weirdo";
+ }
+ else if (req == WR_KILLMESSAGE)
+ {
+ w_deathtypestring = "got killed by #'s black magic";
+ }
+ // No need to check WR_CHECKAMMO* or WR_AIM, it should always return TRUE
+ return TRUE;
+}
DropAllRunes(self);
MUTATOR_CALLHOOK(MakePlayerObserver);
- if (g_minstagib)
- minstagib_stop_countdown();
+ minstagib_stop_countdown(self);
Portal_ClearAll(self);
if(self.flagcarried)
DropFlag(self.flagcarried, world, world);
- if(self.ballcarried && g_nexball)
- DropBall(self.ballcarried, self.origin + self.ballcarried.origin, self.velocity);
-
WaypointSprite_PlayerDead();
if not(g_ca) // don't reset teams when moving a ca player to the spectators
RemoveGrapplingHook(self);
if(self.flagcarried)
DropFlag(self.flagcarried, world, world);
- if(self.ballcarried && g_nexball)
- DropBall(self.ballcarried, self.origin + self.ballcarried.origin, self.velocity);
// Here, everything has been done that requires this player to be a client.
else
DropFlag(self.flagcarried, world, attacker);
}
- if(self.ballcarried && g_nexball)
- DropBall(self.ballcarried, self.origin, self.velocity);
Portal_ClearAllLater(self);
if(clienttype(self) == CLIENTTYPE_REAL)
return 0;
if (g_cts)
return 0;
- if (g_nexball && w == WEP_PORTO)
+ if (g_nexball && w == WEP_GRENADE_LAUNCHER)
return 0;
wb = W_WeaponBit(w);
}
}
-void VoteCount()
+void VoteCount(float first_count)
{
// declarations
vote_accept_count = vote_reject_count = vote_abstain_count = 0;
vote_factor_of_voted = bound(0.5, autocvar_sv_vote_majority_factor_of_voted, 0.999);
vote_needed_of_voted = floor((vote_accept_count + vote_reject_count) * vote_factor_of_voted) + 1;
+ // are there any players at all on the server? it could be an admin vote
+ if(vote_player_count == 0 && first_count)
+ {
+ VoteSpam(0, -1, "yes"); // no players at all, just accept it
+ VoteAccept();
+ return;
+ }
- // finally calculate the result of the vote
+ // since there ARE players, finally calculate the result of the vote
if(vote_accept_count >= vote_needed_overall)
{
VoteSpam(notvoters, -1, "yes"); // there is enough acceptions to pass the vote
if(vote_endtime > 0) // a vote was called
if(time > vote_endtime) // time is up
{
- VoteCount();
+ VoteCount(FALSE);
}
return;
print_to(caller, "^1You abstained from your vote.");
caller.vote_selection = VOTE_SELECT_ABSTAIN;
msg_entity = caller;
- if(!autocvar_sv_vote_singlecount) { VoteCount(); }
+ if(!autocvar_sv_vote_singlecount) { VoteCount(FALSE); }
}
return;
bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2 calls a vote for ", vote_called_display, "\n");
if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); }
Nagger_VoteChanged();
- VoteCount(); // needed if you are the only one
+ VoteCount(TRUE); // needed if you are the only one
}
return;
bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2 calls a vote to become ^3master^2.\n");
if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); }
Nagger_VoteChanged();
- VoteCount(); // needed if you are the only one
+ VoteCount(TRUE); // needed if you are the only one
}
return;
print_to(caller, "^1You rejected the vote.");
caller.vote_selection = VOTE_SELECT_REJECT;
msg_entity = caller;
- if(!autocvar_sv_vote_singlecount) { VoteCount(); }
+ if(!autocvar_sv_vote_singlecount) { VoteCount(FALSE); }
}
return;
print_to(caller, "^1You accepted the vote.");
caller.vote_selection = VOTE_SELECT_ACCEPT;
msg_entity = caller;
- if(!autocvar_sv_vote_singlecount) { VoteCount(); }
+ if(!autocvar_sv_vote_singlecount) { VoteCount(FALSE); }
}
return;
float startitem_failed;
void DropFlag(entity flag, entity penalty_receiver, entity attacker);
-void DropBall(entity ball, vector org, vector vel);
void DropAllRunes(entity pl);
}
}
-
+void minstagib_stop_countdown(entity e);
/*
go to the next level for deathmatch
only called if a time or frag limit has expired
GameLogClose();
FOR_EACH_PLAYER(other) {
+ minstagib_stop_countdown(other);
FixIntermissionClient(other);
if(other.winning)
bprint(other.netname, " ^7wins.\n");
t |= (i == WEP_HOOK);
}
- // we cannot disable porto in Nexball, we must force it
- if(g_nexball && i == WEP_PORTO)
- t = 1;
-
return t;
}
--- /dev/null
+float autocvar_g_nexball_safepass_turnrate;
+float autocvar_g_nexball_safepass_maxdist;
+float autocvar_g_nexball_safepass_holdtime;
+float autocvar_g_nexball_viewmodel_scale;
+float autocvar_g_nexball_tackling;
+vector autocvar_g_nexball_viewmodel_offset;
+
+void basketball_touch();
+void football_touch();
+void ResetBall();
+#define NBM_NONE 0
+#define NBM_FOOTBALL 2
+#define NBM_BASKETBALL 4
+float nexball_mode;
+
+float OtherTeam(float t) //works only if there are two teams on the map!
+{
+ entity e;
+ e = find(world, classname, "nexball_team");
+ if(e.team == t)
+ e = find(e, classname, "nexball_team");
+ return e.team;
+}
+
+
+void LogNB(string mode, entity actor)
+{
+ string s;
+ if(!autocvar_sv_eventlog)
+ return;
+ s = strcat(":nexball:", mode);
+ if(actor != world)
+ s = strcat(s, ":", ftos(actor.playerid));
+ GameLogEcho(s);
+}
+
+void ball_restart(void)
+{
+ if(self.owner)
+ DropBall(self, self.owner.origin, '0 0 0');
+ ResetBall();
+}
+
+void nexball_setstatus(void)
+{
+ entity oldself;
+ self.items &~= IT_KEY1;
+ if(self.ballcarried)
+ {
+ if(self.ballcarried.teamtime && (self.ballcarried.teamtime < time))
+ {
+ bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
+ oldself = self;
+ self = self.ballcarried;
+ DropBall(self, self.owner.origin, '0 0 0');
+ ResetBall();
+ self = oldself;
+ }
+ else
+ self.items |= IT_KEY1;
+ }
+}
+
+void relocate_nexball(void)
+{
+ tracebox(self.origin, BALL_MINS, BALL_MAXS, self.origin, TRUE, self);
+ if(trace_startsolid)
+ {
+ vector o;
+ o = self.origin;
+ if(!move_out_of_solid(self))
+ objerror("could not get out of solid at all!");
+ print("^1NOTE: this map needs FIXING. ", self.classname, " at ", vtos(o - '0 0 1'));
+ print(" needs to be moved out of solid, e.g. by '", ftos(self.origin_x - o_x));
+ print(" ", ftos(self.origin_y - o_y));
+ print(" ", ftos(self.origin_z - o_z), "'\n");
+ self.origin = o;
+ }
+}
+
+void DropOwner(void)
+{
+ entity ownr;
+ ownr = self.owner;
+ DropBall(self, ownr.origin, ownr.velocity);
+ makevectors(ownr.v_angle_y * '0 1 0');
+ ownr.velocity += ('0 0 0.75' - v_forward) * 1000;
+ ownr.flags &~= FL_ONGROUND;
+}
+
+void GiveBall(entity plyr, entity ball)
+{
+ entity ownr;
+
+ if((ownr = ball.owner))
+ {
+ ownr.effects &~= autocvar_g_nexball_basketball_effects_default;
+ ownr.ballcarried = world;
+ if(ownr.metertime)
+ {
+ ownr.metertime = 0;
+ ownr.weaponentity.state = WS_READY;
+ }
+ WaypointSprite_Kill(ownr.waypointsprite_attachedforcarrier);
+ }
+ else
+ {
+ WaypointSprite_Kill(ball.waypointsprite_attachedforcarrier);
+ }
+
+ //setattachment(ball, plyr, "");
+ setorigin(ball, plyr.origin + plyr.view_ofs);
+
+ if(ball.team != plyr.team)
+ ball.teamtime = time + autocvar_g_nexball_basketball_delay_hold_forteam;
+
+ ball.owner = ball.pusher = plyr; //"owner" is set to the player carrying, "pusher" to the last player who touched it
+ ball.team = plyr.team;
+ plyr.ballcarried = ball;
+ ball.dropperid = plyr.playerid;
+
+ plyr.effects |= autocvar_g_nexball_basketball_effects_default;
+ ball.effects &~= autocvar_g_nexball_basketball_effects_default;
+
+ ball.velocity = '0 0 0';
+ ball.movetype = MOVETYPE_NONE;
+ ball.touch = SUB_Null;
+ ball.effects |= EF_NOSHADOW;
+ ball.scale = 1; // scale down.
+
+ WaypointSprite_AttachCarrier("nb-ball", plyr, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
+ WaypointSprite_UpdateRule(plyr.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
+
+ if(autocvar_g_nexball_basketball_delay_hold)
+ {
+ ball.think = DropOwner;
+ ball.nextthink = time + autocvar_g_nexball_basketball_delay_hold;
+ }
+
+ ownr = self;
+ self = plyr;
+ self.weaponentity.weapons = self.weapons;
+ self.weaponentity.switchweapon = self.weapon;
+ self.weapons = W_WeaponBit(WEP_PORTO);
+ weapon_action(WEP_PORTO, WR_RESETPLAYER);
+ self.switchweapon = WEP_PORTO;
+ W_SwitchWeapon(WEP_PORTO);
+ self = ownr;
+}
+
+void DropBall(entity ball, vector org, vector vel)
+{
+ ball.effects |= autocvar_g_nexball_basketball_effects_default;
+ ball.effects &~= EF_NOSHADOW;
+ ball.owner.effects &~= autocvar_g_nexball_basketball_effects_default;
+
+ setattachment(ball, world, "");
+ setorigin(ball, org);
+ ball.movetype = MOVETYPE_BOUNCE;
+ ball.flags &~= FL_ONGROUND;
+ ball.scale = ball_scale;
+ ball.velocity = vel;
+ ball.ctf_droptime = time;
+ ball.touch = basketball_touch;
+ ball.think = ResetBall;
+ ball.nextthink = min(time + autocvar_g_nexball_delay_idle, ball.teamtime);
+
+ if(ball.owner.metertime)
+ {
+ ball.owner.metertime = 0;
+ ball.owner.weaponentity.state = WS_READY;
+ }
+
+ WaypointSprite_Kill(ball.owner.waypointsprite_attachedforcarrier);
+ 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);
+
+ ball.owner.ballcarried = world;
+ ball.owner = world;
+}
+
+void InitBall(void)
+{
+ if(gameover) return;
+ self.flags &~= FL_ONGROUND;
+ self.movetype = MOVETYPE_BOUNCE;
+ if(self.classname == "nexball_basketball")
+ self.touch = basketball_touch;
+ else if(self.classname == "nexball_football")
+ self.touch = football_touch;
+ self.cnt = 0;
+ self.think = ResetBall;
+ self.nextthink = time + autocvar_g_nexball_delay_idle + 3;
+ self.teamtime = 0;
+ self.pusher = world;
+ self.team = FALSE;
+ sound(self, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
+ WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
+ LogNB("init", world);
+}
+
+void ResetBall(void)
+{
+ if(self.cnt < 2) // step 1
+ {
+ if(time == self.teamtime)
+ bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
+ self.touch = SUB_Null;
+ self.movetype = MOVETYPE_NOCLIP;
+ self.velocity = '0 0 0'; // just in case?
+ if(!self.cnt)
+ LogNB("resetidle", world);
+ self.cnt = 2;
+ self.nextthink = time;
+ }
+ else if(self.cnt < 4) // step 2 and 3
+ {
+// dprint("Step ", ftos(self.cnt), ": Calculated velocity: ", vtos(self.spawnorigin - self.origin), ", time: ", ftos(time), "\n");
+ self.velocity = (self.spawnorigin - self.origin) * (self.cnt - 1); // 1 or 0.5 second movement
+ self.nextthink = time + 0.5;
+ self.cnt += 1;
+ }
+ else // step 4
+ {
+// dprint("Step 4: time: ", ftos(time), "\n");
+ if(vlen(self.origin - self.spawnorigin) > 10) // should not happen anymore
+ dprint("The ball moved too far away from its spawn origin.\nOffset: ",
+ vtos(self.origin - self.spawnorigin), " Velocity: ", vtos(self.velocity), "\n");
+ self.velocity = '0 0 0';
+ setorigin(self, self.spawnorigin); // make sure it's positioned correctly anyway
+ self.movetype = MOVETYPE_NONE;
+ self.think = InitBall;
+ self.nextthink = max(time, game_starttime) + autocvar_g_nexball_delay_start;
+ }
+}
+
+void football_touch(void)
+{
+ if(other.solid == SOLID_BSP)
+ {
+ if(time > self.lastground + 0.1)
+ {
+ sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
+ self.lastground = time;
+ }
+ if(vlen(self.velocity) && !self.cnt)
+ self.nextthink = time + autocvar_g_nexball_delay_idle;
+ return;
+ }
+ if(other.classname != "player")
+ return;
+ if(other.health < 1)
+ return;
+ if(!self.cnt)
+ self.nextthink = time + autocvar_g_nexball_delay_idle;
+
+ self.pusher = other;
+ self.team = other.team;
+
+ if(autocvar_g_nexball_football_physics == -1) // MrBougo try 1, before decompiling Rev's original
+ {
+ if(vlen(other.velocity))
+ self.velocity = other.velocity * 1.5 + '0 0 1' * autocvar_g_nexball_football_boost_up;
+ }
+ else if(autocvar_g_nexball_football_physics == 1) // MrBougo's modded Rev style: partially independant of the height of the aiming point
+ {
+ makevectors(other.v_angle);
+ self.velocity = other.velocity + v_forward * autocvar_g_nexball_football_boost_forward + '0 0 1' * autocvar_g_nexball_football_boost_up;
+ }
+ else if(autocvar_g_nexball_football_physics == 2) // 2nd mod try: totally independant. Really playable!
+ {
+ makevectors(other.v_angle_y * '0 1 0');
+ self.velocity = other.velocity + v_forward * autocvar_g_nexball_football_boost_forward + v_up * autocvar_g_nexball_football_boost_up;
+ }
+ else // Revenant's original style (from the original mod's disassembly, acknowledged by Revenant)
+ {
+ makevectors(other.v_angle);
+ self.velocity = other.velocity + v_forward * autocvar_g_nexball_football_boost_forward + v_up * autocvar_g_nexball_football_boost_up;
+ }
+ self.avelocity = -250 * v_forward; // maybe there is a way to make it look better?
+}
+
+void basketball_touch(void)
+{
+ if(other.ballcarried)
+ {
+ football_touch();
+ return;
+ }
+ if(!self.cnt && other.classname == "player" && (other.playerid != self.dropperid || time > self.ctf_droptime + autocvar_g_nexball_delay_collect))
+ {
+ if(other.health <= 0)
+ return;
+ LogNB("caught", other);
+ GiveBall(other, self);
+ }
+ else if(other.solid == SOLID_BSP)
+ {
+ sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
+ if(vlen(self.velocity) && !self.cnt)
+ self.nextthink = min(time + autocvar_g_nexball_delay_idle, self.teamtime);
+ }
+}
+
+void GoalTouch(void)
+{
+ entity ball;
+ float isclient, pscore, otherteam;
+ string pname;
+
+ if(gameover) return;
+ if((self.spawnflags & GOAL_TOUCHPLAYER) && other.ballcarried)
+ ball = other.ballcarried;
+ else
+ ball = other;
+ if(ball.classname != "nexball_basketball")
+ if(ball.classname != "nexball_football")
+ return;
+ if((!ball.pusher && self.team != GOAL_OUT) || ball.cnt)
+ return;
+ EXACTTRIGGER_TOUCH;
+
+
+ if(nb_teams == 2)
+ otherteam = OtherTeam(ball.team);
+
+ if((isclient = ball.pusher.flags & FL_CLIENT))
+ pname = ball.pusher.netname;
+ else
+ pname = "Someone (?)";
+
+ if(ball.team == self.team) //owngoal (regular goals)
+ {
+ LogNB("owngoal", ball.pusher);
+ bprint("Boo! ", pname, "^7 scored a goal against their own team!\n");
+ pscore = -1;
+ }
+ else if(self.team == GOAL_FAULT)
+ {
+ LogNB("fault", ball.pusher);
+ if(nb_teams == 2)
+ bprint(ColoredTeamName(otherteam), " gets a point due to ", pname, "^7's silliness.\n");
+ else
+ bprint(ColoredTeamName(ball.team), " loses a point due to ", pname, "^7's silliness.\n");
+ pscore = -1;
+ }
+ else if(self.team == GOAL_OUT)
+ {
+ LogNB("out", ball.pusher);
+ if((self.spawnflags & GOAL_TOUCHPLAYER) && ball.owner)
+ bprint(pname, "^7 went out of bounds.\n");
+ else
+ bprint("The ball was returned.\n");
+ pscore = 0;
+ }
+ else //score
+ {
+ LogNB(strcat("goal:", ftos(self.team)), ball.pusher);
+ bprint("Goaaaaal! ", pname, "^7 scored a point for the ", ColoredTeamName(ball.team), ".\n");
+ pscore = 1;
+ }
+
+ sound(ball, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
+
+ if(ball.team && pscore)
+ {
+ if(nb_teams == 2 && pscore < 0)
+ TeamScore_AddToTeam(otherteam, ST_NEXBALL_GOALS, -pscore);
+ else
+ TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore);
+ }
+ if(isclient)
+ {
+ if(pscore > 0)
+ PlayerScore_Add(ball.pusher, SP_NEXBALL_GOALS, pscore);
+ else if(pscore < 0)
+ PlayerScore_Add(ball.pusher, SP_NEXBALL_FAULTS, -pscore);
+ }
+
+ if(ball.owner) // Happens on spawnflag GOAL_TOUCHPLAYER
+ DropBall(ball, ball.owner.origin, ball.owner.velocity);
+
+ WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier);
+
+ ball.cnt = 1;
+ ball.think = ResetBall;
+ if(ball.classname == "nexball_basketball")
+ ball.touch = football_touch; // better than SUB_Null: football control until the ball gets reset
+ ball.nextthink = time + autocvar_g_nexball_delay_goal * (self.team != GOAL_OUT);
+}
+
+//=======================//
+// team ents //
+//=======================//
+void spawnfunc_nexball_team(void)
+{
+ if(!g_nexball)
+ {
+ remove(self);
+ return;
+ }
+ self.team = self.cnt + 1;
+}
+
+void nb_spawnteam(string teamname, float teamcolor)
+{
+ dprint("^2spawned team ", teamname, "\n");
+ entity e;
+ e = spawn();
+ e.classname = "nexball_team";
+ e.netname = teamname;
+ e.cnt = teamcolor;
+ e.team = e.cnt + 1;
+ nb_teams += 1;
+}
+
+void nb_spawnteams(void)
+{
+ float t_r, t_b, t_y, t_p;
+ entity e;
+ for(e = world; (e = find(e, classname, "nexball_goal"));)
+ {
+ switch(e.team)
+ {
+ case COLOR_TEAM1:
+ if(!t_r)
+ {
+ nb_spawnteam("Red", e.team-1) ;
+ t_r = 1;
+ }
+ break;
+ case COLOR_TEAM2:
+ if(!t_b)
+ {
+ nb_spawnteam("Blue", e.team-1) ;
+ t_b = 1;
+ }
+ break;
+ case COLOR_TEAM3:
+ if(!t_y)
+ {
+ nb_spawnteam("Yellow", e.team-1);
+ t_y = 1;
+ }
+ break;
+ case COLOR_TEAM4:
+ if(!t_p)
+ {
+ nb_spawnteam("Pink", e.team-1) ;
+ t_p = 1;
+ }
+ break;
+ }
+ }
+}
+
+void nb_delayedinit(void)
+{
+ if(find(world, classname, "nexball_team") == world)
+ nb_spawnteams();
+ ScoreRules_nexball(nb_teams);
+}
+
+
+//=======================//
+// spawnfuncs //
+//=======================//
+
+void SpawnBall(void)
+{
+ if(!g_nexball)
+ {
+ remove(self);
+ return;
+ }
+
+// balls += 4; // using the remaining bits to count balls will leave more than the max edict count, so it's fine
+
+ if(!self.model)
+ {
+ self.model = "models/nexball/ball.md3";
+ self.scale = 1.3;
+ }
+
+ precache_model(self.model);
+ setmodel(self, self.model);
+ setsize(self, BALL_MINS, BALL_MAXS);
+ ball_scale = self.scale;
+
+ relocate_nexball();
+ self.spawnorigin = self.origin;
+
+ self.effects = self.effects | EF_LOWPRECISION;
+
+ if(cvar(strcat("g_", self.classname, "_trail"))) //nexball_basketball :p
+ {
+ self.glow_color = autocvar_g_nexball_trail_color;
+ self.glow_trail = TRUE;
+ }
+
+ self.movetype = MOVETYPE_FLY;
+
+ if(!autocvar_g_nexball_sound_bounce)
+ self.noise = "";
+ else if(!self.noise)
+ self.noise = "sound/nexball/bounce.wav";
+ //bounce sound placeholder (FIXME)
+ if(!self.noise1)
+ self.noise1 = "sound/nexball/drop.wav";
+ //ball drop sound placeholder (FIXME)
+ if(!self.noise2)
+ self.noise2 = "sound/nexball/steal.wav";
+ //stealing sound placeholder (FIXME)
+ if(self.noise) precache_sound(self.noise);
+ precache_sound(self.noise1);
+ precache_sound(self.noise2);
+
+ 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;
+ self.nextthink = game_starttime + autocvar_g_nexball_delay_start;
+}
+
+void spawnfunc_nexball_basketball(void)
+{
+ nexball_mode |= NBM_BASKETBALL;
+ self.classname = "nexball_basketball";
+ if not(balls & BALL_BASKET)
+ {
+ /*
+ CVTOV(g_nexball_basketball_effects_default);
+ CVTOV(g_nexball_basketball_delay_hold);
+ CVTOV(g_nexball_basketball_delay_hold_forteam);
+ CVTOV(g_nexball_basketball_teamsteal);
+ */
+ autocvar_g_nexball_basketball_effects_default = autocvar_g_nexball_basketball_effects_default & BALL_EFFECTMASK;
+ }
+ if(!self.effects)
+ self.effects = autocvar_g_nexball_basketball_effects_default;
+ self.solid = SOLID_TRIGGER;
+ balls |= BALL_BASKET;
+ self.bouncefactor = autocvar_g_nexball_basketball_bouncefactor;
+ self.bouncestop = autocvar_g_nexball_basketball_bouncestop;
+ SpawnBall();
+}
+
+void spawnfunc_nexball_football(void)
+{
+ nexball_mode |= NBM_FOOTBALL;
+ self.classname = "nexball_football";
+ self.solid = SOLID_TRIGGER;
+ balls |= BALL_FOOT;
+ self.bouncefactor = autocvar_g_nexball_football_bouncefactor;
+ self.bouncestop = autocvar_g_nexball_football_bouncestop;
+ SpawnBall();
+}
+
+void SpawnGoal(void)
+{
+ if(!g_nexball)
+ {
+ remove(self);
+ return;
+ }
+ EXACTTRIGGER_INIT;
+ self.classname = "nexball_goal";
+ if(!self.noise)
+ self.noise = "ctf/respawn.wav";
+ precache_sound(self.noise);
+ self.touch = GoalTouch;
+}
+
+void spawnfunc_nexball_redgoal(void)
+{
+ self.team = COLOR_TEAM1;
+ SpawnGoal();
+}
+void spawnfunc_nexball_bluegoal(void)
+{
+ self.team = COLOR_TEAM2;
+ SpawnGoal();
+}
+void spawnfunc_nexball_yellowgoal(void)
+{
+ self.team = COLOR_TEAM3;
+ SpawnGoal();
+}
+void spawnfunc_nexball_pinkgoal(void)
+{
+ self.team = COLOR_TEAM4;
+ SpawnGoal();
+}
+
+void spawnfunc_nexball_fault(void)
+{
+ self.team = GOAL_FAULT;
+ if(!self.noise)
+ self.noise = "misc/typehit.wav";
+ SpawnGoal();
+}
+
+void spawnfunc_nexball_out(void)
+{
+ self.team = GOAL_OUT;
+ if(!self.noise)
+ self.noise = "misc/typehit.wav";
+ SpawnGoal();
+}
+
+//
+//Spawnfuncs preserved for compatibility
+//
+
+void spawnfunc_ball(void)
+{
+ spawnfunc_nexball_football();
+}
+void spawnfunc_ball_football(void)
+{
+ spawnfunc_nexball_football();
+}
+void spawnfunc_ball_basketball(void)
+{
+ spawnfunc_nexball_basketball();
+}
+// The "red goal" is defended by blue team. A ball in there counts as a point for red.
+void spawnfunc_ball_redgoal(void)
+{
+ spawnfunc_nexball_bluegoal(); // I blame Revenant
+}
+void spawnfunc_ball_bluegoal(void)
+{
+ spawnfunc_nexball_redgoal(); // but he didn't mean to cause trouble :p
+}
+void spawnfunc_ball_fault(void)
+{
+ spawnfunc_nexball_fault();
+}
+void spawnfunc_ball_bound(void)
+{
+ spawnfunc_nexball_out();
+}
+
+//=======================//
+// Weapon code //
+//=======================//
+
+
+void W_Nexball_Think()
+{
+ //dprint("W_Nexball_Think\n");
+ //vector new_dir = steerlib_arrive(self.enemy.origin, 2500);
+ vector new_dir = normalize(self.enemy.origin - self.origin);
+ vector old_dir = normalize(self.velocity);
+ float _speed = vlen(self.velocity);
+ vector new_vel = normalize(old_dir + (new_dir * autocvar_g_nexball_safepass_turnrate)) * _speed;
+ //vector new_vel = (new_dir * autocvar_g_nexball_safepass_turnrate
+
+ self.velocity = new_vel;
+
+ self.nextthink = time;
+}
+
+void W_Nexball_Touch(void)
+{
+ entity ball, attacker;
+ attacker = self.owner;
+ //self.think = SUB_Null;
+ //self.enemy = world;
+
+ PROJECTILE_TOUCH;
+ if(attacker.team != other.team || autocvar_g_nexball_basketball_teamsteal)
+ 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, CH_TRIGGER, ball.noise2, VOL_BASE, ATTN_NORM);
+
+ if(attacker.team == other.team && time > attacker.teamkill_complain)
+ {
+ attacker.teamkill_complain = time + 5;
+ attacker.teamkill_soundtime = time + 0.4;
+ attacker.teamkill_soundsource = other;
+ }
+
+ GiveBall(attacker, other.ballcarried);
+ }
+ }
+ remove(self);
+}
+
+void W_Nexball_Attack(float t)
+{
+ entity ball;
+ float mul, mi, ma;
+ if(!(ball = self.ballcarried))
+ return;
+
+ 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)
+ {
+ if(self.metertime)
+ self.metertime = 0; // Shot failed, hide the power meter
+ return;
+ }
+
+ //Calculate multiplier
+ if(t < 0)
+ mul = 1;
+ else
+ {
+ mi = autocvar_g_nexball_basketball_meter_minpower;
+ ma = max(mi, autocvar_g_nexball_basketball_meter_maxpower); // avoid confusion
+ //One triangle wave period with 1 as max
+ mul = 2 * mod(t, g_nexball_meter_period) / g_nexball_meter_period;
+ if(mul > 1)
+ mul = 2 - mul;
+ mul = mi + (ma - mi) * mul; // range from the minimal power to the maximal power
+ }
+
+ DropBall(ball, w_shotorg, W_CalculateProjectileVelocity(self.velocity, w_shotdir * autocvar_g_balance_nexball_primary_speed * mul, FALSE));
+
+
+ //TODO: use the speed_up cvar too ??
+}
+
+void W_Nexball_Attack2(void)
+{
+ if(self.ballcarried.enemy)
+ {
+ entity _ball = self.ballcarried;
+ W_SetupShot(self, FALSE, 4, "nexball/shoot1.wav", CH_WEAPON_A, 0);
+ DropBall(_ball, w_shotorg, trigger_push_calculatevelocity(_ball.origin, _ball.enemy, 32));
+ _ball.think = W_Nexball_Think;
+ _ball.nextthink = time;
+ return;
+ }
+
+ if(!autocvar_g_nexball_tackling)
+ return;
+
+ entity missile;
+ if(!(balls & BALL_BASKET))
+ return;
+ W_SetupShot(self, FALSE, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0);
+// pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ missile = spawn();
+
+ missile.owner = self;
+ missile.classname = "ballstealer";
+
+ missile.movetype = MOVETYPE_FLY;
+ PROJECTILE_MAKETRIGGER(missile);
+
+ setmodel(missile, "models/elaser.mdl"); // precision set below
+ setsize(missile, '0 0 0', '0 0 0');
+ setorigin(missile, w_shotorg);
+
+ W_SetupProjectileVelocity(missile, autocvar_g_balance_nexball_secondary_speed, 0);
+ missile.angles = vectoangles(missile.velocity);
+ missile.touch = W_Nexball_Touch;
+ missile.think = SUB_Remove;
+ missile.nextthink = time + autocvar_g_balance_nexball_secondary_lifetime; //FIXME: use a distance instead?
+
+ missile.effects = EF_BRIGHTFIELD | EF_LOWPRECISION;
+ missile.flags = FL_PROJECTILE;
+}
+
+var const float() nullfunc;
+float ball_customize()
+{
+ if(!self.owner)
+ {
+ self.effects &~= EF_FLAME;
+ self.scale = 1;
+ self.customizeentityforclient = nullfunc;
+ return TRUE;
+ }
+
+ if(other == self.owner)
+ {
+ self.scale = autocvar_g_nexball_viewmodel_scale;
+ if(self.enemy)
+ self.effects |= EF_FLAME;
+ else
+ self.effects &~= EF_FLAME;
+ }
+ else
+ {
+ self.effects &~= EF_FLAME;
+ self.scale = 1;
+ }
+
+ return TRUE;
+}
+
+float w_nexball_weapon(float req)
+{
+ if(req == WR_THINK)
+ {
+ if(self.BUTTON_ATCK)
+ if(weapon_prepareattack(0, autocvar_g_balance_nexball_primary_refire))
+ if(autocvar_g_nexball_basketball_meter)
+ {
+ if(self.ballcarried && !self.metertime)
+ self.metertime = time;
+ else
+ weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
+ }
+ else
+ {
+ W_Nexball_Attack(-1);
+ weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
+ }
+ if(self.BUTTON_ATCK2)
+ if(weapon_prepareattack(1, autocvar_g_balance_nexball_secondary_refire))
+ {
+ W_Nexball_Attack2();
+ weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_nexball_secondary_animtime, w_ready);
+ }
+
+ if(!self.BUTTON_ATCK && self.metertime && self.ballcarried)
+ {
+ W_Nexball_Attack(time - self.metertime);
+ // DropBall or stealing will set metertime back to 0
+ weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
+ }
+ }
+ else if(req == WR_PRECACHE)
+ {
+ precache_model("models/weapons/g_porto.md3");
+ precache_model("models/weapons/v_porto.md3");
+ precache_model("models/weapons/h_porto.iqm");
+ precache_model("models/elaser.mdl");
+ precache_sound("nexball/shoot1.wav");
+ precache_sound("nexball/shoot2.wav");
+ precache_sound("misc/typehit.wav");
+ }
+ else if(req == WR_SETUP)
+ weapon_setup(WEP_PORTO);
+ else if(req == WR_SUICIDEMESSAGE)
+ {
+ w_deathtypestring = "is a weirdo";
+ }
+ else if(req == WR_KILLMESSAGE)
+ {
+ w_deathtypestring = "got killed by #'s black magic";
+ }
+ // No need to check WR_CHECKAMMO* or WR_AIM, it should always return TRUE
+ return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(nexball_BallDrop)
+{
+ if(self.ballcarried && g_nexball)
+ DropBall(self.ballcarried, self.origin, self.velocity);
+
+ return 0;
+}
+
+MUTATOR_HOOKFUNCTION(nexball_BuildMutatorsString)
+{
+ ret_string = strcat(ret_string, ":NB");
+ return 0;
+}
+
+MUTATOR_HOOKFUNCTION(nexball_BuildMutatorsPrettyString)
+{
+ ret_string = strcat(ret_string, ", NexBall");
+ return 0;
+}
+
+MUTATOR_HOOKFUNCTION(nexball_PlayerPreThink)
+{
+ makevectors(self.v_angle);
+ if(nexball_mode & NBM_BASKETBALL)
+ {
+ if(self.ballcarried)
+ {
+ // 'view ball'
+ self.ballcarried.velocity = self.velocity;
+ self.ballcarried.customizeentityforclient = ball_customize;
+
+ setorigin(self.ballcarried, self.origin + self.view_ofs +
+ v_forward * autocvar_g_nexball_viewmodel_offset_x +
+ v_right * autocvar_g_nexball_viewmodel_offset_y +
+ v_up * autocvar_g_nexball_viewmodel_offset_z);
+
+ // 'safe passing'
+ if(autocvar_g_nexball_safepass_maxdist)
+ {
+ if(self.ballcarried.wait < time && self.ballcarried.enemy)
+ {
+ //centerprint(self, sprintf("Lost lock on %s", self.ballcarried.enemy.netname));
+ self.ballcarried.enemy = world;
+ }
+
+
+ //tracebox(self.origin + self.view_ofs, '-2 -2 -2', '2 2 2', self.origin + self.view_ofs + v_forward * autocvar_g_nexball_safepass_maxdist);
+ crosshair_trace(self);
+ if( trace_ent &&
+ trace_ent.flags & FL_CLIENT &&
+ trace_ent.deadflag == DEAD_NO &&
+ trace_ent.team == self.team &&
+ vlen(trace_ent.origin - self.origin) <= autocvar_g_nexball_safepass_maxdist )
+ {
+
+ //if(self.ballcarried.enemy != trace_ent)
+ // centerprint(self, sprintf("Locked to %s", trace_ent.netname));
+ self.ballcarried.enemy = trace_ent;
+ self.ballcarried.wait = time + autocvar_g_nexball_safepass_holdtime;
+
+
+ }
+ }
+ }
+ else
+ {
+ if(self.weaponentity.weapons)
+ {
+ self.weapons = self.weaponentity.weapons;
+ weapon_action(WEP_PORTO, WR_RESETPLAYER);
+ self.switchweapon = self.weaponentity.switchweapon;
+ W_SwitchWeapon(self.switchweapon);
+
+ self.weaponentity.weapons = 0;
+ }
+ }
+
+ }
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(nexball_PlayerSpawn)
+{
+ self.weaponentity.weapons = 0;
+
+ if(nexball_mode & NBM_BASKETBALL)
+ self.weapons |= W_WeaponBit(WEP_PORTO);
+ else
+ self.weapons = 0; // W_WeaponBit(WEP_PORTO);
+
+ return FALSE;
+}
+
+MUTATOR_DEFINITION(gamemode_nexball)
+{
+ MUTATOR_HOOK(PlayerDies, nexball_BallDrop, CBC_ORDER_ANY);
+ MUTATOR_HOOK(MakePlayerObserver, nexball_BallDrop, CBC_ORDER_ANY);
+ MUTATOR_HOOK(ClientDisconnect, nexball_BallDrop, CBC_ORDER_ANY);
+ MUTATOR_HOOK(BuildMutatorsPrettyString, nexball_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+ MUTATOR_HOOK(BuildMutatorsString, nexball_BuildMutatorsString, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerSpawn, nexball_PlayerSpawn, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerPreThink, nexball_PlayerPreThink, CBC_ORDER_ANY);
+
+ MUTATOR_ONADD
+ {
+ g_nexball = 1;
+ g_nexball_meter_period = autocvar_g_nexball_meter_period;
+ if(g_nexball_meter_period <= 0)
+ g_nexball_meter_period = 2; // avoid division by zero etc. due to silly users
+ g_nexball_meter_period = rint(g_nexball_meter_period * 32) / 32; //Round to 1/32ths to send as a byte multiplied by 32
+ addstat(STAT_NB_METERSTART, AS_FLOAT, metertime);
+
+ // General settings
+ /*
+ CVTOV(g_nexball_football_boost_forward); //100
+ CVTOV(g_nexball_football_boost_up); //200
+ CVTOV(g_nexball_delay_idle); //10
+ CVTOV(g_nexball_football_physics); //0
+ */
+ radar_showennemies = autocvar_g_nexball_radar_showallplayers;
+
+ InitializeEntity(world, nb_delayedinit, INITPRIO_GAMETYPE);
+ }
+
+ return 0;
+}
--- /dev/null
+//EF_BRIGHTFIELD|EF_BRIGHTLIGHT|EF_DIMLIGHT|EF_BLUE|EF_RED|EF_FLAME
+#define BALL_EFFECTMASK 1229
+#define BALL_MINS '-16 -16 -16' // The model is 24*24*24
+#define BALL_MAXS '16 16 16'
+#define BALL_ATTACHORG '3 0 16'
+#define BALL_SPRITECOLOR '.91 .85 .62'
+#define BALL_FOOT 1
+#define BALL_BASKET 2
+//spawnflags
+#define GOAL_TOUCHPLAYER 1
+//goal types
+#define GOAL_FAULT -1
+#define GOAL_OUT -2
+
+void DropBall(entity ball, vector org, vector vel);
+float autocvar_g_nexball_football_boost_forward;
+float autocvar_g_nexball_football_boost_up;
+float autocvar_g_nexball_football_physics;
+float autocvar_g_nexball_delay_idle;
+float autocvar_g_nexball_basketball_delay_hold;
+float autocvar_g_nexball_basketball_delay_hold_forteam;
+float autocvar_g_nexball_basketball_effects_default;
+float autocvar_g_nexball_basketball_teamsteal;
+float autocvar_g_nexball_meter_period;
+
+float balls;
+float ball_scale;
+float nb_teams;
+
+.float teamtime;
\ No newline at end of file
MUTATOR_DECLARATION(gamemode_keyhunt);
MUTATOR_DECLARATION(gamemode_freezetag);
MUTATOR_DECLARATION(gamemode_keepaway);
+MUTATOR_DECLARATION(gamemode_nexball);
MUTATOR_DECLARATION(mutator_invincibleprojectiles);
MUTATOR_DECLARATION(mutator_nix);
+++ /dev/null
-//EF_BRIGHTFIELD|EF_BRIGHTLIGHT|EF_DIMLIGHT|EF_BLUE|EF_RED|EF_FLAME
-#define BALL_EFFECTMASK 1229
-#define BALL_MINS '-16 -16 -16' // The model is 24*24*24
-#define BALL_MAXS '16 16 16'
-#define BALL_ATTACHORG '3 0 16'
-#define BALL_SPRITECOLOR '.91 .85 .62'
-#define BALL_FOOT 1
-#define BALL_BASKET 2
-//spawnflags
-#define GOAL_TOUCHPLAYER 1
-//goal types
-#define GOAL_FAULT -1
-#define GOAL_OUT -2
-
-#define CVTOV(s) s = cvar( #s )
-
-float g_nexball_football_boost_forward;
-float g_nexball_football_boost_up;
-float g_nexball_football_physics;
-float g_nexball_delay_idle;
-float g_nexball_basketball_delay_hold;
-float g_nexball_basketball_delay_hold_forteam;
-float g_nexball_basketball_effects_default;
-float g_nexball_basketball_teamsteal;
-float balls;
-float ball_scale;
-float nb_teams;
-
-.float teamtime;
-
-void nb_delayedinit();
-void nb_init() // Called early (worldspawn stage)
-{
- CVTOV(g_nexball_meter_period); //sent with the client init entity
- if (g_nexball_meter_period <= 0)
- g_nexball_meter_period = 2; // avoid division by zero etc. due to silly users
- g_nexball_meter_period = rint(g_nexball_meter_period * 32) / 32; //Round to 1/32ths to send as a byte multiplied by 32
- addstat(STAT_NB_METERSTART, AS_FLOAT, metertime);
-
- // General settings
- CVTOV(g_nexball_football_boost_forward); //100
- CVTOV(g_nexball_football_boost_up); //200
- CVTOV(g_nexball_delay_idle); //10
- CVTOV(g_nexball_football_physics); //0
-
- radar_showennemies = autocvar_g_nexball_radar_showallplayers;
-
- InitializeEntity(world, nb_delayedinit, INITPRIO_GAMETYPE);
-}
-
-float OtherTeam(float t) //works only if there are two teams on the map!
-{
- entity e;
- e = find(world, classname, "nexball_team");
- if (e.team == t)
- e = find(e, classname, "nexball_team");
- return e.team;
-}
-
-void ResetBall();
-
-void LogNB(string mode, entity actor)
-{
- string s;
- if(!autocvar_sv_eventlog)
- return;
- s = strcat(":nexball:", mode);
- if(actor != world)
- s = strcat(s, ":", ftos(actor.playerid));
- GameLogEcho(s);
-}
-
-void ball_restart (void)
-{
- if(self.owner)
- DropBall(self, self.owner.origin, '0 0 0');
- ResetBall();
-}
-
-void nexball_setstatus (void)
-{
- entity oldself;
- self.items &~= IT_KEY1;
- if (self.ballcarried)
- {
- if (self.ballcarried.teamtime && (self.ballcarried.teamtime < time))
- {
- bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
- oldself = self;
- self = self.ballcarried;
- DropBall(self, self.owner.origin, '0 0 0');
- ResetBall();
- self = oldself;
- } else
- self.items |= IT_KEY1;
- }
-}
-
-void relocate_nexball (void)
-{
- tracebox(self.origin, BALL_MINS, BALL_MAXS, self.origin, TRUE, self);
- if (trace_startsolid)
- {
- vector o;
- o = self.origin;
- if(!move_out_of_solid(self))
- objerror("could not get out of solid at all!");
- print("^1NOTE: this map needs FIXING. ", self.classname, " at ", vtos(o - '0 0 1'));
- print(" needs to be moved out of solid, e.g. by '", ftos(self.origin_x - o_x));
- print(" ", ftos(self.origin_y - o_y));
- print(" ", ftos(self.origin_z - o_z), "'\n");
- self.origin = o;
- }
-}
-
-void basketball_touch();
-void football_touch();
-
-void DropOwner (void)
-{
- entity ownr;
- ownr = self.owner;
- DropBall(self, ownr.origin, ownr.velocity);
- makevectors(ownr.v_angle_y * '0 1 0');
- ownr.velocity += ('0 0 0.75' - v_forward) * 1000;
- ownr.flags &~= FL_ONGROUND;
-}
-
-void GiveBall (entity plyr, entity ball)
-{
- entity ownr;
-
- if ((ownr = ball.owner))
- {
- ownr.effects &~= g_nexball_basketball_effects_default;
- ownr.ballcarried = world;
- if (ownr.metertime)
- {
- ownr.metertime = 0;
- ownr.weaponentity.state = WS_READY;
- }
- WaypointSprite_Kill(ownr.waypointsprite_attachedforcarrier);
- }
- else
- {
- WaypointSprite_Kill(ball.waypointsprite_attachedforcarrier);
- }
-
- setattachment(ball, plyr, "");
- setorigin(ball, BALL_ATTACHORG);
-
- if (ball.team != plyr.team)
- ball.teamtime = time + g_nexball_basketball_delay_hold_forteam;
-
- ball.owner = ball.pusher = plyr; //"owner" is set to the player carrying, "pusher" to the last player who touched it
- ball.team = plyr.team;
- plyr.ballcarried = ball;
- ball.dropperid = plyr.playerid;
-
- plyr.effects |= g_nexball_basketball_effects_default;
- ball.effects &~= g_nexball_basketball_effects_default;
-
- ball.velocity = '0 0 0';
- ball.movetype = MOVETYPE_NONE;
- ball.touch = SUB_Null;
- ball.effects |= EF_NOSHADOW;
- ball.scale = 1; // scale down.
-
- WaypointSprite_AttachCarrier("nb-ball", plyr, RADARICON_FLAGCARRIER, BALL_SPRITECOLOR);
- WaypointSprite_UpdateRule(plyr.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
-
- if (g_nexball_basketball_delay_hold)
- {
- ball.think = DropOwner;
- ball.nextthink = time + g_nexball_basketball_delay_hold;
- }
-}
-
-void DropBall (entity ball, vector org, vector vel)
-{
- ball.effects |= g_nexball_basketball_effects_default;
- ball.effects &~= EF_NOSHADOW;
- ball.owner.effects &~= g_nexball_basketball_effects_default;
-
- setattachment(ball, world, "");
- setorigin (ball, org);
- ball.movetype = MOVETYPE_BOUNCE;
- ball.flags &~= FL_ONGROUND;
- ball.scale = ball_scale;
- ball.velocity = vel;
- ball.ctf_droptime = time;
- ball.touch = basketball_touch;
- ball.think = ResetBall;
- ball.nextthink = min(time + g_nexball_delay_idle, ball.teamtime);
-
- if (ball.owner.metertime)
- {
- ball.owner.metertime = 0;
- ball.owner.weaponentity.state = WS_READY;
- }
-
- WaypointSprite_Kill(ball.owner.waypointsprite_attachedforcarrier);
- 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);
-
- ball.owner.ballcarried = world;
- ball.owner = world;
-}
-
-void InitBall (void)
-{
- if (gameover) return;
- self.flags &~= FL_ONGROUND;
- self.movetype = MOVETYPE_BOUNCE;
- if (self.classname == "nexball_basketball")
- self.touch = basketball_touch;
- else if (self.classname == "nexball_football")
- self.touch = football_touch;
- self.cnt = 0;
- self.think = ResetBall;
- self.nextthink = time + g_nexball_delay_idle + 3;
- self.teamtime = 0;
- self.pusher = world;
- self.team = FALSE;
- sound (self, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
- WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
- LogNB("init", world);
-}
-
-void ResetBall (void)
-{
- if (self.cnt < 2) { // step 1
- if (time == self.teamtime)
- bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
- self.touch = SUB_Null;
- self.movetype = MOVETYPE_NOCLIP;
- self.velocity = '0 0 0'; // just in case?
- if(!self.cnt)
- LogNB("resetidle", world);
- self.cnt = 2;
- self.nextthink = time;
- } else if (self.cnt < 4) { // step 2 and 3
-// dprint("Step ", ftos(self.cnt), ": Calculated velocity: ", vtos(self.spawnorigin - self.origin), ", time: ", ftos(time), "\n");
- self.velocity = (self.spawnorigin - self.origin) * (self.cnt - 1); // 1 or 0.5 second movement
- self.nextthink = time + 0.5;
- self.cnt += 1;
- } else { // step 4
-// dprint("Step 4: time: ", ftos(time), "\n");
- if (vlen(self.origin - self.spawnorigin) > 10) // should not happen anymore
- dprint("The ball moved too far away from its spawn origin.\nOffset: ",
- vtos(self.origin - self.spawnorigin), " Velocity: ", vtos(self.velocity), "\n");
- self.velocity = '0 0 0';
- setorigin(self, self.spawnorigin); // make sure it's positioned correctly anyway
- self.movetype = MOVETYPE_NONE;
- self.think = InitBall;
- self.nextthink = max(time, game_starttime) + autocvar_g_nexball_delay_start;
- }
-}
-
-void football_touch (void)
-{
- if (other.solid == SOLID_BSP) {
- if (time > self.lastground + 0.1)
- {
- sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
- self.lastground = time;
- }
- if (vlen(self.velocity) && !self.cnt)
- self.nextthink = time + g_nexball_delay_idle;
- return;
- }
- if (other.classname != "player")
- return;
- if (other.health < 1)
- return;
- if (!self.cnt)
- self.nextthink = time + g_nexball_delay_idle;
-
- self.pusher = other;
- self.team = other.team;
-
- if (g_nexball_football_physics == -1) { // MrBougo try 1, before decompiling Rev's original
- if (vlen(other.velocity))
- self.velocity = other.velocity * 1.5 + '0 0 1' * g_nexball_football_boost_up;
- } else if (g_nexball_football_physics == 1) { // MrBougo's modded Rev style: partially independant of the height of the aiming point
- makevectors(other.v_angle);
- self.velocity = other.velocity + v_forward * g_nexball_football_boost_forward + '0 0 1' * g_nexball_football_boost_up;
- } else if (g_nexball_football_physics == 2) { // 2nd mod try: totally independant. Really playable!
- makevectors(other.v_angle_y * '0 1 0');
- self.velocity = other.velocity + v_forward * g_nexball_football_boost_forward + v_up * g_nexball_football_boost_up;
- } else { // Revenant's original style (from the original mod's disassembly, acknowledged by Revenant)
- makevectors(other.v_angle);
- self.velocity = other.velocity + v_forward * g_nexball_football_boost_forward + v_up * g_nexball_football_boost_up;
- }
- self.avelocity = -250 * v_forward; // maybe there is a way to make it look better?
-}
-
-void basketball_touch (void)
-{
- if (other.ballcarried)
- {
- football_touch();
- return;
- }
- if (!self.cnt && other.classname == "player" && (other.playerid != self.dropperid || time > self.ctf_droptime + autocvar_g_nexball_delay_collect)) {
- if (other.health <= 0)
- return;
- LogNB("caught", other);
- GiveBall(other, self);
- } else if (other.solid == SOLID_BSP) {
- 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);
- }
-}
-
-void GoalTouch (void)
-{
- entity ball;
- float isclient, pscore, otherteam;
- string pname;
-
- if (gameover) return;
- if ((self.spawnflags & GOAL_TOUCHPLAYER) && other.ballcarried)
- ball = other.ballcarried;
- else
- ball = other;
- if (ball.classname != "nexball_basketball")
- if (ball.classname != "nexball_football")
- return;
- if ((!ball.pusher && self.team != GOAL_OUT) || ball.cnt)
- return;
- EXACTTRIGGER_TOUCH;
-
-
- if(nb_teams == 2)
- otherteam = OtherTeam(ball.team);
-
- if((isclient = ball.pusher.flags & FL_CLIENT))
- pname = ball.pusher.netname;
- else
- pname = "Someone (?)";
-
- if (ball.team == self.team) //owngoal (regular goals)
- {
- LogNB("owngoal", ball.pusher);
- bprint("Boo! ", pname, "^7 scored a goal against their own team!\n");
- pscore = -1;
- } else if (self.team == GOAL_FAULT) {
- LogNB("fault", ball.pusher);
- if (nb_teams == 2)
- bprint(ColoredTeamName(otherteam), " gets a point due to ", pname, "^7's silliness.\n");
- else
- bprint(ColoredTeamName(ball.team), " loses a point due to ", pname, "^7's silliness.\n");
- pscore = -1;
- } else if (self.team == GOAL_OUT) {
- LogNB("out", ball.pusher);
- if ((self.spawnflags & GOAL_TOUCHPLAYER) && ball.owner)
- bprint(pname, "^7 went out of bounds.\n");
- else
- bprint("The ball was returned.\n");
- pscore = 0;
- } else { //score
- LogNB(strcat("goal:", ftos(self.team)), ball.pusher);
- bprint("Goaaaaal! ", pname, "^7 scored a point for the ", ColoredTeamName(ball.team), ".\n");
- pscore = 1;
- }
-
- sound (ball, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
-
- if(ball.team && pscore)
- {
- if (nb_teams == 2 && pscore < 0)
- TeamScore_AddToTeam(otherteam, ST_NEXBALL_GOALS, -pscore);
- else
- TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore);
- }
- if (isclient)
- {
- if (pscore > 0)
- PlayerScore_Add(ball.pusher, SP_NEXBALL_GOALS, pscore);
- else if (pscore < 0)
- PlayerScore_Add(ball.pusher, SP_NEXBALL_FAULTS, -pscore);
- }
-
- if (ball.owner) // Happens on spawnflag GOAL_TOUCHPLAYER
- DropBall(ball, ball.owner.origin, ball.owner.velocity);
-
- WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier);
-
- ball.cnt = 1;
- ball.think = ResetBall;
- if (ball.classname == "nexball_basketball")
- ball.touch = football_touch; // better than SUB_Null: football control until the ball gets reset
- ball.nextthink = time + autocvar_g_nexball_delay_goal * (self.team != GOAL_OUT);
-}
-
-//=======================//
-// team ents //
-//=======================//
-void spawnfunc_nexball_team (void)
-{
- if(!g_nexball) { remove(self); return; }
- self.team = self.cnt + 1;
-}
-
-void nb_spawnteam (string teamname, float teamcolor)
-{
- dprint("^2spawned team ", teamname, "\n");
- entity e;
- e = spawn();
- e.classname = "nexball_team";
- e.netname = teamname;
- e.cnt = teamcolor;
- e.team = e.cnt + 1;
- nb_teams += 1;
-}
-
-void nb_spawnteams (void)
-{
- float t_r, t_b, t_y, t_p;
- entity e;
- for(e = world; (e = find(e, classname, "nexball_goal")); )
- {
- switch(e.team)
- {
- case COLOR_TEAM1: if(!t_r) { nb_spawnteam ("Red", e.team-1) ; t_r = 1; } break;
- case COLOR_TEAM2: if(!t_b) { nb_spawnteam ("Blue", e.team-1) ; t_b = 1; } break;
- case COLOR_TEAM3: if(!t_y) { nb_spawnteam ("Yellow", e.team-1); t_y = 1; } break;
- case COLOR_TEAM4: if(!t_p) { nb_spawnteam ("Pink", e.team-1) ; t_p = 1; } break;
- }
- }
-}
-
-void nb_delayedinit (void)
-{
- if (find(world, classname, "nexball_team") == world)
- nb_spawnteams();
- ScoreRules_nexball(nb_teams);
-}
-
-
-//=======================//
-// spawnfuncs //
-//=======================//
-
-void SpawnBall (void)
-{
- if(!g_nexball) { remove(self); return; }
-
-// balls += 4; // using the remaining bits to count balls will leave more than the max edict count, so it's fine
-
- if (!self.model) {
- self.model = "models/nexball/ball.md3";
- self.scale = 1.3;
- }
-
- precache_model (self.model);
- setmodel (self, self.model);
- setsize (self, BALL_MINS, BALL_MAXS);
- ball_scale = self.scale;
-
- relocate_nexball();
- self.spawnorigin = self.origin;
-
- self.effects = self.effects | EF_LOWPRECISION;
-
- if (cvar(strcat("g_", self.classname, "_trail"))) //nexball_basketball :p
- {
- self.glow_color = autocvar_g_nexball_trail_color;
- self.glow_trail = TRUE;
- }
-
- self.movetype = MOVETYPE_FLY;
-
- if (!autocvar_g_nexball_sound_bounce)
- self.noise = "";
- else if (!self.noise)
- self.noise = "sound/nexball/bounce.wav";
- //bounce sound placeholder (FIXME)
- if (!self.noise1)
- self.noise1 = "sound/nexball/drop.wav";
- //ball drop sound placeholder (FIXME)
- if (!self.noise2)
- self.noise2 = "sound/nexball/steal.wav";
- //stealing sound placeholder (FIXME)
- if (self.noise) precache_sound (self.noise);
- precache_sound (self.noise1);
- precache_sound (self.noise2);
-
- 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;
- self.nextthink = game_starttime + autocvar_g_nexball_delay_start;
-}
-
-void spawnfunc_nexball_basketball (void)
-{
- self.classname = "nexball_basketball";
- if not(balls & BALL_BASKET)
- {
- CVTOV(g_nexball_basketball_effects_default);
- CVTOV(g_nexball_basketball_delay_hold);
- CVTOV(g_nexball_basketball_delay_hold_forteam);
- CVTOV(g_nexball_basketball_teamsteal);
- g_nexball_basketball_effects_default = g_nexball_basketball_effects_default & BALL_EFFECTMASK;
- }
- if (!self.effects)
- self.effects = g_nexball_basketball_effects_default;
- self.solid = SOLID_TRIGGER;
- balls |= BALL_BASKET;
- self.bouncefactor = autocvar_g_nexball_basketball_bouncefactor;
- self.bouncestop = autocvar_g_nexball_basketball_bouncestop;
- SpawnBall();
-}
-
-void spawnfunc_nexball_football (void)
-{
- self.classname = "nexball_football";
- self.solid = SOLID_TRIGGER;
- balls |= BALL_FOOT;
- self.bouncefactor = autocvar_g_nexball_football_bouncefactor;
- self.bouncestop = autocvar_g_nexball_football_bouncestop;
- SpawnBall();
-}
-
-void SpawnGoal (void)
-{
- if(!g_nexball) { remove(self); return; }
- EXACTTRIGGER_INIT;
- self.classname = "nexball_goal";
- if (!self.noise)
- self.noise = "ctf/respawn.wav";
- precache_sound(self.noise);
- self.touch = GoalTouch;
-}
-
-void spawnfunc_nexball_redgoal (void)
-{
- self.team = COLOR_TEAM1;
- SpawnGoal();
-}
-void spawnfunc_nexball_bluegoal (void)
-{
- self.team = COLOR_TEAM2;
- SpawnGoal();
-}
-void spawnfunc_nexball_yellowgoal (void)
-{
- self.team = COLOR_TEAM3;
- SpawnGoal();
-}
-void spawnfunc_nexball_pinkgoal (void)
-{
- self.team = COLOR_TEAM4;
- SpawnGoal();
-}
-
-void spawnfunc_nexball_fault (void)
-{
- self.team = GOAL_FAULT;
- if (!self.noise)
- self.noise = "misc/typehit.wav";
- SpawnGoal();
-}
-
-void spawnfunc_nexball_out (void)
-{
- self.team = GOAL_OUT;
- if (!self.noise)
- self.noise = "misc/typehit.wav";
- SpawnGoal();
-}
-
-//
-//Spawnfuncs preserved for compatibility
-//
-
-void spawnfunc_ball (void) { spawnfunc_nexball_football(); }
-void spawnfunc_ball_football (void) { spawnfunc_nexball_football(); }
-void spawnfunc_ball_basketball (void) { spawnfunc_nexball_basketball(); }
-// The "red goal" is defended by blue team. A ball in there counts as a point for red.
-void spawnfunc_ball_redgoal (void) { spawnfunc_nexball_bluegoal(); } // I blame Revenant
-void spawnfunc_ball_bluegoal (void) { spawnfunc_nexball_redgoal(); } // but he didn't mean to cause trouble :p
-void spawnfunc_ball_fault (void) { spawnfunc_nexball_fault(); }
-void spawnfunc_ball_bound (void) { spawnfunc_nexball_out(); }
-
-//=======================//
-// Weapon code //
-//=======================//
-
-void W_Nexball_Touch (void)
-{
- entity ball, attacker;
- attacker = self.owner;
-
- PROJECTILE_TOUCH;
- if(attacker.team != other.team || g_nexball_basketball_teamsteal)
- 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, CH_TRIGGER, ball.noise2, VOL_BASE, ATTN_NORM);
-
- if(attacker.team == other.team && time > attacker.teamkill_complain)
- {
- attacker.teamkill_complain = time + 5;
- attacker.teamkill_soundtime = time + 0.4;
- attacker.teamkill_soundsource = other;
- }
-
- GiveBall(attacker, other.ballcarried);
- }
- }
- remove(self);
-}
-
-void W_Nexball_Attack (float t)
-{
- entity ball;
- float mul, mi, ma;
- if (!(ball = self.ballcarried))
- return;
-
- 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)
- {
- if(self.metertime)
- self.metertime = 0; // Shot failed, hide the power meter
- return;
- }
-
- //Calculate multiplier
- if (t < 0)
- mul = 1;
- else
- {
- mi = autocvar_g_nexball_basketball_meter_minpower;
- ma = max(mi, autocvar_g_nexball_basketball_meter_maxpower); // avoid confusion
- //One triangle wave period with 1 as max
- mul = 2 * mod(t, g_nexball_meter_period) / g_nexball_meter_period;
- if (mul > 1)
- mul = 2 - mul;
- mul = mi + (ma - mi) * mul; // range from the minimal power to the maximal power
- }
- DropBall (ball, w_shotorg, W_CalculateProjectileVelocity(self.velocity, w_shotdir * autocvar_g_balance_nexball_primary_speed * mul, FALSE));
- //TODO: use the speed_up cvar too ??
-}
-
-void W_Nexball_Attack2 (void)
-{
- entity missile;
- if (!(balls & BALL_BASKET))
- return;
- W_SetupShot (self, FALSE, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0);
-// pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
- missile = spawn ();
-
- missile.owner = self;
- missile.classname = "ballstealer";
-
- missile.movetype = MOVETYPE_FLY;
- PROJECTILE_MAKETRIGGER(missile);
-
- setmodel (missile, "models/elaser.mdl"); // precision set below
- setsize (missile, '0 0 0', '0 0 0');
- setorigin (missile, w_shotorg);
-
- W_SetupProjectileVelocity(missile, autocvar_g_balance_nexball_secondary_speed, 0);
- missile.angles = vectoangles (missile.velocity);
- missile.touch = W_Nexball_Touch;
- missile.think = SUB_Remove;
- missile.nextthink = time + autocvar_g_balance_nexball_secondary_lifetime; //FIXME: use a distance instead?
-
- missile.effects = EF_BRIGHTFIELD | EF_LOWPRECISION;
- missile.flags = FL_PROJECTILE;
-}
-
-float w_nexball_weapon(float req)
-{
- if (req == WR_THINK)
- {
- if (self.BUTTON_ATCK)
- if (weapon_prepareattack(0, autocvar_g_balance_nexball_primary_refire))
- if (autocvar_g_nexball_basketball_meter)
- {
- if (self.ballcarried && !self.metertime)
- self.metertime = time;
- else
- weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
- }
- else
- {
- W_Nexball_Attack(-1);
- weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
- }
- if (self.BUTTON_ATCK2)
- if (weapon_prepareattack(1, autocvar_g_balance_nexball_secondary_refire))
- {
- W_Nexball_Attack2();
- weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_nexball_secondary_animtime, w_ready);
- }
-
- if (!self.BUTTON_ATCK && self.metertime && self.ballcarried)
- {
- W_Nexball_Attack(time - self.metertime);
- // DropBall or stealing will set metertime back to 0
- weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nexball_primary_animtime, w_ready);
- }
- }
- else if (req == WR_PRECACHE)
- {
- precache_model ("models/weapons/g_porto.md3");
- precache_model ("models/weapons/v_porto.md3");
- precache_model ("models/weapons/h_porto.iqm");
- precache_model ("models/elaser.mdl");
- precache_sound ("nexball/shoot1.wav");
- precache_sound ("nexball/shoot2.wav");
- precache_sound ("misc/typehit.wav");
- }
- else if (req == WR_SETUP)
- weapon_setup(WEP_PORTO);
- else if (req == WR_SUICIDEMESSAGE)
- {
- w_deathtypestring = "is a weirdo";
- }
- else if (req == WR_KILLMESSAGE)
- {
- w_deathtypestring = "got killed by #'s black magic";
- }
- // No need to check WR_CHECKAMMO* or WR_AIM, it should always return TRUE
- return TRUE;
-}
mutators/base.qh
mutators/mutators.qh
mutators/gamemode_keyhunt.qh // TODO fix this
+mutators/gamemode_nexball.qh
mutators/mutator_dodging.qh
//// tZork Turrets ////
ctf.qc
domination.qc
mode_onslaught.qc
-nexball.qc
+//nexball.qc
g_hook.qc
t_swamp.qc
../common/explosion_equation.qc
mutators/base.qc
+mutators/gamemode_nexball.qc
mutators/gamemode_keyhunt.qc
mutators/gamemode_freezetag.qc
mutators/gamemode_keepaway.qc
void ctf_init();
void runematch_init();
void tdm_init();
-void nb_init();
void entcs_init();
void LogTeamchange(float player_id, float team_number, float type)
if(g_nexball)
{
- fraglimit_override = autocvar_g_nexball_goallimit;
- leadlimit_override = autocvar_g_nexball_goalleadlimit;
- ActivateTeamplay();
- nb_init();
- have_team_spawns = -1; // request team spawns
+ fraglimit_override = autocvar_g_nexball_goallimit;
+ leadlimit_override = autocvar_g_nexball_goalleadlimit;
+ ActivateTeamplay();
+ have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_nexball);
}
-
+
if(g_keepaway)
{
MUTATOR_ADD(gamemode_keepaway);
.float minstagib_nextthink;
.float minstagib_needammo;
-void minstagib_stop_countdown(void)
+void minstagib_stop_countdown(entity e)
{
- if (self.minstagib_needammo)
- {
- self.health = 100;
- Send_CSQC_Centerprint_Generic_Expire(self, CPID_MINSTA_FINDAMMO);
- }
- self.minstagib_needammo = FALSE;
+ if (!e.minstagib_needammo)
+ return;
+ Send_CSQC_Centerprint_Generic_Expire(e, CPID_MINSTA_FINDAMMO);
+ e.minstagib_needammo = FALSE;
}
void minstagib_ammocheck(void)
{
if (time < self.minstagib_nextthink)
return;
- if (self.deadflag || gameover || self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
- minstagib_stop_countdown();
+ if (self.deadflag || gameover)
+ minstagib_stop_countdown(self);
+ else if (self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
+ {
+ minstagib_stop_countdown(self);
+ self.health = 100;
+ }
else
{
self.minstagib_needammo = TRUE;
return TRUE;
}
-#ifndef WARPZONELIB_KEEPDEBUG
+#ifdef WARPZONELIB_KEEPDEBUG
float WarpZone_CheckProjectileImpact(entity player)
{
vector o0, v0;
float WarpZone_Projectile_Touch()
{
- float f;
if(other.classname == "trigger_warpzone")
return TRUE;
if(time == self.warpzone_teleport_time)
return TRUE;
-#ifndef WARPZONELIB_KEEPDEBUG
+#ifdef WARPZONELIB_KEEPDEBUG
// this SEEMS to not happen at the moment, but if it did, it would be more reliable
{
float save_dpstartcontents;
save_ent = trace_ent;
save_inopen = trace_inopen;
save_inwater = trace_inwater;
+ float f;
if((f = WarpZone_CheckProjectileImpact(self)) != 0)
return (f > 0);
trace_dpstartcontents = save_dpstartcontents;
--- /dev/null
+okplayer
+{
+ dpglossexponentmod 8
+ dpreflectcube env/exomorph/exomorph
+ {
+ map models/ok_player/okplayer.tga
+ rgbgen lightingDiffuse
+ }
+}
--- /dev/null
+minsta
+{
+ dpglossexponentmod 64
+ dpreflectcube env/exomorph/exomorph
+ {
+ map models/weapons/okweapons.tga
+ rgbgen lightingDiffuse
+ }
+}
+
+okrocketthrust
+{
+ deformVertexes autosprite2
+ cull none
+ {
+ map models/weapons/okrocketthrust.tga
+ tcmod page 4 4 0.01
+ blendfunc add
+ }
+}
+
+okrocketthrust2
+{
+ deformVertexes autosprite
+ {
+ map models/weapons/okrocketthrust.tga
+ tcmod page 4 4 0.01
+ blendfunc add
+ }
+
+}
nexgun
{
dpreflectcube cubemaps/default/sky
+ dpoffsetmapping - 0.3 match8 64
{
map textures/nexgun.tga
rgbgen lightingDiffuse
\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)
+\gl_texture_anisotropy\Qualità del filtro anisotropico (predefinito: 1x)
\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)
\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_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
+\r_motionblur\Intensità della sfocatura da movimento - raccomandato a 0.4
\XonoticSettingsDialog/Audio\Impostazioni audio
\mastervolume\-
\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
+\crosshair_hittest\Nessuno: non fare test di colpo a segno per il mirino; VeraMira: sfoca il mirino quando non colpiresti il muro; Nemici: allarga anche il mirino quando colpiresti un nemico
Tyler "-z-" Mulligan
Merlijn Hofstra
morphed
-mand1nga
-tZork
-
+Samual "Ares" Lenks
+Saulo "mand1nga" Gil
+Jakob "tZork" Markström Gröhn
**Dévlopeurs secondaires
LJFHutch
Pearce "theShadow" Michal
+*Animation (FIXME)
+Sahil "DiaboliK" Singhal
+nifrek
+
*Création des cartes
FruitieX
MirceaKitsune
+Jakob "tZork" Markström Gröhn
Ruszkai "C.Brutail" Ákos
*Musique / Sons
mand1nga
Merlijn Hofstra
remaxim
+Stephan
+Independent.nu
*Améliorations du moteur et QA
Rudolf "divVerent" Polzer
*Code source du jeu
Rudolf "divVerent" Polzer
FruitieX
-tZork
+Jakob "tZork" Markström Gröhn
*Marketing / Management du Projet
Tyler "-z-" Mulligan
**Traducteurs
+*Dutch (FIXME)
+Alexander "freefang" van Dam
+PinkRobot
+
*Allemand
Rudolf "divVerent" Polzer
*Français
Calinou
+Maxime "Taximus" Paradis
+
+*Greek (FIXME)
+Γιάννης Α.
+
+*Hungarian (FIXME)
+xaN1C4n3
+Ruszkai "C.Brutail" Ákos
*Italien
Antonio "terencehill" Piu
Lord Canistra
Nikoli
+*Spanish (FIXME)
+Rodrigo Mouton Laudin
+
+*Swedish (FIXME)
+marcus256
+
+*Ukrainian (FIXME)
+Vasyl "Harmata" Melnyk
+
**Contribueurs actifs
+Akari
+Ant "Antibody" Zucaro
Antonio "terencehill" Piu
+atheros
Ben "MooKow" Banker
+blkrbt
Calinou
chooksta
+cortez
Cuinn "Cuinnton" Herrick
-Kristian "morfar" Johansson
+Florian Paul "lda17h" Schmidt
+Jope “Sless” Withers
kojn
+Kristian "morfar" Johansson
+kuniuthefrogg
+magorian
Maik "SavageX" Merten
+Marvin "Mirio" Beck
+Mepper
+Mick Rippon
MrBougo
-Samual Lenks
+parasti
+Paul Scott
+PlasmaSheep
+Przemysław "atheros" Grzywacz
+{SC0RP} - Ian "ID" Dorrell
Severin "sev" Meyer
+SoulKeeper_p
Stephan "esteel" Stahl
+The player with the unnecessarily long name
Wolfgang "Blub\0" Bumiller
**Anciens contribueurs
Andreas "Black" Kirsch
Attila "WW3" Houtkooper
BigMac
-blkrbt
Braden "meoblast001" Walters
Brain Younds
Chris "amethyst7" Matz
Robert "ai" Kuroto
Ronan
Sajt
-Severin "sev" Meyer
Shaggy
Shank
Simon O'Callaghan
Steve Vermeulen
Supajoe
Tei
-terencehill
Tomaz
Ulrich Galbraith
Vortex
Merlijn Hofstra
remaxim
Stephan
+Independent.nu
*Játék motor kiegészitések
Rudolf "divVerent" Polzer
DarkPlaces
by Forest "LordHavoc" Hale
-
**Fordítók
+*Holland
+Alexander "freefang" van Dam
+PinkRobot
+
+*Német
+Rudolf "divVerent" Polzer
+
*Finn
Henry "Exitium" Sanmark
Calinou
Maxime "Taximus" Paradis
-*Holland
-Alexander "freefang" van Dam
-PinkRobot
+*Greek (FIXME)
+Γιάννης Α.
*Magyar
xaN1C4n3
Ruszkai "C.Brutail" Ákos
-*Német
-Rudolf "divVerent" Polzer
-
*Olasz
Antonio "terencehill" Piu
Felice "MaidenBeast" Sallustio
-*Orosz
-Lord Canistra
-Nikoli
-
*Portugál
Ricardo "Hellgardia" Silva
*Román
MirceaKitsune
+*Orosz
+Lord Canistra
+Nikoli
+
*Spanyol
Rodrigo Mouton Laudin
*Svéd
marcus256
+*Ukrainian (FIXME)
+Vasyl "Harmata" Melnyk
+
**További aktív résztvevők
Akari
Ant "Antibody" Zucaro
cortez
Cuinn "Cuinnton" Herrick
Florian Paul "lda17h" Schmidt
+Jope “Sless” Withers
kojn
Kristian "morfar" Johansson
kuniuthefrogg
magorian
Maik "SavageX" Merten
Marvin "Mirio" Beck
+Mepper
Mick Rippon
MrBougo
parasti
Tyler "-z-" Mulligan
Merlijn Hofstra
morphed
-mand1nga
+Samual "Ares" Lenks
+Saulo "mand1nga" Gil
Jakob "tZork" Markström Gröhn
**Coordinatori
FruitieX
MirceaKitsune
Jakob "tZork" Markström Gröhn
+Ruszkai "C.Brutail" Ákos
*Musiche / Effetti sonori
mand1nga
Merlijn Hofstra
remaxim
Stephan
+Independent.nu
*Aggiunte al codice del motore e QA
Rudolf "divVerent" Polzer
*Marketing / Pubbliche Relazioni
Tyler "-z-" Mulligan
mand1nga
+Ruszkai "C.Brutail" Ákos
*Aspetti legali
Rudolf "divVerent" Polzer
**Traduttori
+*Dutch
+Alexander "freefang" van Dam
+PinkRobot
+
*Tedesco
Rudolf "divVerent" Polzer
*Francese
Calinou
+Maxime "Taximus" Paradis
+
+*Greco
+Γιάννης Α.
+
+*Ungherese
+xaN1C4n3
+Ruszkai "C.Brutail" Ákos
*Italiano
Antonio "terencehill" Piu
Lord Canistra
Nikoli
-**Contributori attivi
+*Spagnolo
+Rodrigo Mouton Laudin
+
+*Svedese
+marcus256
+
+*Ucraino
+Vasyl "Harmata" Melnyk
+
+**Altri contributori attivi
+Akari
Ant "Antibody" Zucaro
Antonio "terencehill" Piu
+atheros
Ben "MooKow" Banker
blkrbt
Calinou
chooksta
+cortez
Cuinn "Cuinnton" Herrick
Florian Paul "lda17h" Schmidt
-Kristian "morfar" Johansson
+Jope “Sless” Withers
kojn
+Kristian "morfar" Johansson
+kuniuthefrogg
+magorian
Maik "SavageX" Merten
+Marvin "Mirio" Beck
+Mepper
+Mick Rippon
MrBougo
+parasti
+Paul Scott
+PlasmaSheep
Przemysław "atheros" Grzywacz
-Ruszkai "C.Brutail" Ákos
-Samual Lenks
+{SC0RP} - Ian "ID" Dorrell
Severin "sev" Meyer
+SoulKeeper_p
Stephan "esteel" Stahl
+The player with the unnecessarily long name
Wolfgang "Blub\0" Bumiller
-SoulKeeper_p
**Contributori passati
Alexander "motorsep" Zubov
Merlijn Hofstra
remaxim
Stephan
+Independent.nu
*Додатки до коду рушія та контроль якості
Rudolf "divVerent" Polzer
Calinou
Maxime "Taximus" Paradis
+*Greek (FIXME)
+Γιάννης Α.
+
*Угорська мова
xaN1C4n3
+Ruszkai "C.Brutail" Ákos
*Італійська мова
Antonio "terencehill" Piu
cortez
Cuinn "Cuinnton" Herrick
Florian Paul "lda17h" Schmidt
+Jope “Sless” Withers
kojn
Kristian "morfar" Johansson
kuniuthefrogg
magorian
Maik "SavageX" Merten
Marvin "Mirio" Beck
+Mepper
Mick Rippon
MrBougo
parasti